Share via


Azure Kubernetes Service クラスターに Quarkus を使用する Java アプリケーションをデプロイする

この記事では、シンプルな CRUD アプリケーションを使用して Red Hat Quarkus を Azure Kubernetes Service (AKS) に迅速にデプロイする方法を示します。 このアプリケーションは、JavaScript フロントエンドと REST エンドポイントを備えた "To Do リスト" です。 Azure Database for PostgreSQL は、アプリの永続化レイヤーを提供します。 この記事では、アプリをローカルでテストし、AKS にデプロイする方法を示します。

前提条件

  • Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
  • Azure Cloud Shell には、これらの前提条件がすべてプレインストールされています。 詳細については、「Azure Cloud Shell のクイックスタート」を参照してください。
  • (Azure Cloud Shell を使うのではなく) このガイドのコマンドをローカルで実行している場合は、次の手順を実行します。
    • Unix のようなオペレーティング システム (Ubuntu、macOS、または Linux 用 Windows サブシステムなど) がインストールされているローカル マシンを準備します。
    • Java SE 実装 (たとえば、OpenJDK の Microsoft ビルド) をインストールします。
    • Maven 3.5.0 以上をインストールします。
    • お使いの OS 用の Docker または Podman をインストールします。
    • jq をインストールします。
    • cURL をインストールします。
    • Quarkus CLI をインストールします。
  • Unix に似た環境用の Azure CLI。 この記事では、Azure CLI の Bash バリアントのみが必要です。
    • 開発者は、コードで DefaultAzureCredential を使用する前に、Azure CLI をインストールし、az login コマンドを使用して対話形式でサインインして Azure にログインする必要があります。
      az login
      
    • この記事では、バージョン 2.31.0 以上の Azure CLI が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。

アプリ プロジェクトを作成する

次のコマンドを使って、この記事用のサンプル Java プロジェクトをクローンします。 サンプルは GitHub にあります。

git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2023-07-17
cd aks-quarkus

HEAD がデタッチされた状態であることを示すメッセージが表示された場合、このメッセージは無視しても問題ありません。 この記事ではコミットを必要としないため、HEAD がデタッチされた状態が適切です。

Quarkus アプリをローカルでテストする

このセクションの手順では、アプリをローカルで実行する方法を示します。

Quarkus は、開発モードおよびテスト モードでの未構成のサービスの自動プロビジョニングをサポートしています。 Quarkus は、この機能を開発サービスと呼びます。 データベース サービスへの接続などの Quarkus 機能が含まれているとします。 アプリをテストしたいと考えていますが、実際のデータベースへの接続がまだ完全に構成されていません。 Quarkus は、関連するサービスのスタブ バージョンを自動的に開始し、アプリケーションをそれに接続します。 詳細については、Quarkus ドキュメントの「Dev Services の概要」を参照してください。

コンテナー環境 (Docker または Podman) が実行されていることを確認し、次のコマンドを使用して 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-aks 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.2.0.Final) started in 3.377s. 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-orm-panache, 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 リストで Todo 項目をいくつか選択してみてください。 UI は取り消し線のテキスト スタイルで選択を示します。 次のスクリーンショットに示すように、「Todo アプリの確認」と入力して Enter キー を押して、新しい Todo 項目を 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 (ACR)
  • Azure Kubernetes Service (AKS)

これらのリソースの一部は、Azure サブスクリプションのスコープ内で一意の名前を持つ必要があります。 この一意性を確保するために、 イニシャル、シーケンス、日付、サフィックス パターンを使用できます。 このパターンを適用するには、イニシャル、シーケンス番号、今日の日付、およびリソース固有のサフィックス (たとえば、"リソース グループ" の場合は rg) を一覧表示してリソースに名前を付けます。 次のコマンドを使用して、後で使用するいくつかの環境変数を定義します。

export UNIQUE_VALUE=<your unique value, such as ejb010717>
export RESOURCE_GROUP_NAME=${UNIQUE_VALUE}rg
export LOCATION=<your desired Azure region for deploying your resources. For example, eastus>
export REGISTRY_NAME=${UNIQUE_VALUE}reg
export DB_SERVER_NAME=${UNIQUE_VALUE}db
export CLUSTER_NAME=${UNIQUE_VALUE}aks
export AKS_NS=${UNIQUE_VALUE}ns

Azure Database for PostgreSQL の作成

Azure Database for PostgreSQL は、高可用性の PostgreSQL データベースを Azure クラウドで実行、管理、スケールできるマネージド サービスです。 このセクションでは、単一の Azure Database for PostgreSQL サーバーを作成し、それに接続する方法を示す別のクイックスタートを紹介します。 ただし、クイックスタートの手順に従う場合は、次の表の設定を使用して、サンプル Quarkus アプリのデータベース デプロイをカスタマイズする必要があります。 Azure portal のフィールドに入力するときに、環境変数を実際の値に置き換えます。

設定 説明
Resource group ${RESOURCE_GROUP_NAME} [新規作成] を選択します。 デプロイでは、この新しいリソース グループが作成されます。
サーバー名 ${DB_SERVER_NAME} この値は、データベース サーバーのホスト名の一部を形成します。
場所 ${LOCATION} ドロップダウン リストから場所を選択します。 場所を記録しておきます。 作成する他の Azure リソースにもこれと同じ場所を使用する必要があります。
管理者ユーザー名 Quarkus サンプル コードでは、この値を前提としています。
Password Secret123456 サンプル コードでは、この値を前提としています。

これらの値の置換を念頭に置き、「クイック スタート: Azure portal を使用して Azure Database for PostgreSQL サーバーを作成する」の手順を "ファイアウォール ルールの構成" セクションまで実行します。 次に、"ファイアウォール ルールの構成" セクションで、[Azure サービスへのアクセスを許可する] で必ず [はい] を選択し、[保存] を選択します。 これを怠ると、Quarkus アプリはデータベースにアクセスできなくなり、起動できなくなります。

Azure サービスへのアクセスを許可する手順を含む、クイックスタートの "ファイアウォール ルールの構成" セクションの手順を完了したら、この記事に戻ってください。

PostgreSQL で Todo データベースを作成する

先ほど作成した PostgreSQL サーバーは空です。 Quarkus アプリケーションで使用できるデータベースはありません。 次のコマンドを使用し、todo という名前の新しいデータベースを作成します。

az postgres db create \
    --resource-group ${RESOURCE_GROUP_NAME} \
    --name todo \
    --server-name ${DB_SERVER_NAME}

サンプル コードではデータベース名が前提であるため、データベースの名前として を使用 todo する必要があります。

コマンドが成功した場合、出力は次の例のようになります。

{
  "charset": "UTF8",
  "collation": "English_United States.1252",
  "id": "/subscriptions/REDACTED/resourceGroups/ejb010718rg/providers/Microsoft.DBforPostgreSQL/servers/ejb010718db/databases/todo",
  "name": "todo",
  "resourceGroup": "ejb010718rg",
  "type": "Microsoft.DBforPostgreSQL/servers/databases"
}

Microsoft Azure Container Registry インスタンスを作成する

Quarkus はクラウド ネイティブ テクノロジーであるため、Kubernetes で実行されるコンテナーを作成するためのサポートが組み込まれています。 Kubernetes は、実行するコンテナー イメージを見つけるコンテナー レジストリを持つことに完全に依存します。 AKS には、Azure Container Registry (ACR) のサポートが組み込まれています。

az acr create コマンドを使用して ACR インスタンスを作成します。 次の例では、環境変数 ${REGISTRY_NAME} の値を使用して名前を付けた ACR インスタンスを作成します。

az acr create \
    --resource-group $RESOURCE_GROUP_NAME \
    --location ${LOCATION} \
    --name $REGISTRY_NAME \
    --sku Basic \
    --admin-enabled

しばらくすると、次の行を含む JSON 出力が表示されます。

  "provisioningState": "Succeeded",
  "publicNetworkAccess": "Enabled",
  "resourceGroup": "<YOUR_RESOURCE_GROUP>",

Docker を ACR インスタンスに接続する

ACR インスタンスにサインインします。 サインインすると、イメージをプッシュできます。 次のコマンドを使用して、接続を確認します。

export LOGIN_SERVER=$(az acr show \
    --name $REGISTRY_NAME \
    --query 'loginServer' \
    --output tsv)
echo $LOGIN_SERVER
export USER_NAME=$(az acr credential show \
    --name $REGISTRY_NAME \
    --query 'username' \
    --output tsv)
echo $USER_NAME
export PASSWORD=$(az acr credential show \
    --name $REGISTRY_NAME \
    --query 'passwords[0].value' \
    --output tsv)
echo $PASSWORD
docker login $LOGIN_SERVER -u $USER_NAME -p $PASSWORD

Docker の代わりに Podman を使用している場合は、 コマンドに必要な変更を加えます。

ACR インスタンスに正常にサインインした場合は、コマンド出力の最後に Login Succeeded が表示されます。

AKS クラスターを作成する

AKS クラスターを作成するには、az aks create コマンドを使用します。 次の例では、環境変数 ${CLUSTER_NAME} の値を使用した名前のクラスターを 1 つのノードで作成します。 クラスターは、前の手順で作成した ACR インスタンスに接続されています。 このコマンドは、完了するまでに数分かかります。

az aks create \
    --resource-group $RESOURCE_GROUP_NAME \
    --location ${LOCATION} \
    --name $CLUSTER_NAME \
    --attach-acr $REGISTRY_NAME \
    --node-count 1 \
    --generate-ssh-keys \
    --enable-managed-identity

数分後、コマンドが完了し、次の出力を含むクラスターに関する情報が JSON 形式で返されます。

  "nodeResourceGroup": "MC_<your resource_group_name>_<your cluster name>_<your region>",
  "privateFqdn": null,
  "provisioningState": "Succeeded",
  "resourceGroup": "<your resource group name>",

AKS クラスターに接続する

Kubernetes クラスターを管理するには kubectl (Kubernetes コマンド ライン クライアント) を使用します。 Azure Cloud Shell を使用している場合、kubectl は既にインストールされています。 kubectl をローカルにインストールするには、次の例に示すように、az aks install-cli コマンドを使用します。

az aks install-cli

kubectl の詳細については、Kubernetes ドキュメントの「コマンド ライン ツール (kubectl)」を参照してください。

Kubernetes クラスターに接続するように kubectl を構成するには、次の例に示すように、az aks get-credentials コマンドを使用します。 このコマンドは、資格情報をダウンロードし、それを使用するように Kubernetes CLI を構成します。

az aks get-credentials \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --overwrite-existing \
    --admin

成功した出力には、次の例のようなテキストが含まれます。

Merged "ejb010718aks-admin" as current context in /Users/edburns/.kube/config

kkubectl にエイリアスすると便利な場合があります。 その場合は、次のコマンドを使用します:

alias k=kubectl

クラスターへの接続を確認するには、次の例に示すように、kubectl get コマンドを使用してクラスター ノードの一覧を返します。

kubectl get nodes

次の出力例は、前の手順で作成した単一ノードを示しています。 ノードの状態が "準備完了" であることを確認します。

NAME                                STATUS   ROLES   AGE     VERSION
aks-nodepool1-xxxxxxxx-yyyyyyyyyy   Ready    agent   76s     v1.23.8

AKS で新しい名前空間を作成する

次のコマンドを使用して、Quarkus アプリの Kubernetes サービスに新しい名前空間を作成します。

kubectl create namespace ${AKS_NS}

出力は次の例のようになります。

namespace/<your namespace> created

クラウド ネイティブ構成をカスタマイズする

Quarkus は、クラウド ネイティブ テクノロジーとして、標準の Kubernetes、Red Hat OpenShift、Knative のリソースを自動的に構成する機能を提供します。 詳細については、Quarkus Kubernetes ガイドQuarkus OpenShift ガイドQuarkus Knative ガイドを参照してください。 開発者は、生成されたマニフェストを適用することで、アプリケーションをターゲットの Kubernetes クラスターにデプロイできます。

適切な Kubernetes リソースを生成するには、次のコマンドを使用して、ローカル ターミナルに quarkus-kubernetes および container-image-jib の拡張機能を追加します。

quarkus ext add kubernetes container-image-jib

Quarkus は、これらの拡張機能が <dependencies> として一覧表示されるように POM を変更します。 JBang と呼ばれるものをインストールするように求められたら、「はい」と答えてインストールを許可します。

出力は次の例のようになります。

[SUCCESS] ✅  Extension io.quarkus:quarkus-kubernetes has been installed
[SUCCESS] ✅  Extension io.quarkus:quarkus-container-image-jib has been installed

拡張機能が追加されたことを確認するには、git diff を実行して出力を調べます。

Quarkus はクラウド ネイティブ テクノロジーとして、構成プロファイルの概念をサポートしています。 Quarkus には、次の 3 つの組み込みプロファイルがあります。

  • dev - 開発モードのときにアクティブ化されます
  • test - テストの実行時にアクティブ化されます
  • prod - 開発モードまたはテストモードで実行されていないときの既定のプロファイル

Quarkus は、必要に応じて、任意の数の名前付きプロファイルをサポートします。

このセクションの残りの手順では、src/main/resources/application.properties ファイルのコメントを解除して値をカスタマイズする方法を説明します。 先頭の # を削除して、# %prod. で始まるすべての行のコメントが解除されていることを確認します。

prod. プレフィックスは、prod プロファイルでの実行時にこれらのプロパティがアクティブであることを示します。 構成プロファイルの詳細については、Quarkus のドキュメントを参照してください。

データベース構成

次のデータベース構成変数を追加します。 <DB_SERVER_NAME_VALUE> の値を ${DB_SERVER_NAME} 環境変数の実際の値に置き換えます。

# Database configurations
%prod.quarkus.datasource.db-kind=postgresql
%prod.quarkus.datasource.jdbc.url=jdbc:postgresql://<DB_SERVER_NAME_VALUE>.postgres.database.azure.com:5432/todo
%prod.quarkus.datasource.jdbc.driver=org.postgresql.Driver
%prod.quarkus.datasource.username=quarkus@<DB_SERVER_NAME_VALUE>
%prod.quarkus.datasource.password=Secret123456
%prod.quarkus.hibernate-orm.database.generation=drop-and-create

Kubernetes の構成

次の Kubernetes 構成変数を追加します。 アプリに外部からアクセスするには、必ず service-typeload-balancer に設定してください。

# AKS configurations
%prod.quarkus.kubernetes.deployment-target=kubernetes
%prod.quarkus.kubernetes.service-type=load-balancer

コンテナー イメージの構成

Quarkus は、クラウド ネイティブ テクノロジーとして、Docker および Podman と互換性のある OCI コンテナー イメージの生成をサポートしています。 次のコンテナー イメージ変数を追加します。 <LOGIN_SERVER_VALUE><USER_NAME_VALUE> の値を、それぞれ ${LOGIN_SERVER}${USER_NAME} 環境変数の実際の値に置き換えます。

# Container Image Build
%prod.quarkus.container-image.build=true
%prod.quarkus.container-image.registry=<LOGIN_SERVER_VALUE>
%prod.quarkus.container-image.group=<USER_NAME_VALUE>
%prod.quarkus.container-image.name=todo-quarkus-aks
%prod.quarkus.container-image.tag=1.0

コンテナー イメージをビルドして ACR にプッシュする

次に、次のコマンドを使用してアプリケーション自体をビルドします。 このコマンドは、Kubernetes および Jib 拡張機能を使用してコンテナー イメージを構築します。

quarkus build --no-tests

出力は BUILD SUCCESS で終わる必要があります。 次の例に示すように、Kubernetes マニフェスト ファイルは target/kubernetes に生成されます。

tree target/kubernetes
target/kubernetes
├── kubernetes.json
└── kubernetes.yml

0 directories, 2 files

docker または podman コマンド ライン (CLI) を使用して、コンテナー イメージが生成されたかどうかも確認できます。 出力は次の例のようになります。

docker images | grep todo
<LOGIN_SERVER_VALUE>/<USER_NAME_VALUE>/todo-quarkus-aks   1.0       b13c389896b7   18 minutes ago   420MB

次のコマンドを使用して、コンテナー イメージを ACR にプッシュします。

export TODO_QUARKUS_TAG=$(docker images | grep todo-quarkus-aks | head -n1 | cut -d " " -f1)
echo ${TODO_QUARKUS_TAG}
docker push ${TODO_QUARKUS_TAG}:1.0

出力は次の例のようになるはずです。

The push refers to repository [<LOGIN_SERVER_VALUE>/<USER_NAME_VALUE>/todo-quarkus-aks]
dfd615499b3a: Pushed
56f5cf1aa271: Pushed
4218d39b228e: Pushed
b0538737ed64: Pushed
d13845d85ee5: Pushed
60609ec85f86: Pushed
1.0: digest: sha256:0ffd70d6d5bb3a4621c030df0d22cf1aa13990ca1880664d08967bd5bab1f2b6 size: 1995

アプリを ACR にプッシュしたので、AKS にアプリを実行するように指示できます。

Quarkus アプリを AKS にデプロイする

このセクションの手順では、作成した Azure リソース上で Quarkus サンプル アプリを実行する方法を示します。

kubectl apply を使用して Quarkus アプリを AKS にデプロイする

次の例に示すように、コマンド ラインで kubectl を使用して Kubernetes リソースをデプロイします。

kubectl apply -f target/kubernetes/kubernetes.yml -n ${AKS_NS}

出力は次の例のようになります。

deployment.apps/quarkus-todo-demo-app-aks created

次のコマンドを使用して、アプリが実行されていることを確認します。

kubectl -n $AKS_NS get pods

STATUS フィールドの値が Running 以外を示している場合は、続行する前にトラブルシューティングを行い、問題を解決してください。 次のコマンドを使用してポッド ログを調べると役立つ場合があります。

kubectl -n $AKS_NS logs $(kubectl -n $AKS_NS get pods | grep quarkus-todo-demo-app-aks | cut -d " " -f1)

次のコマンドを使用して、Todo アプリケーションにアクセスするための EXTERNAL-IP を取得します。

kubectl get svc -n ${AKS_NS}

出力は次の例のようになります。

NAME                        TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
quarkus-todo-demo-app-aks   LoadBalancer   10.0.236.101   20.12.126.200   80:30963/TCP   37s

次のコマンドを使用して、EXTERNAL-IP の値を完全修飾 URL として環境変数に保存できます。

export QUARKUS_URL=http://$(kubectl get svc -n ${AKS_NS} | grep quarkus-todo-demo-app-aks | cut -d " " -f10)
echo $QUARKUS_URL

新しい Web ブラウザーを開いて値を ${QUARKUS_URL} に設定します。 次に、テキスト Deployed the Todo app to AKS を含む新しい Todo 項目を追加します。 また、Introduction to Quarkus Todo App 項目を完了として選択します。

AKS で実行されている Todo サンプル アプリのスクリーンショット。

次の例に示すように、RESTful API (/api) にアクセスして、Azure PostgreSQL データベースに保存されているすべての ToDo 項目を取得します。

curl --verbose ${QUARKUS_URL}/api | jq .

出力は次の例のようになります。

* Connected to 20.237.68.225 (20.237.68.225) port 80 (#0)
> GET /api HTTP/1.1
> Host: 20.237.68.225
> User-Agent: curl/7.88.1
> Accept: */*
>
< HTTP/1.1 200 OK
< content-length: 828
< Content-Type: application/json;charset=UTF-8
<
[
  {
    "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": "Deployed the Todo app to AKS",
    "completed": false,
    "order": 5,
    "url": null
  },
  {
    "id": 1,
    "title": "Introduction to Quarkus Todo App",
    "completed": true,
    "order": 0,
    "url": null
  }
]

Azure Cloud Shell を使用してデータベースが更新されたことを確認する

次のスクリーンショットに示すように、Azure portal で Cloud Shell アイコンを選択して Azure Cloud Shell を開きます。

Cloud Shell ボタンが強調表示された Azure portal のスクリーンショット。

次のコマンドをローカルで実行し、結果を Azure Cloud Shell に貼り付けます。

echo psql --host=${DB_SERVER_NAME}.postgres.database.azure.com --port=5432 --username=quarkus@${DB_SERVER_NAME} --dbname=todo

パスワードを求められたら、データベースの作成時に使用した値を使用します。

次のクエリを使用して、すべての ToDo 項目を取得します。

select * from todo;

出力は次の例のようになり、前に示した Todo アプリ GUI に同じ項目が含まれているはずです。

ASCII テーブルとして出力されたクエリのスクリーンショット。

出力に MORE が表示された場合は、「q」と入力してポケットベルを終了します。

\q」と入力して、psql プログラムを終了し、Cloud Shell に戻ります。

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

Azure の課金を回避するには、不要なリソースをクリーンアップする必要があります。 クラスターが必要なくなったら、az group delete コマンドを使って、リソース グループ、コンテナー サービス、コンテナー レジストリ、およびすべての関連リソースを削除してください。

git reset --hard
docker rmi ${TODO_QUARKUS_TAG}:1.0
docker rmi postgres
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

docker rmi を使用して、Quarkus 開発モードによって生成されたコンテナー イメージ postgres および testcontainers を削除することもできます。

次のステップ