我尝试使用 CDK 将 AWS AppSync API 部署到两个 AWS 区域(可通过相同主机名访问 - 使用 Route53 基于延迟的路由)。
我首先遇到了无法使用与第一个区域相同的自定义域名将 AWS::AppSync::DomainName 资源部署到第二个区域的问题,我遇到了 CloudFormation 失败,其中指出:
提供的请求无效:CNAME 已存在
这是我对应该如何配置的假设:
|-----------------------------|
| my-appsync-api.example.com |
| 2 CNAMES: 1 x ase2, 1 x ew1 |
|-----------------------------|
|
------------------------------------------
| |
|----------------------------| |----------------------------|
| my-appsync-api.example.com | | my-appsync-api.example.com |
| AppSync custom domain name | | AppSync custom domain name |
|----------------------------| |----------------------------|
| |
|---------------------| |--------------------|
| ase2.cloudfront.net | | ew1.cloudfront.net |
|---------------------| |--------------------|
| |
|---------| |---------|
| AppSync | | AppSync |
|---------| |---------|
鉴于我已将 Route53 记录设置为 CNAMES,我认为我应该使用 AWS 的别名功能将这些记录更改为 A 记录以指向 AppSync 域名。然而,尽管这可以通过 Route53 控制台实现,但无法通过 CDK 实现。当我尝试进行设置时,我发现 AppSync 目前没有 Route53 目标(ApiGateway、CloudFront 等也有)。
我的下一个尝试是为每个 AWS::AppSync::DomainName 资源配置特定于区域的自定义域名,并为每个资源创建特定于区域的 CNAME;然后最终使用所需的域名创建基于延迟的路由 A 记录,路由到各自的特定区域域:
|-----------------------------|
| my-appsync-api.example.com |
| 2 CNAMES: 1 x ase2, 1 x ew1 |
|-----------------------------|
|
-------------------------------------------
| |
|---------------------------------| |--------------------------------|
| my-ase2-appsync-api.example.com | | my-ew1-appsync-api.example.com |
| CNAME for ase2 | | CNAME for ew1 |
|---------------------------------| |--------------------------------|
| |
|---------------------------------| |--------------------------------|
| my-ase2-appsync-api.example.com | | my-ew1-appsync-api.example.com |
| AppSync custom domain name | | AppSync custom domain name |
|---------------------------------| |--------------------------------|
| |
|---------------------| |--------------------|
| ase2.cloudfront.net | | ew1.cloudfront.net |
|---------------------| |--------------------|
| |
|---------| |---------|
| AppSync | | AppSync |
|---------| |---------|
唉,这也不起作用,我最终遇到了 SSL 问题,我猜是因为 CloudFront 发行版(在 AppSync 的引擎盖下)配置了特定于区域的域。
在我看来,我拥有的 only 选项(假设您只能拥有具有唯一自定义域名的 AWS::AppSync::DomainName 资源)是为每个区域拥有唯一的自定义域名,然后弹出AppSync 前面的 API 网关代理...不过,这样会增加大约 200 毫秒(至少)的延迟。如果有更好的方法就太好了