如何通过 AWS CLI 配置 AWS Cloud Map 的服务发现?
上次更新日期:2020 年 6 月 24 日
如何通过 AWS 命令行界面 (AWS CLI) 创建使用 AWS Cloud Map 的托管区域?
简短描述
AWS Cloud Map 可以为 Amazon Elastic Container Service (Amazon ECS)、AWS Fargate 和 Amazon Elastic Kubernetes Service (Amazon EKS) 等服务自动执行 DNS 配置并简化实例预置。
要使用 AWS 开发工具包或 AWS CLI 来创建使用 AWS Cloud Map 的托管区域:
1. 创建 DNS 命名空间(将自动为其创建托管区域)来定义服务命名方案。
2. 创建您的服务。
3. 将实例注册到您的服务。
解决方法
注意:如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本。
创建您的 DNS 命名空间
1. 使用 AWS CLI 创建命名空间,并将 example.com 替换为要使用的域名。
注意:您必须在创建公有命名空间和创建私有命名空间之间进行选择。只要注册了域名,公有命名空间都将在互联网上可见。私有命名空间仅在 Virtual Private Cloud (VPC) 内可见。当您创建私有命名空间时,您必须指定 VPC ID。
要创建公有命名空间:
$ aws servicediscovery create-public-dns-namespace --name example.com
要创建私有命名空间:
$ aws servicediscovery create-private-dns-namespace --name example.com --vpc vpc-0c92f38bf7db24a05
2. 记下输出中的 OperationId 的值。
例如:
{
"OperationId": "igbkufld72o4vbsbwejfi6eyinfprhc3-jkwmz00b"
}
3. 使用 get-operation 命令查找有关操作的更多信息。请务必将 <OperationId value> 替换为您在上一步中找到的 OperationId 值。
aws servicediscovery get-operation --operation-id <OperationId value>
4. 在输出中,验证状态值是否为 SUCCESS。记下 NAMESPACE 的值,该值为用于创建服务并注册实例的命名空间 ID。
例如:
{
"Operation": {
"Status": "SUCCESS",
"CreateDate": 1534428266.699,
"Id": "igbkufld72o4vbsbwejfi6eyinfprhc3-jkwmz00b",
"UpdateDate": 1534428267.113,
"Type": "CREATE_NAMESPACE",
"Targets": {
"NAMESPACE": "ns-f2wjnv2p7pqtz5f2"
}
}
}
注意:当您创建命名空间时,Route 53 会自动为该域创建一个托管区域。该托管区域的域名值与您的命名空间的域名相同。备注值为由 Route 53 自动命名创建。要验证托管区域:
1. 打开 Route 53 控制台。
2. 在导航窗格中,选择托管区域。
3. 在内容窗格中,在托管区域列表中查找您的托管区域。
创建服务
1. 在速记语法中使用 servicediscovery create-service 命令来创建服务,如下所示。请务必将 workers 替换为您首选的服务名称。在创建记录时,Route 53 将使用此服务名称。
$aws servicediscovery create-service --name workers --dns-config 'NamespaceId="ns-f2wjnv2p7pqtz5f2",RoutingPolicy="WEIGHTED",DnsRecords=[{Type="A",TTL="300"}]'
默认路由策略为“MULTIVALUE”。 支持的路由政策为“MULTIVALUE”和“WEIGHTED”。
2. 记下输出。Id 值为您刚刚创建的服务的 ID。
注意:CreatorRequestId 是请求的 ID。如果 API 调用失败,请使用 CreatorRequestId 重复执行该操作。
例如:
{
"Service": {
"DnsConfig": {
"NamespaceId": "ns-f2wjnv2p7pqtz5f2",
"DnsRecords": [
{
"Type": "A",
"TTL": 300
}
]
},
"CreatorRequestId": "93e0a17a-230b-4c58-b986-f03f3217869f",
"Id": "srv-iy3d7hhlf5cjciph",
"Arn": "arn:aws:servicediscovery:eu-west-1:356906700443:service/srv-iy3d7hhlf5cjciph",
"Name": "workers"
}
}
注册您的实例
1. 使用 servicediscovery register-instance 命令注册您的实例。请务必将 <value> 占位符替换为您的相应值。请注意,您只能运行一个请求,一次注册一个具有相同 service-id 和 instance-id 选项的实例。
重要提示:如果您不提供 service-id、instance-id 和 attributes 参数,则 API 调用会失败。有关更多详细信息,请参阅 register-instance 页面上的“选项”。
$ aws servicediscovery register-instance --service-id srv-iy3d7hhlf5cjciph --instance-id i-039444aa1e2932ca3 --attributes=AWS_INSTANCE_IPV4=172.1.1.1
2. 查看输出,其中包含 OperationId。例如:
{
"OperationId": "z7dfqgeadkvwwid2wa2n5ckicrxs255x-jkwr1x9f"
}
3. 打开 Route 53 控制台。
4. 在导航窗格中,选择托管区域。
5. 选择您之前创建的托管区域。
6. 选择转到记录集,然后验证该记录集是否是为该托管区域创建的。
注意:当您注册实例时,Route 53 会自动创建一条含有服务名称和域名的记录。
如果您使用的是 Amazon ECS 和 Route 53 服务发现功能,可以使用 Route 53 命名空间和服务名称来配置您的服务。然后,Route 53 会根据您的 Amazon ECS 容器设置自动创建、删除或更新您的托管区域中的记录。
相关信息
服务发现 (Amazon ECS)