2017-07-27 9 views
0

第三者がS3バケットにログファイルの毎日のアップロードを送信します。私は、DataPipelineを使用してawkと少し異なるフォーマットに変換しようとしています。新しいファイルをS3に戻し、元のファイルを別の場所に移動して、明日も同じファイルを処理しないようにします。AWS Datapipelineの完了後に処理されたソースファイルを削除します

これを行うにはきれいな方法がありますか?私のループが途中で処理を死亡した場合、それらの以前の - 私は、ループの各反復の上に置き、ソースファイルを移動するには、AWSに、CLIツールを使用することができますが、それはフレーク状思わ

#!/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 

:現在、私のシェルコマンドのようになりますファイルが失われる可能性があります。

答えて

0

いくつかの可能な解決策:任意のオブジェクトがバケットに追加されるたび

  1. は...あなたのS3バケットにトリガーを作成します。 - >変換を実行Pythonスクリプトすることができラムダ関数を呼び出す - >コピー別のバケットに戻す。今、この他のバケット上で、最初のバケットからファイルを削除するlambda関数が呼び出されます。

  2. 私は個人的に感じます。あなたが達成したことは十分です。あなたが必要とするのは、出力ファイルが正常に作成されたときにのみ、シェルスクリプトの例外処理とファイルの削除(データの緩みがない)です。

+0

(2)を使用すると、OUTPUT1_STAGING_DIRを使用して実行終了時にファイルをS3に同期させることに心配しています。パイプラインが途中で消滅してもファイルが失われる可能性があります。または、OUTPUT1_STAGING_DIRが実際のS3マウントであり、そこに書かれたものはすべて宛先S3バケットで同期可能ですか? –

関連する問題