node.js - AWS - Lambda 无法访问 ElasticTranscoder

标签 node.js amazon-web-services aws-lambda aws-vpc amazon-elastic-transcoder

我的基础设施由 VPC 中的以下服务组成(显然 S3 和转码器除外):

  • EC2(网络服务器)
  • RDS(数据库)
  • 使用 Node.js 的 Lambda 函数
  • S3
  • 弹性转码器

场景如下:

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

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

我不想创建 NAT 网关,因为对于这种无意义的事情来说它非常昂贵。

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

附注:lambda 角色包含有权访问 Elastic Transcoder 的 *Job

的策略

最佳答案

对我有用的一个选项是将我的功能分成 2 个:

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

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

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

附注在 VPC 内创建大量功能可能会导致意外的性能惊喜。这里有更多关于 Lambda + VPC 的信息。

关于node.js - AWS - Lambda 无法访问 ElasticTranscoder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43459873/

相关文章:

amazon-web-services - 引用嵌套堆栈的输出错误: "the attribute in Fn::ImportValue must not depend on any resources"

python - AWS/Python Lambda 函数检查是否存在查询字符串

java - Amazon Lambda Java 函数不向 DynamoDB 插入数据

javascript - 如何从传递一些参数的 node.js 执行 .bat 文件?

amazon-web-services - 如何使用 Cloudformation 解析 AWS 上的免费套餐 RHEL AMI ID?

node.js - 使用 Node.js 和 Express 进行 reCAPTCHA

amazon-web-services - Jekyll 部署到 AWS S3 链接不工作

python-3.x - Serverless 无法导入本地文件;同一目录下;进入Python文件

node.js - 在 node.js 服务器上使用 supertest/superagent 读取响应输出缓冲区/流

javascript - async.waterfall 回调在哪里定义