Terraform:使用局部变量

时间:2017-10-30 02:52:56

标签: terraform

我想了解: - 如何使用定义here的本地人。

所以,我有一个像这样的目录结构:     我-例子/       模块/         测试/           安全组/             main.tf           VPC /             main.tf

my-examples/modules/test/vpc/main.tf中的代码:

variable "vpc_name" {
  default = "Test"
}

resource "aws_vpc" "test_vpc" {
  cidr_block            = "172.31.0.0/16"
  enable_dns_support    = true
  enable_dns_hostnames  = true

  tags {
    Name = "${var.vpc_name}:VPC"
    Environment = "${var.vpc_name}"
  }
}

locals {
  id_vpc = "${aws_vpc.test_vpc.id}"
}

module "security_groups" {
  source = "../security-groups"
  id_vpc = "${local.id_vpc}"
}

我们的想法是能够在id_vpc中使用my-examples/modules/security-group/main.tf,如此:

resource "aws_security_group" "bastion_sg" {
  vpc_id = id_vpc
  name = "Bastion-SG"

  ingress {
    from_port = 22
    to_port = 22
    protocol = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

}

然而,我一直收到这个错误:     错误:

  * 1 error(s) occurred:

  * module root: module security_groups: id_vpc is not a valid parameter

有人可以向我解释为什么局部变量没有被评估?这将是非常高兴的。谢谢。

1 个答案:

答案 0 :(得分:2)

模块security_groups中的名称看起来很好。但是你确实遇到模块security_groups

中的代码问题

请更改

来自

resource "aws_security_group" "bastion_sg" {
  vpc_id = id_vpc
  name = "Bastion-SG"
  ...
}

resource "aws_security_group" "bastion_sg" {
   vpc_id = ${var.id_vpc}
  name = "Bastion-SG"
  ...
}

并在模块中定义变量id_vpc