amazon-web-services - 使用提供商在多个区域部署 Terraform 资源

标签 amazon-web-services deployment terraform

我正在尝试使用提供商跨多个区域部署相同的实例。 文件夹的树是:

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

或者或者,调用模块两次:

ma​​in.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/

相关文章:

c# - 如何在使用 TeamCity 构建后进行部署?

amazon-web-services - 使用Terraform创建API网关时,为什么方法响应不同?

amazon-web-services - yum 从错误的存储库更新 i

ruby - 如何在我的 VagrantFile 中包含变量?

java - Maven - 无法解决 google-vision beta 和 aws-sdk 子组件之间的依赖冲突

c# - 如何在安装新版本期间强制部署项目更新文件?

azure - 如何使用 terraform 在系统分配的身份上添加角色分配?

kubernetes - 无法从堡垒访问通过 Terraform 进行的 AWS EKS 集群设置

amazon-web-services - 具有 2 个 AWS 账户的 AWS CodePipeline 最佳实践

java - 在 amazon s3 java 中删除文件、目录和存储桶