👌

AWS CLIを使ったECSデプロイ

2024/03/02に公開

普段クラウド周りを担当しているインフラ寄りのwebエンジニアです。
先日、AWSのECSを触る機会があり、デバックとしてコンソールからではなく、aws cliを使ってecsデプロイを行ったので、メモとして残しておく。

経緯

現在の自動デプロイの流れとしては下記のようになります。ローカルでは動くが、テスト環境では動かない状態に陥った時、修正を繰り返す度に都度、ci/cdを回すと地味に時間がかかるので、cliを使って試した方が早いんじゃないかと思ったのがきっかけです。

大まかな流れ

デプロイするまでの流れは下記のように理解しています。

なお、既にクラスター、サービス、タスク定義は作成されている前提で、既存のECSをアップデートする流れです。

ecrにログイン

aws ecr get-login-password --region <YOUR_REGION> | docker login --username AWS --password-stdin <AWS_ACCOUNT_ID>.dkr.ecr.region.amazonaws.com

コンテナイメージの作成

イメージ名は適宜変えてください。

docker build -t <AWS_ACCOUNT_ID>.dkr.ecr.ap-northeast-1.amazonaws.com/image-name:latest .

ecrにイメージを登録

docker push <AWS_ACCOUNT_ID>.dkr.ecr.ap-northeast-1.amazonaws.com/image-name:latest

現在のサービスの状態を確認する

aws ecs describe-services --service your-service --cluster your-clouster

するとtaskDefinitionにarnがあるので、そこを参照する。

タスク定義の確認

describe-servicesでarn情報が取得できるので、それを使用して、現在のタスク定義を確認する

aws ecs describe-task-definition --task-def <取得したタスク定義のARN>

既存のタスク定義に基づいて最新のタスク定義を作成

タスク定義の確認をした時に長いjsonが返ってくるので、必要な情報だけを抽出して新しいタスク定義を作成する。jsonを直接貼り付けても良いのですが、自分はファイルに保存して、読み込むようにしました。

aws ecs register-task-definition --cli-input-json file://task-definition.json

そのjsonを加工するのが、少し面倒でしたが、下記の記事を参考にさせて頂きました。
https://dev.classmethod.jp/articles/describe-task-definition-to-register-task-definition/

サービスの更新

aws ecs update-service --cluster your-cluster --service your-service --task-definition <新タスク定義のARN>

サービスの更新後、最新の状態を確認する

aws ecs describe-services --cluster your-cluster --service your-service

まとめ

簡単的にまとめましたが、以上です。CIを通して確認すると時間もかかり、問題の切り分けがし辛いので、次回詰まった時は使ってみようと思います。

参照記事

こちら参考にさせて頂きました。
https://mogulla3.tech/articles/2019-04-14-01/

Discussion