Symfoware

Symfowareについての考察blog

AWS Lambda + Javaで同梱した設定ファイルを読み込む

GradleでLambda + Javaのデプロイパッケージを作成してみました。
GradleでAWS Lambda + Java用のデプロイパッケージを作成

どうしても設定ファイルを同梱して、Lambda上で読み込みたい要件があったので試してみます。


作成するサンプル



「name.txt」というテキストファイルを読み込み、内容を応答します。

イメージはこんな感じ。
※このプログラムは動きません。


  1. package example;
  2. import java.nio.file.Files;
  3. import java.nio.file.Paths;
  4. import com.amazonaws.services.lambda.runtime.Context;
  5. import com.amazonaws.services.lambda.runtime.RequestHandler;
  6. public class HelloPojo implements RequestHandler<RequestClass, ResponseClass>{
  7.     public ResponseClass handleRequest(RequestClass request, Context context){
  8.         String name = "";
  9.         try {
  10.             name = new String(Files.readAllBytes(Paths.get("name.txt")));
  11.         } catch (Exception e) {
  12.             e.printStackTrace();
  13.         }
  14.         String greetingString = String.format("Hello %s", name);
  15.         return new ResponseClass(greetingString);
  16.     }
  17. }



name.txtをどう配置したらよいのか。
また、Lambdaで実行する場合のパスをどうやって取得すればよいのか悩みます。




resouceとClassLoader



まず、テキストファイルをアップロード用のzipファイルに含める方法。
Gradle使い方メモ

src/main/resourcesに配置すれば、狙いの動作になりそうです。

Lambdaで実行する際のパスの取得についてはこちらが参考になりました。
Dynamically Loading config files into AWS Lambda function

ClassLoaderからgetResourceすればURLが取得できそうです。

これらを踏まえ、まずsrc/main/resourcesにname.txtを作成。
「Symfoware」という文字を記載しておきます。

887_01.png

これでデブロイ用のzipファイルに含まれるようになりました。

887_02.png


プログラムはこのようになりました。
※前回記事からの差分です。


  1. package example;
  2. import java.net.URL;
  3. import java.nio.file.Files;
  4. import java.nio.file.Paths;
  5. import com.amazonaws.services.lambda.runtime.Context;
  6. import com.amazonaws.services.lambda.runtime.RequestHandler;
  7. public class HelloPojo implements RequestHandler<RequestClass, ResponseClass>{
  8.     public ResponseClass handleRequest(RequestClass request, Context context){
  9.         URL url = getClass().getClassLoader().getResource("name.txt");
  10.         String filePath = url.getPath();
  11.         String name = "";
  12.         try {
  13.             name = new String(Files.readAllBytes(Paths.get(filePath)));
  14.         } catch (Exception e) {
  15.             e.printStackTrace();
  16.         }
  17.         String greetingString = String.format("Hello %s", name);
  18.         return new ResponseClass(greetingString);
  19.     }
  20. }



実行してみると、狙い通りテキストファイルの内容が表示されました。

887_03.png
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2018/05/22(火) 22:56:16|
  2. Java
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<AWS API Gateway経由でLambda(Java)を呼び出す | ホーム | GradleでAWS Lambda + Java用のデプロイパッケージを作成>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
https://symfoware.blog.fc2.com/tb.php/2187-996f8c4b
この記事にトラックバックする(FC2ブログユーザー)