ばーろぐわにる

SIerからWEB系?インフラエンジニアにジョブチェンジした見習いの備忘録。投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。

ECRにPushしたイメージをFargateで実行する

やりたいこと

ECRにアップロードしたコンテナイメージをFargateで実行する

ECRとは

  • プライベートのコンテナリポジトリ
  • デフォルトでは作成したAWSアカウントからのアクセスのみ許可。リソースポリシーを変更することで他アカウントからのPush/Pullの許可も可能。IAMポリシーでIAMユーザレベルでの制限も可能。

リポジトリ作成

今回はAWSコンソールからポチポチ。リポジトリ名いれるだけで作成できる。必要に応じてアクセスポリシーを設定する。今回は省略。

アップロード

docker-login

$(aws ecr get-login --region ap-northeast-1 --no-include-email)

qiita.com

ちなみにfishだとサブコマンドの展開がうまくできなかったので、表示されたコマンドをコピペして実行したがパスワードが丸見えなので良くない。

docker build, push

github.com

から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。

qiita.com

Fargateで起動

ECSタスク実行ロールを作成する

FargateでECRのイメージを使って実行したりawslogs ログドライバーを使用する場合、タスク実行用のロールが必要になる。以下手順を参考にして作成。

docs.aws.amazon.com

ECSコンテナロールを作成する

上記で作成したのはタスクを実行するためのIAMロール、今回作成するのはタスクに割り当てるIAMロール。ロールタイプを Amazon Elastic Container Service タスクロール で作成する。パラメータストアへのアクセスがあるのでデフォルトのIAMポリシー AmazonEC2RoleforSSM を作成したIAMロールに割り当てる。

terraform apply

github.com

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の管理が不要なのはとても大きいので使っていきたい。