クイック スタート:初めての Azure Spring Cloud アプリケーションをデプロイする

このクイックスタートでは、Azure で実行する単純な Azure Spring Cloud マイクロサービス アプリケーションをデプロイする方法について説明します。

注意

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

このクイックスタートでは、次の方法について説明します。

  • 基本的な Steeltoe .NET Core プロジェクトを生成する
  • Azure Spring Cloud サービス インスタンスをプロビジョニングする
  • パブリック エンドポイントがあるアプリをビルドしてデプロイする
  • リアルタイムでログをストリームする

このクイックスタートで使用するアプリケーション コードは、.NET Core Web API プロジェクト テンプレートを使用して構築された単純なアプリです。 この例を完了すると、このアプリケーションにオンラインでアクセスし、Azure portal と Azure CLI で管理できるようになります。

前提条件

Azure CLI 拡張機能をインストールする

Azure CLI のバージョンが 2.0.67 以降であることを確認します。

az --version

次のコマンドを使用して、Azure CLI 用の Azure Spring Cloud 拡張機能をインストールします。

az extension add --name spring-cloud

Azure へのサインイン

  1. Azure CLI にサインインします。

    az login
    
  2. サブスクリプションが複数ある場合は、このクイックスタートで使用するものを選択します。

    az account list -o table
    
    az account set --subscription <Name or ID of a subscription from the last step>
    

Steeltoe .NET Core プロジェクトを生成する

Visual Studio で API プロジェクト テンプレートを使用して、"hello world" という名前の ASP.NET Core Web アプリケーションを作成します。 自動生成される WeatherForecastController を後でテスト エンドポイントとして使用することに注意してください。

  1. プロジェクトのソース コード用のフォルダーを作成し、プロジェクトを生成します。

    mkdir source-code
    
    cd source-code
    
    dotnet new webapi -n hello-world --framework netcoreapp3.1
    
  2. プロジェクト ディレクトリに移動します。

    cd hello-world
    
  3. appSettings.json ファイルを編集して、次の設定を追加します。

    "spring": {
      "application": {
        "name": "hello-world"
      }
    },
    "eureka": {
      "client": {
        "shouldFetchRegistry": true,
        "shouldRegisterWithEureka": true
      }
    }
    
  4. また、appsettings.json で、Microsoft カテゴリのログ レベルを Warning から Informationに変更します。 この変更により、後の手順でストリーミング ログを表示するときにログが生成されるようになります。

    appsettings.json ファイルは、次の例のようになります。

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Information",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "AllowedHosts": "*",
      "spring": {
        "application": {
          "name": "hello-world"
        }
      },
      "eureka": {
        "client": {
          "shouldFetchRegistry": true,
          "shouldRegisterWithEureka": true
        }
      }
    }
    
  5. .csproj ファイルに依存関係と Zip タスクを追加します。

    <ItemGroup>
      <PackageReference Include="Steeltoe.Discovery.ClientCore" Version="3.1.0" />
      <PackageReference Include="Microsoft.Azure.SpringCloud.Client" Version="2.0.0-preview.1" />
    </ItemGroup>
    <Target Name="Publish-Zip" AfterTargets="Publish">
      <ZipDirectory SourceDirectory="$(PublishDir)" DestinationFile="$(MSBuildProjectDirectory)/deploy.zip" Overwrite="true" />
    </Target>
    

    パッケージは、Steeltoe サービスの検出と Azure Spring Cloud クライアント ライブラリ用です。 Zip タスクは、Azure へのデプロイ用です。 dotnet publish コマンドを実行すると、publish フォルダーにバイナリが生成されます。このタスクにより、publish フォルダーが .zip ファイルに圧縮されます。これを Azure にアップロードします。

  6. Program.cs ファイルに、using ディレクティブと Azure Spring Cloud クライアント ライブラリを使用するコードを追加します。

    using Microsoft.Azure.SpringCloud.Client;
    
    public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .UseAzureSpringCloudService()
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    });
    
  7. Startup.cs ファイルの ConfigureServices メソッドの最後に、using ディレクティブと Steeltoe サービス検出を使用するコードを追加します。

    using Steeltoe.Discovery.Client;
    
    public void ConfigureServices(IServiceCollection services)
    {
        // Template code not shown.
    
        services.AddDiscoveryClient(Configuration);
    }
    
  8. プロジェクトをビルドし、コンパイル エラーがないことを確認します。

    dotnet build
    

サービス インスタンスをプロビジョニングする

次の手順では、Azure portal を使用して、Azure Spring Cloud のインスタンスを作成します。

  1. Azure Portalを開きます。

  2. 上部の検索ボックスから Azure Spring Cloud を探します。

  3. その結果から [Azure Spring Cloud] を選択します。

    ASC アイコンでの開始

  4. [Azure Spring Cloud] ページで [作成] を選択します。

    ASC アイコンでの追加

  5. Azure Spring Cloud の [作成] ページで、フォームに入力します。 次のガイドラインを考慮してください。

    • サブスクリプション:このリソースに対する課金用のサブスクリプションを選択します。
    • [リソース グループ] :新しいリソース グループを作成します。 ここで入力する名前は、後の手順で <resource group name> として使用されます。
    • [サービスの詳細/名前] : <service instance name> を指定します。 名前の長さは 4 文字から 32 文字で、小文字、数字、およびハイフンのみを使用できます。 サービス名の最初の文字は英字でなければならず、最後の文字は英字または数字でなければなりません。
    • [リージョン] :自分のサービス インスタンスのリージョンを選択します。

    ASC ポータルの起動

  6. [確認と作成] を選択します。

  7. [作成] を選択します

アプリを構築してデプロイする

次の手順では、前に作成したプロジェクトをビルドして配置します。

  1. コマンド プロンプトがプロジェクト フォルダー内にあることを確認してください。

  2. 次のコマンドを実行してプロジェクトをビルドし、バイナリを発行して、バイナリをプロジェクトフォルダー内の .zip ファイルに格納します。

    dotnet publish -c release -o ./publish
    
  3. パブリック エンドポイントが割り当てられた Azure Spring Cloud インスタンスでアプリを作成します。 appsettings.json で指定したものと同じアプリケーション名 "hello world" を使用します。

    az spring-cloud app create -n hello-world -s <service instance name> -g <resource group name> --assign-endpoint --runtime-version NetCore_31
    
  4. .zip ファイルをアプリにデプロイします。

    az spring-cloud app deploy -n hello-world -s <service instance name> -g <resource group name> --runtime-version NetCore_31 --main-entry hello-world.dll --artifact-path ./deploy.zip
    

    --main-entry オプションにより、アプリケーションのエントリ ポイントを含む .dll ファイルを識別します。 サービスは、 .zip ファイルをアップロードした後、すべてのファイルとフォルダーを抽出し、--main-entry で指定された .dll ファイル内のエントリ ポイントを実行しようとします。

    アプリケーションのデプロイが完了するまでに数分かかります。 デプロイが完了したことを確認するには、Azure portal で [アプリ] ブレードに移動します。

アプリのテスト

デプロイが完了したら、次の URL でアプリにアクセスできるようになります。

https://<service instance name>-hello-world.azuremicroservices.io/weatherforecast

次の例のような JSON データが返されます。

[{"date":"2020-09-08T21:01:50.0198835+00:00","temperatureC":14,"temperatureF":57,"summary":"Bracing"},{"date":"2020-09-09T21:01:50.0200697+00:00","temperatureC":-14,"temperatureF":7,"summary":"Bracing"},{"date":"2020-09-10T21:01:50.0200715+00:00","temperatureC":27,"temperatureF":80,"summary":"Freezing"},{"date":"2020-09-11T21:01:50.0200717+00:00","temperatureC":18,"temperatureF":64,"summary":"Chilly"},{"date":"2020-09-12T21:01:50.0200719+00:00","temperatureC":16,"temperatureF":60,"summary":"Chilly"}]

リアルタイムでログをストリームする

次のコマンドを使用して、アプリからリアルタイム ログを取得します。

az spring-cloud app logs -n hello-world -s <service instance name> -g <resource group name> --lines 100 -f

出力にログが表示されます。

[Azure Spring Cloud] The following environment variables are loaded:
2020-09-08 20:58:42,432 INFO supervisord started with pid 1
2020-09-08 20:58:43,435 INFO spawned: 'event-gather_00' with pid 9
2020-09-08 20:58:43,436 INFO spawned: 'dotnet-app_00' with pid 10
2020-09-08 20:58:43 [Warning] No managed processes are running. Wait for 30 seconds...
2020-09-08 20:58:44,843 INFO success: event-gather_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2020-09-08 20:58:44,843 INFO success: dotnet-app_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
←[40m←[32minfo←[39m←[22m←[49m: Steeltoe.Discovery.Eureka.DiscoveryClient[0]
      Starting HeartBeat
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://[::]:1025
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /netcorepublish/6e4db42a-b160-4b83-a771-c91adec18c60
2020-09-08 21:00:13 [Information] [10] Start listening...
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://asc-svc-hello-world.azuremicroservices.io/weatherforecast
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
      Executing endpoint 'hello_world.Controllers.WeatherForecastController.Get (hello-world)'
info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[3]
      Route matched with {action = "Get", controller = "WeatherForecast"}. Executing controller action with signature System.Collections.Generic.IEnumerable`1[hello_world.WeatherForecast] Get() on controller hello_world.Controllers.WeatherForecastController (hello-world).
info: Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor[1]
      Executing ObjectResult, writing value of type 'hello_world.WeatherForecast[]'.
info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[2]
      Executed action hello_world.Controllers.WeatherForecastController.Get (hello-world) in 1.8902ms
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
      Executed endpoint 'hello_world.Controllers.WeatherForecastController.Get (hello-world)'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished in 4.2591ms 200 application/json; charset=utf-8

ヒント

さらに多くのパラメーターとログ ストリーム機能を調べるには、az spring-cloud app logs -h を使用します。

高度なログ分析機能については、Azure portal のメニューで [ログ] タブにアクセスしてください。 ここで、ログの待ち時間は数分です。 Logs Analytics

このクイックスタートでは、Azure で実行する単純な Azure Spring Cloud マイクロサービス アプリケーションをデプロイする方法について説明します。

このチュートリアルで使用されるアプリケーション コードは、Spring Initializr を使用してビルドされる単純なアプリです。 この例を完了すると、アプリケーションにオンラインでアクセスし、Azure portal で管理できるようになります。

このクイックスタートでは、以下の方法について説明します。

  • 基本的な Spring Cloud プロジェクトを生成する
  • サービス インスタンスをプロビジョニングする
  • パブリック エンドポイントがあるアプリをビルドしてデプロイする
  • リアルタイムでログをストリームする

前提条件

このクイック スタートを完了するには、以下が必要です。

Spring Cloud プロジェクトを生成する

Spring Initializr を開始して、Azure Spring Cloud に対して推奨される依存関係があるサンプル プロジェクトを生成します。 このリンクでは、次の URL を使用して既定の設定が提供されます。

https://start.spring.io/#!type=maven-project&language=java&platformVersion=2.5.3&packaging=jar&jvmVersion=1.8&groupId=com.example&artifactId=hellospring&name=hellospring&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.hellospring&dependencies=web,cloud-eureka,actuator,cloud-starter-sleuth,cloud-starter-zipkin,cloud-config-client

次の図は、このサンプル プロジェクトに対して推奨される Initializr 設定を示しています。

この例では、Java バージョン 8 を使用しています。 Java バージョン 11 を使用したい場合は、 [Project Metadata](プロジェクトのメタデータ) にあるオプションを変更してください。

Initializr のページ

  1. すべての依存関係が設定されたら、 [生成] を選択します。 パッケージをダウンロードしてアンパックし、次のように src/main/java/com/example/hellospring/HelloController.java を追加して、単純な Web アプリケーション用の Web コントローラーを作成します。

    package com.example.hellospring;
    
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @RestController
    public class HelloController {
    
        @RequestMapping("/")
        public String index() {
            return "Greetings from Azure Spring Cloud!";
        }
    
    }
    

Azure Spring Cloud のインスタンスをプロビジョニングする

次の手順では、Azure portal を使用して、Azure Spring Cloud のインスタンスを作成します。

  1. 新しいタブで、Azure portal を開きます。

  2. 上部の検索ボックスから Azure Spring Cloud を探します。

  3. その結果から [Azure Spring Cloud] を選択します。

    ASC アイコンでの開始

  4. [Azure Spring Cloud] ページで [作成] を選択します。

    ASC アイコンでの追加

  5. Azure Spring Cloud の [作成] ページで、フォームに入力します。 次のガイドラインを考慮してください。

    • サブスクリプション:このリソースに対する課金用のサブスクリプションを選択します。
    • [リソース グループ] :新しいリソース用に新しいリソース グループを作成することをお勧めします。 これが、後の手順で <resource group name> として使用されます。
    • [サービスの詳細/名前] : <service instance name> を指定します。 名前の長さは 4 文字から 32 文字で、小文字、数字、およびハイフンのみを使用できます。 サービス名の最初の文字は英字でなければならず、最後の文字は英字または数字でなければなりません。
    • [場所] :自分のサービス インスタンスのリージョンを選択します。

    ASC ポータルの起動

  6. [確認と作成] を選択します。

アプリを構築してデプロイする

以下の手順では、Azure CLI を使用してアプリケーションをビルドし、デプロイします。 プロジェクトのルートで、次のコマンドを実行します。

  1. Azure にサインインしてサブスクリプションを選択します。

    az login
    

    複数のサブスクリプションがある場合は、次のコマンドを使用して、アクセスできるサブスクリプションを一覧表示し、このクイックスタートに使用するサブスクリプションを選択します。

    az account list -o table
    

    次のコマンドを使用して、このクイックスタートの Azure CLI で使用する既定のサブスクリプションを設定します。

    az account set --subscription <Name or ID of a subscription from the last step>
    
  2. Maven を使用してプロジェクトをビルドします。

    mvn clean package -DskipTests
    
  3. パブリック エンドポイントが割り当てられるアプリを作成します。 Spring Cloud プロジェクトの生成時に Java バージョン 11 を選択した場合、--runtime-version=Java_11 スイッチを含めます。

    az spring-cloud app create -n hellospring -s <service instance name> -g <resource group name> --assign-endpoint true
    
  4. アプリの Jar ファイルをデプロイします (Windows では target\hellospring-0.0.1-SNAPSHOT.jar)。

    az spring-cloud app deploy -n hellospring -s <service instance name> -g <resource group name> --artifact-path <jar file path>
    
  5. アプリケーションのデプロイが完了するまでに数分かかります。 デプロイが完了したことを確認するには、Azure portal で [アプリ] ブレードに移動します。 アプリケーションの状態が表示されるはずです。

デプロイが完了したら、https://<service instance name>-hellospring.azuremicroservices.io/ でアプリにアクセスできるようになります。

ブラウザーからアプリにアクセスする

リアルタイムでログをストリーミングする

次のコマンドを使用して、アプリからリアルタイム ログを取得します。

az spring-cloud app logs -n hellospring -s <service instance name> -g <resource group name> --lines 100 -f

結果のログが表示されます。

ストリーミング ログ

ヒント

さらに多くのパラメーターとログ ストリーム機能を調べるには、az spring-cloud app logs -h を使用します。

高度なログ分析機能については、Azure portal のメニューで [ログ] タブにアクセスしてください。 ここで、ログの待ち時間は数分です。

Logs Analytics

リソースをクリーンアップする

前の手順で作成した Azure リソースは、サブスクリプションに残っている間は課金され続けます。 これらのリソースが今後は必要ないと予想される場合は、ポータルから、または Azure CLI で次のコマンドを実行して、このリソース グループを削除してください。

az group delete --name <your resource group name; for example: hellospring-1558400876966-rg> --yes

次の手順

このクイックスタートでは、次の方法について学習しました。

  • 基本的な Azure Spring Cloud プロジェクトを生成する
  • サービス インスタンスをプロビジョニングする
  • パブリック エンドポイントがあるアプリをビルドしてデプロイする
  • リアルタイムでログをストリームする

Azure Spring のその他の機能を使用する方法について学習するには、Azure Spring Cloud にサンプル アプリケーションをデプロイするクイックスタート シリーズに進んでください。

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