我们可以创建一个Application Load Balancer,在ECS服务中为每个任务定义一个任务定义,并将其与负载均衡器关联。我们还需要为每个任务定义设置容器端口和协议。
以下是一个示例CloudFormation模板,该模板创建了一个ECS服务、一个Application Load Balancer和关联的任务定义。
Resources:
EcsCluster:
Type: AWS::ECS::Cluster
EcsTaskRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service:
- ecs-tasks.amazonaws.com
Action:
- sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
EcsTaskDefinition:
Type: AWS::ECS::TaskDefinition
Properties:
TaskRoleArn: !GetAtt EcsTaskRole.Arn
Family: my-task
ContainerDefinitions:
- Name: my-container
Image: my-image
Cpu: 256
Memory: 512
PortMappings:
- ContainerPort: 80
Protocol: tcp
EcsService:
Type: AWS::ECS::Service
Properties:
Cluster: !Ref EcsCluster
TaskDefinition: !Ref EcsTaskDefinition
LaunchType: FARGATE
DesiredCount: 2
NetworkConfiguration:
AwsvpcConfiguration:
Subnets:
- !Ref Subnet1
- !Ref Subnet2
SecurityGroups:
- !Ref SecurityGroup
LoadBalancers:
- ContainerName: my-container
ContainerPort: 80
TargetGroupArn: !Ref TargetGroup
LoadBalancer:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
Scheme: internet-facing
Type: application
LoadBalancerAttributes:
- Key: idle_timeout.timeout_seconds
Value: '60'
Subnets:
- !Ref Subnet1
- !Ref Subnet2
SecurityGroups:
- !Ref SecurityGroup
TargetGroup:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
TargetType: ip
Port: 80
Protocol: HTTP
VpcId: !Ref Vpc
Tags:
- Key: