Skip to main content
Interwork Corporation
IDR Solutions Product Support Portal
PDF開発用語集 モードの切替 ダーク/ライト/自動 モードの切替 ダーク/ライト/自動 モードの切替 ダーク/ライト/自動

JDeliを使用したAWS Lambda関数の例

JDeliは画像変換に最適です。このページでは、S3バケットにアップロードされた画像を自動的に指定された画像タイプに変換するAWS Lambda関数の設定方法について説明します。

S3バケットの作成

始める前に、画像をアップロードするためのS3バケットが必要です。Amazon S3 → Bucketsに移動し、「Create bucket」をクリックします。

「Bucket Name」を覚えやすい名前に設定します。このガイドではidr-jdeli-demoを使用します。

他の設定はデフォルトのままにします。

![Bucket Create Menu](/assets/images/jdeli-aws-lambda/Bucket Create.png)

Lambda関数の作成

AWS Lambda → Functionsに移動し、「Create function」をクリックします。

Author from scratchが選択されていることを確認し、関数に適切な名前を付け(この例では関数名にもidr-jdeli-demoを使用します)、ランタイムをJava 17以降に設定します。その他の設定はすべてデフォルトのままにします。

![Lambda Create Menu](/assets/images/jdeli-aws-lambda/Lambda Create.png)

関数トリガーの設定

Lambda関数を実行するには、それを呼び出すトリガーを設定する必要があります。バケットへの画像アップロード時にトリガーしたいので、S3バケット内でオブジェクトが作成されたときのトリガーを設定します。

左側のAdd Triggerをクリックし、ドロップダウンからS3を選択します。

バケットを選択し、イベントタイプを「All Object create events」に設定します。

この例では、処理済みと未処理の画像に同じバケットを使用します。これを行うには、未処理の画像を1つのルートディレクトリに、処理済みの画像を別のディレクトリに保持します。未処理の画像に対してのみトリガーしたいので、プレフィックスをアップロード先のディレクトリに設定します。このガイドではinput/を使用します。

![Lambda Trigger](/assets/images/jdeli-aws-lambda/Lambda Add Trigger.png)

関数の設定

一部のファイル変換では相当量のメモリを消費する可能性があるため、関数が使用できる容量を増やす必要があります。

Configuration → General configurationに移動し、「Edit」をクリックします。

「Memory」を1024に設定します(非常に大きなファイルを変換する予定がある場合はさらに多く必要になる可能性がありますが、これは良い出発点です)。

また、「Timeout」を少なくとも1分に増やす必要があります。

![Lambda Config Menu](/assets/images/jdeli-aws-lambda/Lambda Basic Config.png)

関数の権限設定

Lambda関数を実行する前に、バケットへのアクセス許可を与える必要があります。

これは、バケットに対する取得、配置、削除の権限を持つポリシーをアタッチすることで行います。

まず新しいポリシーを作成する必要があります。IAM → Policiesに移動し、「Create policy」をクリックします。

S3を選択し、Read→GetObjectWrite→DeleteObjectWrite→PutObjectを許可します。

![Policy S3 Read Permissions](/assets/images/jdeli-aws-lambda/Policy Bucket Read.png) ![Policy S3 Write Permissions](/assets/images/jdeli-aws-lambda/Policy Bucket Write.png)

リソースの下で、「Specific」がチェックされていることを確認し、「Add Arn」をクリックします。ポップアップするメニューで、「Resource bucket name」をバケット名(このガイドの場合:idr-jdeli-demo)に設定し、「Any object name」にチェックを入れます。

![Policy Bucket ARN](/assets/images/jdeli-aws-lambda/Policy ARN.png)

下部の「next」をクリックし、ポリシーにわかりやすい名前と説明を付けます。

![Policy Details](/assets/images/jdeli-aws-lambda/Policy Details.png)

最後にポリシーを作成します。

次に、このポリシーをLambda関数にアタッチする必要があります。

IAM → Rolesに移動し、Lambda関数のロールを選択します(デフォルトでは、ロール名の後に-role-xxxxxxxxが続き、各xはランダムな数字または文字です)。

「Permission policies」の下で、Add permissions → Attach policiesをクリックし、先ほど作成したポリシーを選択します。

![Role Policies Menu](/assets/images/jdeli-aws-lambda/Role Policies.png)

関数コードのアップロード

すべての設定が完了したら、最後にLambdaにコードをアップロードする必要があります。

このガイドでは、Lambda関数の実装としてGitHub からJDeli-Lambda を使用します。

この実装はS3トリガーをキャッチし、アップロードされたファイルを設定された形式に変換し、変換されたファイルをバケット内の設定された出力ディレクトリにアップロードします。また、メタデータを使用した再帰実行の防止(アップロードされた変換済みファイルで関数を再度トリガーすること)や、変換後のソース画像の削除など、いくつかの追加機能もあります。

プロジェクトをLambdaにデプロイするための完全な手順はreadmeに記載されていますが、簡易版は次のとおりです:

以下のコマンドでプロジェクトをビルドします:

mvn clean package

次にAWS CLI でデプロイします:

aws lambda update-function-code --function-name idr-jdeli-demo --zip-file fileb://target/jdeli-lambda-1.0-SNAPSHOT.jar

idr-jdeli-demoをLambda関数に付けた名前に置き換えてください。

最後に、Lambda関数でCode → Runtime settingsに移動して「Edit」をクリックし、ハンドラーを以下に設定します:

com.idrsolutions.Handler::handleRequest

![Lambda Runtime Config](/assets/images/jdeli-aws-lambda/Lambda Runtime Config.png)

完了

これでLambda関数の設定が完了しました。バケットの入力ディレクトリに画像をアップロードすると、自動的に変換されて出力ディレクトリに配置されるようになります。