与aws提供程序区域不同的terrain aws_s3_bucket区域在同一提供程序区域中创建

时间:2020-06-04 22:58:28

标签: amazon-web-services amazon-s3 terraform-provider-aws

我想用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
}

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

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的作用)

  • terraform v0.12.24
  • aws v2.64.0

2 个答案:

答案 0 :(得分:2)

我认为您需要针对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
}

我从来没有像在资源中那样显式地设置提供程序,但是根据文档它可能会起作用。

答案 1 :(得分:0)

s3存储桶资源中的region属性未按预期分析,存在一个错误:

https://github.com/terraform-providers/terraform-provider-aws/issues/592

需要多提供商方法。