AWS - Lambda 无法访问 ElasticTranscoder

AWS - Lambda cannot access ElasticTranscoder

我在 VPC 中有一个由以下服务组成的基础设施(显然 S3 和 Transcoder 除外):

场景如下:

  1. 用户直接上传视频到S3 bucket
  2. 上传会触发 lambda 函数,该函数会在 Elastic Transcoder 中创建一个新作业(使用 AWS SDK)并更新数据库 (RDS) 中的资源行

问题在于,由于 RDS 不可公开访问,因此 lambda 需要与 RDS 位于同一 VPC 中才能允许连接到它。这还会导致 lambda 函数中的一般 Internet 连接丢失,这意味着它无法访问 Elastic Transcoder(因为从 VPC 的角度来看,它是 out-of-VPC)。现在,我在 S3 上遇到了类似的问题,但通过向指向 S3 的 VPC 添加一个端点来解决这个问题相当容易,但是,Elastic Transcoder(或事实上的任何其他服务)没有这样的选项。

我不想创建 NAT 网关,因为这种无意义的东西太贵了。

所以简单的问题是:如何解决Lambda可以同时与RDS和Elastic Transcoder通信?

P.S.: lambda 角色包含可以访问 Elastic Transcoder 的 *Job

的策略

一个对我有用的选项是将我的函数分成 2 个:

  • 第一个函数在 VPC 之外,可以访问 public 互联网,因此可以访问 Elastic Transcoder 和 S3(在您的情况下)

  • 第二个函数 可以访问 VPC 并纯粹执行从 VPC 资源获取所需的操作。

所以重点是第一个函数将使用 aws-sdk 调用第二个函数以从 VPC 获取某些内容而无需创建 NAT 网关!

P.S。在 VPC 内部创建大量函数可能会导致意想不到的性能意外。这里有更多关于 Lambda + VPC