通过 CDK 部署具有基于延迟的路由自定义域的多区域 AppSync API

问题描述 投票:0回答:2

我尝试使用 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 毫秒(至少)的延迟。如果有更好的方法就太好了

amazon-cloudfront aws-cdk amazon-route53 aws-appsync
2个回答
0
投票

您看过 AWS 的this 博客文章吗? 该设置看起来像是您试图实现的目标。


0
投票

您解决了这个 cname 问题吗?

© www.soinside.com 2019 - 2024. All rights reserved.