2017-06-27 2 views
1

AWS(lambda + s3 + apiGateway)を使用してマイクロサービスAPIを構築しようとしていますが、私のすべてのラムダが同じ重量を持っていることに気づいたので、必要なリソースの代わりにすべてのラムダにフルプロジェクトをアップロードしているようです。ラムダ関数の重みを最小限に抑えるにはどうすればいいですか?


enter image description here

私は機能ごとに必要なだけのリソースをアップロードする方法はありますか?これにより実行時間が最小限に抑えられますか?それは価値があるのですか?

+0

「重量」とはどういう意味ですか?関数のサイズを意味しますか?あなたは同じサイズで複数の機能を持つことを心配していますか? –

+0

Serverlessのような特定のフレームワークを使用していますか? – Ashan

+0

私は、Spring以外のフレームワークを使用していません。そう、未使用のコードがハンドラにアップロードされていることを意味します。 – Jnewbie

答えて

1

は2部でこれに答えるために行く参照してください。

(1)義務は、「なぜ、あなたは気にしていますか?」

私は本当に心配していたので、これを尋ねます。しかし、テストした後、アップロードされたバンドルのサイズ(ラムダディストリビューションバンドルのlibフォルダにあるjarファイル)は、初期アップロード時間(おそらくS3の使用量) )。

ナノプロジェクトとバンドルがたくさんあるのではなく、私は単一のJava Lambda APIモジュールを持っており、すべてのラムダに対して同じアーティファクトをアップロードします。

何らかの理由で(マイクロサービスアーキテクチャ、コードの分離など)何らかの理由で分離するのが意味がある場合は、分割する予定です。

これで、Javaベースのlambdaに本当に影響するようなものは、クラスの読み込み時間です。あなたは、春を使用すると述べました。 Springの設定を読み込まないことをお勧めします。本当に必要のないコードを実行することになります。

あなたのラムダは100msの範囲内にあるのが理想です。 私はAWS SDKを使用していて、AWSクライアントの初期化に13秒かかっていました。 (13000ms)。私は、ノードのパイソンを使用してに切り替えた場合、それは56msに行ってきました...

あなたは時間で充電を取得し、1000倍の倍率は笑い事であること:)

(2)あなたが決めた場合には覚えておいてください分割する際には、子プロジェクトと一緒にgradle配布プラグインを使用して、各子プロジェクトと子プロジェクトのジップ配信を「軽く」することをお勧めします。私はこの道を歩いていましたが、実際にはコンポーネントを本当に分割していることに気付きました...そして、私はプロジェクト間で構成を複製するかどちらかです。また、プロジェクトの依存関係を作成した場合、依存関係ツリー全体を再度バンドルすることになります。

gradle/mavenに依存せずにチェリーピックする必要があることが既に分かっている場合は、gradle zipタスクを作成して異なるLambdaディストリビューションパッケージを作成することができます。

AWSドキュメント:http://docs.aws.amazon.com/lambda/latest/dg/create-deployment-pkg-zip-java.html

+0

あなたは、ドキュメントをリンクすることができた場合: http://docs.aws.amazon.com/lambda/latest/dg/create-deployment-pkg-zip-java.html 次のユーザーのためのあなたの答えに、それはいいだろう。 ありがとう – Jnewbie

1

ラムダ関数ごとに異なる3つのjarファイルを作成してビルドする必要があります。それぞれのjarファイルにクラスとリソースが含まれているスーパーセットjarを作成するのではなく、ラムダ関数。

この方法では、瓶はより軽くなります。ラムダjarを構築の詳細については

Building AWS Lambda jar

関連する問題