手順
- Lambda関数の作成:
import boto3 # AWS SDKをインポート
import os # 環境変数にアクセスするためのモジュール
def lambda_handler(event, context):
# boto3を使用してECSクライアントを初期化
ecs = boto3.client('ecs')
# 環境変数からECSクラスター名とサービス名を取得
cluster_name = os.environ['ECS_CLUSTER_NAME']
service_name = os.environ['ECS_SERVICE_NAME']
# ECSサービスを更新
response = ecs.update_service(
cluster=cluster_name, # 更新するECSクラスターを指定
service=service_name, # 更新するECSサービスを指定
forceNewDeployment=True # 強制的に新しいデプロイメントを開始
)
# Lambda関数の実行結果を返す
return {
'statusCode': 200, # HTTP成功ステータスコード
'body': f"Service {service_name} in cluster {cluster_name} updated successfully" # 成功メッセージ
}
-
Lambda関数の設定:
- ランタイム: Python 3.8以上
- 環境変数:
- ECS_CLUSTER_NAME: ECSクラスター名
- ECS_SERVICE_NAME: ECSサービス名
-
IAM実行ロールの作成:
- IAMコンソールで新しいロールを作成
- 信頼関係に
lambda.amazonaws.com
を追加 - 以下のポリシーをアタッチ:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:UpdateService"
],
"Resource": "arn:aws:ecs:*:*:service/*"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
}
]
}
-
Lambda関数にIAMロールをアタッチ
-
ECRイメージプッシュ時のトリガー設定:
- ECRリポジトリで「イメージプッシュ」イベントルールを作成
- ターゲットとして作成したLambda関数を選択
これらの手順を実行することで、新しいイメージがECRにプッシュされるたびに、Lambda関数が自動的に呼び出され、ECSサービスが更新されます。
注意点:
- 環境変数やIAM権限は、必要最小限に設定してください。
- 本番環境では、デプロイ前にテストやバリデーションを行うステップを追加することを検討してください。
- エラーハンドリングやリトライロジックを実装して、デプロイの信頼性を向上させることをおすすめします。
この方法により、ECRからECSへの自動デプロイを実現できます。必要に応じて、さらなるカスタマイズや機能追加を行うことができます。