{Terraform} Working with Multiple AWS regions

 

参考文献: Terraform Up & Running (Yevgeniy Brikman著)

 

cat <<-'EOF' > variables.tf

EOF


cat <<-'EOF' > main.tf


terraform {
  required_version = "= 1.6.0"
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "= 4.17.0"
    }
  }
}


provider "aws" {
  region = "ap-northeast-1"
  alias = "region_1"
}

provider "aws" {
  region = "ap-northeast-3"
  alias = "region_2"
}


data "aws_region" "region_1" {
  provider = aws.region_1
}

data "aws_region" "region_2" {
  provider = aws.region_2
}

data "aws_ami" "ubuntu_region_1" {
  provider = aws.region_1
  
  most_recent = true
  owners = ["099720109477"]
  
  filter {
    name = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-*"]
  }
}

data "aws_ami" "ubuntu_region_2" {
  provider = aws.region_2
  
  most_recent = true
  owners = ["099720109477"]
  
  filter {
    name = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-*"]
  }
}


resource "aws_instance" "region_1" {
  provider = aws.region_1
  ami = data.aws_ami.ubuntu_region_1.id
  instance_type = "t3.micro"
}

resource "aws_instance" "region_2" {
  provider = aws.region_2
  ami = data.aws_ami.ubuntu_region_2.id
  instance_type = "t3.micro"
}


EOF

 

 

cat <<-'EOF' > outputs.tf

output "region_1" {
  value = data.aws_region.region_1.name
  description = "region_1"
}
output "region_2" {
  value = data.aws_region.region_2.name
  description = "region_2"
}


output "instance_region_1_az" {
  value = aws_instance.region_1.availability_zone
  description = "instance_region_1_az"
}
output "instance_region_2_az" {
  value = aws_instance.region_2.availability_zone
  description = "instance_region_2_az"
}


EOF

 

 

terraform init
terraform fmt
terraform -version

terraform apply -auto-approve

 

terraform destroy -auto-approve