【问题标题】:AWS - Lambda cannot access ElasticTranscoderAWS - Lambda 无法访问 ElasticTranscoder
【发布时间】:2018-04-25 18:44:49
【问题描述】:

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

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

场景如下:

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

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

我不想创建一个 NAT 网关,因为这种无意义的东西相当昂贵。

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

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

的策略

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    附:在 VPC 中创建大量函数可能会导致意外的性能意外。这里有更多关于Lambda + VPC

    【讨论】:

    • 从第二个函数调用第一个函数需要什么样的策略?我首先尝试了相反的方法,但似乎这行不通(或者我错过了一项政策,但它只是超时了,所以我想缺乏互联网是真正的(也是唯一的?)问题)。
    • @GergelyKőrössy 您在政策中唯一需要的东西:Action: lambda:InvokeFunction Resource: ['arn:aws:lambda:REGION:ACC_ID:function:FUNCTION_NAME']
    • 与第二 => 第一方向完美配合。以相反的方式尝试了它,但它只是超时了,所以似乎函数调用无法从 VPC 中出来。
    • 正确...因为要调用函数,您需要访问 Internet。这里的逻辑是倒退的——外部的函数可以调用内部的第二个函数,而不是相反。使用 NAT 网关或 NAT 实例。
    • 答案已更新以反映上述 cmets。
    猜你喜欢
    • 2023-01-21
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 2018-12-25
    • 2018-06-25
    • 1970-01-01
    相关资源
    最近更新 更多