【问题标题】:How can I setup an AWS lambda to access resources in two, separate VPCs?如何设置 AWS lambda 以访问两个独立 VPC 中的资源?
【发布时间】:2017-11-05 01:46:44
【问题描述】:

我正在使用 Terraform 构建一个 API + 相应的 lambda 函数。

我有一些其他的基础设施,我认为它设置得很好(也许我错了?):

  • 2 个 VPC(我们就叫他们 testprod
  • 每个 VPC 中的私有和公有子网
  • 在私有子网中启动的 RDS 数据库

两个 VPC 上的所有资源都相同;例如有一个 test-private-subnet 和一个 prod-private-subnet 具有完全相同的规格,同样适用于 DB 等。

现在,我正在研究 API 和将为上述 API 提供支持的 lambda。

我觉得我不需要 test & prod API 网关和 test & prod lambdas:

  • lambda 代码将是相同的,只是作用于不同的 DB
  • 您可以使用 API stage_variables,使用不同的 ip,为 API 实现 testprod 环境

但是当我尝试使用 vpc_config 块设置 lambda 时(因为我需要将它与允许进入 DB 的 安全组 相关联),我收到以下错误:

Error applying plan:

1 error(s) occurred:

* module.lambdas.aws_lambda_function.api-lambda-users: 1 error(s) occurred:

* aws_lambda_function.api-lambda-users: Error creating Lambda function: InvalidParameterValueException: Security Groups are required to be in the same VPC.
status code: 400, request id: xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx

我的 lambda 配置如下所示:

resource "aws_lambda_function" "api-lambda-users" {
  provider = "PROVIDER"
  function_name    = "users"
  s3_key           = "users/${var.lambda-package-name}"
  s3_bucket        = "${var.api-lambdas-bucket}"
  role             = "${aws_iam_role.lambda-role.arn}"
  handler          = "${var.handler-name}"
  runtime          = "${var.lambda-runtime}"

  vpc_config {
    security_group_ids = [
      //"${data.aws_security_group.prod-lambda.id}",
      "${data.aws_security_group.test-lambda.id}"
    ]
    subnet_ids = [
      //"${data.aws_subnet.prod-primary.id}",
      "${data.aws_subnet.test-primary.id}"
    ]
  }
}

请注意,理想情况下,我希望将它们一起指定到相应的列表中。

我错过了什么吗?

建议?

非常感谢任何相关或无关的帮助。

【问题讨论】:

  • 一般来说,最好有一个完全复制的测试环境。这样,您可以在不影响生产环境的情况下试验更改(例如改进的 Lambda 代码)。鉴于 Lambda 和 API Gateway 在不使用时不会产生任何费用(API Gateway 缓存除外,如果已激活),没有真正的理由避免创建完整的测试环境。
  • 谢谢。也考虑过,但觉得有点过头了。很高兴听到它不是;可能我最终会做什么!

标签: amazon-web-services aws-lambda amazon-vpc terraform


【解决方案1】:

在 vpc 中运行的 Lambda 受制于与 ec2 实例相同的网络“规则”。所以它不能在两个 VPC 中“存在”。如果 lambda 函数需要在两个单独的 VPC 中讨论 vpc 资源,您可以使用 VPC 对等或仅在两个不同的 vpc 中运行该函数的两个副本。

当您将 VPC 配置添加到 Lambda 函数时,它只能访问该 VPC 中的资源。如果 Lambda 函数需要访问 VPC 资源和公共 Internet,则 VPC 需要在 VPC 内部有一个 Network Address Translation (NAT) 实例和一个 VPC Peering 连接。

【讨论】:

  • 谢谢。正如John Rotenstein 的评论,可能会使用 lambda 函数/VPC!
  • 建立两个VPC(test和prod)的原因是为了隔离环境,vpc peering对于这种情况不是一个好的建议。
  • 我同意,这就是亚马逊他们给你的足够的绳索
猜你喜欢
  • 1970-01-01
  • 2019-09-18
  • 2018-04-23
  • 1970-01-01
  • 2017-02-08
  • 2021-12-24
  • 1970-01-01
  • 2016-05-29
  • 2020-09-28
相关资源
最近更新 更多