json - 如何以模块化形式在 Terraform 中使用 s3 生命周期规则,即在单独的 JSON 中引用?

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

目前,我在 s3 资源下指定生命周期规则:

resource "aws_s3_bucket" "bucket-name" {
  bucket = "bucket-name"
  
  lifecycle_rule {
    id = "Expiration Rule"
    enabled = true
    prefix = "reports/"

  expiration {
    days = 30
    }
  }
}

...但我想必须有一种方法可以使其更加模块化,例如将生命周期规则放入单独的 JSON 中,以便我可以为多个 s3 存储桶引用它并减少编辑每个资源的需要。我知道一般如何执行此操作,并且已经使用其他资源完成了此操作,如下所示:

resource "aws_iam_policy" "devops-admin-write" {
  name = "devops-admin-s3"
  description = "Devops-Admin group s3 policy."
  policy = file("iam_policies/devops-admin-write.json")
}

...区别在于“lifecycle_rule”是一个参数而不是一个属性 - 我不清楚如何使其发挥作用。 Google-Fu 也没有给出任何明确的答案。

最佳答案

您可以使用dynamic blocks您使用通用local变量执行。 因此,您只需要更改局部变量,更改就会反射(reflect)在使用该变量的所有地方。

为了使其更易于维护,我建议构建一个模块并重用该模块或使用现有模块。

但是 locals + dynamic 实现可能如下所示:

locals {
  lifecycle_rules = [
    {
      id      = "Expiration Rule"
      enabled = true
      prefix  = "reports/"
      expiration = {
        days = 30
      }
    }
  ]
}

resource "aws_s3_bucket" "bucket-name" {
  bucket = "bucket-name"
  
  dynamic "lifecycle_rule" {
    for_each = local.lifecycle_rules
   
    content {
      id      = lifecycle_rule.each.id
      enabled = lifecycle_rule.each.enabled
      prefix  = lifecycle_rule.each.prefix

      expiration {
        days = lifecycle_rule.each.expiration.days
      }
    }
  }
}

这不会检查错误,当然也不完整 - 它只是实现了您的示例。

查看 our terraform s3-bucket module 中更完整的通用示例: find code here

关于json - 如何以模块化形式在 Terraform 中使用 s3 生命周期规则,即在单独的 JSON 中引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64528488/

相关文章:

django - 在 S3 存储桶 CORS 配置中不允许使用 xml 而是要求使用 json

ios - 使用签名请求从 React Native (iOS) 直接发布到 AWS S3

amazon-web-services - 自定义属性未传递到由 AWS Cognito 创建的 ID_TOKEN

javascript - Web Workers - JSON 的可传输对象

javascript - 为什么 JSON.parse 不起作用?

java - AngularJS 使用 JAX-RS Rest Web 服务

amazon-web-services - 多个社交提供商的 AWS Cognito 联合身份 : better to merge identities or keep them separate?

node.js - 在 Nodejs 中获取 POST 请求的正文(Amazon SNS)

javascript - 如何删除aws s3存储桶中具有相同键的多个对象

javascript - 如何使用 Angular JS 常量值