如何配置AWS ECS CLI的JSON参数以注册服务到私有托管区域
嘿,我完全懂你的感受——在AWS UI里点几下就能搞定Route53私有DNS的配置,但到了CLI的JSON参数就有点摸不着头脑了对吧?别慌,其实核心就是在createService.json里加上服务发现注册的相关配置,我给你一步步拆解清楚:
核心配置:
serviceRegistries字段 要让ECS服务自动注册到Route53私有托管区域,你必须在JSON里添加serviceRegistries数组,里面包含关联服务发现所需的关键信息。下面是每个参数的作用和填写方式:
registryArn: 这里填你的Route53私有托管区域对应的服务发现命名空间ARN,或者直接填私有托管区域的ARN(两者是绑定的,选哪个都可以)。你可以在AWS控制台的服务发现页面或者Route53私有托管区域详情里找到这个ARN。port: 外部通过DNS访问服务时使用的端口,比如你的服务是HTTP的话填80。containerName: (可选)如果你的任务定义里有多个容器,指定要关联的那个容器的名称;如果只有一个容器,这个参数可以省略。containerPort: (可选)容器内部监听的端口,如果和上面的port一致,也可以省略;如果端口映射是不同的(比如容器内部用8080,外部映射80),这里就要填8080。
完整的JSON示例
给你一个可以直接参考的配置模板,把占位符换成你自己的信息就行:
{ "cluster": "my-ecs-cluster", "serviceName": "my-backend-service", "taskDefinition": "my-task-def:1", "desiredCount": 2, "launchType": "FARGATE", "networkConfiguration": { "awsvpcConfiguration": { "subnets": ["subnet-0123456789abcdef0"], "securityGroups": ["sg-0123456789abcdef0"], "assignPublicIp": "DISABLED" } }, "serviceRegistries": [ { "registryArn": "arn:aws:servicediscovery:us-east-1:123456789012:namespace/private-mydomain-com", "port": 80, "containerName": "backend-container", "containerPort": 80 } ] }
额外注意事项
- 确保你的ECS任务定义已经正确配置了端口映射,不然服务注册的时候会因为找不到对应端口而失败。
- 你的ECS集群所在的VPC必须和Route53私有托管区域关联的VPC是同一个,这样私有DNS才能在VPC内部正常解析。
- 如果用Fargate模式,建议把
assignPublicIp设为DISABLED,毕竟是私有DNS,不需要公网IP(除非你的服务同时需要公网访问)。
这样配置之后,运行aws ecs create-service --cli-input-json file://aws/createService.json,ECS就会自动把服务的实例注册到Route53私有托管区域,和你在UI里配置的效果完全一致啦!
内容的提问来源于stack exchange,提问作者magnusson
相关产品推荐
相关产品推荐

