首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform:如何在创建s3访问点之前检查它是否存在?

Terraform:如何在创建s3访问点之前检查它是否存在?
EN

Stack Overflow用户
提问于 2022-08-16 00:29:19
回答 1查看 106关注 0票数 1

我有一个资源,根据所提供的输入创建多个s3访问点。输入是一个映射,其中s3 uri作为键,解析的桶名作为值。

示例:

代码语言:javascript
复制
{
"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迭代映射中的每个元素来创建s3访问点。不幸的是,映射中有2个"my_bucket“值,这意味着它将尝试为指定的桶创建两次s3访问点,从而错误地输出消息:

代码语言:javascript
复制
AccessPointAlreadyOwnedByYou: Your previous request to create the named accesspoint succeeded and you already own it.

如何在创建资源之前先检查访问点是否存在?

代码示例:

代码语言:javascript
复制
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")
}
代码语言:javascript
复制
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 }
}

期望产出:

代码语言:javascript
复制
{
"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>
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-16 01:03:44

我会倒置你的uri_bucket_map

代码语言:javascript
复制
locals {
  uri_bucket_map_inverse = {
    for k,v in local.uri_bucket_map: v => k...
  }
}

给予:

代码语言:javascript
复制
{
  "my_bucket" = [
    "s3://my_bucket/model1.tar.gz",
    "s3://my_bucket/model3.tar.gz",
  ]
  "my_bucket_2" = [
    "s3://my_bucket_2/model2.tar.gz",
  ]
}

然后创建访问点,如下所示:

代码语言:javascript
复制
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")
}

输出将同时使用AP和倒排列表图:

代码语言:javascript
复制
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
                          }  
                     ]...)
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73367628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档