当对象不存在时使用terraform失败安全读取s3_cucket_object

问题描述

我想从s3_bucket_object安全地加载数据。意思是如果s3对象不存在,请提供默认值。有办法吗?

如果指定了不存在的密钥,则会失败

data "aws_s3_bucket_object" "deployed_builds_s3" {
  bucket = my_bucket_name
  key    = "path/to/file.txt"
}

错误:

Error: Failed getting S3 object: NotFound: Not Found

例如,我知道可以处理本地文件:

locals {
  file_content = fileexists("file.txt") ? file("file.txt") : ""
}

s3对象有类似的东西吗?

解决方法

是的,您可以在aws_s3_bucket_objects的帮助下完成此操作。具体来说,首先您将使用感兴趣的对象键对其进行调用:

data "aws_s3_bucket_objects" "my_object" {
  bucket = my_bucket_name
  prefix = "path/to/file.txt"
}

如果对象存在,则它们的keys属性将包含1个元素。随后,您可以有条件地执行aws_s3_bucket_object,如下所示:

data "aws_s3_bucket_object" "deployed_builds_s3" {

  count  = length(data.aws_s3_bucket_objects.my_object.keys)

  bucket = data.aws_s3_bucket_objects.my_object.keys[0]
  key    = data.aws_s3_bucket_objects.my_object.bucket
}

如果找到的键数大于0,将执行about。通过count元参数启用。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...