Share via


クイックスタート: RESTful API アプリケーションを Azure Spring Apps にデプロイする

Note

毎月最初の 50 vCPU 時間と 100 GB 時間のメモリは無料です。 詳細については、Apps on Azure ブログの「価格の引き下げ - Azure Spring Apps はより多く、より低コスト」を参照 してください。

注意

Azure Spring Apps は、Azure Spring Cloud サービスの新しい名前です。 サービスの名前は新しくなりましたが、スクリーンショット、ビデオ、図などの資産の更新に取り組んでいる間、場所によってはしばらく古い名前が表示されます。

この記事では、Microsoft Entra ID によって保護された RESTful API アプリケーションを Azure Spring Apps にデプロイする方法について説明します。 サンプル プロジェクトは、バックエンド サービスのみを提供し、Microsoft Entra ID を使用して RESTful API を保護する Simple Todo Web アプリケーションを基盤とする簡略化されたバージョンです。

これらの RESTful API は、ロールベースのアクセス制御 (RBAC) を適用して保護されます。 匿名ユーザーはデータにアクセスできないため、異なるユーザーのアクセスを制御することはできません。 匿名ユーザーには、次の 3 つのアクセス許可しかありません。

  • 読み取り: このアクセス許可により、ユーザーは ToDo データを読み取ることができます。
  • 書き込み: このアクセス許可により、ユーザーは ToDo データを追加または更新できます。
  • 削除: このアクセス許可により、ユーザーは ToDo データを削除できます。

デプロイが成功したら、Swagger UI を使用して API を表示およびテストできます。

Screenshot of the Swagger UI that shows the API document.

システムのアーキテクチャを次の図に示します。

Diagram that shows the architecture of a Spring web application.

この記事では、リソースを作成して Azure Spring Apps にデプロイするための次のオプションについて説明します。

  • Azure portal + Maven プラグインのオプションは、リソースを作成し、アプリケーションを段階的にデプロイするための従来の方法を提供します。 このオプションは、Azure クラウド サービスを初めて使用する Spring 開発者に適しています。
  • Azure Developer CLI オプションは、単純なコマンドを使用して、自動的にリソースを作成し、アプリケーションをデプロイする、より効率的な方法です。 Azure Developer CLI では、テンプレートを使用して、必要な Azure リソースをプロビジョニングし、アプリケーション コードをデプロイします。 このオプションは、Azure クラウド サービスに精通している Spring 開発者に適しています。

この記事では、リソースを作成して Azure Spring Apps にデプロイするための次のオプションについて説明します。

  • Azure portal + Maven プラグインのオプションは、リソースを作成し、アプリケーションを段階的にデプロイするための従来の方法を提供します。 このオプションは、Azure クラウド サービスを初めて使用する Spring 開発者に適しています。
  • Azure CLI のオプションは、強力なコマンド ライン ツールを使用して、Azure リソースを管理します。 このオプションは、Azure クラウド サービスに精通している Spring 開発者に適しています。

1.前提条件

2. Spring プロジェクトを準備する

RESTful API アプリをデプロイするには、最初の手順として、Spring プロジェクトをローカルで実行するように準備します。

次の手順を使用し、アプリをローカル環境にクローンして実行します。

  1. 次のコマンドを使用して、GitHub からサンプル プロジェクトを複製します。

    git clone https://github.com/Azure-Samples/ASA-Samples-Restful-Application.git
    
  2. アプリをローカルで実行する場合は、まず「RESTful API を公開する」および、「アプリケーション構成を更新する」セクションの手順を完了してから、次のコマンドを使用して Maven でサンプル アプリケーションを実行してください。

    cd ASA-Samples-Restful-Application
    ./mvnw spring-boot:run
    

3. クラウド環境を準備する

このサンプル アプリを実行するために必要な主なリソースは、Azure Spring Apps インスタンスと Azure Database for PostgreSQL インスタンスです。 以下のセクションでは、これらのリソースを作成する方法について説明します。

3.1. Azure portal にサインインする

Azure portal に移動し、資格情報を入力してポータルにサインインします。 既定のビューはサービス ダッシュボードです。

3.2. Azure Spring Apps インスタンスを作成する

次の手順を使用して、Azure Spring Apps サービス インスタンスを作成します。

  1. Azure portal の隅にある [リソースの作成] を選択します。

  2. [Compute]>[Azure Spring Apps] を選択します。

  3. [基本] フォームに以下の情報を入力します。

    設定 提案された値 説明
    [サブスクリプション] 自分のサブスクリプション名。 サーバーに使用する Azure サブスクリプション。 複数のサブスクリプションをお持ちの場合は、リソースの課金対象となるサブスクリプションを選択します。
    リソース グループ myresourcegroup 新しいリソース グループ名、またはサブスクリプションの既存のリソース グループ名。
    名前 myasa Azure Spring Apps サービスを識別する一意の名前。 名前の長さは 4 文字から 32 文字で、小文字、数字、およびハイフンのみを使用できます。 サービス名の最初の文字は英字でなければならず、最後の文字は英字または数字でなければなりません。
    プラン Enterprise 価格プラン。これによって、インスタンスに関連付けられるリソースとコストが決まります。
    リージョン ユーザーに最も近いリージョン。 ユーザーに最も近い場所。
    ゾーン冗長 オフ Azure 可用性ゾーンに Azure Spring Apps サービスを作成するオプション。 この機能は、現在、すべてのリージョンでサポートされているわけではありません。
    ソフトウェア IP プラン 従量課金制 Azure Spring Apps の従量課金制の料金プラン。
    Terms 選択済み Marketplace オファリングに関連付けられている契約チェックボックス。 このチェック ボックスをオンにする必要があります。
    サンプル プロジェクトのデプロイ オフ 組み込みのサンプル アプリケーションを使うオプション。
  4. Review and Create(確認と作成) を選択して、選択内容を確認します。 次に、[作成] を選択して、Azure Spring Apps インスタンスをプロビジョニングします。

  5. ツール バーの [通知] アイコン (ベル) を選択して、デプロイ プロセスを監視します。 デプロイが完了したら、[ダッシュボードにピン留めする] を選択できます。これにより、このサービスのタイルが、サービスの [概要] ページへのショートカットとして、Azure portal ダッシュボードに作成されます。

    Screenshot of the Azure portal that shows the Notifications pane for Azure Spring Apps creation.

  6. [リソースに移動] を選択して、[Azure Spring Apps Overview](Azure Spring Apps の概要) ページに移動します。

3.3. PostgreSQL インスタンスを準備する

次の手順を使用して、Azure Database for PostgreSQL サーバーを作成します。

  1. Azure portal にアクセスし、[リソースの作成] を選択してください。

  2. [データベース]>[Azure Database for PostgreSQL] の順に選択します。

  3. [フレキシブル サーバー] デプロイ オプションを選択します。

    Screenshot of the Azure portal that shows the Select Azure Database for PostgreSQL deployment option page.

  4. [基本] タブに次の情報を入力します。

    • [サーバー名]: my-demo-pgsql
    • [リージョン]: 米国東部
    • [PostgreSQL バージョン]: 14
    • [ワークロードの種類]: 開発
    • [高可用性を有効にする]: 選択解除
    • [認証方法]: PostgreSQL の認証のみ
    • [管理者ユーザー名]: myadmin
    • [パスワード][パスワードの確認]: 任意のパスワードを入力します。
  5. 次の情報を使用して、[ネットワーク] タブを構成してください。

    • [接続方法]: パブリック アクセス (許可されている IP アドレス)
    • [Azure 内の任意の Azure サービスにこのサーバーへのパブリック アクセスを許可する]: オン
  6. [確認と作成] を選んで選択内容を確認し、[作成] を選んでサーバーをプロビジョニングしてください。 この操作には数分かかる場合があります。

  7. Azure portal で PostgreSQL サーバーに移動します。 [概要] ページで、[サーバー名]の値を探し、後で使用できるように記録してください。 これは、Azure Spring Apps でアプリの環境変数を構成するために必要です。

  8. ナビゲーション メニューから [データベース] を選び、データベースを作成します (例: todo)。

    Screenshot of the Azure portal that shows the Databases page with the Create Database pane open.

3.4. アプリ インスタンスを PostgreSQL インスタンスに接続する

次の手順を使用して、サービス インスタンスを接続します。

  1. Azure portal で Azure Spring Apps インスタンスに移動します。

  2. ナビゲーション メニューから [アプリ] を開き、[アプリの作成] を選択してください。

  3. [アプリの作成] ページで、アプリ名を「simple-todo-api」と入力し、デプロイの種類として [Java アーティファクト] を選択します。

  4. [作成] を選択してアプリの作成を完了したら、そのアプリを選択して詳細を表示します。

  5. Azure portal で作成したアプリに移動します。 [概要] ページで、[エンドポイントの割り当て] を選択して、アプリのパブリック エンドポイントを公開します。 デプロイ後にアプリにアクセスするための URL を保存します。

  6. ナビゲーション ウィンドウで [サービス コネクタ] を選択し、[作成] を選択して、新しいサービス接続を作成します。

    Screenshot of the Azure portal that shows the enterprise plan Service Connector page with the Create button highlighted.

  7. [基本] タブに次の情報を入力します。

    • [サービスの種類]: DB for PostgreSQL フレキシブル サーバー
    • 接続名: 自動的に生成された名前が設定されます。変更も可能です。
    • [サブスクリプション]:サブスクリプションを選択します。
    • [PostgreSQL flexible server] (PostgreSQL フレキシブル サーバー): my-demo-pgsql
    • PostgreSQL データベース: 作成したデータベースを選びます。
    • [クライアントの種類]: SpringBoot

    Screenshot of the Azure portal that shows the Basics tab of the Create connection pane for connecting to Service Bus.

  8. 次の情報を使って、[次へ: 認証] タブを構成します。

    • [Select the authentication type you'd like to use between your compute service and target service.] (コンピューティング サービスとターゲット サービスの間で使用する認証の種類を選択します。): [接続文字列] を選択します。
    • [Continue with] (続行): [データベース資格情報] を選択します
    • [ユーザー名]: myadmin
    • [パスワード]: パスワードを入力します。

    Screenshot of the Azure portal that shows the Authentication tab of the Create connection pane with the Connection string option highlighted.

  9. [次へ: ネットワーク] を選択します。 既定のオプション [ターゲット サービスへのアクセスを有効にするようにファイアウォール規則を構成する] を使います。

  10. [次へ: 確認と作成] を選択して選択内容を確認し、[作成] を選択して接続を作成します。

3.5. RESTful API を公開する

次の手順を使用して、Microsoft Entra ID に RESTful API を公開します。

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

  2. 複数のテナントにアクセスできる場合は、[ディレクトリとサブスクリプション] フィルター () を使用して、アプリケーションを登録するテナントを選択してください。

  3. Microsoft Entra ID を検索して選択します。

  4. [管理][アプリの登録]>[新規登録] の順に選択します。

  5. [名前] フィールドにアプリケーションの名前を入力してください (例: Todo)。 アプリのユーザーにはこの名前が表示されます。後で変更することもできます。

  6. [サポートされているアカウントの種類] に、[任意の組織ディレクトリ内のアカウント (任意の Microsoft Entra ディレクトリ - マルチテナント) と個人用の Microsoft アカウント] を選択してください。

  7. [登録] を選択して、アプリケーションを作成します。

  8. アプリの [概要] ページで、 [アプリケーション (クライアント) ID] の値を探し、後で使用するために記録します。 これは、このプロジェクトの YAML 構成ファイルを構成するために必要です。

  9. [管理][API の公開] を選択し、ページの先頭にある [アプリケーション ID の URI] を見つけて、[追加] を選択してください。

  10. [アプリケーション ID の URI の編集] ページで、提案されたアプリケーション ID URI (api://{client ID}) をそのまま使用するか、クライアント ID の代わりにわかりやすい名前 (api://simple-todo など ) を使用して、[保存] を選択してください。

  11. [管理] で、[API の公開]>[スコープの追加] を選択し、次の情報を入力してください。

    • [スコープ名] に「ToDo.Read」と入力してください。
    • [同意できるユーザー] には [管理者のみ] を選択してください。
    • [管理者の同意の表示名] には、「ToDo データの読み取り」と入力してください。
    • [管理者の同意の説明] として、「認証済みユーザーが ToDo データを読み取ることができます。」と入力してください。
    • [状態] は有効のままにしてください。
    • スコープの追加を選択します。
  12. 前の手順を繰り返して、他の 2 つのスコープ (ToDo.WriteToDo.Delete) を追加します。

    Screenshot of the Azure portal that shows the Expose an API page of a RESTful API application.

3.6. アプリケーションの構成を更新する

次の手順を使用して、Microsoft Entra 登録済みアプリケーション情報を使用して RESTful API アプリケーションとの関係を確立するように YAML ファイルを更新します。

  1. simple-todo-api アプリの src/main/resources/application.yml ファイルを見つけます。 次の例に一致するように、spring.cloud.azure.active-directory セクションの構成を更新します。 プレースホルダーを、必ず前に作成した値で置き換えてください。

    spring:
      cloud:
        azure:
          active-directory:
            profile:
              tenant-id: <tenant>
            credential:
              client-id: <your-application-ID-of-ToDo>
            app-id-uri: <your-application-ID-URI-of-ToDo>
    

    Note

    v1.0 トークンでは、構成には API のクライアント ID が必要ですが、v2.0 トークンでは、要求でクライアント ID またはアプリケーション ID URI を使用できます。 対象ユーザーの検証を適切に完了するために、両方を構成することができます。

    tenant-id に使用できる値: commonorganizationsconsumers、またはテナント ID。 これらの値の詳細については、「エラー AADSTS50020 - ID プロバイダーのユーザー アカウントがテナントに存在しない」の「間違ったエンドポイント (個人用アカウントと organization アカウント) を使用しました」セクションを参照してください。 シングルテナント アプリの変換については、「Microsoft Entra ID でシングルテナント アプリをマルチテナントに変換する」を参照してください。

  2. 次のコマンドを使用して、サンプル プロジェクトをリビルドしてください。

    ./mvnw clean package
    

4. アプリを Azure Spring Apps にデプロイする

アプリを Azure Spring Apps にデプロイできるようになりました。

次の手順に従って、Azure Spring Apps 用の Maven プラグインを使用してデプロイします。

  1. complete ディレクトリに移動し、次のコマンドを使用して Azure Spring Apps のアプリを構成します。

    ./mvnw com.microsoft.azure:azure-spring-apps-maven-plugin:1.19.0:config
    

    次の一覧に、コマンド対話を記載します。

    • OAuth2 login: OAuth2 プロトコルに基づいて Azure へのサインインを承認する必要があります。
    • Select subscription (サブスクリプションを選択してください): 作成した Azure Spring Apps インスタンスのサブスクリプション リスト番号を選択します。既定では、リストの最初のサブスクリプションに設定されます。 既定の番号を使用する場合は、Enter キーを直接押します。
    • Azure で既存の Azure Spring Apps を使う: 既存の Azure Spring Apps インスタンスを使うには、y キーを押します。
    • Select Azure Spring Apps for deployment (デプロイ用の Azure Spring Apps を選択してください): 作成した Azure Spring Apps インスタンスのリスト番号を選択してください。 既定の番号を使用する場合は、Enter キーを直接押します。
    • Azure Spring Apps <your-instance-name> で既存のアプリを使う: 作成したアプリを使うには、y キーを押します。
    • 上記のすべての構成の保存を確定する: y キーを押します。 n を押した場合、構成は POM ファイルに保存されません。
  2. 次のコマンドを使用して、アプリをデプロイします。

    ./mvnw azure-spring-apps:deploy
    

    次の一覧に、コマンド対話を記載します:

    • OAuth2 login: OAuth2 プロトコルに基づいて Azure へのサインインを承認する必要があります。

    コマンドが実行されると、デプロイが成功したことを示す次のログ メッセージが表示されます。

[INFO] Deployment Status: Running
[INFO]   InstanceName:simple-todo-api-default-15-xxxxxxxxx-xxxxx  Status:Running Reason:null       DiscoverStatus:N/A       
[INFO] Getting public url of app(simple-todo-api)...
[INFO] Application url: https://<your-Azure-Spring-Apps-instance-name>-simple-todo-api.azuremicroservices.io

5. アプリ を検証します

RESTful API にアクセスして、動作するかどうかを確認できるようになりました。

5.1. アクセス トークンの要求

RESTful API は、Microsoft Entra ID によって保護されるリソース サーバーとして機能します。 アクセス トークンを取得する前に、別のアプリケーションを Microsoft Entra ID に登録し、ToDoWeb という名前のクライアント アプリケーションにアクセス許可を付与する必要があります。

クライアント アプリケーションの登録

次の手順を使用して、アプリケーションを Microsoft Entra ID に登録してください。これは、ToDo アプリのアクセス許可を追加するために使用されます。

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

  2. 複数のテナントにアクセスできる場合は、[ディレクトリとサブスクリプション] フィルター () を使用して、アプリケーションを登録するテナントを選択してください。

  3. Microsoft Entra ID を検索して選択します。

  4. [管理][アプリの登録]>[新規登録] の順に選択します。

  5. アプリケーションの名前を [名前] フィールドに入力してください (例: ToDoWeb)。 アプリのユーザーにはこの名前が表示されます。後で変更することもできます。

  6. [サポートされているアカウントの種類] で、既定値の [この組織のディレクトリ内のアカウントのみ] を選択してください。

  7. [登録] を選択して、アプリケーションを作成します。

  8. アプリの [概要] ページで、 [アプリケーション (クライアント) ID] の値を探し、後で使用するために記録します。 アクセス トークンを取得するためにこれが必要です。

  9. [API のアクセス許可][アクセス許可の追加][自分の API] の順に選択します。 先ほど登録した ToDo アプリケーションを選択し、ToDo.ReadToDo.WriteToDo.Delete アクセス許可を選択してください。 アクセス許可の追加 を選択します。

  10. [<テナント名>に管理者の同意を付与する] を選択し、追加したアクセス許可に管理者の同意を付与してください。

    Screenshot of the Azure portal that shows the API permissions of a web application.

RESTful API にアクセスするためのユーザーの追加

Microsoft Entra テナントでメンバー ユーザーを作成するには、次の手順に従います。 その後、ユーザーは RESTful API を使用して ToDo アプリケーションのデータを管理できます。

  1. [管理] で、[ユーザー]>[新しいユーザー]>[新しいユーザーの作成] を選択してください。

  2. [新しいユーザーの作成] ページで、次の情報を入力してください。

    • ユーザー プリンシパル名: ユーザーの名前を入力してください。
    • 表示名: ユーザーの表示名を入力してください。
    • パスワード: [パスワード] ボックスに表示されている自動生成されたパスワードをコピーしてください。

    Note

    新しいユーザーは、最初のサインイン認証を完了してパスワードを更新する必要があります。そうしないと、アクセス トークンを AADSTS50055: The password is expired 取得するとエラーが表示されます。

    新しいユーザーがログインすると、[操作が必要です] というダイアログが表示されます。 [後で確認] を選択して検証をスキップできます。

  3. [確認および作成] を選択して、選択内容を確認します。 [作成] を選択してユーザーを作成してください。

Swagger UI 承認の OAuth2 構成を更新する

Swagger UI 承認の OAuth2 構成を更新するには、次の手順に従います。 その後、ユーザーがアプリを通じて ToDoWeb アクセス トークンを取得することを承認できます。

  1. Azure portal で [Microsoft Entra ID] テナントを開き、登録済みの ToDoWeb アプリに移動してください。

  2. [管理][認証] を選択し、[プラットフォームの追加] を選択し、[シングルページ アプリケーション] を選択してください。

  3. "リダイレクト URI" フィールド内の OAuth2 リダイレクト URL として <your-app-exposed-application-URL-or-endpoint>/swagger-ui/oauth2-redirect.html 形式を使い、[構成] を選択します。

    Screenshot of the Azure portal that shows the Authentication page for Microsoft Entra ID.

2. Spring プロジェクトを準備する

RESTful API アプリをデプロイするには、最初の手順として、Spring プロジェクトをローカルで実行するように準備します。

次の手順を使用し、アプリをローカル環境にクローンして実行します。

  1. 次のコマンドを使用して、GitHub からサンプル プロジェクトを複製します。

    git clone https://github.com/Azure-Samples/ASA-Samples-Restful-Application.git
    
  2. アプリをローカルで実行する場合は、まず「RESTful API を公開する」および、「アプリケーション構成を更新する」セクションの手順を完了してから、次のコマンドを使用して Maven でサンプル アプリケーションを実行してください。

    cd ASA-Samples-Restful-Application
    ./mvnw spring-boot:run
    

3. クラウド環境を準備する

このサンプル アプリを実行するために必要な主なリソースは、Azure Spring Apps インスタンスと Azure Database for PostgreSQL インスタンスです。 以下のセクションでは、これらのリソースを作成する方法について説明します。

3.1. Azure portal にサインインする

Azure portal に移動し、資格情報を入力してポータルにサインインします。 既定のビューはサービス ダッシュボードです。

3.2. Azure Spring Apps インスタンスを作成する

次の手順を使用して、サービス インスタンスを作成します。

  1. ポータルの隅にある [リソースの作成] を選択します。

  2. [Compute]>[Azure Spring Apps] を選択します。

  3. [基本] フォームに入力します。 次の表を参考にして、フォームに入力します。 推奨されるプランの値は Standard consumption & dedicated (プレビュー) です。

    設定 提案された値 説明
    [サブスクリプション] 自分のサブスクリプション名。 サーバーに使用する Azure サブスクリプション。 複数のサブスクリプションをお持ちの場合は、リソースの課金対象となるサブスクリプションを選択します。
    リソース グループ myresourcegroup 新しいリソース グループ名、またはサブスクリプションの既存のリソース グループ名。
    名前 myasa Azure Spring Apps サービスを識別する一意の名前。 名前の長さは 4 文字から 32 文字で、小文字、数字、およびハイフンのみを使用できます。 サービス名の最初の文字は英字でなければならず、最後の文字は英字または数字でなければなりません。
    プラン Standard consumption & dedicated (プレビュー) 価格プランによって、インスタンスに関連付けられるリソースとコストが決まります。
    リージョン ユーザーに最も近いリージョン。 ユーザーに最も近い場所。
    Container Apps 環境 myenvironment 同じ仮想ネットワークを他のサービスやリソースと共有する Container Apps 環境インスタンスを選択するオプション。

    Container Apps 環境を作成するためのガイドとして、次の表を使用してください。

    設定 提案された値 説明
    環境名 myenvironment Azure Container Apps 環境サービスを識別する一意の名前。
    プラン 消費 価格プランによって、インスタンスに関連付けられるリソースとコストが決まります。
    ゾーン冗長 無効 Azure 可用性ゾーンに Container Apps 環境サービスを作成するオプション。
  4. Review and Create(確認と作成) を選択して、選択内容を確認します。 次に、[作成] を選択して、Azure Spring Apps インスタンスをプロビジョニングします。

  5. ツール バーの [通知] アイコン (ベル) を選択して、デプロイ プロセスを監視します。 デプロイが完了したら、[ダッシュボードにピン留めする] を選択できます。これにより、このサービスのタイルが、サービスの [概要] ページへのショートカットとして、Azure portal ダッシュボードに作成されます。

  6. [Go to resource] (リソースに移動) を選択して、サービスの [概要] ページを開きます。

    Screenshot of the Azure portal that shows the Overview page with the Notifications page open.

重要

従量課金ワークロード プロファイルでは従量課金制の課金モデルがあり、開始コストはありません。 プロビジョニングされたリソースに基づいて、専用ワークロード プロファイルに対して課金されます。 詳細については、「Azure Container Apps のワークロード プロファイル」と「Azure Spring Apps の価格」のページを参照してください。

3.3. PostgreSQL インスタンスを準備する

次の手順を使用して、Azure Database for PostgreSQL サーバーを作成します。

  1. Azure portal にアクセスし、[リソースの作成] を選択してください。

  2. [データベース]>[Azure Database for PostgreSQL] の順に選択します。

  3. [フレキシブル サーバー] デプロイ オプションを選択します。

    Screenshot of the Azure portal that shows the Select Azure Database for PostgreSQL deployment option page.

  4. [基本] タブに次の情報を入力します。

    • [サーバー名]: my-demo-pgsql
    • [リージョン]: 米国東部
    • [PostgreSQL バージョン]: 14
    • [ワークロードの種類]: 開発
    • [高可用性を有効にする]: 選択解除
    • [認証方法]: PostgreSQL の認証のみ
    • [管理者ユーザー名]: myadmin
    • [パスワード][パスワードの確認]: 任意のパスワードを入力します。
  5. 次の情報を使用して、[ネットワーク] タブを構成してください。

    • [接続方法]: パブリック アクセス (許可されている IP アドレス)
    • [Azure 内の任意の Azure サービスにこのサーバーへのパブリック アクセスを許可する]: オン
  6. [確認と作成] を選んで選択内容を確認し、[作成] を選んでサーバーをプロビジョニングしてください。 この操作には数分かかる場合があります。

  7. Azure portal で PostgreSQL サーバーに移動します。 [概要] ページで、[サーバー名]の値を探し、後で使用できるように記録してください。 これは、Azure Spring Apps でアプリの環境変数を構成するために必要です。

  8. ナビゲーション メニューから [データベース] を選び、データベースを作成します (例: todo)。

    Screenshot of the Azure portal that shows the Databases page with the Create Database pane open.

3.4. アプリ インスタンスを PostgreSQL インスタンスに接続する

次の手順を使用して、サービス インスタンスを接続します。

  1. Azure portal で Azure Spring Apps インスタンスに移動します。

  2. ナビゲーション メニューから [アプリ] を開き、[アプリの作成] を選択してください。

  3. [アプリの作成] ページで、アプリ名 simple-todo-api を入力し、デプロイの種類として [Java アーティファクト] を選択してください。

  4. [作成] を選択してアプリの作成を完了し、そのアプリを選択して詳細を表示してください。

  5. Azure portal で作成したアプリに移動します。 [概要] ページで、[エンドポイントの割り当て] を選択して、アプリのパブリック エンドポイントを公開します。 デプロイ後にアプリにアクセスするための URL を保存します。

  6. 作成したアプリに移動して [設定] を展開し、ナビゲーション メニューで [構成] を選択し、[環境変数] を選択して、環境変数を設定します。

  7. PostgreSQL 接続に次の環境変数を追加し、[保存] を選択してアプリ構成の更新を完了してください。 プレースホルダーは、以前に作成した独自の値に置き換えてください。

    環境変数
    SPRING_DATASOURCE_URL jdbc:postgresql://<your-PostgreSQL-server-name>:5432/<your-PostgreSQL-database-name>
    SPRING_DATASOURCE_USERNAME <your-PostgreSQL-admin-user>
    SPRING_DATASOURCE_PASSWORD <your-PostgreSQL-admin-password>

    Screenshot of the Azure portal that shows the Environment variables tab with all the values for the PostgreSQL connection.

3.5. RESTful API を公開する

次の手順を使用して、Microsoft Entra ID に RESTful API を公開します。

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

  2. 複数のテナントにアクセスできる場合は、[ディレクトリとサブスクリプション] フィルター () を使用して、アプリケーションを登録するテナントを選択してください。

  3. Microsoft Entra ID を検索して選択します。

  4. [管理][アプリの登録]>[新規登録] の順に選択します。

  5. [名前] フィールドにアプリケーションの名前を入力してください (例: Todo)。 アプリのユーザーにはこの名前が表示されます。後で変更することもできます。

  6. [サポートされているアカウントの種類] に、[任意の組織ディレクトリ内のアカウント (任意の Microsoft Entra ディレクトリ - マルチテナント) と個人用の Microsoft アカウント] を選択してください。

  7. [登録] を選択して、アプリケーションを作成します。

  8. アプリの [概要] ページで、 [アプリケーション (クライアント) ID] の値を探し、後で使用するために記録します。 これは、このプロジェクトの YAML 構成ファイルを構成するために必要です。

  9. [管理][API の公開] を選択し、ページの先頭にある [アプリケーション ID の URI] を見つけて、[追加] を選択してください。

  10. [アプリケーション ID の URI の編集] ページで、提案されたアプリケーション ID URI (api://{client ID}) をそのまま使用するか、クライアント ID の代わりにわかりやすい名前 (api://simple-todo など ) を使用して、[保存] を選択してください。

  11. [管理] で、[API の公開]>[スコープの追加] を選択し、次の情報を入力してください。

    • [スコープ名] に「ToDo.Read」と入力してください。
    • [同意できるユーザー] には [管理者のみ] を選択してください。
    • [管理者の同意の表示名] には、「ToDo データの読み取り」と入力してください。
    • [管理者の同意の説明] として、「認証済みユーザーが ToDo データを読み取ることができます。」と入力してください。
    • [状態] は有効のままにしてください。
    • スコープの追加を選択します。
  12. 前の手順を繰り返して、他の 2 つのスコープ (ToDo.WriteToDo.Delete) を追加します。

    Screenshot of the Azure portal that shows the Expose an API page of a RESTful API application.

3.6. アプリケーションの構成を更新する

次の手順を使用して、Microsoft Entra 登録済みアプリケーション情報を使用して RESTful API アプリケーションとの関係を確立するように YAML ファイルを更新します。

  1. simple-todo-api アプリの src/main/resources/application.yml ファイルを見つけます。 次の例に一致するように、spring.cloud.azure.active-directory セクションの構成を更新します。 プレースホルダーを、必ず前に作成した値で置き換えてください。

    spring:
      cloud:
        azure:
          active-directory:
            profile:
              tenant-id: <tenant>
            credential:
              client-id: <your-application-ID-of-ToDo>
            app-id-uri: <your-application-ID-URI-of-ToDo>
    

    Note

    v1.0 トークンでは、構成には API のクライアント ID が必要ですが、v2.0 トークンでは、要求でクライアント ID またはアプリケーション ID URI を使用できます。 対象ユーザーの検証を適切に完了するために、両方を構成することができます。

    tenant-id に使用できる値: commonorganizationsconsumers、またはテナント ID。 これらの値の詳細については、「エラー AADSTS50020 - ID プロバイダーのユーザー アカウントがテナントに存在しない」の「間違ったエンドポイント (個人用アカウントと organization アカウント) を使用しました」セクションを参照してください。 シングルテナント アプリの変換については、「Microsoft Entra ID でシングルテナント アプリをマルチテナントに変換する」を参照してください。

  2. 次のコマンドを使用して、サンプル プロジェクトをリビルドしてください。

    ./mvnw clean package
    

4. アプリを Azure Spring Apps にデプロイする

アプリを Azure Spring Apps にデプロイできるようになりました。

次の手順に従って、Azure Spring Apps 用の Maven プラグインを使用してデプロイします。

  1. complete ディレクトリに移動し、次のコマンドを使用して Azure Spring Apps のアプリを構成します。

    ./mvnw com.microsoft.azure:azure-spring-apps-maven-plugin:1.19.0:config
    

    次の一覧に、コマンド対話を記載します。

    • OAuth2 login: OAuth2 プロトコルに基づいて Azure へのサインインを承認する必要があります。
    • Select subscription (サブスクリプションを選択してください): 作成した Azure Spring Apps インスタンスのサブスクリプション リスト番号を選択します。既定では、リストの最初のサブスクリプションに設定されます。 既定の番号を使用する場合は、Enter キーを直接押します。
    • Azure で既存の Azure Spring Apps を使う: 既存の Azure Spring Apps インスタンスを使うには、y キーを押します。
    • Select Azure Spring Apps for deployment (デプロイ用の Azure Spring Apps を選択してください): 作成した Azure Spring Apps インスタンスのリスト番号を選択してください。 既定の番号を使用する場合は、Enter キーを直接押します。
    • Azure Spring Apps <your-instance-name> で既存のアプリを使う: 作成したアプリを使うには、y キーを押します。
    • 上記のすべての構成の保存を確定する: y キーを押します。 n を押した場合、構成は POM ファイルに保存されません。
  2. 次のコマンドを使用して、アプリをデプロイします。

    ./mvnw azure-spring-apps:deploy
    

    次の一覧に、コマンド対話を記載します:

    • OAuth2 login: OAuth2 プロトコルに基づいて Azure へのサインインを承認する必要があります。

    コマンドが実行されると、デプロイが成功したことを示す次のログ メッセージが表示されます。

[INFO] Deployment(default) is successfully created
[INFO] Starting Spring App after deploying artifacts...
[INFO] Deployment Status: Running
[INFO]   InstanceName:demo--default-xxxxxxx-xxxxxxxxx-xxxxx  Status:Running Reason:null       DiscoverStatus:NONE
[INFO] Getting public url of app(demo)...
[INFO] Application url: https://demo.<unique-identifier>.<region-name>.azurecontainerapps.io

5. アプリ を検証します

RESTful API にアクセスして、動作するかどうかを確認できるようになりました。

5.1. アクセス トークンの要求

RESTful API は、Microsoft Entra ID によって保護されるリソース サーバーとして機能します。 アクセス トークンを取得する前に、別のアプリケーションを Microsoft Entra ID に登録し、ToDoWeb という名前のクライアント アプリケーションにアクセス許可を付与する必要があります。

クライアント アプリケーションの登録

次の手順を使用して、アプリケーションを Microsoft Entra ID に登録してください。これは、ToDo アプリのアクセス許可を追加するために使用されます。

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

  2. 複数のテナントにアクセスできる場合は、[ディレクトリとサブスクリプション] フィルター () を使用して、アプリケーションを登録するテナントを選択してください。

  3. Microsoft Entra ID を検索して選択します。

  4. [管理][アプリの登録]>[新規登録] の順に選択します。

  5. アプリケーションの名前を [名前] フィールドに入力してください (例: ToDoWeb)。 アプリのユーザーにはこの名前が表示されます。後で変更することもできます。

  6. [サポートされているアカウントの種類] で、既定値の [この組織のディレクトリ内のアカウントのみ] を選択してください。

  7. [登録] を選択して、アプリケーションを作成します。

  8. アプリの [概要] ページで、 [アプリケーション (クライアント) ID] の値を探し、後で使用するために記録します。 アクセス トークンを取得するためにこれが必要です。

  9. [API のアクセス許可][アクセス許可の追加][自分の API] の順に選択します。 先ほど登録した ToDo アプリケーションを選択し、ToDo.ReadToDo.WriteToDo.Delete アクセス許可を選択してください。 アクセス許可の追加 を選択します。

  10. [<テナント名>に管理者の同意を付与する] を選択し、追加したアクセス許可に管理者の同意を付与してください。

    Screenshot of the Azure portal that shows the API permissions of a web application.

RESTful API にアクセスするためのユーザーの追加

Microsoft Entra テナントでメンバー ユーザーを作成するには、次の手順に従います。 その後、ユーザーは RESTful API を使用して ToDo アプリケーションのデータを管理できます。

  1. [管理] で、[ユーザー]>[新しいユーザー]>[新しいユーザーの作成] を選択してください。

  2. [新しいユーザーの作成] ページで、次の情報を入力してください。

    • ユーザー プリンシパル名: ユーザーの名前を入力してください。
    • 表示名: ユーザーの表示名を入力してください。
    • パスワード: [パスワード] ボックスに表示されている自動生成されたパスワードをコピーしてください。

    Note

    新しいユーザーは、最初のサインイン認証を完了してパスワードを更新する必要があります。そうしないと、アクセス トークンを AADSTS50055: The password is expired 取得するとエラーが表示されます。

    新しいユーザーがログインすると、[操作が必要です] というダイアログが表示されます。 [後で確認] を選択して検証をスキップできます。

  3. [確認および作成] を選択して、選択内容を確認します。 [作成] を選択してユーザーを作成してください。

Swagger UI 承認の OAuth2 構成を更新する

Swagger UI 承認の OAuth2 構成を更新するには、次の手順に従います。 その後、ユーザーがアプリを通じて ToDoWeb アクセス トークンを取得することを承認できます。

  1. Azure portal で [Microsoft Entra ID] テナントを開き、登録済みの ToDoWeb アプリに移動してください。

  2. [管理][認証] を選択し、[プラットフォームの追加] を選択し、[シングルページ アプリケーション] を選択してください。

  3. "リダイレクト URI" フィールド内の OAuth2 リダイレクト URL として <your-app-exposed-application-URL-or-endpoint>/swagger-ui/oauth2-redirect.html 形式を使い、[構成] を選択します。

    Screenshot of the Azure portal that shows the Authentication page for Microsoft Entra ID.

アクセス トークンを取得する

OAuth 2.0 認証コード フロー メソッドを使用して Microsoft Entra ID でアクセス トークンを取得し、ToDo アプリの RESTful API にアクセスするには、次の手順を使用してください。

  1. アプリによって公開されている URL を開き、[承認] を選択して OAuth2 認証を準備します。

  2. [使用可能な承認] ウィンドウで、[client_id] フィールドに ToDoWeb アプリのクライアント ID を入力し、[スコープ] フィールドのすべてのスコープ を選択し、[client_secret] フィールドは無視して、[承認] を選択して Microsoft Entra サインイン ページにリダイレクトします。

前のユーザーによるサインインが完了すると、[使用可能な承認] ウィンドウに戻ります。

5.2. RESTful API にアクセスする

Swagger UI で ToDo アプリの RESTful API にアクセスするには、次の手順に従います。

  1. API POST /api/simple-todo/lists を選択し、[試してみる] を選択してください。次の要求本文を入力し、[実行] を選択して ToDo リストを作成してください。

    {
      "name": "My List"
    }
    

    実行が完了すると、次の応答本文が表示されます。

    {
      "id": "<ID-of-the-ToDo-list>",
      "name": "My List",
      "description": null
    }
    
  2. API POST /api/simple-todo/lists/{listId}/items を選択し、[試してみる] を選択してください。listId の場合は、前に作成した ToDo リスト ID を入力し、次の要求本文を入力して、[実行] を選択して ToDo アイテムを作成してください。

    {
      "name": "My first ToDo item", 
      "listId": "<ID-of-the-ToDo-list>",
      "state": "todo"
    }
    

    このアクションにより、次の ToDo 項目が返されます。

    {
      "id": "<ID-of-the-ToDo-item>",
      "listId": "<ID-of-the-ToDo-list>",
      "name": "My first ToDo item",
      "description": null,
      "state": "todo",
      "dueDate": "2023-07-11T13:59:24.9033069+08:00",
      "completedDate": null
    }
    
  3. API GET /api/simple-todo/lists を選択し、[実行] を選択して ToDo リストにクエリを実行してください。 このアクションにより、次の ToDo リストが返されます。

    [
      {
        "id": "<ID-of-the-ToDo-list>",
        "name": "My List",
        "description": null
      }
    ]
    
  4. API GET /api/simple-todo/lists/{listId}/items を選択し、[試してみる] を選択してください。listId の場合は、前に作成した ToDo リスト ID を入力し、[実行] を選択して ToDo 項目のクエリを実行してください。 このアクションにより、次の ToDo 項目が返されます。

    [
      {
        "id": "<ID-of-the-ToDo-item>",
        "listId": "<ID-of-the-ToDo-list>",
        "name": "My first ToDo item",
        "description": null,
        "state": "todo",
        "dueDate": "2023-07-11T13:59:24.903307+08:00",
        "completedDate": null
      }
    ]
    
  5. API PUT /api/simple-todo/lists/{listId}/items/{itemId} を選択し、[試してみる] を選択してください。listId には、ToDo リスト ID を入力してください。 itemId の場合は、ToDo 項目 ID を入力し、次の要求本文を入力し、[実行] を選択して ToDo 項目を更新してください。

    {
      "id": "<ID-of-the-ToDo-item>",
      "listId": "<ID-of-the-ToDo-list>",
      "name": "My first ToDo item",
      "description": "Updated description.",
      "dueDate": "2023-07-11T13:59:24.903307+08:00",
      "state": "inprogress"
    }
    

    このアクションにより、次の更新された ToDo 項目が返されます。

    {
      "id": "<ID-of-the-ToDo-item>",
      "listId": "<ID-of-the-ToDo-list>",
      "name": "My first ToDo item",
      "description": "Updated description.",
      "state": "inprogress",
      "dueDate": "2023-07-11T05:59:24.903307Z",
      "completedDate": null
    }
    
  6. API DELETE /api/simple-todo/lists/{listId}/items/{itemId} を選択し、[試してみる] を選択してください。listId には、ToDo リスト ID を入力してください。 itemId の場合は、ToDo 項目 ID を入力し、[実行] を選択して ToDo 項目を削除してください。 サーバー応答コード 204 が表示されます。

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

Azure リソース グループを削除した場合、そのリソース グループに含まれたすべてのリソースが対象となります。

次の手順に従って、新しく作成したサーバーを含むリソース グループ全体を削除します。

  1. Azure Portal で目的のリソース グループを探します。

  2. ナビゲーション メニューで、 [リソース グループ] を選択します。 次に、リソース グループ名を選択します - 例えば myresourcegroup など。

  3. リソース グループ ページで [削除] を選択します。 リソース グループ名 (例: myresourcegroup など) をテキスト ボックスに入力して、削除を確認してください。 次に、 [削除] を選択します。

次の手順に従って、新しく作成したサーバーを含むリソース グループ全体を削除します。

  1. Azure Portal で目的のリソース グループを探します。

  2. ナビゲーション メニューで、 [リソース グループ] を選択します。 次に、リソース グループ名を選択します - 例えば myresourcegroup など。

  3. リソース グループ ページで [削除] を選択します。 リソース グループ名 (例: myresourcegroup など) をテキスト ボックスに入力して、削除を確認してください。 次に、 [削除] を選択します。

7. 次のステップ

詳細については、次の記事を参照してください。