Amazon web services AWS Lambda平台上的VPC
使用terraform 0.9.3创建AWS Lambda函数时,我无法使其加入我选择的VPC 我的函数是这样的:Amazon web services AWS Lambda平台上的VPC,amazon-web-services,aws-lambda,terraform,Amazon Web Services,Aws Lambda,Terraform,使用terraform 0.9.3创建AWS Lambda函数时,我无法使其加入我选择的VPC 我的函数是这样的: resource "aws_lambda_function" "lambda_function" { s3_bucket = "${var.s3_bucket}" s3_key = "${var.s3_key}" function_name = "${var.function_name}" role
resource "aws_lambda_function" "lambda_function" {
s3_bucket = "${var.s3_bucket}"
s3_key = "${var.s3_key}"
function_name = "${var.function_name}"
role = "${var.role_arn}"
handler = "${var.handler}"
runtime = "${var.runtime}"
timeout = "30"
memory_size = 256
publish = true
vpc_config {
subnet_ids = ["${var.subnet_ids}"]
security_group_ids = ["${var.security_group_ids}"]
}
}
我为这个角色使用的策略是
data "aws_iam_policy_document" "lambda-policy_policy_document" {
statement {
effect = "Allow"
actions = [
"ec2:DescribeSecurityGroups",
"ec2:DescribeSubnets",
"ec2:DescribeVpcs",
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"ec2:CreateNetworkInterface",
"ec2:DescribeNetworkInterfaces",
"ec2:DeleteNetworkInterface"
]
resources = ["*"]
}
}
资源创建得很好,如果我尝试通过AWS控制台添加VPC和子网,一切都会成功
更新(创建计划):
缺少到lambda模块的映射。修复后,VPC配置的计划应该是这样的:
vpc_config.#: "1"
vpc_config.0.security_group_ids.#: "1"
vpc_config.0.security_group_ids.571116572: "******"
vpc_config.0.subnet_ids.#: "3"
vpc_config.0.subnet_ids.1396457994: "****"
vpc_config.0.subnet_ids.1722519307: "****"
vpc_config.0.subnet_ids.830820656: "****"
vpc_config.0.vpc_id: "<computed>"
vpc_配置::“1”
vpc_config.0.security_group_id.#:“1”
vpc_config.0.security_group_ids.57116572:“******”
vpc_config.0.子网_ID.#::“3”
vpc_config.0.subnet_ids.1396457994:“***”
vpc_config.0.subnet_ids.1722519307:“***”
vpc_config.0.subnet_ids.830820656:“***”
vpc_config.0.vpc_id:“
我认为子网ID的值是这样的:“子网-xxxxx,子网-yyyy,子网-zzzzz”
将其作为单个子网而不是列表。您可以这样解决此问题:
vpc_config {
subnet_ids = ["${split(",", var.subnet_ids)}"]
security_group_ids = ["${var.security_group_ids}"]
}
在没有Lambda函数的情况下,您能显示计划输出吗?@ydaetskcoR刚刚用创建的planThat进行了更新,我觉得这是错误的。我刚刚计划了一个我自己的Lambda函数,它恰好位于VPC中,我在计划中看到了安全组ID和子网ID的额外行,而您的计划没有显示这些行。类似于:
vpc\u config.0.subnet\u ids.1220732747:“subnet-12345678”
。您是否检查了您的子网ID和安全组ID是否正确传入?作为参考,我使用的模块是public(),但与此相比,您的模块配置看起来很好,因此我想这取决于您如何调用该模块。@ydaetskcoR您是对的,我缺少一个映射。这对我不起作用。我通过将var.subnet\u id的定义更改为列表来解决这个问题变量“subnet\u ids”{default=[“subnet-0xxxc”,“subnet-0xxxa”,“subnet-0xxx1”,“subnet-0xxxc”]}``然后在我的vpc\u配置中只需使用:``` subnet\u ids=“${var.subnet\u ids}``您使用的是哪种地形版本?我使用的是terraform V0.12.9您可以在terraform V0.11.x中试用,对于V0.12.x,我正在编写代码`vpc\u配置{subnet\u id=split(“,”,var.subnets)security\u group\u id=split(“,”,var.security\u groups)}``这对我很有效。
vpc_config.#: "1"
vpc_config.0.security_group_ids.#: "1"
vpc_config.0.security_group_ids.571116572: "******"
vpc_config.0.subnet_ids.#: "3"
vpc_config.0.subnet_ids.1396457994: "****"
vpc_config.0.subnet_ids.1722519307: "****"
vpc_config.0.subnet_ids.830820656: "****"
vpc_config.0.vpc_id: "<computed>"
vpc_config {
subnet_ids = ["${split(",", var.subnet_ids)}"]
security_group_ids = ["${var.security_group_ids}"]
}