亚马逊AWS官方博客

AWS Cloud Map:轻松创建和维护应用程序的自定义地图

目前,各家公司正越来越多地将其应用程序构建为微服务(众多单独的服务,每项服务仅执行一项作业)。微服务通常使公司可以更快地进行迭代和部署。基于微服务的此类现代应用程序有许多使用各类云资源构建而成,并部署在动态变化的基础设施上。以前,您必须使用配置文件才能管理应用程序资源的位置。但是,在基于微服务的应用程序中,依赖项很快就会变得过于复杂,无法通过配置文件轻松管理。此外,许多应用程序使用动态扩展容器构建而成,可响应流量负载的变化。这会提升应用程序的响应速度,但也会带来一类新问题,那就是现在您的应用程序组件需要在运行时发现并连接上游服务。对于动态变化的基础设施和微服务中的这一连接问题,通常通过服务发现予以解决。

AWS Cloud Map 简介

 

AWS Cloud Map 会跟踪您的所有应用程序组件,以及这些组件的位置、属性和运行状况。现在,您的应用程序使用 AWS SDK、API 甚至 DNS 即可查询 AWS Cloud Map,以发现其依赖项的位置。这使您的应用程序可以动态扩展并直接连接到上游服务,从而提高应用程序的响应能力。

在 AWS Cloud Map 中注册 Web 服务和云资源时,可以使用自定义属性(如部署阶段和版本)对其进行描述。然后,您的应用程序可以发出发现调用,指定所需部署阶段和版本。AWS Cloud Map 将返回与提供的参数匹配的资源位置。它可以简化部署,并降低应用程序的操作复杂性。

对 AWS Cloud Map 中注册的基于 IP 的资源进行集成运行状况检查时,会自动停止将流量路由到运行状况不佳的终端节点。此外,您还可以使用 API 来描述服务的运行状况,以便了解基础设施的潜在问题。这样可以提高应用程序的弹性。

AWS Cloud Map 实际应用
AWS Cloud Map 的入门非常简单。您可以使用 AWS 控制台或 CLI 创建命名空间,例如 myapp.com。对于此示例,我将使用 CLI。让我们创建一个命名空间:

aws servicediscovery create-public-dns-namespace --name myapp.com (http://myapp.com/)

此时,需要决定是否希望应用程序仅通过 AWS SDK 和 API 调用发现资源,或者是否需要通过 DNS 进行可选发现。为命名空间启用 DNS 发现时,需要为注册的所有资源提供 IP 地址。如果您计划注册其他云资源(例如 ARN 的 DynamoDB 表或Amazon API Gateway 上部署的 API 的 URL),则需要选择API 发现模式。

创建命名空间后,就可以创建服务了。服务代表您的应用程序组件,例如用户身份验证付款,并且可以包含许多动态变化的资源。您可以为您的服务指定一个友好的名称,然后选择 DNS 发现和运行状况检查选项。您可以创建这样的服务:

aws servicediscovery create-service --name frontend --namespace-id %namespace_id%”

创建服务后,您可以使用自定义属性注册服务实例:

aws servicediscovery register-instance --service-id %service_id% --instance-id %id%
--attributes AWS_INSTANCE_IPV4=54.20.10.1,stage=beta,version=1.0,active=yes

aws servicediscovery register-instance --service-id %service_id% --instance-id %id%
--attributes AWS_INSTANCE_IPV4=54.20.10.2,stage=beta,version=2.0,active=no

现在,您的应用程序可以执行 API 调用以发现服务实例,同时选择性地提供查询参数以筛选结果:

aws servicediscovery discover-instances --namespace-name myapp.com --service-name frontend --query-parameters version=1.0,active=yes
-->
{
"Instances": [
{
"InstanceId": "1",
"NamespaceName": "myapp.com",
"ServiceName": "users",
"HealthStatus": "HEALTHY",
"Attributes": {
"version":"1.0",
"active":"yes",
"stage":"beta",
"AWS_INSTANCE_IPV4": "54.20.10.2" }
}
]
}

就这么简单! Amazon Elastic Container Service (ECS)AWS Fargate 与 AWS Cloud Map 紧密集成。创建服务并启用服务发现时,所有任务实例会自动在扩展时在 AWS Cloud Map 中注册,在缩小时注销。ECS 还通过将始终最新的运行状况信息发布到 AWS Cloud Map,确保仅在发现调用上返回运行状况良好的任务实例。

对于 Amazon Elastic Container Service for Kubernetes (EKS) ,您可以在 AWS Cloud Map 中自动发布在 EKS 中运行服务的外部 IP。为此,我们发布了一个开源项目 ExternalDNS 的更新,以便可以通过 AWS Cloud Map 发现 Kubernetes 资源。您可以在此处找到有关 Kubernetes 外部 DNS 的更多详细信息。

 

目前一般可用
您可以使用 AWS Cloud Map 开始构建应用程序,立即享用与 Amazon ECS 和 EKS 的集成、丰富且安全的 API 查询界面、无处不在的 DNS 名称解析以及集成的运行状况检查支持。想要尝试吗? 请前往 https://console.aws.amazon.com/cloudmap/home.  如需测试与 ECS 的集成,请前往 https://console.aws.amazon.com/ecs/home,并启用“服务发现”以开始测试。