【问题标题】:How to Clone s3 bucket from one region to another using terraform如何使用 terraform 将 s3 存储桶从一个区域克隆到另一个区域
【发布时间】:2021-09-27 14:55:22
【问题描述】:

我在新加坡地区有 s3 存储桶“bucket1”,它具有生命周期策略以及加密和访问策略现在我想在另一个地区创建与存储桶 1 具有相同配置的存储桶,并且我想将新存储桶命名为 prefix-bucket1。

有人可以建议我如何使用 terraform 做到这一点吗?

【问题讨论】:

  • 您还需要克隆存储桶内容吗?
  • 您是否通过 Terraform 创建了初始存储桶?如果是这样,您应该已经拥有存储桶的 Terraform 代码,并且可以只提供不同的区域(并且名称作为存储桶名称是全局唯一的)并且它应该可以工作。如果不是这样,如果您编辑您的问题以准确显示您尝试过的内容(最好是minimal reproducible example)以及您遇到的错误,将会很有帮助。
  • 我想复制bucket1的所有设置,例如生命周期acl和加密设置。我手动创建了存储桶 1,所以我没有代码
  • 是的,我只需要相同的bucket1,名称不同,内容相同

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


【解决方案1】:

如果您只需要克隆存储桶,那么您需要两个提供者,每个提供者用于区域。

provider "aws" {
  region = "eu-west-1"
  alias = "eu-west-1"
}

provider "aws" {
  region = "eu-west-2"
  alias = "eu-west-2"
}

resource "aws_s3_bucket" "eu-west-1-bucket" {
  bucket = "bucket1"
  acl    = "private"
  ...
  providers = {
  aws = aws.eu-west-1
  }

}

resource "aws_s3_bucket" "eu-west-2-bucket" {
   bucket = "prefix-bucket1"
   acl    = "private"
   ...
   providers = {
   aws = aws.eu-west-2
   }
        
 }

您需要使用 alias 关键字命名您的提供者,并在资源块中使用正确的提供者。

【讨论】:

  • 我认为 OP 是在将所有设置从一个存储桶“克隆”到新存储桶一之后,而不仅仅是复制和粘贴它们?
  • 是的,我想复制 bucket1 的所有设置,例如生命周期 acl 和加密设置。我已经手动创建了存储桶 1,所以我没有代码。
  • @kunalborse 你试过terraform import吗?
【解决方案2】:
  1. Terraform 导入第一个存储桶
  2. 使用 terraform 创建第二个存储桶
  3. 使用aws_s3_bucket_replication_configuration 资源启用从第一个存储桶到新存储桶的复制。

这会将所有现有对象和新对象从第一个存储桶复制到您的新存储桶。您可以阅读有关 s3 复制的更多信息here

【讨论】:

    猜你喜欢
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多