超・初心者向け、AWSのアカウント作った直後の状態からECS+FargateでTomcatのDockerコンテナを起動するまで。
最低限、AWSのマネジメントコンソールをちょこちょこでも触ったことがあるくらいが前提。
全体の流れ。
- EC2の起動
- Dockerのインストール
- セキュリティグループの設定
- Tomcatの起動
- CLIの設定
- DockerコンテナのイメージをECRに登録
- IAMポリシーとロールの設定
- ECS on FargateでECRに登録したDockerコンテナのイメージを起動
1. EC2の起動 ~ 2. Dockerのインストール
↓この辺の記事を参考にして、EC2でインスタンスを起動してDockerをインストールする
【Qiita】AWSのEC2でDockerを試してみる
EC2へのTelnetログインどうやんねん、って人は↓これを読む。
【AWS公式】PuTTY を使用した Windows から Linux インスタンスへの接続
3. セキュリティグループの設定 ~ 4. DockerでTomcatの起動
↓この辺の記事を参考にして、DockerでTomcatを起動する。
【Qiita】Docker上でnginx+tomcat を構築してみる。
当たり前だが、セキュリティグループでこの辺で使うポートを開放しておかないと通らない。
5. CLIの設定
さてDockerコンテナをレジストリに登録するぞ!と思ってもまだ早い。まずはCLIを使えるようにしておかないと、aws ecr のコマンドが実行できない。
今回は、AWS標準のAMIからEC2インスタンスを起動しているので、CLIはデフォルトでインストール済み。↓これを参考にしながら、初期設定を行う。IAMユーザの登録もこの中で説明されている。
【AWS公式】AWS CLI の設定
6. DockerコンテナのイメージをECRに登録
↓を見ながら作ってきたDockerコンテナのイメージをECRにPUSHする。
【Qiita】AWS ECRにdockerイメージを登録する
7. IAMポリシーとロールの設定
さて、いよいよECS on Fargateでデプロイだ!と思ったけどちょっと待って。
ECSを実行するためのIAMポリシーとロールを設定しないと、コンテナを起動することができないのである。
【AWS公式】Amazon ECS タスク実行 IAM ロール
8. ECS on FargateでECRに登録したDockerコンテナのイメージを起動
↓この辺を参考にしながら、タスク定義→クラスタ作成→サービス作成をする。
【Qiita】Amazon Fargate でコンテナを動かす
気を付けなければいけないのは「ポートマッピングの設定」で、Tomcatは80番ポートを起動することができないので、ポートマッピングでコンテナ側のポートを8080にしないといけない。
あと、タスク定義の↓ここが思いっ切り罠で、イメージのURI間違えてもタスク自体は作れてしまう。で、実行しようとしたときにエラーが出て何のログも吐かないので悩まされるという。
やったーこれでTomcat起動したぞー!あとは、応用すれば色々起動できるようになるはず。
その他
Dockerのログ確認
試行錯誤しているうちに docker run してもコンテナが起動しない(正確には、おそらく起動後にexitしていたのだと思う)ことがあり、↓この辺をテキトーにやって調べたり直したりはした。
【Qiita】dockerでコンテナが立ち上がらないときやってみること
Dockerイメージの掃除
色々と docker run とかやってると、docker images したときに謎のイメージが増殖したりしているので、↓これを参考にキレイにした。別にVMなんだから後生大事にせず潰せばいいんだけどね…。
【Qiita】Dockerイメージとコンテナの削除方法
タスク定義の削除
ECSのタスク定義を登録すると、簡単に消すことができなくなる。
↓これで消せる。厳密にはINACTIVEにして見えなくしているだけのようだ。完全に消し去ることはできなそう?
【Qiita】タスク定義の登録解除
サービスディスカバリからのサービス名の削除
どうにも、サービスディスカバリに登録したサービスが上手く削除できないことがあるようだ。
Route53の利用料がかかっている気がするのでCLIから以下の手順で削除する。
※しかも同じサービス名で起動できなくなっちゃうし。
$ aws servicediscovery list-services
$ aws servicediscovery delete-service --id=[一覧で取得したId]