如何解决如何以模块化形式在Terraform中使用s3 lifeycle规则,即在单独的JSON中引用?
当前,我在s3资源下指定lifecycle_rule:
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
变量一起使用。
因此,您只需要更改局部变量,更改便会在使用此变量的所有位置反映出来。
为使其更易于维护,我建议构建一个模块并重新使用该模块或使用现有的模块。
但是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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。