AWS
Beanstalk
はてなブログ
docker
備忘録

AWS ElasticBeanstalk で Docker 動かすときの備忘録

※ はてなブログからこちらへ技術ネタを移動しました
※ 初稿: 2018/07/20

単一コンテナ環境で何回かやってるんですが、dockerコンテナのデプロイ方法には2種類あります。この方法の選択についていつも忘れてしまうので備忘。

方法1: Amazon ECR などに事前に docker build したイメージを push しておいて、ElasticBeanstalk に Dockerrun.aws.json だけを食わせて ECR からpullしてきて起動
方法2: railsのファイルやらDockerfileやらを全部 zip にしてeb deployか何かでアップロードする

普通に考えれば、方法1は可搬性のあるdockerということだし手元で docker build してしまったほうがエラー対処の手戻りが少なかったり、EB上でbuildしなくていいのでEBのUpdating state時間が少なくなって楽なのだが、ある問題が生じる。

問題:
.ebextensions でdocker hostに関する設定のinjectionができない。
したがって(単一コンテナ環境では)awslogs (CloudWatch Logs) へのアプリケーションログのストリーミングを行う手段がない。
※方法1ではEBはDockerrun.aws.json というマニフェストに従って docker image のみをpullするので.ebextensionsが介入するタイミングが無いとかそういうやつ。

ということで、deployプロセスが冗長になりがちだが仕方なく方法2を使うのである。デプロイの時間はもちろん長くなるが、苦渋の選択です。