Functions(Java)は mvn azure-functions:deploy
コマンドでデプロイします。
本番用のFunctionsにいきなりデプロイされちゃうので、一度ステージング用のスロットにデプロイして、問題ないか確認して、スワップ(リリース)というやり方ができないか検討しました。
現時点では、azure-maven-pluginsがデプロイメントスロットに対応していないため、mvnコマンドで他のスロットにデプロイすることはできませんでした。
代替策として、zipファイルをazコマンドでアップロードするやり方でうまくいったので手順を残しておきます。
ちなみに、FunctionsのJavaはGAされましたが、デプロイメントスロットはプレビュー機能です。
Functionsを準備する
-
Java と Eclipse を使用して初めての関数を作成する あたりを参考に、サンプルアプリをデプロイします。
-
動作確認しておきます。
https://[Function App Name]/api/HttpTrigger-Java?name=java
にアクセスして、Hello, java
と表示されたらOKです。
デプロイメントスロットを準備する
コードを修正してzipファイルを準備する
- サンプルプログラムを修正します。今回は
Hello, Java
と表示されるところを、Staging, Java
と表示されるように変更しました。 -
mvn clean package
コマンドを実行します。 -
target/azure-functions/[Function App Name]/
フォルダに移動すると、jarファイルやjsonファイルがあるので、local.settings.json以外の全てのフォルダやファイルを選択して、zipファイルにします。
ここもうちょっといいやり方があれば教えてください・・・
AZコマンドでZipファイルをデプロイする
- 以下のコマンドを実行してZipファイルをデプロイします。
az webapp deployment source config-zip -g [リソースグループ名] -n [Functionアプリ名] --slot [Slot名] --src [zipファイル名]
- 動作確認しておきます。 それぞれアクセスすると以下のような結果になります。
- 本番環境
https://[Function App Name]/api/HttpTrigger-Java?name=java
- 出力結果
Hello, java
- 出力結果
- ステージング環境
https://[Function App Name]-stg.azurewebsites.net/api/HttpTrigger-Java?name=java
- 出力結果
Staging, java
- 出力結果
- 本番環境
本番とステージングをスワップする
-
動作確認します。 先程の結果とは逆になっていれば問題なくスワップできています。
- 本番環境
https://[Function App Name]/api/HttpTrigger-Java?name=java
- 出力結果
Staging, java
- 出力結果
- ステージング環境
https://[Function App Name]-stg.azurewebsites.net/api/HttpTrigger-Java?name=java
- 出力結果
Hello, java
- 出力結果
- 本番環境
まとめ
手動でやるのはめんどくさいですね。
CIにのせたりして自動化させないと厳しそうです。
今後mavenプラグインでスロットにデプロイできるようになることに期待します。