我有一個具有以下“檔案夾”結構的 S3 存盤桶:
Bucket1----> /Partner1 ----> /Client1 ----> /User1
| | |--> /User2
| |
| |--> /Client2 ----> /User1
|
|--> /Partner2 ----> /Client1 ----> /User1
等等。
我正在嘗試設定從該存盤桶到另一個存盤桶的復制,以便放置一個檔案
Bucket1/Partner1/client1/User1/
應該復制到
Bucket2/Partner1/client1/User1/,
Bucket1/Partner2/client1/User2/
應該復制到
Bucket2/Partner2/client1/User2/,
等等。
我正在嘗試使用以下 terraform 代碼來實作此目的:
locals {
s3_folders = [
"Partner1/client1/User1",
"Partner1/client1/User2",
"Partner1/client1/User3",
"Partner1/client1/User4",
"Partner1/client1/User5",
"Partner1/client2/User1",
"Partner1/client3/User1",
"Partner2/client1/User1",
"Partner3/client1/User1"
]
}
resource "aws_s3_bucket_replication_configuration" "replication" {
for_each = local.s3_input_folders
depends_on = [aws_s3_bucket_versioning.source_bucket]
role = aws_iam_role.s3-replication-prod[0].arn
bucket = aws_s3_bucket.source_bucket.id
rule {
id = each.value
filter {
prefix = each.value
}
status = "Enabled"
destination {
bucket = "arn:aws:s3:::${var.app}-dev"
storage_class = "ONEZONE_IA"
access_control_translation {
owner = "Destination"
}
account = var.dev_account_id
}
delete_marker_replication {
status = "Enabled"
}
}
}
這不是回圈并創建 10 個不同的規則,而是在每次運行時覆寫相同的規則,結果我只得到一個規則。
uj5u.com熱心網友回復:
您應該使用動態塊:
resource "aws_s3_bucket_replication_configuration" "replication" {
depends_on = [aws_s3_bucket_versioning.source_bucket]
role = aws_iam_role.s3-replication-prod[0].arn
bucket = aws_s3_bucket.source_bucket.id
dynamic "rule" {
for_each = toset(local.s3_input_folders)
content {
id = rule.value
filter {
prefix = rule.value
}
status = "Enabled"
destination {
bucket = "arn:aws:s3:::${var.app}-dev"
storage_class = "ONEZONE_IA"
access_control_translation {
owner = "Destination"
}
account = var.dev_account_id
}
delete_marker_replication {
status = "Enabled"
}
}
}
}
uj5u.com熱心網友回復:
謝謝,馬爾辛。您提到的動態塊構造可用于創建內容塊,但它無法應用,因為 AWS 需要多個復制規則來區分優先級。所以一些輕微的修改可以實作這一點:
locals {
s3_input_folders_list_counter = tolist([
for i in range(length(local.s3_input_folders)) : i
])
s3_input_folders_count_map = zipmap(local.s3_input_folders_list_counter, tolist(local.s3_input_folders))
}
resource "aws_s3_bucket_replication_configuration" "replication" {
depends_on = [aws_s3_bucket_versioning.source_bucket]
role = aws_iam_role.s3-replication-prod[0].arn
bucket = aws_s3_bucket.source_bucket.id
dynamic "rule" {
for_each = local.s3_input_folders_count_map
content {
id = rule.key
priority = rule.key
filter {
prefix = rule.value
}
status = "Enabled"
destination {
bucket = "arn:aws:s3:::${var.app}-dev"
storage_class = "ONEZONE_IA"
access_control_translation {
owner = "Destination"
}
account = var.dev_account_id
}
delete_marker_replication {
status = "Enabled"
}
}
}
}
它創建了如下規則:
rule {
id = "0"
priority = 0
status = "Enabled"
...
}
rule {
id = "1"
priority = 1
status = "Enabled"
...
}
等等...
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/468062.html
標籤:亚马逊网络服务 亚马逊-s3 地形 terraform-provider-aws
