チュートリアル:定義したスケジュールで ACR タスクを実行する
このチュートリアルでは、スケジュールに従って ACR タスクを実行する方法を説明します。 1 つ以上の "タイマー トリガー" を設定することによってタスクをスケジュールします。 タイマー トリガーは単独で使用することも、他のタスク トリガーと組み合わせて使用することもできます。
このチュートリアルでは、タスクのスケジュール設定と次の作業について説明します。
- タイマー トリガーを含むタスクを作成する
- タイマー トリガーを管理する
タスクのスケジュールは、次のようなシナリオで役に立ちます。
- 予定メンテナンス操作に対するコンテナー ワークロードを実行します。 たとえば、コンテナー化されたアプリを実行して、不必要なイメージをレジストリから削除します。
- ライブサイトの監視の一環として、勤務日の間に運用イメージで一連のテストを実行します。
前提条件
Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。
CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。
初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。
az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。
タスクのスケジュールについて
Cron 式でのトリガー - タスクのタイマー トリガーでは、"Cron 式" を使います。 式は、タスクをトリガーする分、時、日、月、曜日を指定する 5 つのフィールドを含む文字列です。 最大で 1 分ごとに 1 回の頻度までサポートされます。
たとえば、式
"0 12 * * Mon-Fri"
では、各平日の UTC で正午にタスクがトリガーされます。 この記事の後半で詳細をご確認ください。複数のタイマー トリガー - スケジュールが異なる限り、1 つのタスクに複数のタイマーを追加できます。
- タスクを作成するときに複数のタイマー トリガーを指定するか、または後で追加します。
- 必要に応じて、管理しやすいようにトリガーの名前を指定します。指定しないと、ACR タスクによって既定のトリガー名が提供されます。
- 一度に複数のタイマー スケジュールが重なっている場合、ACR タスクでは各タイマーのスケジュールされた時刻にタスクがトリガーされます。
その他のタスク トリガー - タイマーによってトリガーされるタスクでは、ソース コードのコミットまたは基本イメージの更新に基づいてトリガーを有効にすることもできます。 他の ACR タスクと同様に、スケジュールされたタスクを手動で実行することもできます。
タイマー トリガーを含むタスクを作成する
タスクのコマンド
最初に、次のシェル環境変数に、環境に適した値を設定します。 この手順は必須ではありませんが、このチュートリアルの複数行の Azure CLI コマンドの実行が少し簡単になります。 環境変数を設定しない場合は、それぞれの値を、サンプル コマンド内の現れたところで手動で置き換える必要があります。
ACR_NAME=<registry-name> # The name of your Azure container registry
az acr task create コマンドでタスクを作成するときに、必要に応じて、タイマー トリガーを追加することができます。 --schedule
パラメーターを追加し、タイマーの Cron 式を渡します。
簡単な例として、次のタスクでは、毎日 21:00 UTC に Microsoft Container Registry からの hello-world
イメージの実行がトリガーされます。 そのタスクは、ソース コードのコンテキストなしで実行されます。
az acr task create \
--name timertask \
--registry $ACR_NAME \
--cmd mcr.microsoft.com/hello-world \
--schedule "0 21 * * *" \
--context /dev/null
タイマー トリガーが構成されていることを確認するには、az acr task show コマンドを実行します。 既定では、基本イメージ更新トリガーも有効になります。
az acr task show --name timertask --registry $ACR_NAME --output table
NAME PLATFORM STATUS SOURCE REPOSITORY TRIGGERS
-------- ---------- -------- ------------------- -----------------
timertask linux Enabled BASE_IMAGE, TIMER
また、ソース コード コンテキストで実行されるタスクの簡単な例です。 次のタスクでは、毎日 21:00 UTC に Microsoft Container Registry からの hello-world
イメージの実行がトリガーされます。
前提条件に従ってソース コード コンテキストをビルドし、コンテキストを持つスケジュール タスクを作成します。
az acr task create \
--name timertask \
--registry $ACR_NAME \
--context https://github.com/$GIT_USER/acr-build-helloworld-node.git#master \
--file Dockerfile \
--image timertask:{{.Run.ID}} \
--git-access-token $GIT_PAT \
--schedule "0 21 * * *"
タイマー トリガーが構成されていることを確認するには、az acr task show コマンドを実行します。 既定では、基本イメージ更新トリガーも有効になります。
az acr task show --name timertask --registry $ACR_NAME --output table
az acr task run コマンドを実行して、タスクを手動でトリガーします。
az acr task run --name timertask --registry $ACR_NAME
タスクのトリガー
正しく設定されていることを確認するには、az acr task run を使って手動でタスクをトリガーします。
az acr task run --name timertask --registry $ACR_NAME
コンテナーが正常に実行された場合、出力は次のようになります。 次の出力は、主要な手順を表示するように要約されいます。
Queued a run with ID: cf2a
Waiting for an agent...
2020/11/20 21:03:36 Using acb_vol_2ca23c46-a9ac-4224-b0c6-9fde44eb42d2 as the home volume
2020/11/20 21:03:36 Creating Docker network: acb_default_network, driver: 'bridge'
[...]
2020/11/20 21:03:38 Launching container with name: acb_step_0
Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]
スケジュールされた時刻の後で、想定どおりにタイマーでタスクがトリガーされたことを確認するには、az acr task list-runs コマンドを実行します。
az acr task list-runs --name timertask --registry $ACR_NAME --output table
タイマーが成功している場合、次のような出力が表示されます。
RUN ID TASK PLATFORM STATUS TRIGGER STARTED DURATION
-------- --------- ---------- --------- --------- -------------------- ----------
ca15 timertask linux Succeeded Timer 2020-11-20T21:00:23Z 00:00:06
ca14 timertask linux Succeeded Manual 2020-11-20T20:53:35Z 00:00:06
タイマー トリガーを管理する
ACR タスクのタイマー トリガーを管理するには、az acr task timer コマンドを使います。
タイマー トリガーを追加または更新する
タスクを作成した後は、必要に応じて、az acr task timer add コマンドを使ってタイマー トリガーを追加します。 次の例では、前に作成した timertask に timer2 という名前のタイマー トリガーが追加されます。 このタイマーでは、毎日 10:30 UTC にタスクがトリガーされます。
az acr task timer add \
--name timertask \
--registry $ACR_NAME \
--timer-name timer2 \
--schedule "30 10 * * *"
既存のトリガーのスケジュールを更新したり、その状態を変更したりするには、az acr task timer update コマンドを使います。 たとえば、timer2 という名前のトリガーを、11:30 UTC にタスクをトリガーするように更新します。
az acr task timer update \
--name timertask \
--registry $ACR_NAME \
--timer-name timer2 \
--schedule "30 11 * * *"
タイマー トリガーを一覧表示する
az acr task timer list コマンドでは、タスクに設定されているタイマー トリガーが表示されます。
az acr task timer list --name timertask --registry $ACR_NAME
出力例:
[
{
"name": "timer2",
"schedule": "30 11 * * *",
"status": "Enabled"
},
{
"name": "t1",
"schedule": "0 21 * * *",
"status": "Enabled"
}
]
タイマー トリガーを削除する
タスクからタイマー トリガーを削除するには、az acr task timer remove コマンドを使います。 次の例では、timertask から timer2 トリガーが削除されます。
az acr task timer remove \
--name timertask \
--registry $ACR_NAME \
--timer-name timer2
Cron 式
ACR タスクでは、Cron 式を解釈するために NCronTab ライブラリが使われます。 ACR タスクでは、5 つの必須フィールドが空白で区切られた式がサポートされます。
{minute} {hour} {day} {month} {day-of-week}
Cron 式で使われるタイム ゾーンは、協定世界時 (UTC) です。 時間は 24 時間形式です。
Note
ACR タスクでは、Cron 式の {second}
または {year}
フィールドはサポートされていません。 別のシステムで使われている Cron 式をコピーする場合、それらのフィールドが使われている場合は、忘れずに削除してください。
各フィールドは、次の種類の値のいずれかを持つことができます。
Type | 例 | トリガーのタイミング |
---|---|---|
特定の値 | "5 * * * *" |
毎時、正時から 5 分後 |
すべての値 (* ) |
"* 5 * * *" |
5:00 UTC からの 1 時間の毎分 (1 日に 60 回 ) |
範囲 (- 演算子) |
"0 1-3 * * *" |
1 日 3 回、1:00、2:00、3:00 UTC |
値のセット (, 演算子) |
"20,30,40 * * * *" |
1 時間に 3 回、各時の 20 分、30 分、40 分 |
間隔値 (/ 演算子) |
"*/10 * * * *" |
1 時間に 6 回、各時の 10 分、20 分など |
月や曜日を指定するには、数値、名前、または名前の省略形を使用できます。
- 曜日については、数値は 0 から 6 で指定します (0 は日曜日です)。
- 名前は英語で指定します。 例:
Monday
,January
。 - 名前の大文字と小文字は区別されません。
- 名前は省略形でも指定できます。 省略形には 3 文字を使用することをお勧めします。 例:
Mon
,Jan
。
Cron の例
例 | トリガーのタイミング |
---|---|
"*/5 * * * *" |
5 分ごとに 1 回 |
"0 * * * *" |
毎正時に 1 回 |
"0 */2 * * *" |
2 時間に 1 回 |
"0 9-17 * * *" |
9:00 から 17:00 UTC まで、1 時間に 1 回 |
"30 9 * * *" |
毎日 9:30 UTC |
"30 9 * * 1-5" |
毎平日 9:30 UTC |
"30 9 * Jan Mon" |
1 月の毎週月曜日の 9:30 UTC |
リソースをクリーンアップする
このチュートリアル シリーズで作成したすべてのリソース (コンテナー レジストリ、コンテナー インスタンス、キー コンテナー、サービス プリンシパルなど) を削除するには、次のコマンドを実行します。
az group delete --resource-group $RES_GROUP
az ad sp delete --id http://$ACR_NAME-pull
次のステップ
このチュートリアルでは、タイマーによって自動的にトリガーされる Azure Container Registry タスクを作成する方法について学習しました。
スケジュールされたタスクを使用してレジストリ内のリポジトリをクリーンアップする例については、「Azure コンテナー レジストリからイメージを自動的に消去する」を参照してください。
ソース コード コミットまたは基本イメージ更新によってトリガーされるタスクの例については、ACR タスク チュートリアル シリーズの他の記事をご覧ください。