はじめに
Springには数々のプロジェクトが存在しますが、AWS LambdaやAzure Functions向けのコードを書くためのフレームワークであるSpring Cloud Functionというプロジェクトがあることを知りました。
マイクロソフトもAzure FunctionsのサンプルとしてSpring Cloud Functionを使ったものを提供しています。
上記のサンプルはMavenを使ったものなのですが、Gradleを使った例が以下に公開されています。
本記事では自分の環境で実装した例を記します。
Azure Functions Plugin for Gradleの導入
本記事のキーとなるのはAzure Functions Plugin for Gradleの導入です。これを導入することでローカル環境でのテストやAzureへのデプロイがGradleのタスク1つで実行可能となります。
build.gradleの記述
具体的には、build.gradle
にてplugins
にid 'com.microsoft.azure.azurefunctions' version '1.4.0'
を追加すればOKです。build.gradle
全体としては以下の形となりました。
plugins { id 'java' id 'com.microsoft.azure.azurefunctions' version '1.4.0' } group 'org.example' version '1.0-SNAPSHOT' sourceCompatibility = '1.8' repositories { mavenCentral() } dependencies { implementation 'org.springframework.cloud:spring-cloud-function-adapter-azure:3.0.6.RELEASE' compileOnly 'org.springframework.cloud:spring-cloud-starter-function-web:3.0.6.RELEASE' } tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } jar { manifest { attributes 'Main-Class' : 'com.example.HelloFunction' } } azurefunctions { resourceGroup = 'リソースグループ名' appName = 'アプリ名' region = 'westus' pricingTier = 'Consumption' runtime { os = 'linux' } appSettings { WEBSITE_RUN_FROM_PACKAGE = '1' FUNCTIONS_EXTENSION_VERSION = '~3' FUNCTIONS_WORKER_RUNTIME = 'java' MAIN_CLASS = 'com.example.HelloFunction' } localDebug = "transport=dt_socket,server=y,suspend=n,address=5005" deployment { type = 'run_from_blob' } }
azurefunctions
の各設定は以下のWikiを参考にしました。
実際に自分の環境でハマった点は以下の点です。
- runtimeの指定
- 自分の環境では
os = 'linux'
を指定しないとデプロイできませんでした。
- 自分の環境では
- regionの指定
- 自分の環境では当初
japaneast
を指定したところ「他のリージョンを指定してくれ」と言われたのでwestus
を指定しました。
- 自分の環境では当初
Gradleタスク
Azure Functions Plugin for Gradleを導入することでいろいろなGradleタスクが追加されました。
- azureFunctionsRun
- ローカルでアプリを実行する
- azureFunctionsPackage
- ビルドをして
build\azure-functions
以下にAzure Functionsにデプロイするのに必要な各種ファイルを生成する
- ビルドをして
- azureFunctionsPackageZip
- 上記のazureFunctionsPackageの結果をzipで固めたものを生成する
- azureFunctionsDeploy
- Azureにデプロイする
実装をしたらazureFunctionsRun
にてローカル環境で試してazureFunctionsDeploy
でAzureにデプロイする流れが標準的な開発の流れになるかなと思います。
Spring Cloud Functionについて
今回はとりあえずサンプルを写経しただけ。あまり理解したとは言えないのでドキュメントを読み込むなどして後日ちゃんと理解した記事を書きたいと思います。