【发布时间】:2017-11-05 01:46:44
【问题描述】:
我正在使用 Terraform 构建一个 API + 相应的 lambda 函数。
我有一些其他的基础设施,我认为它设置得很好(也许我错了?):
- 2 个 VPC(我们就叫他们
test和prod) - 每个 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 实现test与prod环境
但是当我尝试使用 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