この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
タイトルにあげた構成で、最小の手間で動くものをデプロイしてみました。
Java+Gradleな環境はServerless Frameworkの--templateオプションでテンプレートを生成して作成できます。
S3に配置したパッケージをデプロイするには、serverless.ymlのpackage > artifactにパッケージファイルのS3URLを指定するだけです。 公式のガイドはこちらです→Serverless Framework Guide - AWS Lambda Guide - Packaging
環境
$ sw_vers
ProductName: Mac OS X
:
$ serverless -v
Framework Core: 1.64.1 (standalone)
Plugin: 3.4.1
SDK: 2.3.0
やってみたこと
- テンプレートの生成
- ビルド実行
- パッケージファイルをS3上に配置
- serverless.ymlの設定
- デプロイ
テンプレートの生成
次のコマンドで、コードのスケルトンを生成します1
$ serverless create --template aws-java-gradle
次の構成でファイルが生成されます
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── serverless.yml
└── src
└── main
├── java
│ └── com
│ └── serverless
│ ├── ApiGatewayResponse.java
│ ├── Handler.java
│ └── Response.java
└── resources
└── log4j.properties
ビルド実行
デフォルトの設定のまま、ビルドを実行します。2
$ ./gradlew build
./build/distributionsディレクトリにパッケージファイル(hello.zip)が生成されることを確認します。
パッケージファイルをS3に配置
バケットを用意してパッケージファイルをアップロードします。 CLIで「try-sls-deploy-from-artifact」というバケットにアップロードする場合には次のコマンドになります
$ aws s3 cp ./build/distributions/hello.zip s3://try-sls-deploy-from-artifact/hello.zip
serverless.ymlの設定
パッケージファイルを配置したS3バケットと同じリージョンにデプロイするように設定を変更する必要があります。 また、package > artifactに、アップロードしたパッケージファイルのパスをパス形式で3指定します。
例えば、東京リージョン(ap-northeast-1)に配置された「try-sls-deploy-from-artifact」というバケットにパッケージファイルをアップロードした場合には次のような設定になります。
service: service-200329
provider:
name: aws
runtime: java8
region: ap-northeast-1
package:
artifact: https://s3.amazonaws.com/try-sls-deploy-from-artifact/hello.zip
functions:
hello:
handler: com.serverless.Handler
デプロイ
あとはデプロイするだけです。
$ serverless deploy
さいごに
Serverless Frameworkを使ったビルド方法の紹介でした。 ちなみに個人的には脚注にも少し記載しましたが、artifactのURLを パス形式で 記載する必要があるという点でハマりました。 誰かの参考になれば幸いです。
参考
- テンプレートを利用しない場合には、次の記事を参考にファイルを構成してください。Java 関数の ZIP デプロイパッケージの作成 - AWS Lambda ↩
- windows環境の方はバッチファイル(./gradlew.bat)を利用します ↩
- 仮想ホスト形式ではなく、パス形式(https://s3.amazonaws.com/bucket-name/keyname) で指定します。参考→https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro ↩