Azure Container Apps に Quarkus を使用する Java アプリケーションをデプロイする
この記事では、シンプルな CRUD アプリケーションを使用して、Microsoft Azure Container Apps に Red Hat Quarkus を迅速にデプロイする方法を説明します。 このアプリケーションは、JavaScript フロントエンドと REST エンドポイントを備えた "To Do リスト" です。 Azure Database for PostgreSQL フレキシブル サーバーは、アプリの永続化レイヤーを提供します。 この記事では、アプリをローカルでテストし、Container Apps にデプロイする方法を説明します。
前提条件
- Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
- Ubuntu、macOS、Windows Subsystem for Linux などの Unix 系オペレーティング システムがインストールされたローカル マシンを準備します。
- Java SE 実装バージョン 17 以降 (たとえば、OpenJDK の Microsoft ビルド) をインストールします。
- Maven バージョン 3.9.8 以降をインストールします。
- Docker をOSにインストールしてください。
- jq をインストールします。
- cURL をインストールします。
- Quarkus CLI バージョン 3.12.1 以降をインストールします。
- Azure CLI コマンドを実行するには、Azure CLI をインストールします。
az login
コマンドを使用して Azure CLI にサイン インします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、「Azure CLI で Azure にサインインする」を参照してください。- 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、「Azure CLI で拡張機能を使用および管理する」を参照してください。
az version
を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade
を実行します。 この記事では、バージョン 2.61.0 以降の Azure CLI が必要です。
アプリ プロジェクトを作成する
次のコマンドを使って、この記事用のサンプル Java プロジェクトをクローンします。 サンプルは GitHub にあります。
git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2024-10-14
cd aca-quarkus
detached HEAD
状態であることを示すメッセージが表示された場合、このメッセージは無視しても問題ありません。 この記事ではコミットを必要としないため、detached HEAD
状態が適切です。
Quarkus アプリをローカルでテストする
このセクションの手順では、アプリをローカルで実行する方法を示します。
Quarkus は、開発モードおよびテスト モードでの未構成のサービスの自動プロビジョニングをサポートしています。 Quarkus は、この機能を開発サービスと呼びます。 データベース サービスへの接続などの Quarkus 機能が含まれているとします。 アプリをテストしたいと考えていますが、実際のデータベースへの接続がまだ完全に構成されていません。 Quarkus は、関連するサービスのスタブ バージョンを自動的に開始し、アプリケーションをそれに接続します。 詳細については、Quarkus ドキュメントの「Dev Services の概要」を参照してください。
コンテナー環境が実行されていることを確認し、次のコマンドを使用して Quarkus 開発モードに入ります。
quarkus dev
quarkus dev
の代わりに、 mvn quarkus:dev
を使用すると、Maven で同じことを実現できます。
Quarkus 開発モードの使用状況のテレメトリを送信するかどうかを尋ねられる場合があります。 その場合は、好きなように答えてください。
Quarkus 開発モードでは、バックグラウンド コンパイルによるライブ リロードが有効になります。 アプリのソース コードの一部を変更してブラウザーを更新すると、変更内容を確認できます。 コンパイルまたはデプロイに問題がある場合は、エラー ページが表示されます。 Quarkus 開発モードは、ポート 5005 でデバッガーをリッスンします。 デバッガーが接続されるのを待ってから実行する場合は、コマンド ラインで -Dsuspend
を渡します。 デバッガーがまったく不要な場合は、-Ddebug=false
を使用できます。
出力は次の例のようになります。
__ ____ __ _____ ___ __ ____ ______
--/ __ \/ / / / _ | / _ \/ //_/ / / / __/
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
INFO [io.quarkus] (Quarkus Main Thread) quarkus-todo-demo-app-aca 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.2.0.Final) started in 14.826s. Listening on: http://localhost:8080
INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
INFO [io.quarkus] (Quarkus Main Thread) Installed features: [agroal, cdi, hibernate-orm, hibernate-validator, jdbc-postgresql, narayana-jta, resteasy-reactive, resteasy-reactive-jackson, smallrye-context-propagation, vertx]
--
Tests paused
Press [e] to edit command line args (currently ''), [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>
Quarkus 開発モードが実行されているターミナルで w キーを押します。 w キーを押すとデフォルトの Web ブラウザーが開き、Todo
アプリケーションが表示されます。 http://localhost:8080
にあるアプリケーション GUI に直接アクセスすることもできます。
Todo リストで Todo 項目をいくつか選択してみてください。 UI は取り消し線のテキスト スタイルで選択を示します。 次のスクリーンショットに示すように、「Todo アプリの確認」と入力して Enter キー を押して、新しい Todo 項目を Todo リストに追加することもできます。
RESTful API (/api
) にアクセスして、ローカル PostgreSQL データベースに保存されているすべての ToDo 項目を取得します。
curl --verbose http://localhost:8080/api | jq .
出力は次の例のようになります。
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /api HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.88.1
> Accept: */*
>
< HTTP/1.1 200 OK
< content-length: 664
< Content-Type: application/json;charset=UTF-8
<
{ [664 bytes data]
100 664 100 664 0 0 13278 0 --:--:-- --:--:-- --:--:-- 15441
* Connection #0 to host localhost left intact
[
{
"id": 1,
"title": "Introduction to Quarkus Todo App",
"completed": false,
"order": 0,
"url": null
},
{
"id": 2,
"title": "Quarkus on Azure App Service",
"completed": false,
"order": 1,
"url": "https://learn.microsoft.com/en-us/azure/developer/java/eclipse-microprofile/deploy-microprofile-quarkus-java-app-with-maven-plugin"
},
{
"id": 3,
"title": "Quarkus on Azure Container Apps",
"completed": false,
"order": 2,
"url": "https://learn.microsoft.com/en-us/training/modules/deploy-java-quarkus-azure-container-app-postgres/"
},
{
"id": 4,
"title": "Quarkus on Azure Functions",
"completed": false,
"order": 3,
"url": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-first-quarkus"
},
{
"id": 5,
"title": "Verify Todo apps",
"completed": false,
"order": 5,
"url": null
}
]
q キーを押して Quarkus 開発モードを終了します。
Azure リソースを作成して Quarkus アプリを実行する
このセクションの手順では、次の Azure リソースを作成して Quarkus サンプル アプリを実行する方法を示します。
- Azure Database for PostgreSQL フレキシブル サーバー
- Azure Container Registry
- Azure Container Apps
これらのリソースの一部は、Azure サブスクリプションのスコープ内で一意の名前を持つ必要があります。 この一意性を確保するために、 イニシャル、シーケンス、日付、サフィックス パターンを使用できます。 このパターンを適用するには、イニシャル、シーケンス番号、今日の日付、およびリソース固有のサフィックス (たとえば、"リソース グループ" の場合は rg
) を一覧表示してリソースに名前を付けます。 次の環境変数はこのパターンを使用します。 プレースホルダーの値を独自の値にUNIQUE_VALUE
LOCATION
置き換え、ターミナルでコマンドを実行します。
export UNIQUE_VALUE=<your unique value, such as mjg101424>
export RESOURCE_GROUP_NAME=${UNIQUE_VALUE}rg-passwordless
export LOCATION=<your desired Azure region for deploying your resources - for example, eastus>
export REGISTRY_NAME=${UNIQUE_VALUE}regpasswordless
export DB_SERVER_NAME=${UNIQUE_VALUE}dbpasswordless
export DB_NAME=demodb
export ACA_ENV=${UNIQUE_VALUE}envpasswordless
export ACA_NAME=${UNIQUE_VALUE}acapasswordless
次に、次のコマンドを使用し、リソース グループを作成します。
az group create \
--name $RESOURCE_GROUP_NAME \
--location $LOCATION
Azure Database for PostgreSQL フレキシブル サーバー インスタンスを作成する
Azure Database for PostgreSQL フレキシブル サーバーは、データベース管理機能と構成設定のよりきめ細かな制御と柔軟性を提供するように設計されたフル マネージド データベース サービスです。 このセクションでは、Azure CLI を使用して Azure Database for PostgreSQL フレキシブル サーバー インスタンスを作成する方法について説明します。 詳細については、「クイックスタート: Azure Database for PostgreSQL - フレキシブル サーバーのインスタンスを作成する」を参照してください。
次のコマンドを使用して、Azure Database for PostgreSQL フレキシブル サーバー インスタンスを作成します。
az postgres flexible-server create \
--name $DB_SERVER_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--database-name $DB_NAME \
--public-access None \
--sku-name Standard_B1ms \
--tier Burstable \
--active-directory-auth Enabled
サーバー、データベース、管理者ユーザー、ファイアウォール規則の作成には数分かかります。 コマンドが成功した場合、出力は次の例のようになります。
{
"connectionString": "postgresql://REDACTED:REDACTED@<DB_SERVER_NAME>.postgres.database.azure.com/<DB_NAME>?sslmode=require",
"databaseName": "<DB_NAME>",
"host": "<DB_SERVER_NAME>.postgres.database.azure.com",
"id": "/subscriptions/REDACTED/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.DBforPostgreSQL/flexibleServers/<DB_SERVER_NAME>",
"location": "East US",
"password": "REDACTED",
"resourceGroup": "<RESOURCE_GROUP_NAME>",
"skuname": "Standard_B1ms",
"username": "REDACTED",
"version": "13"
}
次のコマンドを使用して、現在サインインしているユーザーを Microsoft Entra Admin として Azure Database for PostgreSQL フレキシブル サーバー インスタンスに追加します。
ENTRA_ADMIN_NAME=$(az ad signed-in-user show --query userPrincipalName -o tsv)
az postgres flexible-server ad-admin create \
--resource-group $RESOURCE_GROUP_NAME \
--server-name $DB_SERVER_NAME \
--display-name $ENTRA_ADMIN_NAME \
--object-id $(az ad signed-in-user show --query id -o tsv)
成功すると、プロパティ "type": "Microsoft.DBforPostgreSQL/flexibleServers/administrators"
を含む JSON オブジェクトが出力されます。
Microsoft Azure Container Registry インスタンスを作成する
Quarkus はクラウド ネイティブ テクノロジーであるため、Container Apps で実行されるコンテナーを作成するためのサポートが組み込まれています。 Container Apps は、実行するコンテナー イメージを見つけるコンテナー レジストリの存在に完全に依存しています。 Container Apps には、Azure Container Registry のサポートが組み込まれています。
az acr create
コマンドを使用して、Container Registry インスタンスを作成します。 次の例では、環境変数 ${REGISTRY_NAME}
の値で名前が付けられた Container Registry インスタンスを作成します。
az acr create \
--resource-group $RESOURCE_GROUP_NAME \
--location ${LOCATION} \
--name $REGISTRY_NAME \
--sku Basic
しばらくすると、次の行を含む JSON 出力が表示されます。
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "<YOUR_RESOURCE_GROUP>",
次のコマンドを使用して、コンテナー レジストリ インスタンスのログイン サーバーを取得します。
export LOGIN_SERVER=$(az acr show \
--name $REGISTRY_NAME \
--query 'loginServer' \
--output tsv)
echo $LOGIN_SERVER
Docker を Azure Container Registry インスタンスに接続する
コンテナー レジストリ インスタンスにサインインします。 サインインすると、イメージをプッシュできます。 レジストリにサインインするには、次のコマンドを使用します。
az acr login --name $REGISTRY_NAME
コンテナー レジストリ インスタンスに正常にサインインすると、コマンド出力の最後に Login Succeeded
が表示されます。
環境の作成
Azure Container Apps 環境では、コンテナー アプリのグループを囲むセキュリティ保護された境界が作成されます。 同じ環境にデプロイされた Container Apps は、同じ仮想ネットワークにデプロイされ、同じ Log Analytics ワークスペースにログを書き込みます。
Azure Container Apps 環境を初めて作成する場合は、Microsoft.App
と Microsoft.OperationalInsights
名前空間を登録する必要があります。 名前空間を登録するには、次のコマンドを使用します。
az provider register --namespace Microsoft.App --wait
az provider register --namespace Microsoft.OperationalInsights --wait
次の例に示すように、az containerapp env create
コマンドを使用して環境を作成します。
az containerapp env create \
--resource-group $RESOURCE_GROUP_NAME \
--location $LOCATION \
--name $ACA_ENV
拡張機能をインストールするように求められたら、 Yと答えます。
クラウド ネイティブ構成をカスタマイズする
クラウド ネイティブ テクノロジーである Quarkus は、コンテナ イメージを自動的に生成する機能を提供します。 詳細については、 コンテナ イメージを参照してください。 Developer は、アプリケーション イメージをターゲットのコンテナー化されたプラットフォーム (Azure Container Apps など) にデプロイできます。
コンテナ イメージを生成するには、次のコマンドを使用して、ローカル ターミナルに container-image-jib
拡張機能を追加します。
quarkus ext add container-image-jib
Quarkus は POM を変更して、拡張機能が <dependencies>
に含まれるようにします。 JBang
と呼ばれるものをインストールするように求められたら、 はいと答えてインストールを許可します。
出力は次の例のようになります。
[SUCCESS] ✅ Extension io.quarkus:quarkus-container-image-jib has been installed
pom.xml ファイルを開くと、拡張機能によって追加された次の依存関係がcontainer-image-jib
表示されます。
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-container-image-jib</artifactId>
</dependency>
次に、次の依存関係を pom.xml ファイルに追加して、Azure Database for PostgreSQL フレキシブル サーバーでのパスワードレス認証をサポートします。
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.1.20</version>
</dependency>
Quarkus はクラウド ネイティブ テクノロジーとして、構成プロファイルの概念をサポートしています。 Quarkus には、次の 3 つの組み込みプロファイルがあります。
dev
- 開発モードのときにアクティブになります。test
- テストを実行するときにアクティブになります。prod
- 開発モードまたはテストモードで実行されていない場合のデフォルト プロファイル。
Quarkus は、必要に応じて、任意の数の名前付きプロファイルをサポートします。
このセクションの残りの手順では、src/main/resources/application.properties ファイルのコメントを解除して値をカスタマイズする方法を説明します。 先頭の #
文字を削除して、# %prod.
で始まるすべての行のコメントが解除されていることを確認します。
%prod.
プレフィックスは、 prod
プロファイルでの実行時にこれらのプロパティがアクティブであることを示します。 構成プロファイルの詳細については、 Quarkus のドキュメントを参照してください。
データベース構成を調べる
プロパティのコメントを解除すると、src/main/resources/application.properties ファイル内のデータベース構成は次の例のようになります。
# Database configurations
%prod.quarkus.datasource.db-kind=postgresql
%prod.quarkus.datasource.jdbc.url=
%prod.quarkus.datasource.username=
%prod.quarkus.datasource.password=
%prod.quarkus.hibernate-orm.database.generation=create
%prod.quarkus.hibernate-orm.sql-load-script=no-file
Azure Database for PostgreSQL フレキシブル サーバーでパスワードレス認証を使用する場合は必要ないため、%prod.quarkus.datasource.password
プロパティを削除します。 次の例に示すように、他のデータベース接続関連のプロパティ %prod.quarkus.datasource.jdbc.url
と %prod.quarkus.datasource.username
値を使用して更新します。 最終的な構成は次の例のようになります。
# Database configurations
%prod.quarkus.datasource.db-kind=postgresql
%prod.quarkus.datasource.jdbc.url=jdbc:postgresql://${AZURE_POSTGRESQL_HOST}:${AZURE_POSTGRESQL_PORT}/${AZURE_POSTGRESQL_DATABASE}?\
authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin\
&sslmode=require
%prod.quarkus.datasource.username=${AZURE_POSTGRESQL_USERNAME}
%prod.quarkus.hibernate-orm.database.generation=create
%prod.quarkus.hibernate-orm.sql-load-script=no-file
の${AZURE_POSTGRESQL_HOST}
${AZURE_POSTGRESQL_PORT}
${AZURE_POSTGRESQL_DATABASE}
値${AZURE_POSTGRESQL_USERNAME}
は、この記事で後述する Service Connector パスワードレス拡張機能を使用して、実行時に Azure Container Apps 環境によって提供されます。
通常、データベースに保存されているデータが削除され、実稼働環境でサンプル データで再入力されることは想定されません。 そのため、 quarkus.hibernate-orm.database.generation
のスキーマが create
として指定され、アプリは最初の起動時にスキーマが存在しない場合にのみスキーマを作成することがわかります。 また、hibernate-orm.sql-load-script
が no-file
として指定されているため、データベースにはサンプル データが事前に入力されていません。 この設定は、以前に開発モードでアプリをローカルに実行したときとは異なります。 開発モードでの quarkus.hibernate-orm.database.generation
と hibernate-orm.sql-load-script
のデフォルト値はそれぞれ drop-and-create
と import.sql
です。つまり、アプリは常にデータベース スキーマを削除して再作成し、 import.sql で定義されたデータを読み込みます。 import.sql ファイルは、Quarkus の便利な機能です。 Quarkus jar に src/main/resources/import.sql ファイルが存在し、 hibernate-orm.sql-load-script
プロパティの値が import.sql
の場合、このファイル内の SQL DML ステートメントはアプリの起動時に実行されます。
Azure Database for PostgreSQL フレキシブル サーバーを使用して Quarkus アプリをローカルでテストする
Quarkus アプリを Azure Container Apps にデプロイする前に、Azure Database for PostgreSQL フレキシブル サーバー インスタンスへの接続をローカルでテストします。
まず、次のコマンドを使用して、ローカル IP アドレスを Azure Database for PostgreSQL フレキシブル サーバー インスタンスのファイアウォール ルールに追加します。
export AZ_LOCAL_IP_ADDRESS=$(curl -s https://whatismyip.akamai.com)
az postgres flexible-server firewall-rule create \
--resource-group $RESOURCE_GROUP_NAME \
--name $DB_SERVER_NAME \
--rule-name $DB_SERVER_NAME-database-allow-local-ip \
--start-ip-address $AZ_LOCAL_IP_ADDRESS \
--end-ip-address $AZ_LOCAL_IP_ADDRESS
次に、前のターミナルで次の環境変数を設定します。 これらの環境変数は、ローカルで実行されている Quarkus アプリから Azure Database for PostgreSQL フレキシブル サーバー インスタンスに接続するために使用されます。
export AZURE_POSTGRESQL_HOST=${DB_SERVER_NAME}.postgres.database.azure.com
export AZURE_POSTGRESQL_PORT=5432
export AZURE_POSTGRESQL_DATABASE=${DB_NAME}
export AZURE_POSTGRESQL_USERNAME=${ENTRA_ADMIN_NAME}
Quarkus アプリをローカルで実行して、Azure Database for PostgreSQL フレキシブル サーバー インスタンスへの接続をテストします。 次のコマンドを使用して、 本番モードでアプリを起動します。
mvn clean package -DskipTests
java -jar target/quarkus-app/quarkus-run.jar
Todo アプリケーションにアクセスするには、新しい Web ブラウザーを立ち上げて http://localhost:8080
にアクセスしてください。 開発モードでアプリをローカルで実行したときと同じ Todo アプリが表示され、Todo 項目は表示されません。
アプリを停止するには、Ctrl+C キーを押します。
コンテナー イメージをビルドしてコンテナー レジストリにプッシュする
次に、次のコマンドを使用してアプリケーション自体をビルドします。 このコマンドは Jib 拡張機能を使用してコンテナ イメージを構築します。
export TODO_QUARKUS_IMAGE_NAME=todo-quarkus-aca
export TODO_QUARKUS_IMAGE_TAG=${LOGIN_SERVER}/${TODO_QUARKUS_IMAGE_NAME}:1.0
quarkus build -Dquarkus.container-image.build=true -Dquarkus.container-image.image=${TODO_QUARKUS_IMAGE_TAG} --no-tests
出力は BUILD SUCCESS
で終わる必要があります。
次の例に示すように、docker
コマンド ライン (CLI) を使用して、コンテナー イメージが生成されるかどうかを確認できます。
docker images | grep ${TODO_QUARKUS_IMAGE_NAME}
出力は次の例のようになります。
<LOGIN_SERVER_VALUE>/todo-quarkus-aca 1.0 0804dfd834fd 2 minutes ago 407MB
次のコマンドを使用して、コンテナー イメージをコンテナー レジストリにプッシュします。
docker push ${TODO_QUARKUS_IMAGE_TAG}
出力は次の例のようになるはずです。
The push refers to repository [<LOGIN_SERVER_VALUE>/todo-quarkus-aca]
188a550fce3d: Pushed
4e3afea591e2: Pushed
1db0eba807a6: Pushed
c72d9ccda0b2: Pushed
d7819b8a2d18: Pushed
d0e5cba6b262: Pushed
e0bac91f0f10: Pushed
1.0: digest: sha256:f9ccb476e2388efa0dfdf817625a94f2247674148a69b7e4846793e63c8be994 size: 1789
Quarkus アプリを Azure Container Apps にデプロイする
アプリ イメージをコンテナー レジストリにプッシュしたので、コンテナー レジストリからイメージをプルした後、次のコマンドを使用して Azure Container Apps インスタンスを作成し、アプリを実行します。
az containerapp create \
--resource-group $RESOURCE_GROUP_NAME \
--name $ACA_NAME \
--image $TODO_QUARKUS_IMAGE_TAG \
--environment $ACA_ENV \
--registry-server $LOGIN_SERVER \
--registry-identity system \
--target-port 8080 \
--ingress 'external' \
--min-replicas 1
成功すると、プロパティ "type": "Microsoft.App/containerApps"
を含む JSON オブジェクトが出力されます。
次に、次の手順を使用して、Service Connector を使用して Azure Database for PostgreSQL フレキシブル サーバー インスタンスをコンテナー アプリに接続します。
次のコマンドを 使用して、Azure CLI の Service Connector パスワードレス拡張機能をインストールします。
az extension add --name serviceconnector-passwordless --upgrade --allow-preview true
次のコマンドを使用して、システム割り当てマネージド ID を使用してデータベースをコンテナー アプリに接続します。
az containerapp connection create postgres-flexible \ --resource-group $RESOURCE_GROUP_NAME \ --name $ACA_NAME \ --target-resource-group $RESOURCE_GROUP_NAME \ --server $DB_SERVER_NAME \ --database $DB_NAME \ --system-identity \ --container $ACA_NAME
成功すると、プロパティ
"type": "microsoft.servicelinker/linkers"
を含む JSON オブジェクトが出力されます。
次のコマンドを使用して、Todo アプリケーションにアクセスするための完全修飾 URL を取得します。
export QUARKUS_URL=https://$(az containerapp show \
--resource-group $RESOURCE_GROUP_NAME \
--name $ACA_NAME \
--query properties.configuration.ingress.fqdn -o tsv)
echo $QUARKUS_URL
新しい Web ブラウザーを開いて値を ${QUARKUS_URL}
に設定します。 Web ページが正しく表示されない場合は、しばらく待ってからページを更新してください。
次に、テキスト Deployed the Todo app to Container Apps
を含む新しい Todo 項目を追加します。 この項目を選択すると、完了としてマークされます。
次の例に示すように、RESTful API (/api
) にアクセスして、Azure Database for PostgreSQL に保存されているすべての ToDo 項目を取得します。
curl --verbose -k ${QUARKUS_URL}/api | jq .
出力は次の例のようになります。
* Connected to <aca-name>.<random-id>.eastus.azurecontainerapps.io (20.231.235.79) port 443 (#0)
> GET /api HTTP/2
> Host: <aca-name>.<random-id>.eastus.azurecontainerapps.io
> user-agent: curl/7.88.1
> accept: */*
>
< HTTP/2 200
< content-length: 88
< content-type: application/json;charset=UTF-8
<
[
{
"id": 1,
"title": "Deployed the Todo app to Container Apps",
"completed": true,
"order": 1,
"url": null
}
]
データベースが更新されていることを確認する
次のコマンドを使用して、データベースが新しい todo 項目で更新されたことを確認します。
export ACCESS_TOKEN=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken)
az postgres flexible-server execute \
--admin-user $ENTRA_ADMIN_NAME \
--admin-password $ACCESS_TOKEN \
--name $DB_SERVER_NAME \
--database-name $DB_NAME \
--querytext "select * from todo;"
拡張機能をインストールするように求められたら、 Yと答えます。
出力は次の例のようになります。前に示した Todo アプリ GUI に同じ項目を含める必要があります。
Successfully connected to <DB_SERVER_NAME>.
Ran Database Query: 'select * from todo;'
Retrieving first 30 rows of query output, if applicable.
Closed the connection to <DB_SERVER_NAME>
[
{
"completed": true,
"id": 1,
"ordering": 1,
"title": "Deployed the Todo app to Container Apps",
"url": null
}
]
完了したら、次のコマンドを使用して、ローカル IP アドレスが Azure Database for PostgreSQL フレキシブル サーバー インスタンスにアクセスできるようにするファイアウォール ルールを削除します。
az postgres flexible-server firewall-rule delete \
--resource-group $RESOURCE_GROUP_NAME \
--name $DB_SERVER_NAME \
--rule-name $DB_SERVER_NAME-database-allow-local-ip \
--yes
リソースをクリーンアップする
Azure の課金を回避するには、不要なリソースをクリーンアップする必要があります。 クラスターが必要なくなったら、az group delete
コマンドを使って、リソース グループ、コンテナー サービス、コンテナー レジストリ、およびすべての関連リソースを削除してください。
git reset --hard
docker rmi ${TODO_QUARKUS_IMAGE_TAG}
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
また、 docker rmi
を使用して、Quarkus 開発モードで生成された postgres
および testcontainers
コンテナ イメージを削除することもできます。