我正在使用Terraform来构建一个API +相应的lambda函数。如何设置AWS lambda以访问两个单独的VPC中的资源?
我有一些其他的基础设施,我想,认为是很好的建立了这(也许我错了?):
- 2的VPC(让我们只是看见他们
test
和prod
) - 私人&公共子网在专用子网
所有的资源都在两个相同的VPC推出VPC每个
test-private-subnet
和一个prod-private-subnet
与完全相同的规格,相同的数据库,等等。 现在,我正在研究API和lambdas,将支持所说的API。
我不觉得我需要一个test
& prod
API网关和test
& prod
lambda表达式:
- 拉姆达代码是相同的,只是作用于不同的DB
- 您可以使用API
stage_variables
,用不同的ips实现test
与prod
API环境
但是,当我尝试设置与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
我拉姆达配置看起来像这样:
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}"
]
}
}
注意我最好喜欢在它们的相应列表中指定它们。
我错过了什么吗?
对此提出建议?
任何帮助,有关与否,非常感谢。
通常情况下,为Test设置完全重复的环境是很好的做法。这样,您可以尝试更改(例如改进的Lambda代码),而不会影响生产环境。鉴于Lambda和API网关在未被使用时不会消耗任何成本(API网关缓存除外(如果已激活)),因此没有必要避免创建完整的测试环境。 –
谢谢。也考虑到了这一点,但认为这是过度杀伤力。很高兴听到它不是;可能是我最终会做的! – yoaquim