首页 文章

Terraform查找AWS区域

提问于
浏览
0

我在main.tf文件中有以下代码:

provider "aws" {
  access_key = "${var.aws_access_key}"
  secret_key = "${var.aws_secret_key}"
  region     = "us-east-1"
  alias      = "us-east-1"
}

provider "aws" {
  access_key = "${var.aws_access_key}"
  secret_key = "${var.aws_secret_key}"
  region     = "us-west-1"
  alias      = "us-west-1"
}

module "us-east_vpc" {
  source = "./setup-networking"

  providers = {
    "aws.region" = "aws.us-east-1"
  }
}

module "us-west_vpc" {
  source = "./setup-networking"

  providers = {
    "aws.region" = "aws.us-west-1"
  }
}

然后在我的模块文件中我有:

provider "aws" {
  alias = "region"
}

resource "aws_vpc" "default" {
  provider             = "aws.region"
  cidr_block           = "${lookup(var.vpc_cidr, ${aws.region.region})}"
  enable_dns_hostnames = true

  tags {
    Name = "AWS VPC"
  }
}

resource "aws_internet_gateway" "default" {
  provider = "aws.region"
  vpc_id   = "${aws_vpc.default.id}"
}

resource "aws_subnet" "default" {
  provider = "aws.region"
  vpc_id   = "${aws_vpc.default.id}"

  cidr_block        = "${lookup(var.subnet_cidr, ${aws.region.region})}"
  availability_zone = "aws.region"

  tags {
    Name = "AWS Subnet"
  }
}

resource "aws_route_table" "default" {
  provider = "aws.region"
  vpc_id   = "${aws_vpc.default.id}"

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = "${aws_internet_gateway.default.id}"
  }

  tags {
    Name = "Main Gateway"
  }
}

正如你在模块文件代码中看到的那样,我正在尝试查找从 Map 变量中查找VPC CIDR掩码和子网CIDR掩码 .

麻烦的是,我似乎无法理清如何将该区域用作查找值 .

如果我硬编码这些值:

cidr_block = "10.10.0.0/16"
cidr_block = "10.10.10.0/24"

该脚本按预期工作,但我不想硬编码值 .

拥有更多Terraform经验的人可以帮助我理解如何正确引用该区域以查找正确的值吗?

2 回答

  • 0

    您可以使用aws_region data source获取提供程序当前正在使用的区域 .

    所以在你的情况下你可以做这样的事情:

    provider "aws" {
      alias = "region"
    }
    
    data "aws_region" "current" {
      provider = "aws.region"
    }
    
    resource "aws_vpc" "default" {
      provider             = "aws.region"
      cidr_block           = "${lookup(var.vpc_cidr, ${data.aws_region.current.name})}"
      enable_dns_hostnames = true
    
      tags {
        Name = "AWS VPC"
      }
    }
    
    ...
    
  • 0
    provider "aws" {
        alias = "region"
    }
    
    data "aws_region" "current" {
        provider = "aws.region"
    }
    
    data "aws_availability_zone" "current" {
        provider = "aws.region"
        name = "${data.aws_region.current.name}a"
    }
    
    resource "aws_vpc" "default" {
        provider = "aws.region"
        cidr_block = "${lookup(var.vpc_cidr, data.aws_availability_zone.current.name)}"
        enable_dns_hostnames = true
        tags {
                Name = "${data.aws_region.current.name} Security VPC1"
                Region = "${data.aws_region.current.name}"
                Account = "Security"
        }
    }
    

相关问题