簡體   English   中英

Terraform:如何在創建之前檢查 s3 接入點是否存在?

[英]Terraform: How to check if s3 access point exists before creating it?

我有一個資源可以根據提供的輸入創建多個 s3 接入點。 輸入是一個 map,其中 s3 uri 作為鍵,解析后的存儲桶名稱作為值。

例子:

{
"s3://my_bucket/model1.tar.gz" -> "my_bucket",
"s3://my_bucket_2/model2.tar.gz" -> "my_bucket_2",
"s3://my_bucket/model3.tar.gz" -> "my_bucket"
}

然后我使用for_each遍歷 map 中的每個元素以創建 s3 接入點。 不幸的是,map 中有 2 個“my_bucket”值,這意味着它將嘗試為該指定存儲桶創建 s3 訪問點兩次,因此會出錯並顯示以下消息:

AccessPointAlreadyOwnedByYou: Your previous request to create the named accesspoint succeeded and you already own it.

在創建資源之前如何檢查訪問點是否存在?

代碼示例:

resource "aws_s3_access_point" "s3_access_point" {
  for_each = var.create ? local.uri_bucket_map : {}

  bucket = each.value
  name   = format("%s-%s", each.value, "access-point")
}

output "s3_access_point_arn" {
  description = "The arn of the access point"
  value       = { for uri, ap in aws_s3_access_point.s3_access_point : uri => ap.arn }
}

所需的 Output:

{
"s3://my_bucket/model1.tar.gz" -> <access point uri>,
"s3://my_bucket_2/model2.tar.gz" -> <access point uri>,
"s3://my_bucket/model3.tar.gz" -> <access point uri>
}

我會反轉你的uri_bucket_map

locals {
  uri_bucket_map_inverse = {
    for k,v in local.uri_bucket_map: v => k...
  }
}

給予:

{
  "my_bucket" = [
    "s3://my_bucket/model1.tar.gz",
    "s3://my_bucket/model3.tar.gz",
  ]
  "my_bucket_2" = [
    "s3://my_bucket_2/model2.tar.gz",
  ]
}

然后只需將訪問點創建為:

resource "aws_s3_access_point" "s3_access_point" {
  for_each = var.create ? local.uri_bucket_map_inverse : {}

  bucket = each.key
  name   = format("%s-%s", each.key, "access-point")
}

output 將同時使用 AP 和倒排列表 map:

output "s3_access_point_arn" {
  description = "The arn of the access point"
  value       = merge([for bucket_name, ap in aws_s3_access_point.s3_access_point:
                          { for uri in local.uri_bucket_map_inverse[bucket_name]: 
                                uri => ap.arn
                          }  
                     ]...)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM