Azure Spring CloudでBlue-Green Deploy

このエントリーは、Azure Advent Calendar 2019の18日目エントリーです。(一日遅れすみません)

AzureといえばMicrosoftが運営しているクラウドということもあり、.NETをはじめとしてMicrosoft Technologyの印象が強いですが、 実際には様々なプログラミング言語をサポートするオープンなプラットフォームです。

その中でMicrosoftはプラットフォーム上で動作するプログラミング言語としてJavaを重視しており、Azure Kubernetes Service (AKS) や、 PaaSであるWeb apps、ServerlessとしてのAzure Functions上でのJavaサポートに積極的な投資を行っています。

docs.microsoft.com

その中で、Azure上でのJavaをサポートするプラットフォームとして新しく加わったのが、MicrosoftとPivotalが協働で開発したAzure Spring Cloud です。

Azure Spring Cloudは、Spring Bootベースのマイクロサービスのアプリケーションを動作することに最適化されたフルマネージドPaaSです。現在パブリックプレビュー版として、East US, West US 2, West Europe, and Southeast Asiaのリージョンで提供されています。

クイックスタート

ドキュメント クイック スタート:Azure CLI を使用して Java Spring アプリケーションを起動する を参照してアプリケーションを構築し、デプロイします。

docs.microsoft.com

サンプルアプリケーションは Azure-Samples/piggymetrics で公開されているアプリケーションです。

github.com

$ az extension add --name spring-cloud
$ az group create --location  southeastasia --name hellospringcloud-fieldnotes-jp
$ az spring-cloud create -n hellospringcloud-fieldnotes-jp -g hellospringcloud-fieldnotes-jp
$ az configure --defaults group=hellospringcloud-fieldnotes-jp
$ az configure --defaults spring-cloud=hellospringcloud-fieldnotes-jp

$ az spring-cloud config-server git set -n hellospringcloud-fieldnotes-jp --uri https://github.com/Azure-Samples/piggymetrics --label config

続いて、アプリケーションをビルドし、デプロイします。

$ git clone https://github.com/Azure-Samples/piggymetrics
$ cd piggymetrics
$ mvn clean package -D skipTests
$ az spring-cloud app deploy -n gateway --jar-path ./gateway/target/gateway.jar
$ az spring-cloud app deploy -n account-service --jar-path ./account-service/target/account-service.jar
$ az spring-cloud app deploy -n auth-service --jar-path ./auth-service/target/auth-service.jar

az spring-cloud app update -n gateway --is-public true コマンドで、外部からアクセスするエンドポイントを確認します。JSONの出力下部の "url"の欄に出力されるURLにアクセスすると、次のような画面が表示されるはずです。

$ az spring-cloud app show --name gateway

f:id:setoazusa:20191219024315p:plain

f:id:setoazusa:20191219024340p:plain

Blue-Green Deployment

Azure Spring Cloudには、Blue Green Deploymentの仕組みが組み込まれています。

https://docs.microsoft.com/ja-jp/azure/spring-cloud/spring-cloud-howto-staging-environment

# CSSを編集
$ code gateway\src\main\resources\static\css\launch.css
$ mvn clean package -D skipTests
$ az spring-cloud app deployment create -g hellospringcloud-fieldnotes-jp -s hellospringcloud-fieldnotes-jp --app gateway -n green --jar-path gateway/target/gateway.jar

デプロイ後、ポータルのAzure Spring Cloudのポータルの「Deployments」からデプロイしたいアプリケーションを選択し、メニューの「Set deployment」を選択します。

f:id:setoazusa:20191219024945p:plain

f:id:setoazusa:20191219024917p:plain

ページを表示すると画面が切り替わっているので、ルーティングが切り替っていることが確認できます。

f:id:setoazusa:20191219025043p:plain

なお、ドキュメントでは、各DeploymentのOverviewで表示される「Test Endpoint」の欄からURLを取得することでステージング状態のアプリケーションにアクセスすることができるのですが、現時点ではログイン画面までは表示出来るのですが、その後のログイン処理時に以下の様なエラーとなり、アプリケーションを動作させることができませんでした。プレビューのステータスなので、今後細部の作り込みがされていくものと思われます。

f:id:setoazusa:20191219025526p:plain

デモ

マイクロソフト社のてらだよしおさんによるAzure Spring Cloudのデモ動画が公開されています。

www.youtube.com

でも、お高いんでしょう?

気になるお値段ですが、クイックスタートの構成を丸一日動かしておよそ3000円でした。

個人アカウントで止め忘れると痛いですが、検証として使う分にはぎりセーフなんじゃないかな…

と同時に、アプリケーションの基盤としてのコストをなるべく抑えたい場合は、これまでと同様、 WebApps(App Service)を選択することになりそうです。