

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# パイプライン実行をスケジュールする
<a name="pipeline-eventbridge"></a>

[Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) を使用すると、Amazon SageMaker Pipelines の実行のスケジュールを設定できます。Amazon SageMaker Pipelines は、[Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) のターゲットとしてサポートされています。これにより、イベントバス内の任意のイベントに基づいて、モデル構築パイプラインの実行を開始できます。EventBridge を使用すると、パイプラインの実行を自動化して、トレーニングジョブやエンドポイントのステータス変更などのイベントに自動的に対応できます。イベントには、Amazon S3 バケットへの新しいファイルのアップロード、ドリフトによる Amazon SageMaker AI エンドポイントのステータスの変更、*Amazon Simple Notification Service* (SNS) のトピックなどがあります。

自動的に開始できる Pipelines アクションは以下のとおりです。  
+  `StartPipelineExecution` 

SageMaker AI ジョブのスケーリングの詳細については、「[Amazon EventBridge を使用した SageMaker AI の自動化](https://docs.aws.amazon.com/sagemaker/latest/dg/automating-sagemaker-with-eventbridge.html)」を参照してください。

**Topics**
+ [Amazon EventBridge を使用してパイプラインをスケジュールする](#pipeline-eventbridge-schedule)
+ [SageMaker Python SDK でパイプラインをスケジュールする](#build-and-manage-scheduling)

## Amazon EventBridge を使用してパイプラインをスケジュールする
<a name="pipeline-eventbridge-schedule"></a>

Amazon CloudWatch Events を使用してパイプラインの実行を開始するには、EventBridge [ルール](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_Rule.html)を作成する必要があります。イベントのルールを作成する際は、ルールにマッチするイベントを EventBridge が受信したときに実行するターゲットアクションを指定します。イベントがルールに一致すると、EventBridge は指定されたターゲットにイベントを送信し、ルールに定義されているアクションを開始します。

 以下のチュートリアルでは、EventBridge コンソールまたは AWS CLIを使用し、EventBridge でパイプラインの実行をスケジュールする方法を説明します。  

### 前提条件
<a name="pipeline-eventbridge-schedule-prerequisites"></a>
+ `SageMaker::StartPipelineExecution` アクセス許可で EventBridge が引き受けることができるロール。EventBridge コンソールからルールを作成すると、このロールは自動的に作成されます。それ以外の場合は、このロールを独自に作成する必要があります。SageMaker ロール作成の詳細については、「[SageMaker のロール](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html)」を参照してください。
+ スケジュールする Amazon SageMaker AI パイプライン。Amazon SageMaker AI Pipeline を作成するには、「[パイプラインを定義する](https://docs.aws.amazon.com/sagemaker/latest/dg/define-pipeline.html)」を参照してください。

### EventBridge コンソールを使用して EventBridge ルールを作成する
<a name="pipeline-eventbridge-schedule-console"></a>

 以下の手順では、EventBridge コンソールを使用して EventBridge ルールを作成する方法を説明します。  

1. [EventBridge コンソール](https://console.aws.amazon.com/events)に移動します。

1. 左側にある **[Rules]** (ルール) を選択します。

1.  `Create Rule` を選択します。

1. ルールの名前と説明を入力します。

1.  このルールの開始方法を選択します。ルールには、次の選択肢があります。
   + **Event pattern** (イベントパターン): パターンに一致するイベントが発生したときにルールが開始されます。特定のタイプのイベントに一致する事前定義済みのパターンを選択するか、カスタムパターンを作成できます。事前定義済みパターンを選択した場合は、このパターンを編集してカスタマイズできます。イベントパターンの詳細については、「[CloudWatch Events のイベントパターン](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEventsandEventPatterns.html)」を参照してください。
   + **Schedule** (スケジュール): ルールは指定されたスケジュールに従って定期的に開始されます。指定した分数、時間数、週数で定期的に開始する固定レートのスケジュールを使用できます。また、[cron 式](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html#CronExpressions)を使用すれば、「毎月第 1 月曜日の午前 8 時」など、よりきめ細かいスケジュールを作成できます。カスタムイベントバスまたはパートナーイベントバスでは、スケジュールはサポートされていません。

1. 目的のイベントバスを選択します。

1. イベントがイベントパターンと一致した場合またはスケジュールが開始された場合に呼び出すターゲットを選択します。1 件のルールあたり最大 5 個のターゲットを追加できます。ターゲットドロップダウンリストで [`SageMaker Pipeline`] を選択します。

1. パイプラインのドロップダウンリストから、開始するパイプラインを選択します。

1. 名前と値のペアを使用して、パイプラインの実行に渡すパラメータを追加します。パラメータ値は、静的な値または動的な値を使用できます。Amazon SageMaker AI Pipeline のパラメータの詳細については、「[AWS::Events::Rule SagemakerPipelineParameters](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-pipeline.html#aws-resource-sagemaker-pipeline-properties)」を参照してください。
   + 静的な値は、パイプラインが開始されるたびにパイプラインの実行に渡されます。例えば、`{"Name": "Instance_type", "Value": "ml.4xlarge"}` がパラメータリストに指定されている場合、EventBridge がパイプラインを開始するたびに、これがパラメータとして `StartPipelineExecutionRequest` に渡されます。
   + 動的な値は JSON パスを使用して指定します。EventBridge がイベントのペイロードから値を解析し、パイプラインの実行に渡します。例: *`$.detail.param.value`* 

1. このルールに使用するロールを選択します。既存のロールを使用するか、新しいロールを作成できます。

1. (オプション) タグを追加します。

1. `Create` を選択して、ルールを確定します。

 これでルールが有効になり、パイプラインの実行を開始する準備が整います。

### [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/events/index.html) を使用して EventBridge ルールを作成する
<a name="pipeline-eventbridge-schedule-cli"></a>

 以下の手順では、 AWS CLIを使用して EventBridge ルールを作成する方法を説明します。

1. 開始するルールを作成します。を使用して EventBridge ルールを作成する場合 AWS CLI、ルールの開始方法にはイベントパターンとスケジュールの 2 つのオプションがあります。
   +  **Event pattern** (イベントパターン): パターンに一致するイベントが発生したときにルールが開始されます。特定のタイプのイベントに一致する事前定義済みのパターンを選択するか、カスタムパターンを作成できます。事前定義済みのパターンを選択した場合は、このパターンを編集してカスタマイズできます。  次のコマンドを使用すると、イベントパターンによるルールを作成できます。

     ```
     aws events put-rule --name <RULE_NAME> ----event-pattern <YOUR_EVENT_PATTERN> --description <RULE_DESCRIPTION> --role-arn <ROLE_TO_EXECUTE_PIPELINE> --tags <TAGS>
     ```
   +  **Schedule** (スケジュール): ルールは指定したスケジュールに従って定期的に開始されます。指定した分数、時間数、週数で定期的に開始する固定レートのスケジュールを使用できます。また、cron 式を使用すれば、「毎月第 1 月曜日の午前 8 時」など、よりきめ細かいスケジュールを作成できます。カスタムイベントバスまたはパートナーイベントバスでは、スケジュールはサポートされていません。次のコマンドを使用すると、スケジュールによるルールを作成できます。

     ```
     aws events put-rule --name <RULE_NAME> --schedule-expression <YOUR_CRON_EXPRESSION> --description <RULE_DESCRIPTION> --role-arn <ROLE_TO_EXECUTE_PIPELINE> --tags <TAGS>
     ```

1. イベントがイベントパターンと一致した場合またはスケジュールが開始された場合に呼び出すターゲットを追加します。1 件のルールあたり最大 5 個のターゲットを追加できます。  ターゲットごとに、以下を指定する必要があります。  
   +  ARN: パイプラインのリソース ARN。
   +  ロール ARN: パイプラインを実行するために EventBridge が引き受けるロールの ARN。
   +  パラメータ: 渡す Amazon SageMaker AI パイプラインパラメータ 

1. 以下のコマンドを実行し、[put-targets](https://docs.aws.amazon.com/cli/latest/reference/events/put-targets.html) を使用して、Amazon SageMaker AI パイプラインをルールのターゲットとして渡します。

   ```
   aws events put-targets --rule <RULE_NAME> --event-bus-name <EVENT_BUS_NAME> --targets "[{\"Id\": <ID>, \"Arn\": <RESOURCE_ARN>, \"RoleArn\": <ROLE_ARN>, \"SageMakerPipelineParameter\": { \"SageMakerParameterList\": [{\"Name\": <NAME>, \"Value\": <VALUE>}]} }]"] 
   ```

## SageMaker Python SDK でパイプラインをスケジュールする
<a name="build-and-manage-scheduling"></a>

以降のセクションでは、SageMaker Python SDK を使用して EventBridge リソースにアクセスし、パイプラインスケジュールを作成するアクセス許可を設定する方法を説明します。

### 必要なアクセス許可
<a name="build-and-manage-scheduling-permissions"></a>

パイプラインスケジューラを使用するには、必要なアクセス許可が付与されている必要があります。以下の手順を実行して、アクセス許可を設定します。

1. パイプライントリガーの作成に使用される IAM ロールに次の最小権限ポリシーをアタッチするか、 AWS マネージドポリシー を使用します`AmazonEventBridgeSchedulerFullAccess`。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement":
       [
           {
               "Action":
               [
                   "scheduler:ListSchedules",
                   "scheduler:GetSchedule",
                   "scheduler:CreateSchedule",
                   "scheduler:UpdateSchedule",
                   "scheduler:DeleteSchedule"
               ],
               "Effect": "Allow",
               "Resource":
               [
                   "*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::*:role/*", 
               "Condition": {
                   "StringLike": {
                       "iam:PassedToService": "scheduler.amazonaws.com"
                   }
               }
           }
       ]
   }
   ```

------

1. このロールの信頼ポリシーにサービスプリンシパル `scheduler.amazonaws.com` を追加して、EventBridge との信頼関係を確立します。SageMaker Studio でノートブックを起動する場合は、以下の信頼ポリシーを実行ロールにアタッチします。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "scheduler.amazonaws.com",
                    "sagemaker.amazonaws.com"
                ]
            },
        "Action": "sts:AssumeRole"
        }
    ]
}
```

------

### パイプラインのスケジュールを作成する
<a name="build-and-manage-scheduling-create"></a>

`PipelineSchedule` コンストラクタを使用すると、パイプラインを 1 回のみ実行したり、事前指定した間隔で実行したりするようにスケジュールできます。パイプラインスケジュールのタイプは、`at`、`rate`、`cron` である必要があります。このようなスケジュールタイプのセットは、[EventBridge スケジューリングオプション](https://docs.aws.amazon.com/scheduler/latest/UserGuide/schedule-types.html) の拡張機能です。`PipelineSchedule` クラスの使用方法の詳細については、「[sagemaker.workflow.triggers.PipelineSchedule](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#pipeline-schedule)」を参照してください。次の例は、`PipelineSchedule` を使用して各スケジュールタイプを作成する方法を説明しています。

```
from sagemaker.workflow.triggers import PipelineSchedule

# schedules a pipeline run for 12/13/2023 at time 10:15:20 UTC
my_datetime_schedule = PipelineSchedule(
    name="<schedule-name>", 
    at=datetime(2023, 12, 13, 10, 15, 20)
)

# schedules a pipeline run every 5 minutes
my_rate_schedule = PipelineSchedule(
    name="<schedule-name>", 
    rate=(5, "minutes")
)

# schedules a pipeline run at 10:15am UTC on the last Friday of each month during the years 2022 to 2023
my_cron_schedule = PipelineSchedule(
    name="<schedule-name>", 
    cron="15 10 ? * 6L 2022-2023"
)
```

**注記**  
1 回限りのスケジュールを作成し、現在の時刻にアクセスする必要がある場合は、`datetime.utcnow()` の代わりに `datetime.now()` を使用します。前者は現在のゾーンコンテキストを保存しないため、EventBridge に渡される時刻が不正確になります。

### トリガーをパイプラインにアタッチする
<a name="build-and-manage-scheduling-attach"></a>

`PipelineSchedule` をパイプラインにアタッチするには、作成したパイプラインオブジェクトでトリガーのリストを使用して `put_triggers` コールを呼び出します。レスポンス ARN を取得したら、アカウントでのスケジュール作成が正常に完了し、EventBridge は指定された時間または割合でターゲットパイプラインの呼び出しを開始します。親パイプラインにトリガーをアタッチするには、適切なアクセス許可が付与されたロールを指定する必要があります。指定しない場合、パイプラインは[設定ファイル](https://docs.aws.amazon.com/sagemaker/latest/dg/train-remote-decorator-config.html)からパイプラインの作成に使用するデフォルトのロールを取得します。

次の例は、パイプラインにスケジュールをアタッチする方法を説明しています。

```
scheduled_pipeline = Pipeline(
    name="<pipeline-name>",
    steps=[...],
    sagemaker_session=<sagemaker-session>,
)
custom_schedule = PipelineSchedule(
    name="<schedule-name>", 
    at=datetime(year=2023, month=12, date=25, hour=10, minute=30, second=30)
)
scheduled_pipeline.put_triggers(triggers=[custom_schedule], role_arn=<role>)
```

### 現在のトリガーを説明する
<a name="build-and-manage-scheduling-describe"></a>

作成したパイプライントリガーに関する情報を取得するには、トリガー名を使用して `describe_trigger()` API を呼び出します。このコマンドは、開始時刻、有効なステータス、その他の役に立つ情報など、作成されたスケジュール式の詳細を返します。次のスニペットは、呼び出しの例です。

```
scheduled_pipeline.describe_trigger(name="<schedule-name>")
```

### トリガーリソースをクリーンアップする
<a name="build-and-manage-scheduling-clean"></a>

パイプラインを削除する前に、既存のトリガーをクリーンアップして、アカウントのリソースリークを回避します。親パイプラインを破棄する前に、トリガーを削除する必要があります。トリガーを削除するには、トリガー名のリストを `delete_triggers` API に渡します。次のスニペットは、トリガーを削除する方法を説明しています。

```
pipeline.delete_triggers(trigger_names=["<schedule-name>"])
```

**注記**  
トリガーを削除する際は、次の制限に注意する必要があります。  
トリガー名を指定してトリガーを削除するオプションは、SageMaker Python SDK でのみ使用できます。CLI または `DeletePipeline` API コールでパイプラインを削除しても、トリガーは削除されません。結果として、このトリガーは孤立状態となり、SageMaker AI は存在しないパイプラインの実行の開始を試行します。
別のノートブックセッションを使用している場合や、パイプラインのターゲットを既に削除している場合は、スケジューラ [CLI](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/scheduler/delete-schedule.html) または EventBridge コンソールを使用して、孤立状態となったスケジュールをクリーンアップすることができます。