当对象不存在时使用 terraform 安全读取 s3_bucket_object 失败
Fail safe reading s3_bucket_object with terraform when object doesn't exist
我想从 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 meta-argument.
启用的
我想从 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 meta-argument.
启用的