使用 Azure Spring Apps (ASA) 进行蓝绿部署

使用Azure Spring Apps (ASA) 在蓝绿部署 (bluē lǜ 中进行。

spring-boot_on_azure-spring-apps.png

为了什么

在Windows 11上,使用Linux进行云开发。

您可以从这里查看文章列表。

 

实现

我們將在Microsoft Azure Spring Apps (ASA)平台上實踐JAR文件格式應用程序的藍綠部署。

技术话题

蓝绿部署是什么意思?

在展开这个之前,请看一下这个。蓝绿部署。

蓝绿部署是在将应用程序的新版本部署到生产环境时,与传统的运维方式不同,它是在生产环境中建立新版本并在那里测试应用程序,然后切换到传统的生产环境的方法。

内容。

通常,我们会准备一个蓝色的生产环境和一个绿色的新生产环境。一开始,蓝色是作为活动的生产环境运行,绿色是非活动的。

将新版本的应用程序部署到绿色环境进行测试,如果没有问题,将流量切换到绿色环境。

通过这样做,可以将停机时间最小化,并提高系统的可靠性。

软件开发环境

    Windows 11 Home 22H2 を使用しています。
由于要操作WSL上的Ubuntu,所以您也可以参考macOS的方法。
WSL(Microsoft Store应用版)※您可以在此相关文章中确认安装方法
> wsl –version
WSL版本:1.0.3.0
内核版本:5.15.79.1
WSLg版本:1.0.47Ubuntu ※您可以在此相关文章中确认安装方法
$ lsb_release -a
没有可用的LSB模块
发行商ID:Ubuntu
描述:Ubuntu 22.04.1 LTS
发布:22.04

Java JDK ※您可以在此相关文章中确认安装方法
$ java -version
openjdk版本”11.0.18″ 2023-01-17
OpenJDK运行环境(build 11.0.18+10-post-Ubuntu-0ubuntu122.04)
OpenJDK 64位服务器VM(build 11.0.18+10-post-Ubuntu-0ubuntu122.04,混合模式,共享)

Maven ※您可以在此相关文章中确认安装方法
$ mvn -version
Apache Maven 3.6.3
Maven主目录:/usr/share/maven
Java版本:11.0.18,供应商:Ubuntu,运行时:/usr/lib/jvm/java-11-openjdk-amd64

本文將主要介紹在Ubuntu的終端機上進行操作。針對初次學習使用Vim進行複製和貼上的人,以下文章將提供相關步驟。請勇於嘗試。

 

蓝绿部署的规格说明

※ 本文所述为规范设定。

識別するタグ内容エンドポイントJSON レスポンスv1現用のサービス/api/data{“message”:”Hello Blue!”}v2更新するサービス/api/data{“message”:”Hello Green!”}

以 JAR 文件形式的应用程序

Noファイル内容1app.jar現用のアプリケーション2app.jar更新するアプリケーション

进行蓝绿部署的步骤

创建应用的 JAR 文件。

我们可以展开这个并查看步骤。创建Java应用程序
您可以在以下相关文章中查看步骤。
https://qiita.com/fsdg-adachi_h/items/37ac0082a3228e4de570
进入项目文件夹。
※将~/tmp/hello-spring-boot视为项目文件夹。
$ cd ~/tmp/hello-spring-boot

创建v1应用程序的源代码。
$ vim src/main/java/com/example/springboot/controller/HelloController.java

文件内容

HelloController.java
package com.example.springboot.controller;

import java.util.Map;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(“/api”)
public class HelloController {
@GetMapping(“/data”)
public Map<String, String> getData() {
Map<String, String> map = Map.of(“message”, “Hello Blue!”);
return map;
}
}

构建v1应用程序。
$ mvn clean package

在这个阶段,已经成功地创建了一个名为v1的JAR文件。

将应用程序部署到 Azure Spring Apps。

登录

使用 Azure CLI 登录到 Azure。

$ az login

您可以在此相关文章中查看具体步骤。

 

资源组

创建资源组。

$ az group create \
    --name rg-hello \
    --location japaneast

春季应用程序服务实例

您可以在这篇相关文章中查看具体步骤。

 

创建Spring Apps服务实例。
※由于基于Kubernetes平台环境,所以可能需要一些时间。

– 标准SKU已支持蓝绿部署。
$ az spring create \
    --resource-group rg-hello \
    --name aps-hello \
    --location japaneast \
    --sku Standard

春季应用程序

我将创建一个Spring Apps应用程序。

$ az spring app create \
    --resource-group rg-hello \
    --service aps-hello \
    --name sap-hello-spring-boot \
    --deployment-name sap-hello-spring-boot--v1 \
    --runtime-version Java_11 \
    --assign-endpoint true
我会打开说明。这个命令是用来创建Spring Apps应用程序的。

命令
内容
az spring app create
用于创建Spring Apps应用程序的命令。

选项

内容
–resource-group
rg-hello
指定创建Spring Apps应用程序所需的资源组名称。

–service
aps-hello
指定创建Spring Apps应用程序的Spring Apps服务实例名称。

–name
sap-hello-spring-boot
指定Spring Apps应用程序的名称。

–deployment-name
sap-hello-spring-boot–v1
指定Spring Apps应用程序部署的名称。

–runtime-version
Java_11
设置Spring Apps应用程序在Java 11运行时中运行。

–assign-endpoint
true
如果为true,则分配直接访问用的端点URL。

部署 v1 Spring 应用程序的应用程序。

$ az spring app deploy \
    --resource-group rg-hello \
    --service aps-hello \
    --name sap-hello-spring-boot \
    --deployment sap-hello-spring-boot--v1 \
    --artifact-path target/app.jar
打开说明。这个命令是用来部署Spring Apps应用的。

命令
内容

az spring app deploy
用于部署Spring Apps应用的命令。

选项

内容

–resource-group
rg-hello
指定要创建Spring Apps应用的资源组名称。

–service
aps-hello
指定要创建Spring Apps应用的Spring Apps服务实例名称。

–name
sap-hello-spring-boot
指定Spring Apps应用的名称。

–deployment
sap-hello-spring-boot–v1
指定Spring Apps应用部署的名称。

–artifact-path
target/app.jar
指定要部署到Spring Apps应用的代码位置。

成功部署之后,可以通过以下URL进行访问。

https://<service-name>-<app-name>.azuremicroservices.io

从另一个终端使用curl命令来确认URL。

$ curl https://aps-hello-sap-hello-spring-boot.awesomemicroservices.io/api/data
{"message":"Hello Blue!"}

确认 Azure 门户

image.png
通过此工作,已经完成了将v1应用部署到Azure Spring Apps的步骤。

制作v2应用程序的JAR文件

请打开此处并查看步骤。Java 应用程序创建
创建 v2 应用程序的源代码。
$ vim src/main/java/com/example/springboot/controller/HelloController.java

文件内容

HelloController.java
package com.example.springboot.controller;

import java.util.Map;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(“/api”)
public class HelloController {
@GetMapping(“/data”)
public Map<String, String> getData() {
Map<String, String> map = Map.of(“message”, “Hello Green!”);
return map;
}
}

构建 v2 应用程序。
$ mvn clean package

在此之前的工作中,我们已经成功地创建了作为v2应用程序的JAR文件。

将v2应用程序部署到Azure Spring Apps中。

春天应用程序

我要创建v2 Spring Apps应用的分段环境部署。

$ az spring app deployment create \
    --resource-group rg-hello \
    --service aps-hello \
    --app sap-hello-spring-boot \
    --name sap-hello-spring-boot--v2 \
    --runtime-version Java_11 \
    --artifact-path target/app.jar
打开说明。该命令用于创建Spring Apps应用的分段环境部署。

命令
内容

az spring app deployment create
用于创建Spring Apps应用的分段环境部署的命令。

选项

内容

–resource-group
rg-hello
指定用于创建Spring Apps应用的资源组名称。

–service
aps-hello
指定用于创建Spring Apps应用的Spring Apps服务实例名称。

–app
sap-hello-spring-boot
指定Spring Apps应用的名称。

–name
sap-hello-spring-boot–v1
指定Spring Apps应用部署的名称。

–runtime-version
Java_11
设置Spring Apps应用在Java 11运行时中执行。

–artifact-path
target/app.jar
指定部署到Spring Apps应用的代码位置。

在终端上使用curl命令来检查URL。

$ curl https://aps-hello-sap-hello-spring-boot.awesomemicroservices.io/api/data
{"message":"Hello Blue!"}
当请求应用的URL时,将显示v1版本应用的输出结果。

确认 Azure 门户

image.png

通过在另一个终端中使用curl命令来检查测试端点。

$ curl https://primary:4Fk5UKl9Bch3GbFFzXoLtzSRPpURANQ5Z2oylLldyp9OQZ4FplVxcLPqRpOxnJ6L@aps-hello.test.awesomemicroservices.io/sap-hello-spring-boot/sap-hello-spring-boot--v2/api/data
{"message":"Hello Green!"}
为了更新应用程序,我们可以将v2应用程序部署到生产环境作为暂存环境。还可以在实际发布之前使用测试端点进行功能测试。这是蓝绿部署的一个目标。

切换至新的部署

将预备环境切换到生产环境。

$ az spring app set-deployment \
    --resource-group rg-hello \
    --service aps-hello \
    --name sap-hello-spring-boot \
    --deployment sap-hello-spring-boot--v2
打开说明。此命令用于配置Spring Apps应用程序的生产环境部署。

命令
内容

az spring app set-deployment
用于配置Spring Apps应用程序的生产环境部署的命令。

选项

内容

–resource-group
rg-hello
指定用于创建Spring Apps应用程序的资源组名称。

–service
aps-hello
指定用于创建Spring Apps应用程序的Spring Apps服务实例的名称。

–name
sap-hello-spring-boot
指定Spring Apps应用程序的名称。

–deployment
sap-hello-spring-boot–v2
指定Spring Apps应用程序的部署名称。

部署已经切换完成。

我們可以從另一個終端窗口使用curl命令來確認URL。

$ curl https://aps-hello-sap-hello-spring-boot.awesomemicroservices.io/api/data
{"message":"Hello Green!"}
当请求应用程序的URL后,将显示更新后的v2应用程序的输出。部署到生产环境的工作已经完成。※本文中的”生产环境”是指实际运行的环境。

确认 Azure 门户

image.png

故障发生时的回退

如果在将服务部署到最新版本后出现问题,需要恢复之前正常运行的部署。这是使用蓝绿部署的一个目的。

从v2应用切回到v1应用。
※ 切换部署。

$ az spring app set-deployment \
    --resource-group rg-hello \
    --service aps-hello \
    --name sap-hello-spring-boot \
    --deployment sap-hello-spring-boot--v1

从另一个终端使用curl命令来检查URL。

$ curl https://aps-hello-sap-hello-spring-boot.awesomemicroservices.io/api/data
{"message":"Hello Blue!"}

请求应用的URL,显示了更新前v1应用的输出。

确认Azure Portal

image.png

部署之后的注意事项

Spring Apps 应用程序最多只能保存两个部署。为了反映最新的部署,必须删除旧的部署。
App sap-hello-spring-boot 最多可以有2个部署,目前有2个。

删除旧的Spring Apps应用程序部署。

$ az spring app deployment delete \
    --resource-group rg-hello \
    --service aps-hello \
    --app sap-hello-spring-boot \
    --name sap-hello-spring-boot--v1
打开说明书。这个命令是用来删除Spring Apps应用的部署。

命令
内容

az spring app deployment delete
这是一个用于删除Spring Apps应用部署的命令。

选项

内容

–resource-group
rg-hello
指定要创建Spring Apps应用的资源组名称。

–service
aps-hello
指定要创建Spring Apps应用的Spring Apps服务实例名称。

–app
sap-hello-spring-boot
指定Spring Apps应用的名称。

–name
sap-hello-spring-boot–v1
指定Spring Apps应用部署的名称。

确认 Azure 门户

image.png

总结

我們能夠在 Azure Spring Apps 環境中實施藍綠部署。

使用Maven和Azure CLI,可以通过终端完成Spring Boot的JAR文件应用程序的创建和部署到Azure环境的过程。这样,你可以深入掌握在云端开发系统所需的技能和理解。即使是初学者也可以轻松地按照步骤进行,所以请务必挑战一下。

在 Azure Spring Apps 环境中,您可以轻松体验JAR文件格式应用程序的蓝绿部署,请务必尝试一下。未来,我们还会介绍更多关于 Azure 开发环境的内容,请敬请期待。

推荐内容

 

广告
将在 10 秒后关闭
bannerAds