下面的脚本旨在获取S3日志桶中每个条目的内容,并将其保存到一个文件
#!/bin/bash
#
# Get the content of each entry in the S3 logging bucket and save it to a file
#
LOGGING_BUCKET=dtgd-hd00
aws s3api list-objects-v2 --bucket "$LOGGING_BUCKET" | jq '.Contents' >> entries.json &&
keys=$(jq '.[].Key' entries.json )
for key in $keys;do
echo $key
aws s3api get-object --bucket "$LOGGING_BUCKET" --key "$key" ouput_file_"$key"
done
执行后得到:
调用GetObject操作时发生错误(NoSuchKey):指定的键不存在。
"dtgd-hd00/logs2021 - 08 - 10 - 05 - 43 - 18 - 01393 - d975686fa45"
但是,如果我从CLI中执行:
aws s3api get-object --bucket dtgd-hd00
--key "dtgd-hd00/logs2021-08-10-05-43-18-01393D975686FA45"
output_file_"$key"
它工作完美,获取内容并按要求将其保存到输出文件。
怎么了??
变量$key
将是一个引号字符串,因此您基本上是双引号字符串,并且S3无法找到带有引号的"key_name"
。您可以在传递它们之前删除引号:
for key in $keys;do
key="${key%"}"
key="${key#"}"
aws s3api get-object --bucket "$LOGGING_BUCKET" --key "$key" ouput_file_"$key"
done
当然,使用aws s3 sync
会更高效,并完全避免这个问题。