我使用Terraform构建API +相应的lambda函数。
我还有一些其他的基础设施,我想这些基础设施设置得很好(也许我错了?):
test
和prod
)两个VPC上的所有资源都相同;例如有一个test-private-subnet
和一个prod-private-subnet
具有完全相同的规格,相同的数据库等等。
现在,我正在研究API和lambdas,它将为API提供动力。
我觉得我不需要test
& prod
API网关和test
& prod
lambdas:
stage_variables
来实现API的test
vs prod
环境但是当我尝试使用vpc_config
块设置lambda时(因为我需要将它与安全组关联,允许在数据库中进入),我收到以下错误:
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}"
]
}
}
请注意,我们最好只在相应的列表中指定它们。
我错过了什么吗?
建议?
非常感谢任何相关或不相关的帮助。
答案 0 :(得分:5)
在vpc中运行的Lambda受制于相同的网络规则"作为ec2实例。所以它不能存在"在两个VPC中。如果lambda函数需要在两个单独的VPC中讨论vpc资源,你可以使用像VPC对等的东西,或者在两个不同的vpc中运行两个函数副本。
将VPC配置添加到Lambda函数时,它只能访问该VPC中的资源。如果Lambda函数需要访问VPC资源和公共Internet,则VPC需要在VPC内部具有Network Address Translation (NAT)实例并且VPC Peering连接。