Azure Spring Cloudでブルーグリーンデプロイメントする



ブルーグリーンデプロイメントの話は勉強会で何回も聴いたことがあるのですが、実際に自分で手を動かして試したことはありませんでした。設定が大変そうだよなぁ、と思っていたのですが、Azure Spring Cloudでめちゃくちゃ簡単にできてびっくりしました。

手順はほぼこちらのドキュメントどおりです。

まずはAzure Spring Cloudインスタンスを作成します。画面でポチポチと作りました。間違えてBasicレベルを選択してしまったのですが、ブルーグリーンデプロイメントを試すにはStandardレベルが必要なのでご注意ください。(後から変えることは可能です)

インスタンスの準備はこれだけです。

続いてデプロイするアプリケーションを作成します。環境はDocker上のDebianで作りました。Azure CLIのAzure Spring Cloud 拡張機能が必要なため、以下の3行目で追加しています。

FROM maven:3.8.1-openjdk-11

RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash
RUN az extension add --name spring-cloud

VSCodeの拡張機能「Spring Initializr Java Support」でspring-boot-starter-webだけ追加したプロジェクトを作ります。

helloを表示するだけの簡単なアプリケーションです。

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;

@SpringBootApplication
@RestController
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }
}

ビルドします。

mvn clean packge -DskipTests

Azureにログインします。

az login

インスタンス上にdemoというアプリ(の雛形?)を作ります。

az spring-cloud app create -n demo -g springcloudrg -s kikutarospringcloud --assign-endpoint

デプロイします。

az spring-cloud app deploy -n demo -g springcloudrg -s kikutarospringcloud --jar-path target\demo-0.0.1-SNAPSHOT.jar

アプリのURLが表示されているので、末尾に /hello をつけてアクセスします。

helloが表示されました。

続いて、更新したアプリケーション(グリーン)を作成してデプロイします。コードは「hello」を「hello new release!」に変えただけです。

@GetMapping("/hello")
public String hello() {
    return "hello new release!";
}

ビルドします。

mvn clean packge -DskipTests

グリーンデプロイ(と呼ぶらしい)します。

az spring-cloud app deployment create -n green --app demo -g springcloudrg -s kikutarospringcloud --jar-path target\demo-0.0.1-SNAPSHOT.jar

私は最初以下のエラーになりました。

Basic sku only allows 1 deployment under one app.

これは最初に書いた通り、プランがBasicでブルーグリーンデプロイメントに対応していないためです。画面からStandardプランにアップグレードして、再度デプロイしたら成功しました。

デプロイメニューを見ると、defaultとgreenの2つが並んでいます。

あとはgreenの方のメニューから「運用環境として設定」を選べば、こちらに切り替わります。

切り替えて再度アクセスすると、ちゃんと「new release!」がついた新しいアプリケーションに切り替わっています。

こんなに簡単にブルーグリーンデプロイメントができるんだ...!と地味に感動しました。(すごい今更ですが...)

Spring Cloudの話はかなり前にJJUGの勉強会で聴いていましたが、当時はなんとなく敷居が高そうだなぁ...と思って触っていませんでした。

今回、Azure Spring Cloudを触ってみましたが、すごく簡単でした。Spring Cloudについて改めて勉強したいなーと思いました。