AWS Lambda関数をJavaで実装する(3)CodeBuildを使ってLambdaアプリをデプロイする

先日より、Flywayを使ってRDSのデータベースマイグレーションをLambda関数を使って実装できないかやってみています。前回までの記事は以下を参照。

今回は、CodeBuildを使ってデプロイすることをチャレンジしてみることにしました。今回はあまり上手くいかなかった例です。

AWSチュートリアルがあるのでそれを参考に進めます。

docs.aws.amazon.com

template.ymlというファイルが必要そうなので、それを作ります。こんな感じで作りました。

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: An AWS Lambda application that calls the Flyway api
Resources:
  function:
    Type: AWS::Serverless::Function
    # 関数の定義
    Properties:
      CodeUri: build/distributions/aws_flyway_lambda-thin-1.0.zip
      Handler: com.github.miyohide.aws_flyway_lambda.MyLambda::handleRequest
      Runtime: java17
      Description: Java function
      MemorySize: 1024
      Timeout: 10
      # Function's execution role
      Policies:
        - AWSLambdaBasicExecutionRole
        - AWSLambda_ReadOnlyAccess
        - AWSXrayWriteOnlyAccess
        - AWSLambdaVPCAccessExecutionRole
      Tracing: Active
      Layers:
        - !Ref libs
  # Layerの定義
  libs:
    Type: AWS::Serverless::LayerVersion
    Properties:
      LayerName: flyway-java-lib
      Description: Dependencies for the flyway java app.
      ContentUri: build/distributions/aws_flyway_lambda-libs-1.0.zip
      CompatibleRuntimes:
        - java17

あとは、buildspec.ymlにてsam packagesam deployコマンドを実行してあげればよさそうです。

ですが、実際に動かしてみるとS3にputできなかったり色々とエラーが出て進みません。一個一個ロールを設定してあげてもよいのですが、ちょっとキリがないのでなにかいい資料でもないかなと思ったら以下のドキュメントを見つけました。

docs.aws.amazon.com

ただ、以下のブログを見るとこれだとまだ不十分なそうです。

nobelabo.hatenablog.com

これで権限問題はある程度片づきそうです。