建立 S3 事件整合,以自動從 Amazon S3 儲存貯體複製檔案 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建立 S3 事件整合,以自動從 Amazon S3 儲存貯體複製檔案

注意

自動複製的預覽版本已結束。因此,預覽叢集會在預覽期間結束後 30 天自動移除。如果您打算繼續使用自動複製,建議您在另一個 Amazon Redshift 叢集上重新建立現有的自動複製任務。不支援將預覽叢集升級至最新的 Amazon Redshift 版本。

您可以使用自動複製任務,從存放在 Amazon S3 中的檔案將資料載入 Amazon Redshift 資料表。Amazon Redshift 會偵測新的 Amazon S3 檔案何時新增至 COPY 命令中指定的路徑。然後,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 區域。

    { "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": { "StringLike": { "aws:SourceArn": "arn:aws:redshift:us-east-1:123456789012:integration:*", "aws:SourceAccount": "123456789012" } } } ] }
  • 您的目標 Amazon Redshift 佈建叢集或 Redshift Serverless 命名空間必須具有儲存貯體的許可。確認與叢集或無伺服器命名空間相關聯的 IAM 角色具有允許適當許可的 IAM 政策。此政策必須允許儲存貯s3:GetObject體資源,例如 s3:ListBucket amzn-s3-demo-bucket和儲存貯體資源及其內容,例如 amzn-s3-demo-bucket/*

    { "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 角色,如下所示。

    { "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 會提供 選項修正它,讓我將此政策新增至您的 Amazon Redshift 資料倉儲。若要自行更新資源政策,您可以使用 put-resource-policy AWS CLI 命令。例如,若要將資源政策連接至 Amazon Redshift 佈建叢集,以便與 Amazon S3 儲存貯體進行 S3 事件整合,請執行類似以下的 AWS CLI 命令。下列範例顯示 us-east-1 AWS 區域 for 使用者帳戶 123456789012 中佈建叢集命名空間的政策。儲存貯體名為 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 包含:

    { "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" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012: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" } } } ] }

    若要將資源政策連接至 Redshift Serverless 命名空間,以便與 Amazon S3 儲存貯體進行 S3 事件整合,請執行類似以下的 AWS CLI 命令。 Amazon S3 下列範例顯示 us-east-1 AWS 區域 for 使用者帳戶 123456789012 中無伺服器命名空間的政策。儲存貯體名為 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 包含:

    { "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" } } }, { "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" } } } ] }

建立 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 儲存貯體 – 是目前 中的 Amazon S3 儲存貯體 AWS 區域 , AWS 帳戶 也是將資料擷取至 Amazon Redshift 的來源。

    • Amazon Redshift 資料倉儲 – 是從整合接收資料的目標 Amazon Redshift 佈建叢集或 Redshift Serverless 工作群組。

      如果您的目標 Amazon Redshift 位於相同的帳戶中,您可以選取目標。如果目標位於不同的帳戶中,您可以指定 Amazon Redshift 資料倉儲 ARN。目標必須具有具有授權主體和整合來源的資源政策。如果您在目標上沒有正確的資源政策,且您的目標位於同一個帳戶中,您可以選擇為我修正它選項,以在建立整合過程中自動套用資源政策。如果您的目標位於不同的 中 AWS 帳戶,您需要在 Amazon Redshift 倉儲上手動套用資源政策。

  4. 輸入最多 50 個標籤索引鍵和選用 – 提供關於整合的其他中繼資料。

  5. 會顯示檢閱頁面,您可以在其中選擇建立 S3 事件整合

AWS CLI

若要使用 建立 Amazon S3 事件整合 AWS CLI,請使用 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 事件整合,與其關聯的來源和目標、狀態,以及有關關聯自動複製任務狀態的資訊。您可以在 S3Amazon 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 一次。之後的執行會使用相同參數。

若要定義和管理 COPY JOB,您必須擁有 許可。如需授予和撤銷 COPY JOB 許可的詳細資訊,請參閱 GRANTREVOKE。如需授予和撤銷 COPY JOB 範圍許可的詳細資訊,請參閱 授予限定範圍權限 撤銷限定範圍權限

您可以使用 CREATE、LIST、SHOW、DROP、ALTER 和 RUN 工作的選項來管理載入操作。如需詳細資訊,請參閱複製工作

您可以查詢系統檢視以查看 COPY JOB 狀態和進度。提供的視圖如下:

如需 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 事件整合以進行自動複製時的考量事項

使用自動複製時,請考慮下列事項。

  • 您最多可以為 中的每個叢集或工作群組建立 200 個 COPY JOBS AWS 帳戶。

  • 您可以為每個 Amazon Redshift 目標建立最多 50 個 S3 事件整合。

  • 您無法與來源 Amazon S3 儲存貯體建立 S3 事件整合,而該儲存貯體名稱中有句點 (.)。 Amazon S3

  • 您只能在相同來源和目標之間建立一個 S3 事件整合。也就是說,Amazon S3 儲存貯體和 Amazon Redshift 資料倉儲一次只能有一個 Amazon S3 事件整合。

  • 您無法在來源 Amazon S3 儲存貯體上S3_OBJECT_CREATED定義任何現有事件類型的事件通知。不過,在建立 S3 事件整合之後,您可以使用範圍較窄的字首/字尾來更新 Amazon S3 儲存貯體事件通知。如此一來,您也可以S3_OBJECT_CREATED為其他目標設定另一個字首/尾碼,並避免與 S3 事件整合發生衝突。如果您遇到自動複製未如預期執行的問題,請在聯絡時準備 S3 儲存貯體上s3:PutBucketNotificationConfiguration動作的 AWS CloudTrail 日誌,以找出有問題的時間範圍 AWS 支援。