AWS Lambda関数をJavaで実装する(1)

ちょっと実装したいことができ、AWS Lambda関数で実装することにしました。JavaのライブラリであるFlywayを使いたいこともあり、Lambda関数をJavaで実装することにします。

flywaydb.org

Layer機能を使いたかったため、build.gradleに以下の記述を追記します。

// 依存ライブラリだけのパッケージを作る
tasks.register('packageLibs', Zip) {
    into('java/lib') {
        from configurations.runtimeClasspath
    }
    archiveAppendix = 'libs'
}

// 自分で実装したプログラムだけのパッケージを作る
tasks.register('packageSkinny', Zip) {
    from compileJava
    from processResources
    archiveAppendix = 'thin'
}

これで、./gradlew packageLibsで依存ライブラリだけのパッケージを作ることができ、これをLayerに保存することができます。

また、./gradlew packageSkinnyで自分で実装したプログラムだけのパッケージを作ることができます。これで変更が多い自分が実装したプログラムだけを小さなパッケージとして作ることができます。

最初は自分のMac上でパッケージを作成していましたが、面倒くさくなったのでCodeBuildを使ってビルド作業をやってもらいます。

buildspec.ymlを以下のように実装すればOK。インデント要注意です(どハマりました)。

version: 0.2

phases:
  install:
    runtime-versions:
      java: corretto17
  build:
    commands:
      - ./gradlew clean packageLibs
      - ./gradlew packageSkinny
artifacts:
  files:
    - '*.zip'
  base-directory: 'build/distributions'

これでCodeBuildがビルドしてくれます。

興味本位でログをS3に吐き出すようにしてみたのですが、gz形式で圧縮された形で出力されるのでちょっとデバッグは厳しいですね。

今週はここまで。次はCodeDeployとかを使ってLambdaにデプロイしてみようかなと思います。