Azure Spring Apps にデプロイするアプリケーションを準備する

Note

BasicStandard、および Enterprise プランは、2025 年 3 月中旬以降に非推奨になり、3 年間の廃止期間となります。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の廃止のお知らせ」を参照してください。

Standard 従量課金と専用プランは、2024 年 9 月 30 日以降に非推奨となり、6 か月後に完全にシャットダウンされます。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の Standard 従量課金と専用プランを Azure Container Apps に移行する」を参照してください。

この記事の適用対象: ✔️ Basic または Standard ✔️ Enterprise

この記事では、Azure Spring Apps にデプロイするために既存の Steeltoe アプリケーションを準備する方法について説明します。 Azure Spring Apps は、Steeltoe アプリをホスト、監視、スケール、更新するための堅牢なサービスを提供しています。

この記事では、Azure Spring Apps で .NET Core Steeltoe アプリを実行するために必要な依存関係、構成、およびコードについて説明します。 アプリケーションを Azure Spring Apps にデプロイする方法については、初めての Spring Boot アプリを Azure Spring Apps にデプロイする方法に関するページを参照してください。

Note

Azure Spring Apps の Steeltoe のサポートは、現時点ではパブリック プレビューとして提供されています。 パブリック プレビュー オファリングにより、お客様は公式リリースの前に新機能を試すことができます。 パブリック プレビューの機能とサービスは、運用環境での使用を目的としたものではありません。 プレビュー段階のサポートの詳細については、FAQ を参照するか、サポート リクエストを提出してください。

サポートされているバージョン

Azure Spring Apps では、次のものがサポートされています。

  • .NET Core 3.1
  • Steeltoe 2.4 および 3.0

依存関係

Steeltoe 2.4 の場合は、最新の Microsoft.Azure.SpringCloud.Client 1.x.x パッケージをプロジェクト ファイルに追加します。

<ItemGroup>
  <PackageReference Include="Microsoft.Azure.SpringCloud.Client" Version="1.0.0-preview.1" />
  <PackageReference Include="Steeltoe.Discovery.ClientCore" Version="2.4.4" />
  <PackageReference Include="Steeltoe.Extensions.Configuration.ConfigServerCore" Version="2.4.4" />
  <PackageReference Include="Steeltoe.Management.TracingCore" Version="2.4.4" />
  <PackageReference Include="Steeltoe.Management.ExporterCore" Version="2.4.4" />
</ItemGroup>

Steeltoe 3.0 の場合は、最新の Microsoft.Azure.SpringCloud.Client 2.x.x パッケージをプロジェクト ファイルに追加します。

<ItemGroup>
  <PackageReference Include="Microsoft.Azure.SpringCloud.Client" Version="2.0.0-preview.1" />
  <PackageReference Include="Steeltoe.Discovery.ClientCore" Version="3.0.0" />
  <PackageReference Include="Steeltoe.Extensions.Configuration.ConfigServerCore" Version="3.0.0" />
  <PackageReference Include="Steeltoe.Management.TracingCore" Version="3.0.0" />
</ItemGroup>

Program.cs を更新する

Program.Main メソッドで、UseAzureSpringCloudService メソッドを呼び出します。

Steeltoe 2.4.4 の場合は、ConfigureWebHostDefaults の後に、および AddConfigServer が呼び出される場合はその後に UseAzureSpringCloudService を呼び出します。

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        })
        .AddConfigServer()
        .UseAzureSpringCloudService();

Steeltoe 3.0.0 の場合は、ConfigureWebHostDefaults および Steeltoe 構成コードの前に UseAzureSpringCloudService を呼び出します。

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .UseAzureSpringCloudService()
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        })
        .AddConfigServer();

Eureka Server サービスの検出を有効にする

Note

Eureka は Enterprise プランには適用できません。 Enterprise プランを使用している場合、サービス レジストリの使用に関するページを参照してください。

アプリが Azure Spring Apps で実行されるときに使用される構成ソースで、spring.application.name をプロジェクトのデプロイ先の Azure Spring Apps アプリと同じ名前に設定します。

たとえば、EurekaDataProvider という名前の .NET プロジェクトを planet-weather-provider という名前の Azure Spring Apps アプリにデプロイする場合、appSettings.json ファイルには次の JSON を含める必要があります。

"spring": {
  "application": {
    "name": "planet-weather-provider"
  }
}

サービス検出を使用する

Eureka Server のサービス検出を使用してサービスを呼び出すには、http://<app_name> に HTTP 要求を送信します (この app_name はターゲット アプリの spring.application.name の値です)。 たとえば、次のコードでは planet-weather-provider サービスを呼び出しています。

using (var client = new HttpClient(discoveryHandler, false))
{
    var responses = await Task.WhenAll(
        client.GetAsync("http://planet-weather-provider/weatherforecast/mercury"),
        client.GetAsync("http://planet-weather-provider/weatherforecast/saturn"));
    var weathers = await Task.WhenAll(from res in responses select res.Content.ReadAsStringAsync());
    return new[]
    {
        new KeyValuePair<string, string>("Mercury", weathers[0]),
        new KeyValuePair<string, string>("Saturn", weathers[1]),
    };
}

この記事では、Azure Spring Apps にデプロイできるように既存の Java Spring アプリケーションを準備する方法について説明します。 適切に構成すると、Azure Spring Apps によって Java Spring アプリケーションの監視、スケーリング、更新を行う堅牢なサービスが実現します。

この例を実行する前に、基本的なクイックスタートを試してみることができます。

POM ファイルが構成されているときにアプリケーションを Azure Spring Apps にデプロイする方法については、その他の例で説明しています。

この記事では、必要な依存関係とそれらを POM ファイルに追加する方法について説明します。

Java ランタイム バージョン

詳細については、Azure Spring Apps に関する FAQ の「Java ランタイムと OS バージョン」セクションを参照してください。

Spring Boot と Spring Cloud のバージョン

既存の Spring Boot アプリケーションを Azure Spring Apps にデプロイできるよう準備するには、以降のセクションに示したように、アプリケーションの POM ファイルに Spring Boot と Spring Cloud の依存関係を追加します。

Azure Spring Apps では、リリースの 30 日後から最新の Spring Boot または Spring Cloud メジャー バージョンがサポートされます。 Azure Spring Apps では、最新のマイナー バージョンがリリース直後にサポートされます。 サポートされる Spring Boot のバージョンは Spring Boot Releases から、Spring Cloud のバージョンは Spring Cloud Releases から入手できます。

サポートされている Spring Boot と Spring Cloud の組み合わせを次の表に示します。

Spring Boot のバージョン Spring Cloud のバージョン サポート終了
3.2.x 2023.0.x (Leyton とも呼ばれます) 2024-11-23
3.1.x 2022.0.3+ (Kilburn とも呼ばれています) 2024-05-18
3.0.x 2022.0.3+ (Kilburn とも呼ばれています) 2023-11-24
2.7.x 2021.0.3+ (Jubilee とも呼ばれています) 2023-11-24

詳細については、次のページを参照してください。

サービス レジストリから分散トレースまでの Azure Spring Apps の組み込み機能を有効にするには、アプリケーションに次の依存関係も含める必要があります。 特定のアプリに対応する機能が不要な場合は、これらの依存関係の一部を削除できます。

サービス レジストリ

マネージド Azure Service Registry サービスを使用するには、次に示すように、pom.xml ファイルに spring-cloud-starter-netflix-eureka-client 依存関係を含めます。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

サービス レジストリ サーバーのエンドポイントは、アプリで環境変数として自動的に挿入されます。 アプリケーションはサービス レジストリ サーバーに登録され、他の依存アプリケーションを検出できます。

EnableDiscoveryClient 注釈

アプリケーションのソース コードに次の注釈を追加します。

@EnableDiscoveryClient

たとえば、前出の例の piggymetrics アプリケーションを見てみましょう。

package com.piggymetrics.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy

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

分散構成

分散構成を有効にするには、pom.xml ファイルの依存関係セクションに次の spring-cloud-config-client の依存関係を含めます。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

警告

ブートストラップ構成で spring.cloud.config.enabled=false を指定しないでください。 そうしないと、アプリケーションと Config Server の連携が停止します。

メトリック

次に示すように、pom.xml ファイルの依存関係セクションに spring-boot-starter-actuator の依存関係を含めます。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

メトリックは JMX エンドポイントから定期的に取得されます。 メトリックを視覚化するには、Azure portal を使用します。

警告

構成プロパティに spring.jmx.enabled=true を指定する必要があります。 そうしないと、Azure portal でメトリックを視覚化できません。

関連項目

次のステップ

この記事では、Java Spring アプリケーションを Azure Spring Apps へのデプロイ用に構成する方法について学習しました。 Config Server インスタンスを設定する方法については、Config Server インスタンスの設定に関するページを参照してください。

その他のサンプルを GitHub で入手できます (Azure Spring Apps のサンプル)。