我正在处理添加到S3的XML文件并将结果写入firehose,并将结果存储在同一个S3存储桶中,但目标文件名必须采用特定格式。我正在检查文档,我看不到任何设置文件名格式的方法。 我能找到的最近的是firehose FAQ
问:Amazon Kinesis Data Firehose提供的Amazon S3对象的命名模式是什么?
Amazon S3对象名称遵循DeliveryStreamName-DeliveryStreamVersion -YYYY-MM-DD-HH-MM-SS-RandomString模式,其中DeliveryStreamVersion以1开头,并且对于传递流的每次配置更改都增加1。您可以使用Firehose控制台或UpdateDestination操作更改传送流配置(例如,S3存储桶的名称,缓冲提示,压缩和加密)。
答案 0 :(得分:3)
如果您使用静态命名,可以通过Firehose控制台或UpdateDestination操作指定它。
但是,如果你正在寻找一些动态命名,不幸的是,目前它是不可能的。有关详细回答,请参阅此问题 - Storing Firehose transfered files in S3 under custom directory names
答案 1 :(得分:2)
我也对不能动态指定文件名感到不满意,因此我做了一个lambda函数来重命名Kinesis流输出的文件。这些是我采取的步骤
import boto3
import json
def lambda_handler(event, context):
key = event["Records"][0]["s3"]["object"]["key"]
bucket=event["Records"][0]["s3"]["bucket"]["name"]
s3resource = boto3.resource('s3')
obj = s3resource.Object(bucket, key)
body = obj.get()['Body'].read()
dic = json.loads(body)
my_new_file_name= dic["my_new_file_name"]
s3resource.Object(bucket, str(my_new_file_name).copy_from(CopySource=f'{bucket}/{key}')
s3resource.Object(bucket, key).delete()