为 VPC Lattice 服务配置自定义域名 - Amazon VPC Lattice

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为 VPC Lattice 服务配置自定义域名

创建新服务时,VPC Lattice 会为服务生成一个唯一的完全限定域名(FQDN),比如service-name-service_id.partition_id.vpc-lattice-svcs.region.on.aws。但是,用户难以记住 VPC Lattice 生成的域名。

自定义域名是您可以提供给用户的更简单、更直观的 URL。如果您希望为服务使用自定义域名,例如 www.parking.example.com 而不是 VPC Lattice 生成的 DNS 名称,可以在创建 VPC Lattice 服务时进行配置。当客户端使用您的自定义域名发出请求时,DNS 服务器会将其解析为 VPC Lattice 生成的域名。但是,只有当您将自定义域名映射到 VPC Lattice 生成的域名,并使用 CNAME 记录将查询路由到您的服务时,才会发生这种情况。有关更多信息,请参阅将自定义域名与服务关联

先决条件

  • 您的服务必须有一个注册域名。如果您还没有注册域名,可以通过 Amazon Route 53,或任何其他商业注册商来注册一个域名。

  • 要接收 HTTPS 请求,必须在 AWS Certificate Manager中提供自己的证书。VPC Lattice 不支持默认证书作为后备。因此,如果您不提供与自定义域名对应的 SSL/TLS 证书,则与您自定义域名的所有 HTTPS 连接都将失败。有关更多信息,请参阅VPC Lattice 自带证书(BYOC)

限制和注意事项

  • 一项服务不能有多个自定义域名。

  • 创建服务后,您无法修改自定义域名。

  • 自定义域名对于服务网络必须是唯一的。这意味着无法使用同一服务网络中已存在的自定义域名(针对其他服务)创建服务。

要为您的服务配置自定义域名,请使用 AWS Management Console
  1. 通过 https://console.aws.amazon.com/vpc/ 打开 Amazon VPC 控制台。

  2. 在导航窗格中的 VPC Lattice 下,选择服务

  3. 选择创建服务。您将导航到步骤 1:创建服务

  4. 自定义域配置部分,选择指定自定义域配置

  5. 输入您的自定义域名。

  6. 要提供 HTTPS 请求,请在自定义 SSL/TLS 证书中,选择与您自定义域名匹配的 SSL/TLS。如果您还没有证书,或者现在不想添加证书,可以在创建 HTTPS 侦听器时添加证书。但是,如果没有证书,您的自定义域名将无法提供 HTTPS 请求。有关更多信息,请参阅添加 HTTPS 侦听器

  7. 添加用于创建服务的所有其他信息后,选择创建

要为您的服务配置自定义域名,请使用 AWS CLI

使用 create-service 命令。

aws vpc-lattice create-service --name service_name --custom-domain-name your_custom_domain_name --type https --certificate-arn arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012

在上面的命令中,对于 --name,输入服务的名称。对于 --custom-domain-name,输入服务的域名,例如 parking.example.com。对于 --certificate-arn,在 ACM 中输入证书的 ARN。证书 ARN 可在您的 AWS Certificate Manager账户中找到。

如果您在 AWS Certificate Manager (ACM) 中没有自己的 SSL/TLS 证书,则可以在设置自定义域名之前创建或导入一个。但是,只有当您希望使用自定义域名提供 HTTPS 请求时,才需要证书。有关更多信息,请参阅VPC Lattice 自带证书(BYOC)

将自定义域名与服务关联

首先,如果尚未注册域名,请注册您的自定义域名。Internet 上的域名由 Internet 名称和数字地址分配机构 (ICANN) 管理。您需要通过域名注册商 (ICANN 认可的管理域名注册的组织) 注册域名。您的注册商的网站上会提供关于注册域名的详细说明和定价信息。有关更多信息,请参阅以下资源:

然后,使用 DNS 服务(如域名注册商)创建一个 CNAME 记录,将查询路由到您的服务。有关更多信息,请参阅您的 DNS 服务的文档。或者,您可以使用 Route 53 作为您的 DNS 服务。

如果您使用的是 Route 53,则必须先创建一个托管区,其中包含有关如何在互联网上为域路由流量的信息。创建私有或公有托管区后,创建一个 CNAME 记录,以将您的自定义域名(例如 parking.example.com)映射到 VPC Lattice 自动生成的域名(例如 my-service-02031c045478f6ddf1.7d67968.vpc-lattice-svcs.us-west-2.on.aws)。如果没有此映射,您的自定义域名将无法在 VPC Lattice 中使用。有关更多信息,请参阅《Amazon Route 53 开发人员指南》中的使用 Amazon Route 53 控制台创建记录。此外,您可以参考以下步骤创建托管区和 CNAME 记录,将您的自定义域名映射到 VPC Lattice 端点。

要使用 Amazon Route 53 控制台创建带有 CNAME 记录的私有或公有托管区
  1. 通过以下网址打开 Route 53 控制台:https://console.aws.amazon.com/route53/

  2. 在导航窗格中,选择托管区,然后创建托管区

  3. 对于域名,选择要用于将流量路由到 VPC Lattice 服务的托管区名称。例如,如果您的自定义域名是 parking.example.com(http://parking.example.com/),则托管区的域名为 example.com(http://example.com/),也称为 apex 域名。然后,您可以为此托管区创建 CNAME 记录,将流量路由到 VPC Lattice 服务。注意:创建托管区后,无法更改其名称。

  4. 对于类型,根据需要选择私有托管区公有托管区

  5. 选择区域,然后选择要与此托管区关联的 VPC 的 VPC ID

  6. 如有必要,添加标签,然后选择创建托管区。创建后,您的托管区将列在托管区下。

  7. 要在您刚刚创建的托管区中创建 CNAME 记录,请选择托管区,然后选择创建记录

  8. 创建记录下指定以下值:

    1. 对于记录名称,输入要用作自定义域名的名称。如果要使用 parking.example.com(http://acme.example.com/)作为自定义域名,请输入 parking*。这意味着您要输入子域名称 parking,但不包括托管区域名 example.com(http://example.com/)。

    2. 对于记录类型,选择 CNAME

    3. 关闭别名

    4. 对于,输入 VPC Lattice 为您的服务生成的域名(例如 my-service-02031c045478f6ddf1.7d67968.vpc-lattice-svcs.us-west-2.on.aws)。您可以在服务页面的 VPC Lattice 控制台中找到这个自动生成的域名。如果使用 AWS CLI,则create-servicelist-services命令的输出将返回此自动生成的域名。

    5. 对于 TTL(秒),接受默认值 300

    6. 对于路由策略,选择适用的路由策略。有关路由策略的信息,请参阅《Amazon Route 53 开发人员指南》中的选择路由策略

  9. 选择创建记录

    更改通常在 60 秒内传播到所有 Route 53 服务器。传播完成后,您就可以使用自定义域名将流量路由到服务。

要在托管区域中创建别名记录,请使用 AWS CLI
  1. 运行 get-service 命令,获取 VPC Lattice 为您的服务生成的域名(例如 my-service-02031c045478f6ddf1.7d67968.vpc-lattice-svcs.us-west-2.on.aws)和托管区 ID。

  2. 要设置别名,请使用以下命令。

    aws route53 change-resource-record-sets --hosted-zone-id hosted-zone-id-for-your-service-domain --change-batch file://~/Desktop/change-set.json

    对于 change-set.json 文件,使用以下 JSON 示例中的内容创建一个 JSON 文件,然后将其保存在本地计算机上。将上述命令中的 file://~/Desktop/change-set.json,替换为本地计算机中保存的 JSON 文件的路径。注意,以下 JSON 中的“类型”可以是 A 或 AAAA 记录类型。

    { "Comment": "my-service-domain.com alias", "Changes": [ { "Action": "CREATE", "ResourceRecordSet": { "Name": "my-custom-domain-name.com", "Type": "alias-record-type", "AliasTarget": { "HostedZoneId": "hosted-zone-id-for-your-service-domain", "DNSName": "lattice-generated-domain-name", "EvaluateTargetHealth": true } } } ] }