我正在使用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