本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立 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 會建立 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 許可的詳細資訊,請參閱 GRANT和 REVOKE。如需授予和撤銷 COPY JOB 範圍許可的詳細資訊,請參閱 授予限定範圍權限 和 撤銷限定範圍權限。
您可以使用 CREATE、LIST、SHOW、DROP、ALTER 和 RUN 工作的選項來管理載入操作。如需詳細資訊,請參閱複製工作。
您可以查詢系統檢視以查看 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 事件整合以進行自動複製時的考量事項
使用自動複製時,請考慮下列事項。
您最多可以為 中的每個叢集或工作群組建立 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 支援。