0

我试图将我的网站(目前是CloudFront和Elastic Beanstalk)切换到API网关。如何创建AWS API网关自定义域到已在CloudFront分配中使用且已停用的域?

当我尝试在API网关中创建自定义域时,我收到一条消息,说明该域已经有CloudFront分配,这是正确的。但是如果我删除了这个分发版本,我的网站将会停止运行,直到新的分发版本(API网关)启动。

有反正我可以交换这些东西吗?

我确实可以控制DNS记录。

+0

我假设你只在你的基于Beanstalk的实现中使用CloudFront作为静态资产? –

+0

由于CloudFront的全局名称空间(也被API网关使用),因此没有零停机时间解决方案,因此@jenswalter有唯一的直接解决方案 - 将API网关端点的默认名称添加为现有CloudFront分配的原点。但是,如果您使用子域(foo.example.com)而不是裸域(example.com),则有一种解决方法可以最大限度地减少停机时间。你是? –

+0

@YeshodhanKulkarni - 不 - 我使用CloudFront作为整个站点的缓存层 - 静态和动态。 – AvnerSo

回答

1

最终解决方案:

  1. 更改DNS直接在弹性魔豆点
  2. 禁用&删除原来的CloudFront的分布
  3. 在APIG创建“自定义域”(这也创造了一个CloudFront的DIST)
  4. 更改DNS的指向新的CloudFront dist。 (您可以在自定义域名下的APIG控制台中获取URL)

以上每个步骤都需要一点时间......但没有停机时间。

1

您可以将您的API网关注册为cloudfront来源,然后为您的API调用分配单独的行为。

如果您需要一步一步的指导,您可以使用下面的链接:

Processing A Contact Form Using AWS Cloudfront, API Gateway, Lambda and SES

对于cloudformation设置,你可以使用这样的描述:

hosting a Cloudfront site with S3 and API Gateway

+0

我试过了,但是这并不起作用,因为如果您尝试从未注册为域的域名访问它,API网关将返回'禁止访问'自定义域。你可以看到这个例子 - d2dce1w778hsrx.cloudfront.net。谢谢 – AvnerSo

+0

缺少的自定义域不会生成禁止的错误(因为这些不是必需的)。我猜你的起源或行为没有正确设置。您是否明确将标题字段列入白名单?路径模式匹配通常也是错误的原因。原点具有作为路径一部分的阶段,但行为已包含API的第一个资源元素。令人遗憾的是,AWS方面没有工具来调试这样的配置,只是出现了一个错误。 –

+1

在这种情况下,将“Host:”标题列入白名单应该会导致此错误。 –

相关问题