Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS Lambda平台上的VPC_Amazon Web Services_Aws Lambda_Terraform - Fatal编程技术网

Amazon web services 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

使用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             = "${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}"]
}