はじめに
この記事はコンテナ勉強用として試したことまとめたものです。
今回はECSで実行中のサービス更新を試してみました。
「新しいデプロイの強制」設定を使う
Lambdaで一時的に起動数を増やして、古いタスクをソートして削除、起動数を戻す。といった方法でコンテナを入れ替えていましたが、ECSのサービス更新に「新しいデプロイの強制」というものがあったのでこちらを使用して新しいコンテナに入れ替えるようにできるのでは。ということで検証してみました。
ECSサービスを起動
- 2つのタスクが正常に稼働しているのでこれらを新しいコンテナに入れ替える。
![タスク確認.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F466400%2Fa512a82e-43cf-4a67-0239-1e2693588da1.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=2ea93e30da3a20ad32cb285b62bcfabe)
- 作成された時刻を確認しておく。
![タスク①確認.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F466400%2F27a89066-b288-3528-1f45-8d231db4594a.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e92921b7b44400d640b33ce0ecd67eee)
![タスク②確認.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F466400%2Fce4eb5f7-3211-366f-991e-926af1c39727.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=3b953743830338a3b6bd7cec81e93e0d)
新しいデプロイの強制を実施
- コンソール上から「新しいデプロイの強制」にチェックを入れて実施することも可能ですが、定期的に入れ替えて欲しいので簡単なLambdaを作って試してみました。
import json
import boto3
from botocore.exceptions import ClientError
def lambda_handler(event, context):
try:
client = boto3.client('ecs')
service_update_result = client.update_service(
cluster = 'test-ecs-cls',
service = 'test-service',
desiredCount = 2,
forceNewDeployment=True
)
print(service_update_result)
except ClientError as e:
print(e)
- タスクが増えた。
![デプロイ強制後タスク確認.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F466400%2Fa9f5ddeb-d426-d43b-3ca1-c7a753e90fb4.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=6435ecc94c0a54263dcc427a69a4e31d)
- 一時的にタスク数が倍になった。
![デプロイ強制後タスク確認2.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F466400%2F6978963b-68d4-6cba-f5ff-962796fb9c93.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=a719b98edc8cabd600194ec1a07cd4d7)
コンテナ入れ替わり確認
- 起動数が2つなのでタスク数が4つから2つに減りました。
![入れ替え後タスク確認.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F466400%2Fdc458464-de33-6791-a267-d097fa511d6b.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=78e09f6b036b2897304a2e1ff3f7592c)
- 残ったタスクの作成時刻が新しいものになっているか確認する。
![入れ替え後タスク①確認.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F466400%2F3e760b8f-2685-8416-dd6e-f8a34045f73f.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=1878a786e6f6609e777b9062b7d88046)
![入れ替え後タスク②確認.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F466400%2Fde0a0c3c-b40d-5371-ff57-974d204d8be6.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=4e1b6c4d9aa226fc87ed5ac90d1dbf70)
- 古いタスクがちゃんと停止している。
![停止タスク①確認.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F466400%2F1cec6374-1b42-3c08-168a-0a9a5e5a44d2.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=d5b1473a50c26b5658275845827ac41b)
![停止タスク②確認.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F466400%2F1251a29e-aa04-a0fc-e51a-f6700caeb954.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=85ca9949d9876f5e9bfe257594860416)
まとめ
- Lambdaでタスク数をカウントして処理するよりも「新しいデプロイの強制」機能を使うことで簡単にコンテナ入れ替えを行うことができる。
- SSMと連携して自動で入れ替え機能を実装してみたい。