はじめに
この記事はコンテナ勉強用として試したことまとめたものです。
今回はECSで実行中のサービス更新を試してみました。
「新しいデプロイの強制」設定を使う
Lambdaで一時的に起動数を増やして、古いタスクをソートして削除、起動数を戻す。といった方法でコンテナを入れ替えていましたが、ECSのサービス更新に「新しいデプロイの強制」というものがあったのでこちらを使用して新しいコンテナに入れ替えるようにできるのでは。ということで検証してみました。
ECSサービスを起動
- 2つのタスクが正常に稼働しているのでこれらを新しいコンテナに入れ替える。
- 作成された時刻を確認しておく。
新しいデプロイの強制を実施
- コンソール上から「新しいデプロイの強制」にチェックを入れて実施することも可能ですが、定期的に入れ替えて欲しいので簡単な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)
- タスクが増えた。
- 一時的にタスク数が倍になった。
コンテナ入れ替わり確認
- 起動数が2つなのでタスク数が4つから2つに減りました。
- 残ったタスクの作成時刻が新しいものになっているか確認する。
- 古いタスクがちゃんと停止している。
まとめ
- Lambdaでタスク数をカウントして処理するよりも「新しいデプロイの強制」機能を使うことで簡単にコンテナ入れ替えを行うことができる。
- SSMと連携して自動で入れ替え機能を実装してみたい。