簡體   English   中英

Terraform 查找 AWS 區域

[英]Terraform lookup AWS region

我的 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"
  }
}

正如您在模塊文件代碼中看到的那樣,我正在嘗試查找以從映射變量中查找 VPC CIDR 掩碼和子網 CIDR 掩碼。

問題是我似乎無法弄清楚如何將區域用作查找值。

如果我硬編碼這些值:

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

該腳本按預期工作,但我不想對值進行硬編碼。

有更多 Terraform 經驗的人可以幫助我了解如何正確引用該區域以查找正確的值嗎?

我正在為不同的問題尋找相同的答案。 我想獲取角色名稱的區域,我可以通過執行以下操作獲取信息:

1.- 創建一個類似data.tf的文件並添加以下信息:

data "aws_region" "current" {}

2.- 通過在任何 TF 文件中調用此變量來從數據中獲取信息:

name = "${var.vpc-name}-${data.aws_region.current.name}-Bastion-Role"

這樣,它將獲取您正在執行代碼的區域,並且您不必弄亂provider.tf文件。

您可以使用aws_region數據源獲取提供商當前正在使用的區域。

因此,在您的情況下,您可以執行以下操作:

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"
  }
}

...
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"
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM