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

2 分钟阅读
0

我想通过 AWS 命令行界面 (AWS CLI) 使用 AWS Cloud Map 创建托管区。

解决方法

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅排查 AWS CLI 错误。此外,确保您使用的是最新版本的 AWS CLI

创建您的 DNS 命名空间

  1. 使用 AWS CLI 创建命名空间,将 example.com 替换为您要使用的域名。

  2. 您必须选择创建公有命名空间还是私有命名空间。注册域名后,公有命名空间在互联网上可见。私有命名空间仅在虚拟私有云 (VPC) 中可见。创建私有命名空间时,必须指定 VPC ID。

    要创建公有命名空间,请运行以下命令:

    $ aws servicediscovery create-public-dns-namespace --name example.com

    要创建私有命名空间,请运行以下命令:

    $ aws servicediscovery create-private-dns-namespace --name example.com --vpc vpc-0c92f38bf7db24a05

    **注意:**由于该名称在 DNS 查询中是公开的,因此请勿在名称中包含敏感信息。


  3. 请注意输出中 OperationId 的值,如以下示例所示:

    {
        "OperationId": "igbkufld72o4vbsbwejfi6eyinfprhc3-jkwmz00b"
    }
  4. 要查找有关该操作的更多详细信息,请运行 get-operation 命令。将 OPERATION_VALUE 替换为上一步骤中 OperationId 的值:

    aws servicediscovery get-operation --operation-id OPERATION_VALUE
  5. 在输出中,验证 Status 值是否为 SUCCESS。另外,请注意 NAMESPACE 的值,此值即创建服务并注册实例的命名空间 ID:

    {
      "Operation": {
        "Status": "SUCCESS",
        "CreateDate": 1534428266.699,
        "Id": "igbkufld72o4vbsbwejfi6eyinfprhc3-jkwmz00b",
        "UpdateDate": 1534428267.113,
        "Type": "CREATE_NAMESPACE",
        "Targets": {
          "NAMESPACE": "ns-f2wjnv2p7pqtz5f2"
        }
      }
    }

    注意:创建命名空间时,Amazon Route 53 会自动为该域创建一个托管区。托管区的 Domain name 值与您的命名空间的域名相同。Comment由 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"}]'

    **注意:**如果公共 DNS 查询可以发现命名空间,则不要在其中包含敏感信息。对于 DNS 查询可以访问的服务,您不能创建多个只有名称大小写有区别的服务(例如 EXAMPLEexample)。但是,如果您使用只能通过 API 调用访问的命名空间,则可以创建只有名称大小写有区别的服务。

    默认路由策略为 MULTIVALUE。支持的路由策略有 MULTIVALUEWEIGHTED

  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 命令。将 service-idinstance-idattributes 的值占位符替换为相应的值。如果没有这些参数,API 调用就会失败。请注意,一次只能运行一个请求来注册具有相同 service-idinstance-id 选项的实例。

    $ aws servicediscovery register-instance --service-id srv-iy3d7hhlf5cjciph --instance-id i-039444aa1e2932ca3 --attributes=AWS_INSTANCE_IPV4=172.1.1.1

    **警告:**您必须等待一个 register-instance 请求完成,然后才能提交另一个具有相同服务 ID 和实例 ID 的请求。

  2. 查看输出。这包括 OperationId,如下例所示:

    {
        "OperationId": "z7dfqgeadkvwwid2wa2n5ckicrxs255x-jkwr1x9f"
    }
  3. 打开 Route 53 控制台

  4. 在导航窗格中,选择托管区

  5. 选择您之前创建的托管区。

  6. 选择转到记录集,然后确认为托管区成功创建了记录集。

    **注意:**注册实例时,Route 53 会自动创建一条包含服务名称和域名的记录。

    对于 Amazon Elastic Container Service (Amazon ECS) 和 Route 53 服务发现,您可以使用 Route 53 命名空间和服务名称来配置服务。Route 53 会根据您的 Amazon ECS 容器设置自动在您的托管区中创建、删除或更新记录。

AWS 官方
AWS 官方已更新 4 个月前