演習 - Azure Container Apps を設定する

完了

このユニットでは、アプリケーションのリソースを含む Azure リソース グループを作成します。 その後、Azure CLI を使用して PostgreSQL データベースを設定します。 最後に、リモート PostgreSQL データベースにアクセスするように Quarkus アプリケーションを構成します。 任意のターミナルを使用して、コマンドを実行します。

作業環境を準備する

いくつかの環境変数を設定する必要があります。 作成する変数に関する注意事項を次に示します。

変数 説明
AZ_PROJECT プロジェクトの名前です。 この値を一意に保つため、AZ_PROJECT_<your initials> を使用することをお勧めします。
AZ_RESOURCE_GROUP リソースを保持するリソース グループの名前。
AZ_LOCATION Azure リージョン。 居住地に近いリージョンを使用することをお勧めします。 使用可能なリージョンの一覧を表示するには、コマンド プロンプトで az account list-locations を入力してください。
AZ_CONTAINERAPP コンテナーを保持する Azure Container Apps インスタンスの名前。
AZ_CONTAINERAPP_ENV Azure Container Apps 環境の名前。
AZ_POSTGRES_SERVER_NAME PostgreSQL サーバーの名前。 英数字以外の文字 -_!$#% は使用できません。 Azure 全体で一意である必要があります。 必ず一意識別子を使用してください。
AZ_POSTGRES_DB_NAME PostgreSQL データベース名。 既定の PostgreSQL データベースの名前は postgres です。
AZ_POSTGRES_USERNAME PostgreSQL データベース サーバーの既定の管理者ユーザー名。
AZ_POSTGRES_PASSWORD PostgreSQL データベース サーバーの既定のパスワード。 セキュリティで保護されたパスワードを使用します。

Note

Azure リソースには任意の方法で名前を付けることができますが、「Azure リソースの省略形の例」を確認することをお勧めします。 この記事では、多くの Azure リソース (リソース グループの rg やコンテナー アプリの ca など) の省略形の例が示されています。

次のコマンドを使用して、いくつかの変数を設定します。 前の表で説明したように、必ず値を変更してください。

export AZ_PROJECT_<your initials>="azure-deploy-quarkus"
export AZ_RESOURCE_GROUP="rg${AZ_PROJECT_<your initials>}"
export AZ_LOCATION="eastus"
export AZ_CONTAINERAPP="ca${AZ_PROJECT_<your initials>}"
export AZ_CONTAINERAPP_ENV="cae${AZ_PROJECT_<your initials>}"
export AZ_POSTGRES_DB_NAME="postgres${AZ_PROJECT_<your initials>}"
export AZ_POSTGRES_USERNAME="<user-name>"
export AZ_POSTGRES_PASSWORD="<secure-password>"
export AZ_POSTGRES_SERVER_NAME="psql${AZ_PROJECT_<your initials>}"

これらの環境変数は、このモジュールの残りの部分で使用されます。

次に、リソース グループを作成します。

az group create \
    --name $AZ_RESOURCE_GROUP \
    --location $AZ_LOCATION

Azure Database for PostgreSQL のインスタンスを作成する

ここでは、マネージド PostgreSQL サーバーを作成します。 次のコマンドを実行して、Azure Database for PostgreSQL の小さなインスタンスを作成します。

az postgres flexible-server create \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --location "$AZ_LOCATION" \
    --name "$AZ_POSTGRES_SERVER_NAME" \
    --database-name "$AZ_POSTGRES_DB_NAME" \
    --admin-user "$AZ_POSTGRES_USERNAME" \
    --admin-password "$AZ_POSTGRES_PASSWORD" \
    --public-access "All" \
    --tier "Burstable" \
    --sku-name "Standard_B1ms" \
    --storage-size 32 \
    --version "16"

このコマンドでは、前に設定した変数を使用する小さな PostgreSQL サーバーを作成します。

PostgreSQL データベースにアクセスするように Quarkus を構成する

ここで、Quarkus アプリケーションを PostgreSQL データベースに接続します。 そのためには、まず、データベースの接続文字列を取得する必要があります。

export POSTGRES_CONNECTION_STRING=$(
    az postgres flexible-server show-connection-string \
    --server-name "$AZ_POSTGRES_SERVER_NAME" \
    --database-name "$AZ_POSTGRES_DB_NAME" \
    --admin-user "$AZ_POSTGRES_USERNAME" \
    --admin-password "$AZ_POSTGRES_PASSWORD" \
    --query "connectionStrings.jdbc" \
    --output tsv
)

export POSTGRES_CONNECTION_STRING_SSL="$POSTGRES_CONNECTION_STRING&ssl=true&sslmode=require"

echo "POSTGRES_CONNECTION_STRING_SSL=$POSTGRES_CONNECTION_STRING_SSL"

返される接続文字列をメモしてください。

PostgreSQL データベースに接続するように Quarkus アプリケーションを構成する

プロジェクトの src/main/resources フォルダー内の application.properties ファイルを更新して、PostgreSQL データベースへの接続文字列を構成します。 これを行うには、quarkus.datasource.jdbc.url プロパティを以前に出力した $POSTGRES_CONNECTION_STRING_SSL 値に設定します。 接続文字列の &ssl=true&sslmode=require の部分は、Azure Database for PostgreSQL の要件である SSL の使用をドライバーに強制します。

quarkus.hibernate-orm.database.generation=update
quarkus.datasource.jdbc.url=<the POSTGRES_CONNECTION_STRING_SSL value>

Quarkus アプリケーションをローカルで実行して、リモート データベース接続をテストする

このコマンドを使用してローカルでアプリケーションを実行します。

./mvnw clean quarkus:dev    # On Mac or Linux
mvnw.cmd clean quarkus:dev  # On Windows

Quarkus が実行されているときに、別のターミナル ウィンドウで次の cURL コマンドを使用して、To Do をいくつか作成します。

curl --header "Content-Type: application/json" \
    --request POST \
    --data '{"description":"Take Quarkus MS Learn","details":"Take the MS Learn on deploying Quarkus to Azure Container Apps","done": "true"}' \
    http://127.0.0.1:8080/api/todos

curl --header "Content-Type: application/json" \
    --request POST \
    --data '{"description":"Take Azure Container Apps MS Learn","details":"Take the ACA Learn module","done": "false"}' \
    http://127.0.0.1:8080/api/todos

ここで、To Do アプリで定義した GET エンドポイントにアクセスして、To Do がデータベースに入っていることを確認します。

curl http://127.0.0.1:8080/api/todos

次の出力が表示されます。

[
   {
      "description" : "Take Quarkus MS Learn",
      "details" : "Take the MS Learn on deploying Quarkus to Azure Container Apps",
      "done" : true,
      "id" : 1
   },
   {
      "description" : "Take Azure Container Apps MS Learn",
      "details" : "Take the ACA Learn module",
      "done" : false,
      "id" : 2
   }
]

この出力が表示されている場合は、正常に Quarkus アプリケーションを実行し、リモート PostgreSQL データベースに接続しています。