Azure Functions Plugin for GradleとSpring Cloud Functionを使ってAzure Functionsアプリを実装する

はじめに

Springには数々のプロジェクトが存在しますが、AWS LambdaやAzure Functions向けのコードを書くためのフレームワークであるSpring Cloud Functionというプロジェクトがあることを知りました。

spring.io

マイクロソフトもAzure FunctionsのサンプルとしてSpring Cloud Functionを使ったものを提供しています。

docs.microsoft.com

上記のサンプルはMavenを使ったものなのですが、Gradleを使った例が以下に公開されています。

github.com

本記事では自分の環境で実装した例を記します。

Azure Functions Plugin for Gradleの導入

本記事のキーとなるのはAzure Functions Plugin for Gradleの導入です。これを導入することでローカル環境でのテストやAzureへのデプロイがGradleのタスク1つで実行可能となります。

plugins.gradle.org

build.gradleの記述

具体的には、build.gradleにてpluginsid '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を参考にしました。

github.com

実際に自分の環境でハマった点は以下の点です。

  • 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について

今回はとりあえずサンプルを写経しただけ。あまり理解したとは言えないのでドキュメントを読み込むなどして後日ちゃんと理解した記事を書きたいと思います。

ソース

github.com