如何通过 AWS CLI 配置 AWS Cloud Map 的服务发现?

上次更新时间:2020 年 6 月 23 日

如何通过 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

创建 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-idinstance-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)

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?