2016-06-23 10 views
10

私はDynamoDBから読み込み、最終的にs3にアップロードされる/ tmpに大きなファイル(〜500M)を作成するラムダ機能を持っています。アップロードされると、lambdaは/ tmpからファイルをクリアします(インスタンスが再利用される可能性が高いため)/tmpが再利用されたときのラムダのスケール方法は?

この機能は、待ち時間を無視しても実行に約1分かかります。

このシナリオでは、< 1mで関数を再度呼び出そうとすると、/ tmpに書き込むのに十分な領域があるかどうかはわかりません。私の機能は失敗します。

質問: 1.この種のシナリオでは、既知の回避策は何ですか? (潜在的に/ tmpに空き領域を増やすか、新しい実行ごとにclean/tmpが指定されていることを確認してください) 2. Lambdaのファイル作成と管理に関するベストプラクティスは何ですか? 3.別のEBSまたは他のストレージをラムダに接続して実行できますか? 4./tmpを使用する代わりに私の関数がs3に直接書き込むことができるように、s3へのアクセスのようなファイルシステムを持つ方法はありますか?

+3

私はあなたがFaaS/Amazon Lambdaを使っていることを考えると、なぜファイル(またはファイルシステム)が必要なのかわかりません。 DynamoDBの出力をディスクに書き込まずにS3にストリームするようにコードを書き直せますか? –

+0

多くの処理が必要です。ダイナモからs3への単純なダンプではありません – sandeepzgk

+0

おそらく限界(512M)に達しているのでしょうか? https://docs.aws.amazon.com/lambda/latest/dg/limits.htmlメモリ内での作業や、間に一時的な記憶域を確保するための3番目のサービスを追加すると効果的です。 –

答えて

4

AWS Lambdaの2つの並行実行インスタンスが/ tmpや他のローカルリソースを完全に分離して実行する必要があるため、これらのインスタンスを共有することは考えられません。あなたのエラーには別の説明が必要です。つまり、のAWS Lambdaの呼び出しが同じインスタンスを再利用した場合、/ tmpを自分でクリアするだけです。

一般に、ラムダがリソース豚であれば、に記載されているように、ECSコンテナーワーカーでその作業を行い、ラムダを使用してECSタスクを起動することをお勧めします。

+0

私は、この機能が多く再利用されているのを見ました。また、インスタンスが再利用される問題に直面しています。これは、そのインスタンスではtmpフォルダが利用できないことを意味します – sandeepzgk

+8

この回答は正しいです。インスタンスはしばしば再利用されますが、**同時にはありません。関数の終了時に一時ディレクトリをクリーンアップするか、起動時に存在するファイルを削除するだけです(つまり、初期化中ではなくハンドラが呼び出された後のことを意味します)。これは問題ではありません。 +1 –

+0

これは、リストされている4つの質問に対する回答に過ぎず、私は実際には、答えられていない質問に対する回答に興味があります。 –

0

あなたはおそらくAWSラムダの512 MB /tmp limitに入っている可能性があります。

ラムダ関数のメモリ制限が1.5 GBになる可能性があるため、ファイルをメモリに保存することで、パフォーマンスを向上させて問題を解決できます。

関連する問題