インフラチームがお届けするブログリレーです!既に公開されている記事もありますので、こちらから他のメンバーの投稿もぜひチェックしてみてください!

はじめに

こんにちは、そしてこんばんは!
クラウドインテグレーション事業部の大嵩です。

今回は、業務の中で初めてAmazon ECSに触れる機会があり、その中でCI/CDを使用したデプロイ環境はあるものの、
やむを得ず手動でタスク更新作業を行う必要があったので、その時の手順を紹介したいと思います!

やったこと

タスク定義を更新して、タスクサイズを変更します!
JSONで定義されているので、下記のように変更をかけます!

# 変更前
~ 割愛 ~ 
    "cpu": "1024", # ここ
    "memory": "8192",  # ここ
    "runtimePlatform": {
        "cpuArchitecture": "X86_64",
        "operatingSystemFamily": "LINUX"
    }

# 変更後
~ 割愛 ~ 
    "cpu": "512", # ここ
    "memory": "2048",  # ここ
    "runtimePlatform": {
        "cpuArchitecture": "X86_64",
        "operatingSystemFamily": "LINUX"
    }

まずはタスク定義を更新して事前準備!

今回は、JSONを更新するため、「JSONを使用した新しいリビジョンの作成」を押下します。
新しいリビジョンの作成においても、特に設定事項に変わりはないです。

JSONを更新

押下すると、すぐにJSONを入力する画面になります!
なので、前述した変更したい箇所を修正します。

タスク定義更新完了!

作成を押下すると、無事に更新が完了しました!
定義名のうしろのリビジョンが58に増えているのがわかります。
これで事前準備は完了です!

実際にタスクサイズを更新する

まずは、クラスタから、更新したいサービスのページへ遷移します。
その後、「サービスを更新」を押下します!
下矢印を押すと、「新しいデプロイの強制」の状態で更新できますが、今回は使用しません。

「新しいデプロイの強制」は、タスク定義を更新せず、コンテナイメージのみを更新する際に適しているオプションになります!

更新設定開始!

「サービスを更新」を押した後、こちらもすぐに設定画面に移ります!
ポイントとしては、タスク定義は先ほど作成した、最新のリビジョンを選択することです。

更新できない….

最新リビジョンも選択したし、いざ更新!と思いきやすんなり更新できませんでした。。。
理由は、「ロードバランシング」という項目の選択が必須であったためです!
やむを得ず手動で更新しているのですが、今回CODE_DEPLOYデプロイメントコントローラーを使用しているために
必須の項目のようです。。

If the service is using the CODE_DEPLOY deployment controller, the service is required to use either an Application Load Balancer or Network Load Balancer.
サービスが CODE_DEPLOY デプロイメントコントローラーを使用している場合は、Application Load Balancer または Network Load Balancer のいずれかを使用する必要があります。

AWS::ECS::Service LoadBalancer - AWS CloudFormation
Use the AWS CloudFormation AWS::ECS::Service.LoadBalancer resource for ECS.

この項目は、サービス画面の「デプロイ」タブから確認できる、ロードバランス用コンテナを選択すればOKです! 

無事更新完了!

ロードバランスも指定して無事更新完了!
CodeDeployやCode Buildでの処理に時間はかかりましたが、無事にリビジョンが切り替わっています!

また、もちろんタスクのサイズも変わっていることを確認しました!
無事に何もなく終わってよかったです。

まとめ

今回の作業から下記の発見がありました!

  • Amazon ECSでタスク定義を手動更新する際、「JSONを使用した新しいリビジョンの作成」からCPUやメモリの値を直接編集して新しいリビジョンを作成できる。
  • サービス更新時には、事前に作成した最新のタスク定義リビジョンを選択する必要がある。
    CODE_DEPLOYデプロイメントコントローラーを使用しているサービスを手動で更新する場合、「ロードバランシング」項目の設定が必須であり、指定しないと更新できない。
  • 必須となるロードバランサーの情報は、該当サービスの「デプロイ」タブから確認できるロードバランス用コンテナを選択することで対応可能である。

手動で更新する際に、どなたかの参考になりますと幸いです!