第4章. AWS Lambda関数を運用する
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
この章では、JavaベースのAWS Lambda関数をビルドしてパッケージ化する、より高度な方法を紹介する。 また、第2章で初めて使用した、AWSのインフラストラクチャー・アズ・コードツール、SAMのサーバーレス指向バージョンについて、より詳しく説明する。 最後に、Lambda関数とサーバーレスアプリケーションが、AWSのセキュリティモデルによってどのような影響を受けるか、また、SAMを使用してサーバーレスアプリケーションに最小特権セキュリティモデルを自動的に適用する方法について説明する。
先に進む前に、もしまだそうしていなければ、本書のコード例をダウンロードすることをお勧めする。
ビルド&パッケージ
Lambdaプラットフォームは、ユーザから提供されるすべてのコードがZIPアーカイブファイルの形式であることを想定している。 使用しているランタイムと実際のビジネスロジックによって、そのZIPファイルはソースコード、コードとライブラリ、またはJavaの場合はコンパイルされたバイトコード(クラスファイル)とライブラリで構成される。
Javaエコシステムにおいて、私たちはしばしばコードをJAR(Java ARchive)ファイルにパッケージ化し、java -jar コマンドで実行したり、他のアプリケーションでライブラリとして使用したりする。 JARファイルは、単にZIPファイルにメタデータを追加したものであることがわかった。Lambdaプラットフォームは、JARファイルを特殊化することはなく、他のLambda言語ランタイムと同じように、ZIPファイルとして扱う。
、Mavenのようなツールを使えば、コードが依存する他のライブラリを指定し、Mavenにそれらのライブラリ(およびそれらのライブラリが持つ可能性のある相互依存関係)の適切なバージョンをダウンロードさせ、コードをJavaクラスファイルにコンパイルし、すべてを1つのJARファイル(しばしばuberjarと呼ばれる)にパッケージすることができる。
ユーバーヤーズ
第2章と第3章では、 、ユーバーイェー・アプローチを使用しているにもかかわらず、先に進む前に呼びかけておく価値のある問題がいくつかある。
まず、uberjarのアプローチでライブラリを解凍し、ターゲットのuberjarファイルにライブラリを重ね合わせる。 以下の例では、ライブラリAにはクラス・ファイルとプロパティ・ファイルが含まれている。 ライブラリBには、別のクラス・ファイルと、ライブラリAのプロパティ・ファイルと同じ名前のプロパティ・ファイルが含まれている。
$ jar tf LibraryA.jar book/ book/important.properties book/A.class $ jar tf LibraryB.jar book/ book/important.properties book/B.class
これらのJARファイルを使用してuberjarを作成した場合(前の章で行ったように)、結果には2つのクラス・ファイルと1つのプロパティ・ファイルが含まれることになるが、プロパティ・ファイルはどのソースJARのものなのだろうか?
$ jar tf uberjar.jar book/ book/important.properties ...