ECS タスクを Fargate でスケジュール起動

Fargate で ECS タスクを起動するためには、launchType で "FARGATE"、ネットワーク設定で awsvpc として、サブネット、セキュリティグループ等を設定する必要があります。 これらのことが、CloudWatch Event の Rule でまだ設定することができないようです。

そのため、以下のような Lambda Function を作成して、Lambda で タスクを起動するようにしてみました。

import boto3

def lambda_handler(event, context):
    client = boto3.client('ecs')

    response = client.run_task(
    cluster = '${ClusterArn}',
    taskDefinition = '${TaskArn}',
    count = 1,
    launchType = 'FARGATE',
    networkConfiguration = {
        'awsvpcConfiguration': {
        'subnets': [
            '${Subnet1}',
            '${Subnet2}'
        ],
        'securityGroups': [
            '${SecurityGroup}'
        ],
        'assignPublicIp': 'ENABLED'
        }
    }
    )

    print(response)

    return 'Success'

run_task の cluster には、ECS Cluster の Arn を、taskDefinition には TaskDefinition の Arn が必要になります。 また、サブネット名、セキュリティグループ名も必要です。これらを、CloudFormation のテンプレートで、Export された値を ImportValue してデプロイするように、プロジェクトを作成してみました。