AWS目标组无法检测ECS的临时端口是因为ECS任务在启动时会随机分配一个临时端口,而目标组只能监听固定的端口。解决这个问题的方法是使用ECS Service Discovery。
下面是一个使用AWS CLI创建ECS任务和目标组,并解决临时端口问题的示例:
{
"family": "my-task",
"networkMode": "awsvpc",
"containerDefinitions": [
{
"name": "my-container",
"image": "my-image",
"portMappings": [
{
"containerPort": 8080,
"hostPort": 0,
"protocol": "tcp"
}
],
"essential": true
}
]
}
{
"cluster": "my-cluster",
"serviceName": "my-service",
"taskDefinition": "my-task",
"launchType": "FARGATE",
"networkConfiguration": {
"awsvpcConfiguration": {
"subnets": ["subnet-abc123"],
"securityGroups": ["sg-abc123"],
"assignPublicIp": "ENABLED"
}
}
}
{
"Name": "my-target-group",
"Protocol": "HTTP",
"Port": 80,
"TargetType": "ip",
"HealthCheckProtocol": "HTTP",
"HealthCheckPort": "traffic-port",
"HealthCheckPath": "/",
"Matcher": {
"HttpCode": "200"
},
"VpcId": "vpc-abc123"
}
# 创建ECS任务定义
aws ecs register-task-definition --cli-input-json file://task-definition.json
# 创建ECS服务
aws ecs create-service --cli-input-json file://service.json
# 创建目标组
aws elbv2 create-target-group --cli-input-json file://target-group.json
{
"family": "my-task",
"networkMode": "awsvpc",
"containerDefinitions": [
{
"name": "my-container",
"image": "my-image",
"portMappings": [
{
"containerPort": 8080,
"hostPort": 0,
"protocol": "tcp"
}
],
"essential": true,
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "my-log-group",
"awslogs-region": "us-west-2",
"awslogs-stream-prefix": "my-container"
}
},
"healthCheck": {
"command": [
"CMD-SHELL",
"curl -f http://localhost:8080/ || exit 1"
],
"interval": 30,
"timeout": 5,
"retries": 3
},
"secrets": [
{
"name": "DB_PASSWORD",
"valueFrom": "arn:aws:ssm:us-west-2:1234567890:parameter/DB_PASSWORD"
}
]
}
],
"serviceRegistries": [
{
"registryArn": "arn:aws:servicediscovery:us-west-2:1234567890:service/srv-abc123",
"port": 8080,
"containerPort": 8080
}
]
}
{
"cluster": "my-cluster",
"serviceName": "my-service",
"taskDefinition": "my-task",
"launchType": "FARGATE",
"networkConfiguration": {
"awsvpcConfiguration": {
"subnets": ["subnet-abc123"],
"securityGroups": ["sg-abc123"],
"assignPublicIp": "ENABLED"
}
},
"serviceRegistries": [
{
"registryArn": "arn:aws:servicediscovery:us-west-2:1234567890:service/srv-abc123",
"port": 8080
}
]
}
通过使用ECS Service Discovery,目标组将