我正在尝试使用提供商跨多个区域部署相同的实例。 文件夹的树是:
.
|-- main.tf
`-- aws_instance
| `-- main.tf
`-- versions.tf
main.tf 看起来像:
module "aws_instances" {
source = "./aws_instance"
providers = {
aws.east1 = aws.east1
aws.east2 = aws.east2
}
}
aws_instance/main.tf 看起来像:
resource "aws_instance" "webserver" {
ami = "webserver-image"
instance_type = "t2.micro"
key_name = "EC2-keyPair-Name"
associate_public_ip_address = true
root_block_device {
volume_type = "gp2"
volume_size = "30"
delete_on_termination = false
}
versions.tf 看起来像:
terraform {
required_version = ">= 1.0.4"
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 3.23.0"
configuration_aliases = [aws.east1, aws.east2]
}
}
}
provider "aws" {
region = "us-east-1"
alias = "east1"
}
provider "aws" {
region = "us-east-2"
alias = "east2"
}
使用当前代码,我只在一个区域部署了实例。这里有什么可能出错的提示吗?
最佳答案
指定
providers = {
aws.east1 = aws.east1
aws.east2 = aws.east2
}
不会创建两个实例。它只是将两个别名传递给您的模块。但是模块仍然只被调用一次。由于您无法循环提供程序,因此您必须明确选择要为每个实例使用的提供程序。这意味着,代码重复。所以你要么必须在模块中有两个实例定义:
aws_instance/main.tf
resource "aws_instance" "webserver1" {
ami = "webserver-image"
instance_type = "t2.micro"
key_name = "EC2-keyPair-Name"
associate_public_ip_address = true
root_block_device {
volume_type = "gp2"
volume_size = "30"
delete_on_termination = false
provider = aws.east1
}
resource "aws_instance" "webserver2" {
ami = "webserver-image"
instance_type = "t2.micro"
key_name = "EC2-keyPair-Name"
associate_public_ip_address = true
root_block_device {
volume_type = "gp2"
volume_size = "30"
delete_on_termination = false
provider = aws.east2
}
或者或者,调用模块两次:
main.tf
module "aws_instance1" {
source = "./aws_instance"
providers = {
aws = aws.east1
}
}
module "aws_instance2" {
source = "./aws_instance"
providers = {
aws = aws.east2
}
}
关于amazon-web-services - 使用提供商在多个区域部署 Terraform 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73934214/