演習 - 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 データベース サーバーの既定のパスワード。 セキュリティで保護されたパスワードを使用します。 |
注記
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 の小さなインスタンスを作成します。
PostgreSQL サーバーを作成したことがない場合は、プロバイダーを登録する必要があります。 PostgreSQL プロバイダーを登録するには、次のコマンドを実行します。
az provider register --namespace Microsoft.DBforPostgreSQL
次に、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"
echo "POSTGRES_CONNECTION_STRING_SSL=$POSTGRES_CONNECTION_STRING_SSL"
返される接続文字列をメモします。
注記
Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 この手順で説明する認証フロー (データベース、キャッシュ、メッセージング、AI サービスなど) には、アプリケーションに対する高度な信頼が必要であり、他のフローには存在しないリスクが伴います。 このフローは、パスワードレス接続やキーレス接続のマネージド ID など、より安全なオプションが実行できない場合にのみ使用します。 ローカル コンピューターの操作では、パスワードレス接続またはキーレス接続にユーザー ID を使用します。
PostgreSQL データベースに接続するように Quarkus アプリケーションを構成する
プロジェクトの application.properties
フォルダー内の src/main/resources
ファイルを更新して、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
次の出力が表示されます。
[
{
"id": 1,
"description": "Take Quarkus MS Learn",
"details": "Take the MS Learn on deploying Quarkus to Azure Container Apps",
"done": true,
"createdAt": "2025-02-26T08:03:28.390854Z"
},
{
"id": 2,
"description": "Take Azure Container Apps MS Learn",
"details": "Take the ACA Learn module",
"done": false,
"createdAt": "2025-02-26T08:03:34.142249Z"
}
]
この出力が表示された場合は、Quarkus アプリケーションが正常に実行され、リモート PostgreSQL データベースに接続されています。