使用 Azure 容器应用作业可以运行容器化任务,这些任务会在有限的时间内执行并退出。 可以手动触发作业、计划作业的执行,或根据事件触发作业的执行。
作业最适合用于数据处理、资源清理机器学习等任务或任何需要按需处理的方案。
在本快速入门中,你将创建手动作业或计划作业。 若要了解如何创建事件驱动的作业,请参阅使用 Azure 容器应用部署事件驱动的作业。
先决条件
设置
若要从 CLI 登录到 Azure,请运行以下命令,然后按照提示完成身份验证过程。
az login
确保通过升级命令运行最新版本的 CLI。
az upgrade
安装最新版 Azure 容器应用 CLI 扩展。
az extension add --name containerapp --upgrade
如果尚未在 Azure 订阅中注册
Microsoft.App
、Microsoft.OperationalInsights
和Microsoft.Storage
命名空间,请进行注册。az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights az provider register --namespace Microsoft.Storage
完成 Azure CLI 安装后,接下来可以定义要在本文中使用的环境变量。
RESOURCE_GROUP="jobs-quickstart" LOCATION="northcentralus" 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"
创建和运行手动作业
若要使用手动作业,首先请创建触发器类型为 Manual
的作业,然后启动执行。 可以启动同一个作业的多个执行,多个作业执行可以并发运行。
使用以下命令在容器应用环境中创建作业。
az containerapp job create \ --name "$JOB_NAME" --resource-group "$RESOURCE_GROUP" --environment "$ENVIRONMENT" \ --trigger-type "Manual" \ --replica-timeout 1800 \ --image "mcr.microsoft.com/k8se/quickstart-jobs:latest" \ --cpu "0.25" --memory "0.5Gi"
手动作业不会自动执行。 必须启动作业的执行。
使用以下命令启动作业执行。
az containerapp job start \ --name "$JOB_NAME" \ --resource-group "$RESOURCE_GROUP"
该命令返回作业执行的详细信息,包括其名称。
创建和运行计划作业
若要使用计划作业,请创建触发器类型为 Schedule
的作业,以及用于定义计划的 cron 表达式。
使用以下命令在容器应用环境中创建一个每分钟启动一次的作业。
az containerapp job create \
--name "$JOB_NAME" --resource-group "$RESOURCE_GROUP" --environment "$ENVIRONMENT" \
--trigger-type "Schedule" \
--replica-timeout 1800 \
--image "mcr.microsoft.com/k8se/quickstart-jobs:latest" \
--cpu "0.25" --memory "0.5Gi" \
--cron-expression "*/1 * * * *"
作业执行根据计划自动启动。
容器应用作业使用 cron 表达式来定义计划。 它支持标准 cron 表达式格式,其中包含分钟、小时、日、月和星期这五个字段。
列出最近的作业执行历史记录
容器应用作业保留最近执行的历史记录。 可以列出作业的执行。
az containerapp job execution list \
--name "$JOB_NAME" \
--resource-group "$RESOURCE_GROUP" \
--output table \
--query '[].{Status: properties.status, Name: name, StartTime: properties.startTime}'
计划作业的执行在运行时会显示在列表中。
Status Name StartTime
--------- -------------- -------------------------
Succeeded my-job-jvsgub6 2023-05-08T21:21:45+00:00
查询作业执行日志
作业执行将日志输出到你为容器应用环境配置的日志记录提供程序。 默认情况下,日志存储在 Azure Log Analytics 中。
将容器应用环境的 Log Analytics 工作区 ID 保存到某个变量中。
LOG_ANALYTICS_WORKSPACE_ID=$(az containerapp env show \ --name "$ENVIRONMENT" \ --resource-group "$RESOURCE_GROUP" \ --query "properties.appLogsConfiguration.logAnalyticsConfiguration.customerId" \ --output tsv)
将最近的作业执行名称保存到某个变量中。
JOB_EXECUTION_NAME=$(az containerapp job execution list \ --name "$JOB_NAME" \ --resource-group "$RESOURCE_GROUP" \ --query "[0].name" \ --output tsv)
使用以下命令对 Log Analytics 运行查询以获取作业执行。
az monitor log-analytics query \ --workspace "$LOG_ANALYTICS_WORKSPACE_ID" \ --analytics-query "ContainerAppConsoleLogs_CL | where ContainerGroupName_s startswith '$JOB_EXECUTION_NAME' | order by _timestamp_d asc" \ --query "[].Log_s"
注意
在
ContainerAppConsoleLogs_CL
表准备就绪之前,该命令不会返回任何结果或者会返回错误:BadArgumentError: The request had some invalid properties
。 等待几分钟,然后再次运行该命令。以下输出是作业执行输出的日志示例。
[ "2023/04/24 18:38:28 This is a sample application that demonstrates how to use Azure Container Apps jobs", "2023/04/24 18:38:28 Starting processing...", "2023/04/24 18:38:33 Finished processing. Shutting down!" ]
清理资源
如果你不打算继续使用此应用程序,请运行以下命令以删除资源组以及本快速入门中创建的所有资源。
注意
以下命令删除指定的资源组及其包含的所有资源。 如果指定的资源组中存在本快速入门范围外的资源,这些资源也会被删除。
az group delete --name "$RESOURCE_GROUP"
提示
遇到问题? 在 Azure 容器应用存储库中提交问题,告知我们有关 GitHub 的信息。