AWS – Lambda无法访问ElasticTranscoder
我有一个由VPC中的以下服务组成的基础结构( 显然除了S3和代码转换器 ):
- EC2(networking服务器)
- RDS(数据库)
- Lambda函数与Node.js
- S3
- 弹性转码器
情况如下:
- 用户直接将video上传到S3存储桶
- 上传将触发lambda函数,该函数将在Elastic Transcoder中创build一个新作业(使用AWS开发工具包),并更新数据库中的资源行(RDS)
问题是,由于RDS不可公开访问,为了允许连接,Rambda需要与RDS在同一个VPC中。 这也会导致在lambda函数中泛因特网连接丢失,这意味着它不能访问Elastic Transcoder(因为从VPC的angular度来看,它是一个VPC的out-of- VPC)。 现在,我也遇到了与S3类似的问题,但通过在指向S3的VPC上添加一个端点来解决这个问题是相当容易的,但是,对于Elastic Transcoder(或其他任何服务,事实上)并没有这样的select。
我不想创build一个NAT网关,因为这样一个无聊的事情是非常昂贵的。
所以简单的问题是:我怎样才能解决Lambda可以同时与RDS和Elastic Transcoder进行通信?
PS:lambdaangular色包含可以访问Elastic Transcoder的*Job
其中一种方法是将我的函数分解为2:
-
第一个function可以访问VPC ,并且完全可以从VPC资源中获得所需的function。
-
第二个function在VPC之外 ,可以访问公共因特网,因此可以访问Elastic Transcoder和S3(在你的情况下)
所以关键是第二个函数将调用第一个function使用aws-sdk
从VPC获取一些东西,而不创build一个NAT网关!
PS在VPC内部创build很多function可能会导致意外的性能问题。 这里是关于Lambda + VPC的更多信息