やりたいこと
ECRにアップロードしたコンテナイメージをFargateで実行する
ECRとは
- プライベートのコンテナリポジトリ
- デフォルトでは作成したAWSアカウントからのアクセスのみ許可。リソースポリシーを変更することで他アカウントからのPush/Pullの許可も可能。IAMポリシーでIAMユーザレベルでの制限も可能。
リポジトリ作成
今回はAWSコンソールからポチポチ。リポジトリ名いれるだけで作成できる。必要に応じてアクセスポリシーを設定する。今回は省略。
アップロード
docker-login
$(aws ecr get-login --region ap-northeast-1 --no-include-email)
ちなみにfishだとサブコマンドの展開がうまくできなかったので、表示されたコマンドをコピペして実行したがパスワードが丸見えなので良くない。
docker build, push
からdockerfileをローカルにコピーして以下を実行
export ECR_REPOS=XXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com export REPOS_NAME=discord-tweetbot:latest docker build -t $ECR_REPOS/$REPOS_NAME . docker push $ECR_REPOS/$REPOS_NAME
このコマンドは以下参考記事まんま。
XXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com
が作成したECR。
Fargateで起動
ECSタスク実行ロールを作成する
FargateでECRのイメージを使って実行したりawslogs ログドライバーを使用する場合、タスク実行用のロールが必要になる。以下手順を参考にして作成。
ECSコンテナロールを作成する
上記で作成したのはタスクを実行するためのIAMロール、今回作成するのはタスクに割り当てるIAMロール。ロールタイプを Amazon Elastic Container Service タスクロール
で作成する。パラメータストアへのアクセスがあるのでデフォルトのIAMポリシー AmazonEC2RoleforSSM
を作成したIAMロールに割り当てる。
terraform apply
git clone https://github.com/waneal/ecs-test.git -b run_discord-tweetbot cd ecs-test terraform init terraform apply
tfvarsファイルを自分の環境に合わせて作成。tfstateファイルはs3に保管しているので必要に応じてそのへんを修正。
感想
ロール周りの設定が少しややこしい。また個人利用の視点だと、一番低いスペックでも24H365Dコンテナを可動すると結構なお値段になっちゃうので注意。業務利用観点で高いかどうかはこれから検討。EC2の管理が不要なのはとても大きいので使っていきたい。