AWS ElasticBeanstalkにDocker Imageをさくっとデプロイしてみた
AWSのElasticBeanstalkのDockerホスティングを使ってDocker Imageをサクッとデプロイできたのでメモとして残しておきます。
デプロイするもの
int128先輩が作ったJiraのWebhookのJSONを加工してしてSlack / Mattermostに通知連携してくれるGoアプリを動かしてみます。
ElasticBeanstalkにデプロイする
ドキュメントに従ってデプロイしてみます。
まずドキュメントに従ってDockerrun.aws.json作成しzipで固めたものを用意します。
// Dockerrun.aws.json { "AWSEBDockerrunVersion": "1", "Image": { "Name": "int128/jira-to-slack" }, "Ports": [ { "ContainerPort": "3000" } ] }
DockerfileとDockerrun.aws.jsonの2つをまとめたzipの場合は以下のように書けばOKです。
// Dockerfile FROM int128/jira-to-slack EXPOSE 3000 CMD ["/jira-to-slack"]
// Dockerrun.aws.json { "AWSEBDockerrunVersion": "1", "Ports": [ { "ContainerPort": "3000" } ] }
マネジメントコンソールでElasticBeanstalkで以下の設定で環境を新規に作成します。
- アプリケーション名
- 適当な名前をつける
- プラットフォーム
- 汎用Docker
- アプリケーションコード
- コードのアップロードを選択して、上記で作ったzipファイルをアップロードする
最低限必要なものは上記だけですが、「さらにオプションを設定」を選択すると以下の項目が追加で設定できます。
- ソフトウェア
- インスタンスタイプ
- アプリが動作するインスタンスタイプを選べます
- 容量
- AutoScaling Groupの設定ができます。デフォルトは単一インスタンスです。
- ロードバランサー
- AutoScaling Groupを設定すると設定できます。単一インスタンスの場合は選択できません。
- ローリング更新とデプロイ
- デプロイメントの反映のさせ方の設定ができます。
- セキュリティ
- ElasticBeanstalkに付与するIAMロールが設定できます。
- モニタリング
- CloudWatchでモニタリングする項目やヘルチェの設定できます
- 管理された更新
- メンテナンスウィンドウによる更新を定期的に行う設定のようです
- 通知
- 通知をメールで飛ばせるようです
- ネットワーク
- vpcやパブリックIPが設定できます
- データベース
- RDSの設定ができます
- タグ
- タグが付けられます
上記の設定を変更したあとに アプリの作成 を選択すると、環境構築がスタートします。
3分程まつと環境構築が完了しアプリが利用できるようになります。
2019-01-30 22:56:57 UTC+0900 INFO Environment health has transitioned from Pending to Ok. Initialization completed 49 seconds ago and took 2 minutes. 2019-01-30 22:56:15 UTC+0900 INFO Successfully launched environment: Test-env 2019-01-30 22:56:15 UTC+0900 INFO Application available at Test-env.xxxxxxx.us-east-1.elasticbeanstalk.com. 2019-01-30 22:55:58 UTC+0900 INFO Docker container xxxxxxxxx is running aws_beanstalk/current-app. 2019-01-30 22:55:57 UTC+0900 INFO Added instance [i-xxxxxxxxx] to your environment. 2019-01-30 22:55:50 UTC+0900 INFO Successfully built aws_beanstalk/staging-app 2019-01-30 22:55:48 UTC+0900 INFO Successfully pulled int128/jira-to-slack:latest 2019-01-30 22:55:24 UTC+0900 INFO Waiting for EC2 instances to launch. This may take a few minutes. 2019-01-30 22:54:19 UTC+0900 INFO Created EIP: xxxxxxxxxxxx 2019-01-30 22:54:03 UTC+0900 INFO Created security group named: awseb-e-wi8p8yhmvx-stack-AWSEBSecurityGroup-E0I6S0124S51 2019-01-30 22:53:57 UTC+0900 INFO Environment health has transitioned to Pending. Initialization in progress (running for 9 seconds). There are no instances. 2019-01-30 22:53:38 UTC+0900 INFO Using elasticbeanstalk-us-east-1-xxxxxxxx as Amazon S3 storage bucket for environment data. 2019-01-30 22:53:38 UTC+0900 INFO createEnvironment is starting.
ログを見るとS3バケットやSG、EIPが作られていることがわかります。
わずか数行でDocker Imageをデプロイすることができました。PaaSらくちん!
お片付け
環境を削除するときは アプリケーションの削除 を選択すれば作成したスタック一式が削除されます。
ただし作成されたS3バケットは残ってしまいます。このバケットはデフォルトでは手動で消せない設定になっているので、バケットポリシーを手でいじってから消すようにしましょう。
参考
コマンドラインツールのeb
コマンドを使えばローカルやCIを経由して継続的にデプロイすることも可能なようです。今回は頻繁に更新するようなものでもないので実施しませんでした。また別の機会に検証してみようと思います。