

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# Amazon EventBridge を使用した Amazon Redshift Data API オペレーションのスケジューリング
<a name="data-api-calling-event-bridge"></a>

選択したイベントを照合し、ターゲットにルーティングしてアクションを実行するためのルールを作成できます。ルールを使用して、あらかじめ決められたスケジュールに従ってアクションを実行することもできます。詳細については、[Amazon EventBridge ユーザーガイド](https://docs.aws.amazon.com/eventbridge/latest/userguide/)を参照してください。

EventBridge でデータ API オペレーションをスケジュールするには、関連付けられた IAM ロールが CloudWatch Events (events.amazonaws.com) のプリンシパルを信頼する必要があります。このロールには、管理対象ポリシー `AmazonEventBridgeFullAccess` に相当するものがアタッチされている必要があります。また、Data API によって管理される `AmazonRedshiftDataFullAccess` ポリシー権限も必要です。IAM コンソールで、これらのアクセス許可を持つ IAM ロールを作成できます。IAM コンソールでロールを作成するときは、CloudWatch Events 用に AWS サービスの信頼できるエンティティを選択します。EventBridge ターゲットの `RoleArn` JSON 値に IAM ロールを指定します。IAM ロールの作成の詳細については、*IAM ユーザーガイド*の「[AWS のサービス用ロールの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)」を参照してください。

Amazon EventBridge で作成するルールの `name` は、`RedshiftDataParameters` の `StatementName` と一致する必要があります。

以下の例は、単一または複数の SQL ステートメントを使用し、データウェアハウスとして Amazon Redshift クラスターまたは Amazon Redshift Serverless ワークグループを使用して EventBridge ルールを作成するバリエーションを示しています。

## 単一 SQL ステートメントとクラスターによる呼び出し
<a name="data-api-calling-event-bridge-sql-cluster"></a>

次の例では、AWS CLI を使用して、Amazon Redshift クラスターに対する 1 つの SQL ステートメントの実行に使用する EventBridge ルールを作成します。

```
aws events put-rule 
--name test-redshift-cluster-data 
--schedule-expression "rate(1 minute)"
```

次に、ルールで指定されたスケジュールで実行する EventBridge ターゲットが作成されます。

```
aws events put-targets 
--cli-input-json file://data.json
```

入力 data.json ファイルは次のとおりです。`Sql` JSON キーは、単一 SQL ステートメントがあることを示しています。`Arn` JSON 値にはクラスター識別子が含まれます。`RoleArn` JSON 値には、前述のように SQL を実行するために使用される IAM ロールが含まれます。

```
{
    "Rule": "test-redshift-cluster-data",
    "EventBusName": "default",
    "Targets": [
        {
            "Id": "2",
            "Arn": "arn:aws:redshift:us-east-1:123456789012:cluster:mycluster",
            "RoleArn": "arn:aws:iam::123456789012:role/Administrator",
            "RedshiftDataParameters": {
                "Database": "dev",
                "DbUser": "root",
                "Sql": "select 1;",
                "StatementName": "test-redshift-cluster-data",
                "WithEvent": true
            }
        }
    ]
}
```

## 単一 SQL ステートメントおよびワークグループによる呼び出し
<a name="data-api-calling-event-bridge-sql-workgroup"></a>

次の例では、AWS CLI を使用して、Amazon Redshift Serverless ワークグループに対する 1 つの SQL ステートメントの実行に使用する EventBridge ルールを作成します。

```
aws events put-rule 
--name  test-redshift-serverless-workgroup-data 
--schedule-expression "rate(1 minute)"
```

次に、ルールで指定されたスケジュールで実行する EventBridge ターゲットが作成されます。

```
aws events put-targets 
--cli-input-json file://data.json
```

入力 data.json ファイルは次のとおりです。`Sql` JSON キーは、単一 SQL ステートメントがあることを示しています。`Arn` JSON 値にはワークグループ名が含まれます。`RoleArn` JSON 値には、前述のように SQL を実行するために使用される IAM ロールが含まれます。

```
{
    "Rule": "test-redshift-serverless-workgroup-data", 
    "EventBusName": "default", 
    "Targets": [ 
        {
            "Id": "2",
            "Arn": "arn:aws:redshift-serverless:us-east-1:123456789012:workgroup/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
            "RoleArn": "arn:aws:iam::123456789012:role/Administrator", 
            "RedshiftDataParameters": {
                "Database": "dev",
                "Sql": "select 1;",
                "StatementName": "test-redshift-serverless-workgroup-data", 
                "WithEvent": true 
            } 
        } 
    ] 
}
```

## 複数の SQL ステートメントおよびクラスターによる呼び出し
<a name="data-api-calling-event-bridge-sqls-cluster"></a>

次の例では、AWS CLI を使用して、Amazon Redshift クラスターに対する複数の SQL ステートメントの実行に使用する EventBridge ルールを作成します。

```
aws events put-rule 
--name  test-redshift-cluster-data 
--schedule-expression "rate(1 minute)"
```

次に、ルールで指定されたスケジュールで実行する EventBridge ターゲットが作成されます。

```
aws events put-targets 
--cli-input-json file://data.json
```

入力 data.json ファイルは次のとおりです。`Sqls` JSON キーは、複数の SQL ステートメントがあることを示しています。`Arn` JSON 値にはクラスター識別子が含まれます。`RoleArn` JSON 値には、前述のように SQL を実行するために使用される IAM ロールが含まれます。

```
{
    "Rule": "test-redshift-cluster-data", 
    "EventBusName": "default", 
    "Targets": [ 
        {
            "Id": "2",
            "Arn": "arn:aws:redshift:us-east-1:123456789012:cluster:mycluster",
            "RoleArn": "arn:aws:iam::123456789012:role/Administrator", 
            "RedshiftDataParameters": {
                "Database": "dev",
                "Sqls": ["select 1;", "select 2;", "select 3;"],
                "StatementName": "test-redshift-cluster-data", 
                "WithEvent": true 
            } 
        } 
    ] 
}
```

## 複数の SQL ステートメントおよびワークグループによる呼び出し
<a name="data-api-calling-event-bridge-sqls-workgroup"></a>

次の例では、AWS CLI を使用して、Amazon Redshift Serverless ワークグループに対する複数の SQL ステートメントの実行に使用する EventBridge ルールを作成します。

```
aws events put-rule 
--name  test-redshift-serverless-workgroup-data 
--schedule-expression "rate(1 minute)"
```

次に、ルールで指定されたスケジュールで実行する EventBridge ターゲットが作成されます。

```
aws events put-targets 
--cli-input-json file://data.json
```

入力 data.json ファイルは次のとおりです。`Sqls` JSON キーは、複数の SQL ステートメントがあることを示しています。`Arn` JSON 値にはワークグループ名が含まれます。`RoleArn` JSON 値には、前述のように SQL を実行するために使用される IAM ロールが含まれます。

```
{
    "Rule": "test-redshift-serverless-workgroup-data", 
    "EventBusName": "default", 
    "Targets": [ 
        {
            "Id": "2",
            "Arn": "arn:aws:redshift-serverless:us-east-1:123456789012:workgroup/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
            "RoleArn": "arn:aws:iam::123456789012:role/Administrator", 
            "RedshiftDataParameters": {
                "Database": "dev",
                "Sqls": ["select 1;", "select 2;", "select 3;"],
                "StatementName": "test-redshift-serverless-workgroup-data", 
                "WithEvent": true 
            } 
        } 
    ] 
}
```