はじめに
先日のリリースでDocBaseはPlantUMLに対応しました。
PlantUML Serverの構築にあたりAmazon ECSを使ってみました。
PlantUMLとは
PlantUMLの記法で書いたテキストから、UML図が書けるツールです。
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 Hubのplantuml-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
このエントリーに対するコメント
日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)
- トラックバック
「いいね!」で応援よろしくお願いします!