Azure Spring Apps 中的应用和部署

注意

Azure Spring Apps 是 Azure Spring Cloud 服务的新名称。 虽然该服务有新名称,但一些地方仍会使用旧名称,我们仍在更新屏幕截图、视频和图形等资产。

“应用”和“部署”是 Azure Spring Apps 的资源模型中的两个关键概念。 在 Azure Spring Apps 中,“应用”是一个商业应用的抽象。 部署为“应用”的一个版本的代码或二进制文件在“部署”中运行。 应用在 Azure Spring Apps 服务实例(简称“服务实例”)中运行,如下所示。

Diagram showing the relationship between the apps and deployments.

单个 Azure 订阅中可以有多个服务实例,但在构成商业应用的所有应用都驻留在单个服务实例中时,Azure Spring Apps 服务最易于使用。 其中一个原因是应用可能会相互通信。 它们可以使用服务实例中的 Eureka 服务注册表来轻松执行此操作。

Azure Spring Apps 标准计划允许一个应用有一个生产部署和一个过渡部署,这样就可以轻松地在其上进行蓝/绿部署。

应用

以下特性/属性是在应用级别定义的。

功能 说明
公共
终结点
用于访问应用的 URL。
自定义
保护自定义域的 CNAME 记录。
服务
绑定
与其他 Azure 服务的现成连接。
托管
标识
借助 Microsoft Entra ID 的托管标识,应用可以轻松访问其他受 Microsoft Entra 保护的资源(如 Azure 密钥保管库)。
永久性
存储
使数据能够在应用重启后保持不变的设置。

部署

以下特性/属性是在部署级别定义的,会在切换生产部署和过渡部署时进行交换。

功能 说明
CPU 每个应用实例的 vCore 数。
内存 每个应用实例的内存容量 (GB)
实例
计数
手动或自动设置的应用实例数。
自动缩放 根据预定义的规则和计划自动缩放实例计数。
JVM
选项
要设置的 JVM 选项。
环境
变量
要设置的环境变量。
运行时
版本
Java 8 或 Java 11。

环境

Azure Spring Apps 将一些只读 YAML 文件装载到已部署的应用中。 这些文件包含部署的 Azure 上下文。 以下列表显示了这些 YAML 文件的路径和内容:

  • /etc/azure-spring-cloud/context/azure-spring-apps.yml

    AZURE_SPRING_APPS:
        SUBSCRIPTION_ID:  <your-azure-subscription-id>
        RESOURCE_GROUP: <your-resource-group-name>
        NAME: <your-azure-spring-apps-name>
    
  • /etc/azure-spring-cloud/context/azure-spring-apps-deployment.yml

    AZURE_SPRING_APPS:
         APP:
            NAME: <your-app-name>
         DEPLOYMENT:
            NAME: <your-deployment-name>
            ACTIVE: true # true if the deployment is in production, false if in staging
    

如果应用是 Spring Boot 应用,则会将这两个文件路径添加到 SPRING_CONFIG_ADDITIONAL_LOCATION 环境变量。 这样,应用就可以将这些属性加载为配置,并在代码中使用它们。 例如,可以使用 @ConfigurationProperties 注释将 YAML 属性绑定到 Java 类。 以下代码片段演示如何创建表示 Azure 上下文的 @Configuration 类:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConfigurationProperties(prefix = "azure-spring-apps")
@Data
public class AzureSpringAppsContext {

    private String subscriptionId;
    private String resourceGroup;
    private String name;

    private AppContext app;
    private DeploymentContext deployment;

    @Data
    public static class AppContext {
        private String name;
    }

    @Data
    public static class DeploymentContext {
        private String name;
        private boolean active;
    }
}

对于任何其他多语言应用,可能需要通过在应用中使用相应的文件读/写库来读取和访问相应的属性。

限制

  • 一个应用必须有一个生产部署。 API 将阻止删除生产部署。 在删除部署之前,应将部署交换为“过渡”。
  • 一个应用最多可以有两个部署。 API 将阻止创建两个以上的部署。 将新的二进制文件部署到现有的生产部署或过渡部署。
  • 部署管理在基本计划中不可用。 请使用标准计划获取蓝绿部署功能。

后续步骤