教學課程:使用 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