Amazon ECSでPlantUML Serverを構築 このエントリをはてなブックマークに登録

2017年07月25日

ダニーダニー / ,

はじめに

先日のリリースでDocBaseはPlantUMLに対応しました。
PlantUML Serverの構築にあたりAmazon ECSを使ってみました。

PlantUMLとは

PlantUMLの記法で書いたテキストから、UML図が書けるツールです。
Rubyで扱う場合は前回のブログを参照下さい。

PlantUMLのサーバをrubyから使ってみた

Amazon ECSとは

Amazon EC2でDockerを使う場合にDockerのコンテナを管理できるサービスです。

  • Dockerのコンテナが落ちた時に自動的で立ち上がる
  • EC2で複数台構成でDockerのコンテナを扱う
  • AutoScaling
  • Blue-Green Deployment

などをAmazon ECSを使わずにDockerを直接インストールして使った場合に自前で行うのは手間で、管理が楽になります。

詳しくはこちらに書いてあります。
https://aws.amazon.com/jp/ecs/

前提条件

構築の一部にAWS Command Line Interfaceを使うので、使えるようにしておく必要があります。

クラスターを作成

ECSのクラスターを作成します。

aws ecs create-cluster --region ap-northeast-1 --cluster-name plantuml-server

EC2のロールを作成

ポリシーでECSを許可しておかないと、ECS クラスターにインスタンスが起動した時に登録されないため、EC2インスタンスに付けるロールを作成します。

role.json

{
  "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Principal": { "Service": "ec2.amazonaws.com"},
        "Action": "sts:AssumeRole"
      }
    ]
}
aws iam create-role --role-name plantuml-server --assume-role-policy-document file://role.json
aws iam create-instance-profile --instance-profile-name plantuml-server
aws iam add-role-to-instance-profile --instance-profile-name plantuml-server --role-name plantuml-server

policy.json

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "ecs:*",
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
aws iam put-role-policy --role-name plantuml-server --policy-name ecs --policy-document file://policy.json

EC2インスタンスを作成

AMIはamzn-ami-2017.03.a-amazon-ecs-optimized (ami-cb787aac) を選択します。

EC2のUser dataに以下を追加して先程作成したロールを選択して起動します。

#!/bin/bash
echo ECS_CLUSTER=plantuml-server >> /etc/ecs/ecs.config

セキュリティグループを設定

EC2のセキュリティグループは80番を許可する設定にします。

インバウンド

タイプ プロトコル ポート範囲 ソース
HTTP TCP 80 0.0.0.0/0

アウトバウンド

タイプ プロトコル ポート範囲 ソース
すべてのトラフィック すべて すべて 0.0.0.0/0

タスクを登録

plantuml-server.json

[
  {
    "image": "plantuml/plantuml-server:jetty",
    "name": "plantuml-server",
    "memory": 512,
    "essential": true,
    "portMappings": [
       {
         "containerPort": 8080,
         "hostPort": 80
       }
    ]
  }
]

imageの指定でDocker Hubplantuml-serverのイメージが取得できるようになります。

aws ecs register-task-definition --family plantuml-server --container-definitions file://plantuml-server.json --region ap-northeast-1

タスクを実行

aws ecs run-task --cluster plantuml-server --task-definition plantuml-server:1 --count 1 --region ap-northeast-1

これでEC2のインスタンスのパブリックIPアドレスから見れるようになります。

サービスの設定

EC2インスタンスを再起動した場合や、タスクが落ちたりした場合に自動起動するために設定します。

aws ecs create-service --cluster plantuml-server --service-name plantuml-server --task-definition plantuml-server:1 --desired-count 1 --region ap-northeast-1

DocBaseでの運用例

plantuml-serverのurlが分かると、どこからでも不正に使えてしまうということができてしまいます。
DocBase場合はplantuml-serverへのアクセスはDocBaseのアプリケーションが動いてるサーバーからしかアクセスできないようにセキュリティグループで制限を掛けるということをやっています。

最後に

Amazon ECS自体はシンプルで扱いやすい印象でした。
DockerをAWSで使いたい場合は選択肢として良さそうです。

DocBaseについて

DocBaseは情報共有を活発にして組織が力を最大限発揮できるようにすることを目指した情報共有・ドキュメント共有サービスです。

詳しくはこちらから。
https://docbase.io

acfe5f7d-fac5-40de-9a75-554cbee0dfe2

  1. メモからはじめる情報共有 DocBase 無料トライアルを開始
  2. DocBase 資料をダウンロード

「いいね!」で応援よろしくお願いします!

このエントリーに対するコメント

コメントはまだありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


トラックバック

we use!!Ruby on RailsAmazon Web Services

このページの先頭へ