教程:使用 Azure 容器应用部署事件驱动作业
使用 Azure 容器应用作业可以运行容器化任务,这些任务会在有限的时间内执行并退出。 可以根据计划或基于事件手动触发作业执行。 作业最适合用于数据处理、机器学习、资源清理等任务,或任何需要无服务器临时计算资源的方案。
本教程介绍如何使用事件驱动作业。
- 创建容器应用环境以部署容器应用
- 创建 Azure 存储队列以将消息发送到容器应用
- 生成运行作业的容器映像
- 将作业部署到容器应用环境
- 验证队列消息是否由容器应用处理
创建的作业会针对发送到 Azure 存储队列的每条消息开始执行。 每个作业执行都会运行容器以执行以下步骤:
- 获取队列中的一条消息。
- 将消息记录到作业执行日志。
- 从队列中删除该消息。
- 退出。
重要
缩放器会监视队列的长度,以确定要启动的作业数。 为了进行准确的缩放,在作业执行处理完消息之前,不要从队列中删除该消息。
本教程中运行的作业源代码在 Azure 示例 GitHub 存储库中提供。
先决条件
设置
若要从 CLI 登录到 Azure,请运行以下命令,然后按照提示完成身份验证过程。
az login
确保通过升级命令运行最新版本的 CLI。
az upgrade
安装最新版 Azure 容器应用 CLI 扩展。
az extension add --name containerapp --upgrade
如果尚未在 Azure 订阅中注册
Microsoft.App
和Microsoft.OperationalInsights
命名空间,现在请注册。az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights
完成 Azure CLI 安装后,接下来可以定义要在本文中使用的环境变量。
$RESOURCE_GROUP="jobs-quickstart" $LOCATION="chinanorth3" $ENVIRONMENT="env-jobs-quickstart" $JOB_NAME="my-job"
创建容器应用环境
Azure 容器应用环境充当容器应用和作业周围的安全边界,因此容器应用和作业可以共享同一网络并相互通信。
使用以下命令创建资源组。
az group create --name $RESOURCE_GROUP --location $LOCATION
使用以下命令创建容器应用环境。
az containerapp env create --name $ENVIRONMENT --resource-group $RESOURCE_GROUP --location $LOCATION
设置存储队列
作业使用 Azure 存储队列来接收消息。 在本部分中,将创建一个存储帐户和一个队列。
为存储帐户定义一个名称。
STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>" QUEUE_NAME="myqueue"
使用存储帐户的唯一名称替换
<STORAGE_ACCOUNT_NAME>
。 存储帐户名称在 Azure 中必须是唯一的,长度为 3 到 24 个字符,仅包含数字和小写字母。创建 Azure 存储帐户。
az storage account create \ --name "$STORAGE_ACCOUNT_NAME" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION" \ --sku Standard_LRS \ --kind StorageV2
将队列的连接字符串保存到变量中。
QUEUE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --output tsv`
生成并部署作业
若要部署作业,必须先为作业生成容器映像并将其推送到注册表。 然后,可以将作业部署到容器应用环境。
为容器映像和注册表定义一个名称。
CONTAINER_IMAGE_NAME="queue-reader-job:1.0" CONTAINER_REGISTRY_NAME="<CONTAINER_REGISTRY_NAME>"
使用容器注册表的唯一名称替换
<CONTAINER_REGISTRY_NAME>
。 容器注册表名称在 Azure 中必须是唯一的,长度为 5 到 50 个字符,仅包含数字和小写字母。创建容器注册表。
az acr create \ --name "$CONTAINER_REGISTRY_NAME" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION" \ --sku Basic \ --admin-enabled true
作业的源代码在 GitHub 上提供。 运行以下命令,以使用
az acr build
命令克隆存储库并在云中生成容器映像。az acr build \ --registry "$CONTAINER_REGISTRY_NAME" \ --image "$CONTAINER_IMAGE_NAME" \ "https://github.com/Azure-Samples/container-apps-event-driven-jobs-tutorial.git"
映像现已在容器注册表中可用。
事件驱动作业现已在容器应用环境中创建。
验证部署
将作业配置为每隔 60 秒评估一次缩放规则,该规则检查队列中的消息数。 对于每个评估周期,它会为队列中的每个消息启动一个新的作业执行,最多可执行 10 次。
若要验证作业是否已正确配置,可以发送一些消息到队列,确认作业执行已启动,并将消息记录到作业执行日志。
发送消息到队列。
az storage message put \ --content "Hello Queue Reader Job" \ --queue-name "$QUEUE_NAME" \ --connection-string "$QUEUE_CONNECTION_STRING"
提示
遇到问题? 在 Azure 容器应用存储库中提交问题,告知我们有关 GitHub 的信息。
清理资源
完成后,运行以下命令以删除包含容器应用资源的资源组。
注意
以下命令删除指定的资源组及其包含的所有资源。 如果指定的资源组中存在本教程范围外的资源,这些资源也会被删除。
az group delete \
--resource-group $RESOURCE_GROUP