首页 > 解决方案 > 与 aws 提供程序区域不同的 terraform aws_s3_bucket 区域在同一提供程序区域中创建

问题描述

我想用 terraform 管理 AWS S3 存储桶,并注意到该region资源有一个参数。

我有一个为 1 个区域配置的 AWS 提供商,并且希望尽可能使用该提供商在多个区域中创建 S3 存储桶。我的 S3 存储桶有很多我不想重复的通用配置,所以我有一个本地模块来完成所有重复的工作......

mod-s3-bucket/main.tf,我有类似的东西:

variable bucket_region {}
variable bucket_name {}

resource "aws_s3_bucket" "s3_bucket" {
   region = var.bucket_region
   bucket = var.bucket_name
}

然后在main.tf父目录(tf root)中:

provider "aws" {
  region = "us-east-1"
}

module "somebucket" {
  source = "mod-s3-bucket"
  bucket_region = "us-east-1"
  bucket_name = "useast1-bucket"
}

module "anotherbucket" {
  source = "mod-s3-bucket"
  bucket_region = "us-east-2"
  bucket_name = "useast2-bucket"
}

当我使用它运行terraform apply时,两个存储桶都在 us-east-1 中创建 - 这是预期的行为吗?我的理解是,区域应该使存储桶在不同的区域中创建。

此外,如果我在创建存储桶后运行 terraform 计划,我会看到以下内容:

       ~ region                      = "us-east-1" -> "us-east-2"

在 1 个存储桶上,但是在应用后,区域没有改变。

我知道我可以通过使用第二个别名 AWS 提供商轻松解决此问题,但我特别询问该region参数如何用于aws_s3_bucket资源(https://www.terraform.io/docs/providers/aws/r/ s3_bucket.html#region )

标签: amazon-web-servicesamazon-s3terraform-provider-aws

解决方案


我认为您需要执行此示例中显示的文档之类的操作Replication Configurationhttps ://www.terraform.io/docs/providers/aws/r/s3_bucket.html#using-replication-configuration

# /root/main.tf

provider "aws" {
  region = "us-east-1"
}

provider "aws" {
  alias  = "us-east-2"
  region = "us-east-2"
}

module "somebucket" {
  source = "mod-s3-bucket"
  bucket_region = "us-east-1"
  bucket_name = "useast1-bucket"
}

module "anotherbucket" {
  source = "mod-s3-bucket"
  provider = "aws.us-east-2"
  bucket_region = "us-east-2"
  bucket_name = "useast2-bucket"
}
# /mod-s3-bucket/main.tf

variable provider {
   type = string
   default = "aws"
}
variable bucket_region {}
variable bucket_name {}

resource "aws_s3_bucket" "s3_bucket" {
   provider = var.provider
   region = var.bucket_region
   bucket = var.bucket_name
}

我从来没有在资源中明确设置过这样的提供者,但基于它可能工作的文档。


推荐阅读