S3Event通知をトリガーとするLambda(Java)

S3Event通知をトリガーとするLambda(Java)

前提

項目
イベント通知 PUT, 完了したマルチパートアップロード
ファイル配置場所 s3://xxxxx/images/hoge.jpg

エントリポイント

エントリポイントとなるHello.javaです。

package com.example.demo;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.S3Event;
import com.amazonaws.services.lambda.runtime.events.models.s3.S3EventNotification.S3EventNotificationRecord;

public class Hello implements RequestHandler<S3Event, String> {
  @Override
  public String handleRequest(S3Event s3event, Context context) {
    try {
      S3EventNotificationRecord record = s3event.getRecords().get(0);
      String bucket = record.getS3().getBucket().getName();
      System.out.println(bucket); // バケット名 xxxxx
      String objectkey = record.getS3().getObject().getUrlDecodedKey();
      System.out.println(objectkey); // オブジェクトキー images/hoge.jpg
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
    return "Hello Lambda";
  }
}

build.gradle

build.gradleです。

plugins {
    id 'java'
}

java {
    sourceCompatibility = '17'
    targetCompatibility = '17'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation platform('software.amazon.awssdk:bom:2.20.56')
    implementation 'software.amazon.awssdk:s3'

    implementation 'com.amazonaws:aws-lambda-java-core:1.2.1'
    implementation 'com.amazonaws:aws-lambda-java-events:3.11.0'
    implementation 'org.apache.logging.log4j:log4j-api:[2.17.1,)'
    implementation 'org.apache.logging.log4j:log4j-core:[2.17.1,)'
    implementation 'org.apache.logging.log4j:log4j-slf4j18-impl:[2.17.1,)'
    runtimeOnly 'com.amazonaws:aws-lambda-java-log4j2:1.5.1'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.0'
}

tasks.named('test') {
    useJUnitPlatform()
}

task packageZip(type: Zip) {
    into('lib') {
        from(jar)
        from(configurations.runtimeClasspath)
    }
}
build.dependsOn packageZip

zip作成

zip作成します。

gradlew packageZip

デプロイ

Lambda(Java17)にzipをアップロードします。

s3://xxxxx/images/hoge.jpgを配置するとS3イベント通知が発火してLambdaが実行されます。

コメント

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