クイック スタート: Azure App Configuration を使用して Java Quarkus アプリを作成する

このクイック スタートでは、Azure App Configuration を Java Quarkus アプリに組み込んで、コードとは別にアプリケーション設定のストレージと管理を一元化します。

[前提条件]

キーと値のペアを追加する

App Configuration ストアに次のキーと値のペアを追加します。 Azure CLI を使用してストアにキーと値のペアを追加する方法の詳細については、「 キーと値の作成」を参照してください。

Key 価値
/application/config.message こんにちは

Quarkus アプリを作成する

このセクションでは、Azure App Configuration 拡張機能と REST 拡張機能を使用して Quarkus アプリを作成します。 REST 拡張機能は、App Configuration ストアから構成値を返す REST サービスを作成するために使用されます。 詳細については、「 Quarkus Azure App Configuration」を参照してください。

次のコマンドを使用して Quarkus アプリを作成します。

mvn io.quarkus.platform:quarkus-maven-plugin:create \
    -DprojectGroupId=com.example \
    -DprojectArtifactId=quarkus-app-configuration \
    -Dextensions='io.quarkiverse.azureservices:quarkus-azure-app-configuration,rest' \
    -DjavaVersion="17"

アプリは、 quarkus-app-configuration という名前の新しいディレクトリに作成されます。 アプリの構造を次に示します。

quarkus-app-configuration
├── src
│   ├── main/java/com/example
│   │   ├── GreetingResource.java
│   └── test/java/com/example
│       └── GreetingResourceTest.java
├── pom.xml

pom.xml ファイルには、Azure App Configuration 拡張機能や REST 拡張機能など、アプリの依存関係が含まれています。 次の XML は一般的な例です。

<dependency>
    <groupId>io.quarkiverse.azureservices</groupId>
    <artifactId>quarkus-azure-app-configuration</artifactId>
</dependency>
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-rest</artifactId>
</dependency>

GreetingResource.java ファイルには REST サービスが含まれています。 後で App Configuration ストアから構成値を返すように、このファイルを変更します。

GreetingResourceTest.java ファイルには、REST サービスの単体テストが含まれています。 このファイルを変更して、REST サービスから返された値が後で App Configuration ストアの値と等しいことをアサートします。

App Configuration ストアに接続する

App Configuration ストアと Azure App Configuration 拡張機能を備えた Quarkus アプリが作成されたので、アプリをストアに接続できます。

アプリケーションをコーディングする

次の手順を使用してアプリケーションを構成します。

  1. src/main/java/com/example ディレクトリでGreetingResource.java ファイルを開き、内容を次のコードに置き換えます。

    package com.example;
    
    import jakarta.ws.rs.GET;
    import jakarta.ws.rs.Path;
    import jakarta.ws.rs.Produces;
    import jakarta.ws.rs.core.MediaType;
    
    import org.eclipse.microprofile.config.inject.ConfigProperty;
    
    @Path("/hello")
    public class GreetingResource {
    
        @ConfigProperty(name = "/application/config.message")
        String value;
    
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String hello() {
            return value;
        }
    }
    

    変更されたコードは、MicroProfile Config @ConfigProperty注釈を使用して、App Configuration ストアから /application/config.message フィールドにキー valueの値を挿入し、REST サービスの値を返します。

  2. src/test/java/com/example ディレクトリのGreetingResourceTest.java ファイルにある自動生成された単体テストを開きます。 ファイルの内容を次のコードに置き換えます。

    package com.example;
    
    import io.quarkus.test.junit.QuarkusTest;
    import org.junit.jupiter.api.Test;
    
    import javax.inject.Inject;
    
    import static io.restassured.RestAssured.given;
    import static org.hamcrest.CoreMatchers.is;
    
    @QuarkusTest
    public class GreetingResourceTest {
        @Test
        public void testHelloEndpoint() {
            given()
                .when().get("/hello")
                .then()
                .statusCode(200)
                .body(is("Hello"));
        }
    }
    

    変更されたコードは、REST サービスから返された値が App Configuration ストアの値と等しいことをアサートします。 この値は、あなたが以前に追加したキー/application/config.messageに対するHelloです。

アプリケーションに対するこれらのコードの変更はすべて必要です。 アプリケーションを実行する前に、App Configuration ストアへの認証と接続を構成する必要があります。

App Configuration ストアへの認証を構成する

Quarkus Azure App Configuration 拡張機能では、アクセス キーによる認証に加えて、Azure ID クライアント ライブラリからの DefaultAzureCredential を使用した Microsoft Entra ID による認証もサポートされています。

このクイック スタートでは、認証に Microsoft Entra ID を使用します。 詳細については、DefaultAzureCredentialのを参照してください。

次の手順を使用して、App Configuration ストアへの認証を構成します。

  1. 次のコマンドを使用して環境変数を設定し、 <...> プレースホルダーを前に作成した値に置き換えます。

    export RESOURCE_GROUP_NAME="<resource-group-name>"
    export APP_CONFIG_NAME="<app-configuration-store-name>"
    
  2. サインインしているユーザーに App Configuration Data Reader ロールを割り当てるには、次のコマンドを使用します。

    # Retrieve the app configuration resource ID
    export APP_CONFIGURATION_RESOURCE_ID=$(az appconfig show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name "${APP_CONFIG_NAME}" \
        --query 'id' \
        --output tsv)
    # Assign the "App Configuration Data Reader" role to the current signed-in identity
    az role assignment create \
        --assignee $(az ad signed-in-user show --query 'id' --output tsv) \
        --role "App Configuration Data Reader" \
        --scope $APP_CONFIGURATION_RESOURCE_ID
    
  3. 次のコマンドを使用して、App Configuration ストアのエンドポイントを QUARKUS_AZURE_APP_CONFIGURATION_ENDPOINT という名前の環境変数にエクスポートします。

    export QUARKUS_AZURE_APP_CONFIGURATION_ENDPOINT=$(az appconfig show \
        --resource-group "${RESOURCE_GROUP_NAME}" \
        --name "${APP_CONFIG_NAME}" \
        --query endpoint \
        --output tsv)
    

    注

    QUARKUS_AZURE_APP_CONFIGURATION_ENDPOINT環境変数の値は、Azure App Configuration ストアへの接続を設定するために、Quarkus Azure App Configuration 拡張機能の構成プロパティ quarkus.azure.app.configuration.endpointで使用されます。 または、次の例のように、src/main/resources ディレクトリの application.properties ファイルでこのプロパティを直接設定して構成することもできます。 <your-app-configuration-store-endpoint>は実際の値に置き換えてください。

    quarkus.azure.app.configuration.endpoint=<your-app-configuration-store-endpoint>
    

アプリをビルドしてローカルで実行する

次の手順を使用して、アプリをローカルでビルドして実行します。

  1. 次のコマンドを使用して、JVM モードでアプリをビルドして実行します。

    # Build, test and package the app
    mvn clean package
    
    # Run the app
    java -jar ./target/quarkus-app/quarkus-run.jar
    

    注

    代わりに、ネイティブ モードでサンプルを実行することもできます。 ネイティブ モードを使用するには、GraalVM をインストールするか、ビルダー イメージを使用してネイティブ実行可能ファイルをビルドする必要があります。 詳細については、「 ネイティブ実行可能ファイルのビルド」を参照してください。 このクイック スタートでは、コンテナー ランタイムとして Docker を使用して Linux ネイティブ実行可能ファイルを構築します。 Docker がインストールされていない場合は、 Docker Web サイトからダウンロードできます。

    次のコマンドを使用して、Linux 環境でネイティブ実行可能ファイルをビルドして実行します。

    mvn package -Dnative -Dquarkus.native.container-build
    ./target/storage-blob-1.0.0-SNAPSHOT-runner
    
  2. 次のコマンドを使用して、アプリケーションをテストします。

    curl localhost:8080/hello
    

    Helloは App Configuration ストアに追加したHello キーの値であるため、出力に/application/config.messageが表示されます。

  3. Control+C キーを押してアプリケーションを停止します。

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

Azure の課金を回避するには、不要なリソースをクリーンアップする必要があります。 App Configuration ストアが不要になったら、次のコマンドを使用して、リソース グループとすべての関連リソースを削除します。

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

こちらも参照ください