👌
AWS CLIを使ったECSデプロイ
普段クラウド周りを担当しているインフラ寄りの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を加工するのが、少し面倒でしたが、下記の記事を参考にさせて頂きました。
サービスの更新
aws ecs update-service --cluster your-cluster --service your-service --task-definition <新タスク定義のARN>
サービスの更新後、最新の状態を確認する
aws ecs describe-services --cluster your-cluster --service your-service
まとめ
簡単的にまとめましたが、以上です。CIを通して確認すると時間もかかり、問題の切り分けがし辛いので、次回詰まった時は使ってみようと思います。
参照記事
こちら参考にさせて頂きました。
Discussion