先日より、Flywayを使ってRDSのデータベースマイグレーションをLambda関数を使って実装できないかやってみています。前回までの記事は以下を参照。
- AWS Lambda関数をJavaで実装する(1) - miyohide's blog
- AWS Lambda関数をJavaで実装する(2)LambdaからRDSへ接続する - miyohide's blog
今回は、CodeBuildを使ってデプロイすることをチャレンジしてみることにしました。今回はあまり上手くいかなかった例です。
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 package
やsam deploy
コマンドを実行してあげればよさそうです。
ですが、実際に動かしてみるとS3にputできなかったり色々とエラーが出て進みません。一個一個ロールを設定してあげてもよいのですが、ちょっとキリがないのでなにかいい資料でもないかなと思ったら以下のドキュメントを見つけました。
ただ、以下のブログを見るとこれだとまだ不十分なそうです。
これで権限問題はある程度片づきそうです。