はじめに
AWS Lambda から ECS のタスクを起動(run task)できるかどうかについて、個人的な開発メモとして整理しておきます。
個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。
書こうと思ったきっかけ
受講しているITスクールのハッカソンの開発の一環で、Lambdaからマイグレーション用のECSタスクを起動する構成を検討することがありました。
※まだ実際に試したわけではありませんが、初歩的な情報として忘れないように記録しておきます。
内容
結論として、AWS Lambda から ECS タスクを run_task
API 経由で起動することは可能なようです。
参考文献
Python(boto3)を使えば、以下のような実装が参考になりそうです。
boto3 を使った実装例(未検証)
import boto3
ecs = boto3.client('ecs')
response = ecs.run_task(
cluster='your-cluster-name',
launchType='FARGATE',
taskDefinition='your-task-def-name',
count=1,
platformVersion='LATEST',
networkConfiguration={
'awsvpcConfiguration': {
'subnets': ['subnet-xxxxxxxx'],
'assignPublicIp': 'ENABLED',
'securityGroups': ['sg-xxxxxxxx']
}
}
)
print(response)
Lambda 側の設定ポイント(調査ベース)
-
ecs:RunTask
,iam:PassRole
権限を持つ IAM ロールを Lambda に付与する必要がある - ECS 側では
executionRoleArn
とtaskRoleArn
を定義しておく - VPC, サブネット, セキュリティグループなどネットワーク構成も忘れずに
- CloudWatch Event や S3 イベントなどをトリガーとして Lambda を動かす構成も可能
まとめ
Lambda から run_task
で ECS タスクを動かす構成は、調べた限りでは実用的なアプローチに思えます。
特にバッチ処理や一時的なマイグレーションタスクに向いていそうです。今後実際に試す際のベースとしてこの情報を残しておきます。
※本記事は、あくまで個人の備忘録レベルで記載しています。実際に動作確認はまだ行っていません。