练习 - 设置 Azure 容器应用

已完成

在本单元中,你将创建一个 Azure 资源组,其中包含应用程序的资源。 然后使用 Azure CLI 设置 PostgreSQL 数据库。 最后配置 Quarkus 应用程序以访问远程 PostgreSQL 数据库。 使用自己所选的终端来运行命令。

准备工作环境

你需要设置一些环境变量。 下面是有关要创建的变量的一些说明:

变量 说明
AZ_PROJECT 项目的名称。 要保持此值的唯一性,建议使用 AZ_PROJECT_<your initials>
AZ_RESOURCE_GROUP 保存资源的资源组的名称。
AZ_LOCATION Azure 区域。 建议你使用靠近居住位置的区域。 要查看可用区域的列表,请在命令提示符处输入 az account list-locations
AZ_CONTAINERAPP 保存容器的 Azure 容器应用实例的名称。
AZ_CONTAINERAPP_ENV Azure 容器应用环境的名称。
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 的小型实例:

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 服务器。

配置 Quarkus 以访问 PostgreSQL 数据库

现在,你将把 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"

请注意返回的连接字符串。

配置 Quarkus 应用程序以连接到 PostgreSQL 数据库

更新项目的 src/main/resources 文件夹中的 application.properties 文件,以配置 PostgreSQL 数据库的连接字符串。 为此,请将 quarkus.datasource.jdbc.url 属性设置为先前的输出 $POSTGRES_CONNECTION_STRING_SSL 值。 连接字符串的 &ssl=true&sslmode=require 部件会强制驱动程序使用 SSL,这是 Azure Database for PostgreSQL 的要求。

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 数据库。