PR

【AWS】Lambdaをjavaで作成するには?環境構築方法からデプロイ方法まで徹底解説!

AWS
記事内に広告が含まれています。

この記事では、AWSのサーバーレスサービスであるLambdaプログラムをJava言語で作成する方法を紹介します。

こんな悩みをお持ちの方にオススメ!
  • JavaでLambdaを作って公開するまでの手順が知りたい。
  • LambdaをJavaで作る場合のプログラムを解説してほしい。
  • LambdaをJavaでつくるのは評判はわるいけど実際のところどうなの?

インターネット上では、PythonやNode.jsでLambdaを作成されている例はよくあります。

一方で、JavaでLambdaを作成されている情報は多くありません。

この理由として、LambdaはPythoinやNode.jsといったインタプリタ型言語と相性がよい一方で、Javaのようなコンパイル型言語と相性が悪いためです。

しかし、案件によっては要員のスキルセットの関係などで、Lambda開発をJavaでしなければならないこともあります。

そこでこの記事では、LambdaをJavaで作成する方法をまとめました。

開発のための環境構築方法から、実際のプログラム開発やデプロイ方法、開発する際の注意点に至るまで紹介しています。

これからJavaでLambdaを開発する際に役立つ情報となっていますので、ぜひご覧ください。

AWS Lambdaとは

Lambdaとは、AWSが提供しているサーバーレスでプログラムを実行できるサービスです。

マイクロサービスのプログラムを構築する際に利用されます。

サーバーレスとは

サーバーやミドルウェアを用意せずにプログラムを実行させること。

Lambdaを利用する場合のメリットはこちらです。

Lambdaを利用するメリット
  • サーバーやミドルウェアの管理が不要
  • サーバーやミドルウェアの準備や設定が不要で、すぐにプログラム開発ができる
  • サーバーやミドルウェアの深い知識がなくてもプログラムを開発できる
  • サーバの脆弱性のパッチ対応、ミドルウェアの脆弱性のパッチ対応が不要(AWSが実施)

Lambdaを利用しない場合は、プログラムを動かすまでにサーバーの設定作業が必要となります。

具体的には以下の作業が必要になります。

Lambdaを利用しない場合のサーバー設定作業
  1. プログラムを動かすためのサーバの準備
  2. サーバーOSのパラメータ設定
  3. サーバ上にミドルウェアをインストール
  4. ミドルウェアのパラメータ設定

これらの作業を実施しなければ、プログラムを実行させることができません。

サーバーレスサービスのLambdaを利用することで、これらの作業を行わずにすぐにプログラムを実行させることができます。

Lambdaについて詳しく知りたい方は、AWS公式の「AWS Lambda 開発者ガイド」をご覧ください。

開発環境の構築

LambdaをJavaで開発するためには、以下の三つのステップで環境を構築します。

開発環境構築ステップ
  • Step1
    JDKのインストール
  • Step2
    Eclipseのインストール
  • Step3
    Mavenのインストール

JDKのインストール

開発言語であるJavaをインストールします。

AWSで実行されるJavaはAmazon CorretoなのでCorretoをインストールします。

AWS公式サイト」ページの手順に沿ってダウンロードしインストールしてください。

Eclipseのインストール

開発を効率的に進めるJavaの統合環境です。

Eclipseの公式サイトからダウンロードしインストールしてください。

Mavenのインストール

自動ビルドツールです。Lambdaモジュールを作成するのに利用します。

ApacheのMaven公式サイトからダウンロードしインストールしてください。

Macの場合はbrewコマンドでもインストールできます。

ターミナルで以下コマンドを実行します。

brew install maven

Mavenとは

Javaの開発時によく利用される自動ビルドツールです。似たものでgradleがあります。

コマンドでライブラリの依存関係の解決やビルドモジュールの作成ができ、昨今の開発では必須の知識となっています。

LambdaをJavaで作成する手順

LamdbaをJavaで作成するステップはこちらの三つです。

JavaでLambdaを作成する手順
  • Step1
    ローカルでLambdaプログラムの作成

    PythonやNode.jsの場合は、AWSコンソール上でプログラムを記述できますが、Javaはできません。

  • Step2
    mavenコマンドでビルドモジュール作成

    Javaはコンパイル型言語のため、ローカルでビルドモジュールの作成が必要です。

  • Step3
    AWSにデプロイ

    Step2でビルドしたモジュールをアップロードします。

順番に解説していきます。

ローカルでLamdbaプログラムの作成

ローカルでLamdbaプログラムを作成していきます。

プロジェクトの作成

eclipse上でMavenプロジェクトで作成します。

環境によっては、Mavenプロジェクトで作成ができない場合があります。

その場合は、通常のJavaプロジェクトでプロジェクト作成後、以下コマンドを実行してください。

プロジェクトのライブラリ参照先がMavenのローカルリポジトリ配下を参照するようになります。

mvn eclipse:eclipse

Lambdaプログラムの作成

Lambdaプログラムを作成します。

今回作成するプログラムは、リクエストパラメータから「name」を取得し、コンソールに表示します。

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import java.util.Map;

public class HelloWorldLambda implements RequestHandler<Map<String, String>, String> {

    @Override
    public String handleRequest(Map<String, String> input, Context context) {
        String name = input.get("name");
        System.out.println("Hello World!!");
        return "Hello, " + name;
    }
}

AWSコンソール上でエントリポイントを変更できます。

デフォルトでは「Hello」クラスの「handleReques」であるため、今回もそれを利用します。

Lambdaのエントリポイントの設定

mavenコマンドでビルドモジュールの作成

maveで以下コマンドを実行し、ビルドモジュールを作成します。

mvn build package

ビルドが成功すると以下のようにjarファイルが作成されます。

mavenコマンドによって作成されたjarファイル

これがビルドモジュールとなります。

Lambdaのデプロイ

作成したビルドモジュールをデプロイします。

上で作成したjarファイルをAWSマネジメントコンソールでアップロードします。

jarファイルをLambdaとしてデプロイする画面

以上で、Lambdaのデプロイは完了です。

動作確認

デプロイされたLambdaの動作を確認します。

AWSマネジメントコンソールからLambdaを実行して確認します。テストタブから「テスト」をクリックします。

Lambdaをテストするボタン

今回作成したLamdbaは「name」を受け取るため、イベントJSONにnameを指定します。

以下のJSONです。

{
   "name":"Yamada Taro"
}

テストボタンをクリック後、結果が成功すれば正常に動作することが確認完了です。

LambdaをJavaで作成する時の注意点

開発生産性が悪い

JavaはPythonやNode.jsなどと違い、AWSコンソール上でプログラムの編集ができません。

少しの修正でもローカルでプログラムを修正しデプロイしなければいけません。そのため、Pythonなどのインタプリタ型言語と比べて生産性が悪いと個人的に感じてます。特に、動作検証中は高頻度でプログラムの書き換えと検証を行うため、生産性の悪さが顕著になります。

初回起動に時間がかかる

Lambdaは、初回アクセス時にコンテナが起動し、モジュールをコンテナ上にデプロイする初期化処理が実行されます。モジュールデプロイ前にコンパイル、ライブラリのダウンロード処理が実行されるため、初回起動に時間がかかります。

高頻度でアクセスされる処理の場合は、Lambdaのコンテナが破棄されないため、このような問題は発生しませんが、低頻度で実行される処理の場合はこの問題を解決する必要があります。

これは、PythonやNode.jsではこの問題を考慮しなくて良く、Java固有の事象となります。

上記理由のため、筆者的にはLambdaを利用する場合は、JavaではなくPythonやNodejsを利用することを推奨します。

まとめ

  • コンパイル型のJavaでもLambdaは作成できる
  • pythonやNode.jsと違いAWSマネジメントコンソール上でプログラムを修正できない
  • Lambdaの性質上、プログラムの初回起動に時間がかかることに注意する

LambdaをJavaで作成するには、ローカルでデプロイモジュールを作成しなければならなかったり、デプロイ後の初回アクセス時に時間がかかったりと、考慮する点がいくつかあります。

PythonやNode.jsではこのような問題を気にする必要はないため、筆者的にはLambdaを開発する時には向いている言語ではないと感じました。

本記事が皆様の参考になりましたら幸いです。

関連記事:【AWS Lambda】VPCのPrivateSubnetからS3にアクセスする

コメント

タイトルとURLをコピーしました