将共享的 Amazon Cloud Map 命名空间与 Amazon ECS Service Connect 结合使用
为 Service Connect 设置共享的 Amazon Cloud Map 命名空间涉及以下步骤:命名空间所有者创建命名空间,所有者通过 Amazon Resource Access Manager(Amazon RAM)共享命名空间,使用者接受资源共享,以及使用者配置 Service Connect 以使用共享命名空间。
步骤 1:创建 Amazon Cloud Map 命名空间
命名空间所有者创建一个将与其他账户共享的 Amazon Cloud Map 命名空间。
使用 Amazon Web Services 管理控制台创建要共享的命名空间
-
打开 Amazon Cloud Map 控制台,地址:https://console.aws.amazon.com/cloudmap/
。 -
选择创建命名空间。
-
输入命名空间名称。所有参与账户的服务都将使用此名称。
-
对于命名空间类型,请为您的使用案例选择合适的类型:
-
API 调用 ‐ 用于服务发现的 HTTP 命名空间,没有 DNS 功能。
-
VPC 中的 API 调用和 DNS 查询 ‐ 用于服务发现的私有 DNS 命名空间,具有 VPC 中的私有 DNS 查询。
-
API 调用和公有 DNS 查询 ‐ 用于服务发现的公有 DNS 命名空间,具有公有 DNS 查询。
-
-
选择创建命名空间。
步骤 2:使用 Amazon RAM 共享命名空间
命名空间所有者使用 Amazon RAM 与其他 Amazon Web Services 账户共享命名空间。
使用 Amazon RAM 控制台共享命名空间
-
打开 Amazon RAM 控制台(https://console.aws.amazon.com/ram/
)。 -
选择创建资源共享。
-
对于名称,键入资源共享的描述性名称。
-
在资源部分:
-
对于资源类型,选择 Cloud Map 命名空间。
-
选择您在上一步中创建的命名空间。
-
-
在托管权限部分,指定 AWSRAMPermissionCloudMapECSFullPermission。
重要
您必须使用
AWSRAMPermissionCloudMapECSFullPermission托管权限来共享命名空间,Service Connect 才能与命名空间正常协作。 -
在主体部分,指定要与其共享命名空间的 Amazon Web Services 账户。您可以输入账户 ID 或组织单元 ID。
-
选择创建资源共享。
步骤 3:接受资源共享
命名空间使用者账户必须接受资源共享邀请才能使用共享命名空间。
使用 Amazon RAM 控制台接受资源共享邀请
-
在使用者账户中,打开 Amazon RAM 控制台,网址为 https://console.aws.amazon.com/ram/
。 -
在导航窗格中,选择与我共享,然后选择资源共享。
-
选择资源共享邀请,然后选择接受资源共享。
-
接受后,请记下资源详细信息中的共享命名空间 ARN。配置 Service Connect 服务时,您将使用此 ARN。
步骤 4:为 Amazon ECS 服务配置共享命名空间
接受共享命名空间后,命名空间使用者可以将 Amazon ECS 服务配置为使用共享命名空间。该配置与使用常规命名空间类似,但您必须指定命名空间 ARN 而不是名称。有关详细的服务创建过程,请参阅 创建 Amazon ECS 滚动更新部署。
使用Amazon Web Services 管理控制台创建具有共享命名空间的服务
-
在集群页面上,选择要在其中创建服务的集群。
-
在服务下,选择创建。
-
根据工作负载填写其他详细信息后,请在 Service Connect 部分中选择使用 Service Connect。
-
对于命名空间,输入共享命名空间的完整 ARN。
ARN 格式为:
arn:aws:servicediscovery:。region:account-id:namespace/namespace-id -
根据需要为服务类型(客户端或客户端-服务器)配置剩余 Service Connect 设置。
-
完成服务创建过程。
您还可以使用 Amazon CLI 或 Amazon SDK,通过在 serviceConnectConfiguration 的 namespace 参数中指定共享命名空间 ARN 来配置服务。
aws ecs create-service \ --cluster my-cluster \ --service-name my-service \ --task-definition my-task-def \ --service-connect-configuration '{ "enabled": true, "namespace": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-abcdef1234567890", "services": [{ "portName": "web", "discoveryName": "my-service", "clientAliases": [{ "port": 80, "dnsName": "my-service" }] }] }'