【问题标题】:How do I enable my AWS Lambda function to write to Firehose?如何使我的 AWS Lambda 函数能够写入 Firehose?
【发布时间】:2021-01-03 08:20:59
【问题描述】:

我有一个应该写入 Firehose 的 AWS Lambda 函数。但是,当我创建 PutRecordBatchRequest 时,它会超时并且无法写入 Firehose。

函数位于 VPC 中。我已将策略附加到 lambda 的角色以允许访问:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "firehose:*"
      ],
      "Resource": [
        "${aws_kinesis_firehose_delivery_stream.my_firehose.arn}"
      ]
    }
  ]
}

请注意,我使用的是 Terraform,因此非常感谢 HCL 中的解决方案。

如何让它发挥作用?

【问题讨论】:

  • AWS Lambda 函数连接到 VPC 时,将无法直接访问 Internet。要授予此类访问权限,您将需要:公共子网中的 NAT 网关,具有匹配的路由表,或 VPC 中的 VPC 端点用于所需服务 - 如果您使用 VPC 端点 - 您可能需要配置安全组正确使用您的 lamda 功能
  • 将 Lambda 函数放在 VPC 中是否有特殊原因?是否需要与 VPC 中的资源进行通信?如果没有,只需将其与 VPC 分离。
  • @JohnRotenstein 是的,它连接到 RDS 等

标签: amazon-web-services aws-lambda terraform amazon-kinesis-firehose


【解决方案1】:

您需要添加一个aws_vpc_endpoint

这允许 VPC 内部的 lambda 与 VPC 外部的 AWS 服务进行通信。见https://docs.aws.amazon.com/firehose/latest/dev/vpc.html

resource "aws_security_group" "firehose_endpoint" {
  name   = "firehose-endpoint"
  vpc_id = aws_default_vpc.default.id
}

resource "aws_vpc_endpoint" "firehose_endpoint" {
  vpc_id              = aws_default_vpc.default.id
  vpc_endpoint_type   = "Interface"
  service_name        = "com.amazonaws.eu-west-2.kinesis-firehose"
  security_group_ids  = [ aws_security_group.firehose_endpoint.id ]
  private_dns_enabled = true

  subnet_ids = [
    aws_default_subnet.subnet_a.id,
    aws_default_subnet.subnet_b.id
  ]

  policy  = <<EOF
      {
        "Statement": [
          {
            "Sid": "Firehose-full-access",
            "Principal": "*",
            "Action": "firehose:*",
            "Effect": "Allow",
            "Resource": "*"
          }
        ]
      }
    EOF
}

您当然需要调整您的策略、子网等。

【讨论】:

    【解决方案2】:

    您需要按照建议设置 Internet 访问,或者按照 https://docs.aws.amazon.com/firehose/latest/dev/vpc.html 设置 AWS Privatelink

    【讨论】:

    • 我已尝试关注这些文档,但显然在我的 Terraform 脚本中遗漏了一些内容。
    • 尝试在没有 terraform 的情况下手动执行,也许是安全组问题?您可以随时查看 VPC 流日志以了解流量到达或未能到达的位置
    猜你喜欢
    • 1970-01-01
    • 2022-12-18
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 2018-10-29
    • 2019-08-19
    相关资源
    最近更新 更多