教學課程:使用 Azure 容器應用程式部署背景處理應用程式

使用 Azure 容器應用程式可讓您部署應用程式,而不需公開公用端點。 應用程式使用容器應用程式調整規則,可以根據 Azure 儲存體佇列長度擴增和縮減。 當佇列上沒有訊息時,容器應用程式會縮減為零。

您將學習如何:

  • 建立容器應用程式環境以部署容器應用程式
  • 建立 Azure 儲存體佇列以將訊息傳送至容器應用程式
  • 將背景處理應用程式部署為容器應用程式
  • 確認容器應用程式已處理佇列訊息

設定

若要開始,請登入 Azure。 執行下列命令,並遵循提示來完成驗證程序。

az login

接下來,安裝 CLI 的 Azure 容器應用程式擴充功能。

az extension add --name containerapp --upgrade

現在已安裝目前的擴充功能或模組,請註冊 Microsoft.App 命名空間。

注意

Azure 容器應用程式資源已從 Microsoft.Web 命名空間移轉至 Microsoft.App 命名空間。 如需詳細資訊,請參閱 2022 年 3 月將命名空間從 Microsoft.Web 移轉至 Microsoft.App

az provider register --namespace Microsoft.App

請註冊 Azure 監視器 Log Analytics 工作區的 Microsoft.OperationalInsights 提供者 (如果之前未曾使用過)。

az provider register --namespace Microsoft.OperationalInsights

接下來,請設定下列環境變數:

RESOURCE_GROUP="my-container-apps"
LOCATION="canadacentral"
CONTAINERAPPS_ENVIRONMENT="my-environment"

定義這些變數後,您可以建立資源群組來組織與新容器應用程式相關的服務。

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

透過 CLI 升級和可用的新資源群組,您可以建立容器應用程式環境並部署容器應用程式。

建立環境

Azure 容器應用程式中的環境會在容器應用程式群組周圍建立安全界限。 部署至相同環境的容器應用程式會部署在相同的虛擬網路中,並將記錄寫入相同的 Log Analytics 工作區。


個別容器應用程式會部署至 Azure 容器應用程式環境。 若要建立環境,請執行下列命令:

az containerapp env create \
  --name $CONTAINERAPPS_ENVIRONMENT \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION"

設定儲存體佇列

首先,定義儲存體帳戶的名稱。 儲存體帳戶名稱必須是 Azure 中唯一的,且長度為 3 到 24 個字元,僅包含數字和小寫字母。

STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"

建立 Azure 儲存體帳戶。

az storage account create \
  --name $STORAGE_ACCOUNT_NAME \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION" \
  --sku Standard_RAGRS \
  --kind StorageV2

接下來,取得佇列的連接字串。

QUEUE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --out json | tr -d '"'`

現在您可以建立訊息佇列。

az storage queue create \
  --name "myqueue" \
  --account-name $STORAGE_ACCOUNT_NAME \
  --connection-string $QUEUE_CONNECTION_STRING

最後,您可以將訊息傳送至佇列。

az storage message put \
  --content "Hello Queue Reader App" \
  --queue-name "myqueue" \
  --connection-string $QUEUE_CONNECTION_STRING

部署背景應用程式

建立名為 queue.json 的檔案,並將下列組態程式碼貼到檔案中。

{
    "$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "location": {
            "defaultValue": "canadacentral",
            "type": "String"
        },
        "environment_name": {
            "type": "String"
        },
        "queueconnection": {
            "type": "secureString"
        }
    },
    "variables": {},
    "resources": [
    {
        "name": "queuereader",
        "type": "Microsoft.App/containerApps",
        "apiVersion": "2022-03-01",
        "kind": "containerapp",
        "location": "[parameters('location')]",
        "properties": {
            "managedEnvironmentId": "[resourceId('Microsoft.App/managedEnvironments', parameters('environment_name'))]",
            "configuration": {
                "activeRevisionsMode": "single",
                "secrets": [
                {
                    "name": "queueconnection",
                    "value": "[parameters('queueconnection')]"
                }]
            },
            "template": {
                "containers": [
                    {
                        "image": "mcr.microsoft.com/azuredocs/containerapps-queuereader",
                        "name": "queuereader",
                        "env": [
                            {
                                "name": "QueueName",
                                "value": "myqueue"
                            },
                            {
                                "name": "QueueConnectionString",
                                "secretRef": "queueconnection"
                            }
                        ]
                    }
                ],
                "scale": {
                    "minReplicas": 1,
                    "maxReplicas": 10,
                    "rules": [
                        {
                            "name": "myqueuerule",
                            "azureQueue": {
                                "queueName": "myqueue",
                                "queueLength": 100,
                                "auth": [
                                    {
                                        "secretRef": "queueconnection",
                                        "triggerParameter": "connection"
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        }
    }]
}

現在您可以建立及部署容器應用程式。

az deployment group create --resource-group "$RESOURCE_GROUP" \
  --template-file ./queue.json \
  --parameters \
    environment_name="$CONTAINERAPPS_ENVIRONMENT" \
    queueconnection="$QUEUE_CONNECTION_STRING" \
    location="$LOCATION"

此命令會從名為 mcr.microsoft.com/azuredocs/containerapps-queuereader 的公用容器映像部署示範應用程式,並設定應用程式所使用的秘密和環境變數。

應用程式會根據 ARM 範本 [scale] 區段中定義的佇列長度,擴增至 10 個複本。

確認結果

容器應用程式會以背景程序的形式執行。 當訊息從 Azure 儲存體佇列送達時,應用程式會在 Log Analytics 中建立記錄項目。 您必須等候幾分鐘,分析才會首次送達,然後您才能查詢記錄的資料。

執行下列命令以查看記錄的訊息。 此命令需要 Log Analytics 延伸模組,因此請接受在要求時安裝延伸模組的提示。

LOG_ANALYTICS_WORKSPACE_CLIENT_ID=`az containerapp env show --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --out tsv`

az monitor log-analytics query \
  --workspace $LOG_ANALYTICS_WORKSPACE_CLIENT_ID \
  --analytics-query "ContainerAppConsoleLogs_CL | where ContainerAppName_s == 'queuereader' and Log_s contains 'Message ID' | project Time=TimeGenerated, AppName=ContainerAppName_s, Revision=RevisionName_s, Container=ContainerName_s, Message=Log_s | take 5" \
  --out table

提示

有問題嗎? 在 Azure 容器應用程式存放庫中提出問題,讓我們在 GitHub 上了解該問題。

清除資源

完成後,請執行下列命令來刪除包含您容器應用程式資源的資源群組。

警告

下列命令會刪除指定的資源群組和其中包含的所有資源。 如果本教學課程範圍以外的資源存在於指定的資源群組中,則也會一併刪除。

az group delete \
  --resource-group $RESOURCE_GROUP