AWSでwebアプリを立ち上げる場合、基本的にはEC2+RDS(小規模な場合は使わないケースもあるかも・・)+アルファの構成が多いと思うのですが、Dockerでコンテナイメージをもっていれば、コンテナを直接起動させることができます。
AWSですとAmazon Elastic Container Service (通称ECS)というサービスがそれに該当します。
ある方とインフラの話をしていた時に、ある程度セキュリティレベルを高くしたいので、サーバー自体に入らせない仕組みが必要・・みたいなことをおっしゃっててその仕組みの1つですね。
よく考えるとherokuで運用していたアプリがありましたが、サーバーにログインして何かしたことはないですね・・DBにつないで、ということはあったのですが、これもマイグレーションなどで行うのが正しい方法かと思われます。
注意点としてはDockerfileだけをプッシュしますのでdocker-composeの設定を反映させるにはしっかりと内容を理解しているor後述するecs-cliを使う必要があります。
ECSについて
概念やイメージがわかりにくいものが多かったですね。(今でも正直あんまりわかっていませんが・・汗)
大きく分けるとタスク、サービス、コンテナの3つのグループがあるのですが、ざっくり下記のような認識をしています。
タスク・・ECSの最小単位。
サービス・・タスク群の上位グループ。フロント単位、バックのAPI単位など
クラスター・・インスタンスのグループ
Amazon EC2 Container Service(ECS)の概念整理
AWS ECS 10分チュートリアルでふんわりFargate入門
実際の登録
基本的には
- ECRでコンテナを登録する(AWS専用のDockerHubみたいなものです。)
- タスクの定義でコンテナの登録
- クラスター作成
- タスクの実行
というのが一番簡単です。
Amazon ECS入門 〜公式のDockerイメージを使って10分で構築してみる〜
またウィザードにそって行けばそのままECSの環境が作れるものもあります。
https://console.aws.amazon.com/ecs/home?region=us-east-1#/firstRun
ecs-cli
自分がやりたかったのはRedmineというRails製のアプリのDockerコンテナを立ち上げることなんですが、画面からポチポチやってもどうしても立ち上がらなかったです。PHPのアプリとかはすぐにできたんですが、このアプリRailsなんでPortが3000なんですよね・・
これを3000→80にマッピングさせているはずなんですが、どうやっても落ちてしまい、色々試行錯誤してみましたが、解決せず・・・半ば諦めかけた時にコマンドラインのecs-cliを使ったらすぐに解決しました・・・・
これ使うとdocker-composeそのまま使えます。
理解していないとキツイですね・・・
https://github.com/umanari145/node_aws_etc
ローカルで使用したdocker-compose.ymlを使ってECS上でコンテナを起動する
ちなみに単純にコンテナを使ってサービスを動かしたいだけだったらEC2にログインして、dockerをインストールして、 docker-compose up -d を使うのが一番早いです。
AWS EC2インスタンスにdockerとdocker-composeをインストールして簡単なWEBサービスを立ち上げる方法