AWS API 从 S3 存储桶提供静态内容的网关方法

AWS API Gateway Method to Serve static content from S3 Bucket

我想通过 API 网关为我的 lambda 微服务提供服务,这似乎不是什么大问题。

我的每个微服务都有所提供资源的 JSON-Schema 规范。由于它是一个静态文件,我想从 S3 存储桶中提供它 而不是 运行 一个 lambda 函数来为它服务。

所以虽然

GET,POST,PUT,DELETE http://api.domain.com/ressources

应该转发给 lambda 函数。我要

GET http://api.domain.com/ressources/schema

从 S3 为我的 schema.json 服务。

我天真的第一种方法是为“/v1/contracts/schema - GET - Integration Request”设置资源和方法,并将其配置为充当 HTTP 代理,端点 url 直接指向合同JSON-架构。我收到 500 - 内部服务器错误。

                    Execution log for request test-request
Fri Nov 27 09:24:02 UTC 2015 : Starting execution for request: test-invoke-request
Fri Nov 27 09:24:02 UTC 2015 : API Key: test-invoke-api-key
Fri Nov 27 09:24:02 UTC 2015 : Method request path: {}
Fri Nov 27 09:24:02 UTC 2015 : Method request query string: {}
Fri Nov 27 09:24:02 UTC 2015 : Method request headers: {}
Fri Nov 27 09:24:02 UTC 2015 : Method request body before transformations: null
Fri Nov 27 09:24:02 UTC 2015 : Execution failed due to configuration error: Invalid endpoint address

我是完全走错了路还是只是错过了一些配置?

不幸的是,在同一区域内将 TestInvoke 与 API 网关代理到 Amazon S3(和其他一些 AWS 服务)时存在限制。部署后情况不会如此,但如果您想从控制台进行测试,则需要在不同区域使用存储桶。

我们知道这个问题,但我不能承诺何时解决这个问题。

在我的一个设置中,我将 CloudFront 分配放在 API 网关和 S3 存储桶的前面,它们都配置为源。

我这样做主要是为了能够使用 AWS 证书管理器颁发的 SSL 证书,该证书只能在独立的 CloudFront 发行版上设置,不能在 API 网关上设置。

我刚刚遇到了类似的错误,但原因完全不同:如果 s3 存储桶名称包含句点(如 data.example.com 或类似内容),proxz 请求将因 ssl 认证问题而退出!