Amazon web services 当对象不'时,使用terraform读取s3#U bucket#U对象的故障保护;不存在

Amazon web services 当对象不'时,使用terraform读取s3#U bucket#U对象的故障保护;不存在,amazon-web-services,terraform,terraform-provider-aws,Amazon Web Services,Terraform,Terraform Provider Aws,我想安全地从s3\u bucket\u对象加载数据。这意味着如果s3对象不存在,则提供一个默认值。有办法吗 如果指定不存在的密钥,则会失败 data "aws_s3_bucket_object" "deployed_builds_s3" { bucket = my_bucket_name key = "path/to/file.txt" } 错误: Error: Failed getting S3 object: Not

我想安全地从
s3\u bucket\u对象加载数据。这意味着如果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对象是否也有类似的功能?

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

data "aws_s3_bucket_objects" "my_object" {
  bucket = my_bucket_name
  prefix = "path/to/file.txt"
}
如果对象存在,则它们的
属性将有1个元素。随后,您可以有条件地执行aws\U s3\U bucket\U对象,如下所示:

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,则将执行“关于”。这是通过元参数启用的。

再次感谢@Marcin!这很有效,仅供其他人参考,以获取条件文件内容my
locals
现在看起来是这样的:
file\u content=length(data.aws\u s3\u bucket\u object.deployed\u builds\u s3)==1?data.aws_s3_bucket_对象。已部署的\u生成\u s3[0]。正文:“”