Share via


Azure Container Apps を使用してジョブを作成する

Azure Container Apps のジョブを使用すると、有限の期間実行して終了するコンテナー化されたタスクを実行できます。 ジョブを手動でトリガーしたり、実行をスケジュールしたり、イベントに基づいて実行をトリガーしたりすることができます。

ジョブは、データ処理、機械学習、オンデマンド処理が必要なシナリオなどのタスクに最適です。

このクイックスタートでは、手動またはスケジュールされたジョブを作成します。 イベント ドリブン ジョブを作成する方法については、Azure Container Apps を使用したイベント ドリブン ジョブのデプロイに関する記事を参照してください。

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウント。
  • Azure CLI をインストールします。
  • 制限事項の一覧については、「ジョブの制限事項」を参照してください。

設定

  1. CLI から Azure にサインインするには、次のコマンドを実行し、プロンプトに従って認証プロセスを完了します。

    az login
    
  2. upgrade コマンドを使用して、最新バージョンの CLI を実行していることを確認します。

    az upgrade
    
  3. 最新バージョンの Azure Container Apps CLI 拡張機能をインストールします。

    az extension add --name containerapp --upgrade
    
  4. まだ登録していない場合は、Azure サブスクリプションに Microsoft.App 名前空間と Microsoft.OperationalInsights 名前空間を登録します。

    az provider register --namespace Microsoft.App
    az provider register --namespace Microsoft.OperationalInsights
    
  5. Azure CLI のセットアップが完了したところで、この記事全体で使用される環境変数を定義できます。

    RESOURCE_GROUP="jobs-quickstart"
    LOCATION="northcentralus"
    ENVIRONMENT="env-jobs-quickstart"
    JOB_NAME="my-job"
    

Container Apps 環境を作成する

Azure Container Apps 環境は、コンテナー アプリとジョブを囲む安全な境界として機能するため、同じネットワークを共有したり、相互に通信したりすることができます。

  1. リソース グループを作成するには、次のコマンドを使用します。

    az group create \
        --name "$RESOURCE_GROUP" \
        --location "$LOCATION"
    
  2. 次のコマンドを使用して、Container Apps 環境を作成します。

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

手動ジョブを作成して実行する

手動ジョブを使用するには、まずトリガーの種類が Manual のジョブを作成してから、実行を開始します。 同じジョブに対して複数回実行を開始でき、複数のジョブの実行を同時に行うことができます。

  1. 次のコマンドを使用して、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"
    

    手動ジョブが自動的に実行されることはありません。 ジョブの実行を開始する必要があります。

  2. 次のコマンドを使用して、ジョブの実行を開始します。

    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 に保存されます。

  1. 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`
    
  2. 最新のジョブ実行の名前を変数に保存します。

    JOB_EXECUTION_NAME=`az containerapp job execution list \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --query "[0].name" \
        --output tsv`
    
  3. 次のコマンドを使用して、ジョブ実行用の 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 リポジトリでイシューを開いて、お知らせください。

次のステップ