このようなコードがあるとします。AWSラムダの同時実行動作
public class MyHandler {
private Foo foo;
public void handler(InputStream request, OutputStream response, Context context) {
...
}
}
はFoo fooのは、プールされたデータベース接続を作成するの面倒を見ます。
これはAWS Lambdaでどのように動作するかを理解しようとしています。私が正しく理解していれば、fooは複数の呼び出しで共有されます。最初のものはコンテナにロードする必要があり、その後fooが既に初期化されているため、後でコンディションが速くなるため、時間がかかります。これは、私のハンドラが一定期間活動しなくなってから追い出されるまではそうです。
したがって、順次呼び出しでは、同じオブジェクトを使用しますか?以前の関数呼び出しで作成された/ tmpにアクセスできますか?
並列呼び出しはどうですか?ドキュメントごとに、各ラムダ関数は独自のコンテナ、独自のリソース、および独自の/ tmpで実行する必要があるため、コンテナ全体を複製しますか?
非アクティブの後にハンドラが追い出される場合は、プールされたすべての接続を閉じるためにコールできるコールバック関数がJavaにありますか?
並列呼び出しの場合、コンテナの重複が発生したときにデータベース接続を作成する通常のオーバーヘッドがありますか?つまり、AWS Lambdaのプール接続を作成することはありませんか? – Prabhat
すでに実行されているコンテナが十分にない場合は、作成された新しいコンテナに対してデータベース接続を作成するオーバーヘッドが発生します。しばらくの間並列呼び出しを続けると、それらのコンテナが再利用されます。つまり、ハンドラの外部にDB接続を作成する理由があります。しかし、ラムダ関数の中で接続プールを使用している場合は、プールのサイズを1にしたいと思っています。 –
ありがとうございました。それは物事をクリアする。基本的に、そのようなDBに直接接続を作成し、プールされていません。私が正しく理解していれば、パラレル環境での最初の呼び出しによって2回目の呼び出しが連続していても、2回目の呼び出しが '/ tmp'に格納されたデータにアクセスする保証はありません。 '/ tmp'の実際の使用例が不思議だ – Prabhat