【发布时间】:2020-11-25 17:51:19
【问题描述】:
我正在寻找建议并帮助解决我在为单个环境中的多个环境和多个区域设置和管理存储桶和存储桶策略创建时遇到的问题。
我有 4 个 AWS 账户(dev、stg、prod1、prod2,它是 prod1 的副本)。在 prod1 中,我们有两个 kubernetes 集群 aws-us-prod1 和 aws-eu-prod1。这两个集群完全相互独立,只为这些地区的客户提供服务。
我有一个应用程序在这两个不同的集群(aws-us-prod1 和 aws-eu-prod1)上运行,需要将内容写入 S3 存储桶。但是这两个集群共享一个 AWS 账户 (prod1)。
我正在尝试编写一些 terraform 资源自动化来管理它,但我无法可变地控制存储桶放入的区域。latest doc 表明有一个 region attribute 但它没有'不起作用,因为提供程序是如何使用 aws provider region attribute 实现的。
我想做的是这样的:
variable "buckets" {
type = map(string) # e.g. buckets='{"a-us-prod1": "us-west-2", "a-eu-prod1":"eu-west-2"}'
}
resource "aws_s3_bucket" "my_buckets" {
for_each = var.buckets
bucket = each.key
region = each.value
}
resource "aws_s3_bucket_policy" "my_buckets_policy" {
for_each = aws_s3_bucket.my_buckets
bucket = each.value.id
policy = ...
}
我尝试过使用multiple providers using aliases,但是您不能以编程方式根据您正在迭代的变量的值来使用提供程序。组织此项目和资源以完成此任务的正确方法是什么?
我遇到的这些问题与此有关: https://github.com/hashicorp/terraform/issues/3656 https://github.com/terraform-providers/terraform-provider-aws/issues/5999
【问题讨论】:
-
我想同时对两个区域应用更改是否是个好主意。如果你要分开这些(也许你的目录结构会变成
account/region/cluster或类似的东西),那么它会变得更简单,并且还能最小化爆炸半径。
标签: amazon-web-services terraform terraform-provider-aws