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

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

前提条件

  • Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
  • Unix 系オペレーティング システム (Ubuntu、macOS、または Linux 用 Windows サブシステムなど) がインストールされているローカル マシンを準備します。
  • Java SE 実装バージョン 17 以降 (たとえば、OpenJDK の Microsoft ビルド) をインストールします。
  • Maven バージョン 3.9.8 以降をインストールします。
  • お使いの OS 用の Docker または Podman をインストールします。
  • jq をインストールします。
  • cURL をインストールします。
  • Quarkus CLI バージョン 3.12.1 以降をインストールします。
  • Unix に似た環境用の Azure CLI。 この記事では、Azure CLI の Bash バリアントのみが必要です。
    • 開発者は、コードで DefaultAzureCredential を使用する前に、Azure CLI をインストールし、az login コマンドを使用して対話形式でサインインして Azure にログインする必要があります。
      az login
      
    • この記事では、バージョン 2.61.0 以降の Azure CLI が必要です。

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

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

git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2024-07-08
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://video2.skills-academy.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://video2.skills-academy.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://video2.skills-academy.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) を一覧表示してリソースに名前を付けます。 次の環境変数はこのパターンを使用します。 プレースホルダーの値 UNIQUE_VALUELOCATIONDB_PASSWORD を独自の値に置き換えて、ターミナルで次のコマンドを実行します。

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, northeurope>
export REGISTRY_NAME=${UNIQUE_VALUE}reg
export DB_SERVER_NAME=${UNIQUE_VALUE}db
export DB_NAME=demodb
export DB_ADMIN=demouser
export DB_PASSWORD='<your desired password for the database server - for example, Secret123456>'
export CLUSTER_NAME=${UNIQUE_VALUE}aks
export AKS_NS=${UNIQUE_VALUE}ns

Azure Database for PostgreSQL フレキシブル サーバーを作成する

Azure Database for PostgreSQL フレキシブル サーバーは、データベース管理機能と構成設定のよりきめ細かな制御と柔軟性を提供するように設計されたフル マネージド データベース サービスです。 このセクションでは、Azure CLI を使用して Azure Database for PostgreSQL フレキシブル サーバー インスタンスを作成する方法について説明します。 詳細については、「クイックスタート: Azure CLI を使用して Azure Database for PostgreSQL - フレキシブル サーバー インスタンスを作成する」を参照してください。

まず、次のコマンドを使用して、データベース サーバーとその他のリソースを含むリソース グループを作成します。

az group create \
    --name $RESOURCE_GROUP_NAME \
    --location $LOCATION

次に、Azure Database for PostgreSQL フレキシブル サーバー インスタンスを次のコマンドを使用して作成します。

az postgres flexible-server create \
    --name $DB_SERVER_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --admin-user $DB_ADMIN \
    --admin-password $DB_PASSWORD \
    --database-name $DB_NAME \
    --public-access 0.0.0.0 \
    --yes

サーバー、データベース、管理者ユーザー、ファイアウォール規則の作成には数分かかります。 コマンドが成功した場合、出力は次の例のようになります。

{
  "connectionString": "postgresql://<DB_ADMIN>:<DB_PASSWORD>@<DB_SERVER_NAME>.postgres.database.azure.com/<DB_NAME>?sslmode=require",
  "databaseName": "<DB_NAME>",
  "firewallName": "AllowAllAzureServicesAndResourcesWithinAzureIps_2024-7-5_14-39-45",
  "host": "<DB_SERVER_NAME>.postgres.database.azure.com",
  "id": "/subscriptions/REDACTED/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.DBforPostgreSQL/flexibleServers/<DB_SERVER_NAME>",
  "location": "North Europe",
  "password": "<DB_PASSWORD>",
  "resourceGroup": "<RESOURCE_GROUP_NAME>",
  "skuname": "Standard_D2s_v3",
  "username": "<DB_ADMIN>",
  "version": "13"
}

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

数分後、コマンドが完了し、次の出力を含むクラスターに関する情報が 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 コマンド ライン クライアント) を使用します。 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.28.9

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

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

kubectl create namespace ${AKS_NS}

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

namespace/<your namespace> created

AKS でデータベース接続用のシークレットを作成する

AKS 名前空間にシークレット db-secret を作成して、データベース接続情報を格納します。 次のコマンドを使用して、シークレットを作成します。

kubectl create secret generic db-secret \
    -n ${AKS_NS} \
    --from-literal=jdbcurl=jdbc:postgresql://${DB_SERVER_NAME}.postgres.database.azure.com:5432/${DB_NAME}?sslmode=require \
    --from-literal=dbusername=${DB_ADMIN} \
    --from-literal=dbpassword=${DB_PASSWORD}

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

secret/db-secret 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 のドキュメントを参照してください。

データベース構成

次のデータベース構成変数を追加します。 データベース接続関連のプロパティ %prod.quarkus.datasource.jdbc.url%prod.quarkus.datasource.username%prod.quarkus.datasource.password は、それぞれ環境変数 DB_JDBC_URLDB_USERNAMEDB_PASSWORD から値を読み取ります。 これらの環境変数は、セキュリティ上の理由からデータベース接続情報を格納するシークレット値にマップされます。これについては次のセクションで説明します。

# Database configurations
%prod.quarkus.datasource.db-kind=postgresql
%prod.quarkus.datasource.jdbc.driver=org.postgresql.Driver
%prod.quarkus.datasource.jdbc.url=${DB_JDBC_URL}
%prod.quarkus.datasource.username=${DB_USERNAME}
%prod.quarkus.datasource.password=${DB_PASSWORD}
%prod.quarkus.hibernate-orm.database.generation=drop-and-create
%prod.quarkus.hibernate-orm.sql-load-script=import.sql

Kubernetes の構成

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

# Kubernetes configurations
%prod.quarkus.kubernetes.deployment-target=kubernetes
%prod.quarkus.kubernetes.service-type=load-balancer
%prod.quarkus.kubernetes.env.secrets=db-secret
%prod.quarkus.kubernetes.env.mapping.DB_JDBC_URL.from-secret=db-secret
%prod.quarkus.kubernetes.env.mapping.DB_JDBC_URL.with-key=jdbcurl
%prod.quarkus.kubernetes.env.mapping.DB_USERNAME.from-secret=db-secret
%prod.quarkus.kubernetes.env.mapping.DB_USERNAME.with-key=dbusername
%prod.quarkus.kubernetes.env.mapping.DB_PASSWORD.from-secret=db-secret
%prod.quarkus.kubernetes.env.mapping.DB_PASSWORD.with-key=dbpassword

他の Kubernetes 構成では、Quarkus アプリケーションの環境変数へのシークレット値のマッピングを指定します。 db-secret シークレットにはデータベース接続情報が含まれています。 シークレット内の jdbcurldbusernamedbpassword キーは、それぞれ DB_JDBC_URLDB_USERNAMEDB_PASSWORD 環境変数にマップされます。

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

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   424MB

次のコマンドを使用して、コンテナー イメージを 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://video2.skills-academy.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://video2.skills-academy.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://video2.skills-academy.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=${DB_ADMIN} --dbname=${DB_NAME}

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

次のクエリを使用して、すべての 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 を削除することもできます。

次のステップ