AWS Datapipeline完成后删除已处理的源文件

时间:2017-07-27 15:33:52

标签: amazon-web-services amazon-data-pipeline

第三方每天向我发送一个日志文件上传到S3存储桶。我尝试使用DataPipeline将它们转换为与awk略有不同的格式,将新文件放回S3,然后将原始文件移到一边,这样我就不会在明天再次处理相同的文件

这样做有干净的方法吗?目前我的shell命令看起来像:

#!/usr/bin/env bash
set -eu -o pipefail

aws s3 cp s3://example/processor/transform.awk /tmp/transform.awk

for f in "${INPUT1_STAGING_DIR}"/*; do
  basename=${f//+(*\/|.*)}
  unzip -p "$f" | awk -f /tmp/transform.awk | gzip > ${OUTPUT1_STAGING_DIR}/$basename.tsv.gz
done

我可以使用aws cli工具在循环的每次迭代中将源文件移到一边,但这看起来很不错 - 如果我的循环在处理过程中途中断,那些早期文件将会丢失。

1 个答案:

答案 0 :(得分:0)

几种可能的解决方案:

  1. 在s3存储桶上创建一个触发器。每当任何对象添加到存储桶时 - >调用lambda函数,它可以是执行转换的python脚本 - >复制回另一个桶。现在,再次在另一个桶上调用lambda函数,该函数从第一个桶中删除文件。

  2. 我个人觉得;你所取得的成就是足够好的......你需要的是shell脚本中的异常处理并且只有在成功创建输出文件时才删除文件(永不松散的数据)(可能你也可以检查输出文件的大小)

相关问题