View a markdown version of this page

S3 イベント統合を作成して Amazon S3 バケットからファイルを自動的にコピーする - Amazon Redshift

Amazon Redshift は、2026 年 6 月 30 日以降、Python UDF の使用をサポートしなくなります。これは段階的に実施されます。Python のサポート終了と移行オプションの詳細については、2025 年 6 月 30 日に公開されたブログ記事を参照してください。

S3 イベント統合を作成して Amazon S3 バケットからファイルを自動的にコピーする

注記

自動コピーのプレビューリリースは終了しました。これに伴い、プレビュークラスターは、プレビュー期間の終了日から 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 イベント統合を作成するための前提条件

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 ロールをクラスターに関連付ける」を参照してください。

    ターゲットのデータウェアハウスが Redshift Serverless である場合は、Redshift Serverless コンソールを使用して、該当するサーバーレス名前空間の詳細画面の [セキュリティと暗号化] タブで、その名前空間に IAM ロールを関連付けることができます。サーバーレス名前空間にロールを関連付ける方法については、「Amazon Redshift 管理ガイド」の「Amazon Redshift Serverless へのアクセス許可の付与」を参照してください。

  • Amazon Redshift データウェアハウスには、Amazon S3 バケットへのアクセスを許可するリソースポリシーも必要です。Amazon Redshift コンソールを使用する場合は、S3 イベント統合の作成時に [修正する] オプションを選択して、このポリシーを Amazon Redshift データウェアハウスに追加できます。リソースポリシーを自分で更新するには、put-resource-policy 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 イベント統合を作成する

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

Amazon Redshift console
Amazon Redshift コンソールで Amazon S3 イベント統合を作成するには
  1. AWS Management Consoleにサインインして、https://console.aws.amazon.com/redshiftv2/ で Amazon Redshift コンソールを開きます。

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

  3. [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 ウェアハウスにリソースポリシーを手動で適用する必要があります。

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

  5. レビューページが表示されます。ここで、[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 イベント統合のプロパティを表示します。

これらのコマンドの詳細については、「Amazon Redshift CLI ガイド」を参照してください。

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

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

COPY JOB を作成および監視する

統合が作成されたら、その統合の [S3 イベント統合の詳細] ページで、[自動コピージョブの作成] を選択して Amazon Redshift クエリエディタ v2 に移動し、統合の自動コピージョブを作成できます。Amazon Redshift は、COPY JOB CREATE ステートメントの FROM 句に指定されたバケットを、S3 イベント統合で使用されるバケットと一致させます。Amazon Redshift クエリエディタ v2 の使用方法については、「Amazon Redshift 管理ガイド」の「Amazon Redshift クエリエディタ v2 を使用したデータベースのクエリの実行」を参照してください。例えば、クエリエディタ 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」および「REVOKE」を参照してください。COPY JOB の範囲指定のアクセス許可の付与と取り消しについては、「スコープ付きアクセス許可の付与」および「スコープ付きアクセス許可の取り消し」を参照してください。

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

システムビューにクエリを実行して、COPY JOB のステータスと進行状況を確認できます。ビューは次のように表示されます。

  • SYS_COPY_JOB — 現在定義されている各 COPY JOB の行が含まれます。

  • SYS_COPY_JOB_DETAIL – COPY JOB ごとに、ファイルの取り込みが保留中、エラー、または取り込み完了かについての詳細情報が含まれています。

  • SYS_COPY_JOB_INFO – COPY JOB についてログに記録されたメッセージが含まれています。

  • SYS_LOAD_HISTORY — COPY コマンドの詳細が含まれます。

  • SYS_LOAD_ERROR_DETAIL — COPY コマンドエラーの詳細が含まれます。

  • SVV_COPY_JOB_INTEGRATIONS – S3 イベント統合の詳細情報が含まれています。

  • STL_LOAD_ERRORS — COPY コマンドのエラーが含まれます。

  • STL_LOAD_COMMITS — COPY コマンドのデータロードのトラブルシューティングに使用される情報が含まれます。

S3 イベント統合エラーのトラブルシューティングの詳細については、「S3 イベント統合と COPY JOB のエラーのトラブルシューティング」を参照してください。

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 イベント統合を作成する場合の考慮事項

自動コピーを使用する場合は、以下の点を考慮してください。

  • 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 ログを準備してください。

サポート対象のリージョン

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

リージョン 自動コピー
アフリカ (ケープタウン) 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 (US-East) 利用可能
AWS GovCloud (US-West) Available

S3 イベント統合ターゲットを復元する際の考慮事項

スナップショットまたは復旧ポイントから同じサーバーレス名前空間に Amazon Redshift Serverless 名前空間を復元すると、S3 イベント統合と関連付けられた COPY JOB が自動的に維持されます。以下の考慮事項に注意してください。

  • スナップショットを別の名前空間に復元しても、S3 イベント統合は維持されません。

  • 復元後、Amazon Redshift はスナップショットの作成後にソース Amazon S3 バケットにアップロードされたファイルを自動的に識別します。Amazon S3 に存在し、まだロードされていないファイルは、自動的に取り込まれます。このプロセス中、S3 イベント通知からの新しいファイル取り込みは引き続き並行して機能します。

    注記

    復元後、Amazon S3 バケットに存在するファイルのみが取り込まれます。スナップショットの作成後にアップロードされ、その後復元が完了する前に削除されたファイルは取り込まれません。

  • スナップショットの作成後に S3 イベント統合が作成された場合、その統合は復元後に NEEDS_ATTENTION 状態になります。これを解決するには、統合を含む最新のスナップショットから復元するか、統合を削除します。

  • スナップショットの作成後に S3 イベント統合が削除された場合、統合は復元されません。対応する COPY JOB のステータスが PENDING に変わります。同じ Amazon S3 バケットへの新しい統合を作成し、COPY JOB を再作成できます。スナップショット時間と COPY JOB の再作成の間に S3 に追加されたファイルは、復元または再取り込みできません。これらのファイルを識別するには、コンソールでスナップショット時間と CloudTrail での統合の削除時間を確認します。その間に S3 バケットに到着したファイルが、見逃したファイルです。

  • スナップショットの作成後に COPY JOB が変更された場合、復元された名前空間はスナップショットの COPY JOB を使用します。Amazon Redshift は相違点を照合し、復元された COPY JOB 設定を反映するように統合を更新します。

  • 復元中に S3 イベント統合の維持をオプトアウトするには、AWS Management Consoleの復元ページの [統合の維持] チェックボックスをオフにします。AWS CLI を使用している場合は、restore-from-snapshot または restore-from-recovery-point API オペレーションを呼び出すときに --no-maintain-integration パラメータを設定します。オプトアウトすると、統合は復元後に FAILED 状態になります。

  • この機能は、同じサーバーレス名前空間に復元された場合にのみ Amazon Redshift Serverless に適用されます。プロビジョニングされたクラスターのスナップショット復元では、S3 イベント統合は維持されません。