Azure Container Apps を使用してジョブを作成する
Azure Container Apps のジョブを使用すると、有限の期間実行して終了するコンテナー化されたタスクを実行できます。 ジョブを手動でトリガーしたり、実行をスケジュールしたり、イベントに基づいて実行をトリガーしたりすることができます。
ジョブは、データ処理、機械学習、リソースのクリーンアップ、オンデマンド処理が必要なシナリオなどのタスクに最適です。
このクイックスタートでは、手動またはスケジュールされたジョブを作成します。 イベント ドリブン ジョブを作成する方法については、Azure Container Apps を使用したイベント ドリブン ジョブのデプロイに関する記事を参照してください。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。
- 持っていない場合は、無料で作成できます。
- Azure CLI をインストールします。
- 制限事項の一覧については、「ジョブの制限事項」を参照してください。
設定
CLI から Azure にサインインするには、次のコマンドを実行し、プロンプトに従って認証プロセスを完了します。
az login
upgrade コマンドを使用して、最新バージョンの CLI を実行していることを確認します。
az upgrade
最新バージョンの Azure Container Apps 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="northcentralus" ENVIRONMENT="env-jobs-quickstart" JOB_NAME="my-job"
Container Apps 環境を作成する
Azure Container Apps 環境は、コンテナー アプリとジョブを囲む安全な境界として機能するため、同じネットワークを共有したり、相互に通信したりすることができます。
リソース グループを作成するには、次のコマンドを使用します。
az group create \ --name "$RESOURCE_GROUP" \ --location "$LOCATION"
次のコマンドを使用して、Container Apps 環境を作成します。
az containerapp env create \ --name "$ENVIRONMENT" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION"
手動ジョブを作成して実行する
手動ジョブを使用するには、まずトリガーの種類が Manual
のジョブを作成してから、実行を開始します。 同じジョブに対して複数回実行を開始でき、複数のジョブの実行を同時に行うことができます。
次のコマンドを使用して、Container Apps 環境にジョブを作成します。
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 式でスケジュールを定義するジョブを作成します。
次のコマンドを使用して、1 分ごとに開始するジョブを Container Apps 環境に作成します。
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 * * * *"
ジョブの実行は、スケジュールに基づいて自動的に開始されます。
Container Apps ジョブでは、cron 式を使用してスケジュールを定義します。 標準の cron 式形式がサポートされており、分、時、日、月、曜日の 5 つのフィールドがあります。
最近のジョブの実行履歴を一覧表示する
Container Apps ジョブは、最近の実行履歴を保持します。 ジョブの実行を一覧表示できます。
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
ジョブの実行ログのクエリを実行する
ジョブを実行すると、Container Apps 環境用に構成したログ プロバイダーにログが出力されます。 規定では、ログは Azure Log Analytics に保存されます。
Container Apps 環境の 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"
ヒント
問題がある場合は、 GitHub の Azure Container Apps リポジトリでイシューを開いて、お知らせください。