

 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/)を参照してください。

# S3 イベント統合を作成して Amazon S3 バケットからファイルを自動的にコピーする
<a name="loading-data-copy-job"></a>

**注記**  
自動コピーのプレビューリリースは終了しました。これに伴い、プレビュークラスターは、プレビュー期間の終了日から 30 日後に自動的に削除されます。その後も継続して自動コピーを使う場合は、既存の自動コピージョブを別の Amazon Redshift クラスターで作成し直すことをお勧めします。プレビュークラスターを最新の Amazon Redshift バージョンにアップグレードすることはできません。

自動コピージョブを使用して、Amazon S3 に保存されているファイルから Amazon Redshift テーブルにデータをロードすることができます。Amazon Redshift は、COPY コマンドで指定したパスに新しい Amazon S3 ファイルが追加されると、これを検出します。これに伴い、外部データインジェストパイプラインを作成しなくても、COPY コマンドが自動的に実行されます。Amazon Redshift は、ロードされたファイルを追跡します。Amazon Redshift は、COPY コマンドごとにまとめてバッチ処理されるファイルの数を決定します。結果の COPY コマンドはシステムビューで表示できます。

自動 COPY JOB を作成するには、まず、S3 イベント統合を作成します。ソースの Amazon S3 バケットに新しいファイルが表示されると、Amazon Redshift が COPY コマンドを使用して、それらのファイルのデータベースへのロードを処理します。

## S3 イベント統合を作成するための前提条件
<a name="loading-data-copy-job-prerequisites"></a>

S3 イベント統合をセットアップするには、次の前提条件が満たされていることを確認してください。
+ Amazon S3 バケットには、Amazon S3 の複数のアクセス許可を付与するバケットポリシーが必要です。例えば、次のサンプルポリシーは、{{us-east-1}} でホストされているリソースバケット `amzn-s3-demo-bucket` に対するアクセス許可を付与します。Amazon S3 バケットと統合が両方とも同じ AWS リージョンにあります。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Auto-Copy-Policy-01",
              "Effect": "Allow",
              "Principal": {
                  "Service": "redshift.amazonaws.com"
                  },
              "Action": [
                  "s3:GetBucketNotification",
                  "s3:PutBucketNotification",
                  "s3:GetBucketLocation"
              ],
              "Resource": "arn:aws:s3:::{{amzn-s3-demo-bucket}}:*",
              "Condition": {
                  "ArnLike": {
                      "aws:SourceArn": "arn:aws:redshift:{{us-east-1}}:{{111122223333}}:integration:*"
                  },
                  "StringEquals": {
                      "aws:SourceAccount": "{{111122223333}}"
                  }
              }
          }
      ]
  }
  ```

------
+ ターゲットとなる Amazon Redshift のプロビジョニング済みクラスターまたは Redshift Serverless の名前空間には、バケットへのアクセス許可が必要です。クラスターまたはサーバーレス名前空間に関連付けられている IAM ロールに、適切なアクセス許可を付与する IAM ポリシーがアタッチされていることを確認してください。このポリシーでは、バケットリソース (`{{amzn-s3-demo-bucket}}` など) に対する `s3:GetObject` と、バケットリソースとそのコンテンツ (`{{amzn-s3-demo-bucket}}/*` など) に対する `s3:ListBucket` を両方とも許可する必要があります。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AutoCopyReadId",
              "Effect": "Allow",
              "Action": [
                  "s3:GetObject",
                  "s3:ListBucket"
              ],
              "Resource": [
                  "arn:aws:s3:::{{amzn-s3-demo-bucket}}",  
                  "arn:aws:s3:::{{amzn-s3-demo-bucket}}/*" 
              ]
          }
      ]
  }
  ```

------

  IAM ロールに、そのロールの信頼関係を定義したポリシーを追加します。次の例を参照してください。

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

****  

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

------

  ターゲットのデータウェアハウスがプロビジョニング済みクラスターの場合は、Amazon Redshift コンソールを使用して、該当するプロビジョニング済みクラスターの詳細画面の **[クラスターのアクセス許可]** タブで、そのクラスターに IAM ロールを関連付けることができます。プロビジョニング済みクラスターにロールを関連付ける方法については、「*Amazon Redshift 管理ガイド*」の「[IAM ロールをクラスターに関連付ける](https://docs.aws.amazon.com/redshift/latest/mgmt/copy-unload-iam-role-associating-with-clusters.html)」を参照してください。

  ターゲットのデータウェアハウスが Redshift Serverless である場合は、Redshift Serverless コンソールを使用して、該当するサーバーレス名前空間の詳細画面の **[セキュリティと暗号化]** タブで、その名前空間に IAM ロールを関連付けることができます。サーバーレス名前空間にロールを関連付ける方法については、「*Amazon Redshift 管理ガイド*」の「[Amazon Redshift Serverless へのアクセス許可の付与](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-security-other-services.html)」を参照してください。
+ Amazon Redshift データウェアハウスには、Amazon S3 バケットへのアクセスを許可するリソースポリシーも必要です。Amazon Redshift コンソールを使用する場合は、S3 イベント統合の作成時に **[修正する]** オプションを選択して、このポリシーを Amazon Redshift データウェアハウスに追加できます。リソースポリシーを自分で更新するには、[put-resource-policy](https://docs.aws.amazon.com/cli/latest/reference/redshift/put-resource-policy.html) AWS CLI コマンドを使用できます。例えば、Amazon S3 バケットとの S3 イベント統合のため、Amazon Redshift のプロビジョニング済みクラスターにリソースポリシーをアタッチするには、次のような AWS CLI コマンドを実行します。次の例は、ユーザーアカウント {{123456789012}} に対する、{{us-east-1}} AWS リージョンのプロビジョニング済みクラスターの名前空間のポリシーを示しています。バケットの名前は {{amzn-s3-demo-bucket}} です。

  ```
  aws redshift put-resource-policy \
  --policy file://rs-rp.json \
  --resource-arn "arn:aws:redshift: {{us-east-1}}:{{123456789012}}:namespace/cc4ffe56-ad2c-4fd1-a5a2-f29124a56433"
  ```

  ここでは `rs-rp.json` に以下が含まれます。

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

****  

  ```
  {
  	"Version":"2012-10-17",		 	 	 
  	"Statement": [
  		{
  			"Effect": "Allow",
  			"Principal": {
  				"Service": "redshift.amazonaws.com"
  			},
  			"Action": "redshift:AuthorizeInboundIntegration",
  			"Resource": "arn:aws:redshift:{{us-east-1}}:{{123456789012}}:namespace:cc4ffe56-ad2c-4fd1-a5a2-f29124a56433",
  			"Condition": {
  				"StringEquals": {
  					"aws:SourceArn": "arn:aws:s3:::{{amzn-s3-demo-bucket}}",
  					"aws:SourceAccount": {{111122223333}}
  				}
  			}
  		},
  		{
  			"Effect": "Allow",
  			"Principal": {
  				"AWS": "arn:aws:iam::{{111122223333}}:role/myRedshiftRole"
  			},
  			"Action": "redshift:CreateInboundIntegration",
  			"Resource": "arn:aws:redshift:{{us-east-1}}:{{123456789012}}:namespace:cc4ffe56-ad2c-4fd1-a5a2-f29124a56433",
  			"Condition": {
  				"StringEquals": {
  					"aws:SourceArn": "arn:aws:s3:::{{amzn-s3-demo-bucket}}",
  					"aws:SourceAccount": {{111122223333}}
  				}
  			}
  		}
  	]
  }
  ```

------

  Amazon S3 バケットとの S3 イベント統合のため、Redshift Serverless の名前空間にリソースポリシーをアタッチするには、次のような AWS CLI コマンドを実行します。次の例は、ユーザーアカウント {{123456789012}} に対する、{{us-east-1}} AWS リージョンのサーバーレス名前空間のポリシーを示しています。バケットの名前は {{amzn-s3-demo-bucket}} です。

  ```
  aws redshift put-resource-policy \
  --policy file://rs-rp.json \
  --resource-arn "arn:aws:redshift-serverless:{{us-east-1}}:{{123456789012}}:namespace/namespace-1"
  ```

  ここでは `rs-rp.json` に以下が含まれます。

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

****  

  ```
  {
  	"Version":"2012-10-17",		 	 	 
  	"Statement": [
  		{
  			"Effect": "Allow",
  			"Principal": {
  				"Service": "redshift.amazonaws.com"
  			},
  			"Action": "redshift:AuthorizeInboundIntegration",
  			"Resource": "arn:aws:redshift-serverless:{{us-east-1}}:{{123456789012}}:namespace/namespace-1",
  			"Condition": {
  				"StringEquals": {
  					"aws:SourceArn": "arn:aws:s3:::{{amzn-s3-demo-bucket}}",
  					"aws:SourceAccount": {{111122223333}}
  	
  				}
  			}
  		},
  		{
  			"Effect": "Allow",
  			"Principal": {
  				"AWS": "arn:aws:iam::{{123456789012}}:user/myUser"
  			},
  			"Action": "redshift:CreateInboundIntegration",
  			"Resource": "arn:aws:redshift-serverless:{{us-east-1}}:{{123456789012}}:namespace/namespace-1",
  			"Condition": {
  				"StringEquals": {
  					"aws:SourceArn": "arn:aws:s3:::{{amzn-s3-demo-bucket}}",
  					"aws:SourceAccount": {{111122223333}}
  				}
  			}
  		}
  	]
  }
  ```

------

## S3 イベント統合を作成する
<a name="loading-data-copy-job-create-s3-event-integration"></a>

コピージョブを設定するには、まず、S3 イベント統合を定義します。

------
#### [ Amazon Redshift console ]

**Amazon Redshift コンソールで Amazon S3 イベント統合を作成するには**

1. AWS マネジメントコンソール にサインインして、[https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/) で Amazon Redshift コンソールを開きます。

1. 左側のナビゲーションペインから、**[S3 イベント統合]** を選択します。

1. **[Amazon S3 イベント統合の作成]** を選択してウィザードを開き、自動コピーで使用する S3 イベント統合を作成します。ソースの Amazon S3 バケット とターゲットの Amazon Redshift データウェアハウスが同じ AWS リージョンにある必要があります。統合の作成ステップを進めながら、以下の情報を指定してください。
   + **統合名** – 現在の AWS リージョンにおいて AWS アカウントが所有するすべての統合を一意に区別するための識別子。
   + **説明** – 後から参照するために、Amazon S3 イベント統合について説明するテキスト。
   + **ソース S3 バケット** – 現在の AWS アカウント および AWS リージョンの Amazon S3 バケット。Amazon Redshift に取り込まれるデータの提供元 (ソース) です。
   + **Amazon Redshift データウェアハウス** - 統合を通じてデータを受け取るターゲットとなる、Amazon Redshift のプロビジョニング済みクラスターまたは Redshift Serverless のワークグループ。

     ターゲット Amazon Redshift が同じアカウントにある場合は、ターゲットを選択できます。ターゲットが別のアカウントにある場合は、**[Amazon Redshift データウェアハウスの ARN]** を指定してください。ターゲットには、認証済みのプリンシパルと統合ソースを指定したリソースポリシーも必要です。ターゲットに正しいリソースポリシーがなく、かつターゲットが同じアカウントにある場合は、**[修正する]** オプションを選択して、統合の作成プロセス中にリソースポリシーを自動的に適用できます。ターゲットが別の AWS アカウント にある場合は、Amazon Redshift ウェアハウスにリソースポリシーを手動で適用する必要があります。

1. 最大 50 個のタグ **[キー]** とオプションの **[値]** を入力します。これは、統合に関する追加のメタデータを提供します。

1. レビューページが表示されます。ここで、**[S3 イベント統合の作成]** を選択できます。

------
#### [ AWS CLI ]

AWS CLI を使用して Amazon S3 イベント統合を作成するには、以下のオプションを指定して `create-integration` コマンドを使用します。
+ `integration-name` — 統合の名前を指定します。
+ `source-arn` – ソースの Amazon S3 バケットの ARN を指定します。
+ `target-arn` - Amazon Redshift でプロビジョニングされたクラスターまたは Redshift Serverless ワークグループターゲットの名前空間 ARN を指定します。

次の例では、統合名、ソース ARN、ターゲット ARN を指定して統合を作成します。統合は暗号化されません。

```
aws redshift create-integration \
--integration-name s3-integration \
--source-arn arn:aws:s3:us-east-1::s3-example-bucket \
--target-arn arn:aws:redshift:us-east-1:123456789012:namespace:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222
          {
    "IntegrationArn": "arn:aws:redshift:us-east-1:123456789012:integration:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
    "IntegrationName": "s3-integration",
    "SourceArn": "arn:aws:s3:::s3-example-bucket",
    "SourceType": "s3-event-notifications",
    "TargetArn": "arn:aws:redshift:us-east-1:123456789012:namespace:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
    "Status": "creating",
    "Errors": [],
    "CreateTime": "2024-10-09T19:08:52.758000+00:00",
    "Tags": []
}
```

次の AWS CLI コマンドを使用して、S3 イベント統合を管理することもできます。
+ `delete-integration` – 統合の ARN を指定して、S3 イベント統合を削除します。
+ `modify-integration` – 統合の ARN を指定して、S3 イベント統合の名前または説明 (またはその両方) を変更します。
+ `describe-integrations` – 統合の ARN を指定して、S3 イベント統合のプロパティを表示します。

これらのコマンドの詳細については、「[https://docs.aws.amazon.com/cli/latest/reference/redshift/](https://docs.aws.amazon.com/cli/latest/reference/redshift/)」を参照してください。

------

その後、関連するソースとターゲット、ステータス、関連付けられた自動コピージョブのステータスに関する情報を使用して、Amazon Redshift で S3 イベント統合が作成されます。Amazon Redshift コンソールで S3 イベント統合に関する情報を表示できます。**[S3 イベント統合]**を選択し、統合を選択すると、その詳細情報が表示されます。**[アカウント内]** で作成された統合と **[他のアカウントから]** 作成された統合は分けて表示されます。**[アカウント内]** リストには、ソースとターゲットが同一アカウントにある統合が表示されます。**[他のアカウントから]** リストには、ソースが別のアカウントによって所有されている統合が表示されます。

S3 イベント統合を削除すると、対応する COPY JOB のステータスが `1` (アクティブ) から `0` (非アクティブ/保留中) に変わります。ただし、対応する COPY JOB は自動的には削除されません。後で同じ名前の COPY JOB を作成しようとすると、競合が生じる可能性があります。

## COPY JOB を作成および監視する
<a name="loading-data-copy-job-create-s3-autocopy"></a>

統合が作成されたら、その統合の **[S3 イベント統合の詳細]** ページで、**[自動コピージョブの作成]** を選択して Amazon Redshift クエリエディタ v2 に移動し、統合の自動コピージョブを作成できます。Amazon Redshift は、COPY JOB CREATE ステートメントの FROM 句に指定されたバケットを、S3 イベント統合で使用されるバケットと一致させます。Amazon Redshift クエリエディタ v2 の使用方法については、「*Amazon Redshift 管理ガイド*」の「[Amazon Redshift クエリエディタ v2 を使用したデータベースのクエリの実行](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2.html)」を参照してください。例えば、クエリエディタ v2 で次の COPY コマンドを実行して、Amazon S3 バケット `s3://amzn-s3-demo-bucket/staging-folder` を Amazon S3 イベント統合に対応付ける自動 COPY JOB を作成します。

```
COPY public.target_table
FROM 's3://amzn-s3-demo-bucket/staging-folder'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyLoadRoleName'
JOB CREATE my_copy_job_name
AUTO ON;
```

COPY JOB は 1 回定義します。今後の実行でも同じパラメータが使用されます。

COPY JOB を定義および管理するには、アクセス許可が必要です。COPY JOB に対するアクセス許可の付与と取り消しについては、「[GRANT](r_GRANT.md)」および「[REVOKE](r_REVOKE.md)」を参照してください。COPY JOB の範囲指定のアクセス許可の付与と取り消しについては、「[スコープ付きアクセス許可の付与](r_GRANT.md#grant-scoped-syntax)」および「[スコープ付きアクセス許可の取り消し](r_REVOKE.md#revoke-scoped-permissions)」を参照してください。

CREATE、LIST、SHOW、DROP、ALTER、RUN の各ジョブのオプションを使用して、ロード操作を管理します。詳細については、「[COPY JOB](r_COPY-JOB.md)」を参照してください。

システムビューにクエリを実行して、COPY JOB のステータスと進行状況を確認できます。ビューは次のように表示されます。
+ [SYS\_COPY\_JOB](SYS_COPY_JOB.md) — 現在定義されている各 COPY JOB の行が含まれます。
+ [SYS\_COPY\_JOB\_DETAIL](SYS_COPY_JOB_DETAIL.md) – COPY JOB ごとに、ファイルの取り込みが保留中、エラー、または取り込み完了かについての詳細情報が含まれています。
+ [SYS\_COPY\_JOB\_INFO](SYS_COPY_JOB_INFO.md) – COPY JOB についてログに記録されたメッセージが含まれています。
+ [SYS\_LOAD\_HISTORY](SYS_LOAD_HISTORY.md) — COPY コマンドの詳細が含まれます。
+ [SYS\_LOAD\_ERROR\_DETAIL](SYS_LOAD_ERROR_DETAIL.md) — COPY コマンドエラーの詳細が含まれます。
+ [SVV\_COPY\_JOB\_INTEGRATIONS](SVV_COPY_JOB_INTEGRATIONS.md) – S3 イベント統合の詳細情報が含まれています。
+ [STL\_LOAD\_ERRORS](r_STL_LOAD_ERRORS.md) — COPY コマンドのエラーが含まれます。
+ [STL\_LOAD\_COMMITS](r_STL_LOAD_COMMITS.md) — COPY コマンドのデータロードのトラブルシューティングに使用される情報が含まれます。

S3 イベント統合エラーのトラブルシューティングの詳細については、「[S3 イベント統合と COPY JOB のエラーのトラブルシューティング](s3-integration-troubleshooting.md)」を参照してください。

COPY JOB でロードされたファイルのリストを取得するには、次の SQL を実行します。最初に {{<job\_id>}} を置き換えてください。

```
SELECT job_id, job_name, data_source, copy_query, filename, status, curtime
FROM sys_copy_job copyjob
JOIN stl_load_commits loadcommit
ON copyjob.job_id = loadcommit.copy_job_id
WHERE job_id = {{<job_id>}};
```

## 自動コピー用の S3 イベント統合を作成する場合の考慮事項
<a name="loading-data-copy-job-considerations"></a>

自動コピーを使用する場合は、以下の点を考慮してください。
+ 1 つの AWS アカウントでは、クラスターまたはワークグループごとに最大 200 件の COPY JOB を作成できます。
+ Amazon Redshift ターゲットごとに最大 50 個の S3 イベント統合を作成できます。
+ バケット名にピリオド (.) が含まれるソース Amazon S3 バケットを使用して、S3イベント統合を作成することはできません。
+ 同じソースとターゲットの間に作成できる S3 イベント統合は 1 つのみです。つまり、Amazon S3 バケットと Amazon Redshift データウェアハウスの間では、一度に 1 つの S3 イベント統合しか作成できません。
+ ソース Amazon S3 バケットで定義されているイベントタイプ `S3_OBJECT_CREATED` の既存のイベント通知は利用できません。ただし、S3 イベント統合を作成した後に、より狭い範囲のプレフィックスまたはサフィックスを使用して、Amazon S3 バケットイベント通知を更新することができます。この方法の場合、他のターゲットに別のプレフィックスまたはサフィックスの `S3_OBJECT_CREATED` を設定して、S3 イベント統合との競合を回避することもできます。自動コピーが期待どおりに実行されない問題が発生した場合は、AWS サポート に問い合わせる際に、該当する期間の S3 バケットの `s3:PutBucketNotificationConfiguration` アクションの AWS CloudTrail ログを準備してください。

## サポート対象のリージョン
<a name="loading-data-copy-job-regions"></a>

以下のリージョンでは、自動コピーが利用できます。


| リージョン | 自動コピー | 
| --- | --- | 
| アフリカ (ケープタウン) | Available | 
| アジアパシフィック (香港) | Available | 
| アジアパシフィック (台北) | Available | 
| アジアパシフィック (東京) | Available | 
| アジアパシフィック (ソウル) | Available | 
| アジアパシフィック (大阪) | Available | 
| アジアパシフィック (ムンバイ) | Available | 
| アジアパシフィック (ハイデラバード) | Available | 
| アジアパシフィック (シンガポール) | Available | 
| アジアパシフィック (シドニー) | Available | 
| アジアパシフィック (ジャカルタ) | Available | 
| アジアパシフィック (メルボルン) | Available | 
| アジアパシフィック (マレーシア) | Available | 
| アジアパシフィック (ニュージーランド) | 利用不可 | 
| アジアパシフィック (タイ) | Available | 
| カナダ (中部) | Available | 
| カナダ西部 (カルガリー) | Available | 
| 中国 (北京) | Available | 
| 中国 (寧夏) | Available | 
| 欧州 (フランクフルト) | Available | 
| 欧州 (チューリッヒ) | Available | 
| 欧州 (ストックホルム) | Available | 
| 欧州 (ミラノ) | Available | 
| 欧州 (スペイン) | Available | 
| 欧州 (アイルランド) | Available | 
| 欧州 (ロンドン) | Available | 
| 欧州 (パリ) | Available | 
| イスラエル (テルアビブ) | Available | 
| 中東 (アラブ首長国連邦) | Available | 
| 中東 (バーレーン) | Available | 
| メキシコ (中部) | Available | 
| 南米 (サンパウロ) | Available | 
| 米国東部 (バージニア北部) | Available | 
| 米国東部 (オハイオ) | Available | 
| 米国西部 (北カリフォルニア) | Available | 
| 米国西部 (オレゴン) | Available | 
| AWS GovCloud (米国東部) | Available | 
| AWS GovCloud (米国西部) | Available | 