Я использую Terraform для создания API + соответствующих лямбда-функций.
У меня есть другая инфраструктура, которая, как мне кажется, хорошо настроена (может я ошибаюсь?):
- 2 VPC (давайте просто назовем их
test
иprod
) - Частные и общедоступные подсети в каждом VPC
- БД RDS запущены в частных подсетях
Все ресурсы идентичны на обоих VPC; например есть test-private-subnet
и prod-private-subnet
с точно такими же характеристиками, одинаковыми для БД и т. д.
Теперь я работаю над API и лямбдами, которые будут использовать этот API.
Мне не нужен test
& prod
API-шлюз и test
& prod
лямбды:
- лямбда-код будет таким же, просто действует на разные БД
- вы можете использовать API
stage_variables
с разными IP-адресами для достижения средыtest
противprod
для API
Но когда я пытаюсь настроить лямбду с блоком vpc_config
(потому что мне нужно, чтобы он был связан с группой безопасности, которой разрешен вход в базы данных), я получаю следующую ошибку:
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}"
]
}
}
Обратите внимание, что в идеале я хотел бы просто указать их вместе в соответствующих списках.
Я что-то упускаю?
Предложения?
Любая помощь, связанная или нет, очень ценится.