我想通过API网关为我的lambda微服务提供服务,这似乎不是什么大问题。
我的每个微服务都有所提供资源的JSON模式规范。由于它是一个静态文件,我想从S3 Bucket中提供它而不是同时运行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 schema。我收到一个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服务)会受到限制。部署后不会出现这种情况,但如果您想从控制台进行测试,则需要在不同的区域中使用bucket。
我们知道这个问题,但我不能承诺这个问题何时会得到解决。
在我的一个设置中,我将CloudFront分发放在API网关和S3存储桶前面,这两个存储桶都配置为源。
我这样做主要是为了能够使用AWS证书管理器颁发的SSL证书,该证书只能在独立的CloudFront发行版上设置,而不能在API网关上设置。
我刚刚遇到了一个类似的错误,但原因完全不同:如果s3存储桶名称包含句点(如data.example.com或类似内容),那么proxyz请求将因ssl证书问题而退出!