ソースコードを書く
ソースはAWS Toolkit for Eclipseを導入したEclipseから「New lambda Java Procjet」で作成したS3のイベントを拾うhandlerです。
実装は何でも良いです。
通例だとHello Worldかhogehogeなので、Hello hogehogeとログに吐きます。
Jarを作ります
mavenを使っているのでゴールをpackageにしてjarを作ればいいんでしょ?
と、いつもの癖でjarを作ってしまいましたが、間違いです。
AWS Lambda 開発者ガイドの記載を読みましょう
Lambda 関数
└Lambda 関数のビルド
└デプロイパッケージの作成
└デプロイパッケージの作成 (Java)
└Maven および Eclipse IDE を使用した .jar デプロイパッケージの作成 (Java)
要約すると
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.1.0</version>
<scope>compile</scope>
</dependency>
と
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
</plugin>
</plugins>
</build>
をpom.xmlに追加します。
今回はEclipseから「New lambda Java Procjet」でプロジェクトを作成しているので、aws-lambda-java-coreとaws-lambda-java-eventsが既にdependencyに入っています。
あとはゴールにpackage shade:shadeを入力するとスタンドアロンjarの出来上がり...って59MBもありますが?
何故かと思いpom.xmlを見るとdependencyにaws-java-sdkが入っていることが原因のようです。
これの依存関係階層は、かなり強烈なので巨大なjarが出来るのは当然ですね。
という事で、aws-java-sdkをdependencyから外してスタンドアロンjarを作成した所、7.5MBのjarに落ち着きました。
deployするjarが出来上がったので、次はAWS側の設定です。