要编写一个CFN模板来触发Fargate任务,可以按照以下步骤进行操作:
{
"family": "my-task",
"networkMode": "awsvpc",
"containerDefinitions": [
{
"name": "my-container",
"image": "your-container-image",
"memory": 512,
"portMappings": [
{
"containerPort": 80,
"hostPort": 80,
"protocol": "tcp"
}
]
}
]
}
{
"cluster": "my-cluster",
"serviceName": "my-service",
"taskDefinition": "my-task",
"desiredCount": 1,
"launchType": "FARGATE",
"networkConfiguration": {
"awsvpcConfiguration": {
"subnets": ["subnet-12345678"],
"securityGroups": ["sg-12345678"],
"assignPublicIp": "ENABLED"
}
}
}
{
"name": "my-event-rule",
"description": "Trigger Fargate task",
"eventPattern": {
"source": ["aws.ecs"],
"detail-type": ["ECS Task State Change"],
"detail": {
"desiredStatus": ["RUNNING"],
"lastStatus": ["PENDING"]
}
},
"state": "ENABLED",
"targets": [
{
"arn": "arn:aws:ecs:region:account-id:cluster/my-cluster",
"roleArn": "arn:aws:iam::account-id:role/ecsEventsRole",
"ecsParameters": {
"taskDefinitionArn": "arn:aws:ecs:region:account-id:task-definition/my-task"
}
}
]
}
在上面的示例中,source
字段指定了事件的来源为ECS,detail-type
字段指定了事件的类型为ECS Task State Change。detail
字段中的desiredStatus
和lastStatus
字段指定了事件的过滤条件,只有当任务的期望状态为RUNNING且最后状态为PENDING时,事件才会触发。
AWSTemplateFormatVersion: '2010-09-09'
Resources:
MyTaskDefinition:
Type: AWS::ECS::TaskDefinition
Properties:
Family: my-task
NetworkMode: awsvpc
Cpu: '256'
Memory: '512'
ExecutionRoleArn: !Ref MyExecutionRole
ContainerDefinitions:
- Name: my-container
Image: your-container-image
Memory: 512
PortMappings:
- ContainerPort: 80
HostPort: 80
Protocol: tcp
MyService:
Type: AWS::ECS::Service
Properties:
Cluster: my-cluster
ServiceName: my-service
TaskDefinition: !Ref MyTaskDefinition
DesiredCount: 1
LaunchType: FARGATE
NetworkConfiguration:
AwsvpcConfiguration:
Subnets:
- subnet-12345678
SecurityGroups:
- sg-12345678
AssignPublicIp: ENABLED
MyEventRule:
Type: AWS::Events::Rule
Properties:
Name: my-event-rule
Description: Trigger Fargate task
EventPattern:
source:
- aws.ecs
detail-type:
- ECS Task State Change
detail:
desiredStatus:
- RUNNING
lastStatus:
- PENDING
State: ENABLED
Targets:
- Arn: !Sub arn:aws:ecs:${AWS::Region}:${AWS::AccountId}:cluster/my-cluster
RoleArn: !Ref MyEventRole
EcsParameters:
TaskDefinitionArn: !Ref MyTaskDefinition
MyExecutionRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicy