如何解決在將資料從 Amazon Aurora 上傳或下載至 Amazon S3 時收到的錯誤?
我想將資料從 Amazon Simple Storage Service (Amazon S3) 上傳至 Amazon Aurora。或者我想從 Amazon Aurora 下載資料並將資料上傳至 Amazon S3。
簡短描述
使用下列其中一個命令,在 Amazon Aurora 和 Amazon S3 之間將資料載入為文字檔案:
- SELECT INTO OUTFILE S3 – 將資料從 Amazon Aurora 載入 Amazon S3
- LOAD DATA FROM S3 – 將資料從 Amazon S3 載入 Amazon Aurora
執行 SELECT INTO OUTFILE S3 或 LOAD DATA FROM S3 命令時,您可能會收到的一些常見錯誤,其中包括:
- Error Code: 1871.Missing Credentials
- Incorrect Command: missing file/prefix/manifest keyword
- Error code: 1045.Access denied error
- Error code: 1815.Internal error: Unable to initialize
- Error Code: 1871.S3 API returned error: Access Denied
解決方法
執行 SELECT INTO OUTFILE S3 或 LOAD DATA FROM S3 命令
使用 Amazon Aurora 執行 SELECT INTO OUTFILE S3 或 LOAD DATA FROM S3 命令:
1. 建立 S3 儲存貯體並複製 ARN。
2. 為具有許可的 S3 儲存貯體建立 AWS Identity and Access Management (IAM) 政策。指定儲存貯體 ARN,然後將許可授予儲存貯體 ARN 內的物件。
如果您未使用 FullS3Access 政策,請執行類似以下的自訂政策:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::<your_bucket_name>", "arn:aws:s3:::<your_bucket_name>/*" ] } ] }
3.為 Amazon Relational Database Service (Amazon RDS) 服務建立 IAM 角色。然後將您建立的 IAM 政策連接至該角色。
信任關係看起來如下所示:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
4. 為 Aurora 建立自訂資料庫叢集參數群組。
對於 Aurora MySQL 第 1 版或第 2 版:
將下列其中一個角色 (aurora_select_into_s3_role 或 aws_default_s3_role) 編輯為 IAM 角色 ARN 的值。
對於 Aurora MySQL 第 3 版:
將 aws_default_s3_role 編輯為 IAM 角色 ARN 的值。
5. 將 IAM 角色連接至您建立的資料庫叢集。如需詳細資訊,請參閱將 IAM 角色與 Amazon Aurora MySQL 資料庫叢集關聯。
7. 執行下列命令以建立新使用者:
CREATE USER 'testsaveload'@'%' IDENTIFIED BY 'somepassword'; show grants for 'testsaveload'@'%';
8. 執行下列命令以將許可授予該使用者:
GRANT SELECT, CREATE, INSERT, DROP ON *.* TO 'testsaveload'@'%';
對於 Aurora MySQL 第 1 版或第 2 版,請使用下列陳述式:
GRANT SELECT INTO S3 ON *.* TO 'testsaveload'@'%'; GRANT LOAD FROM S3 ON *.* TO 'testsaveload'@'%';
對於 Aurora MySQL 第 3 版,請使用下列陳述式:
GRANT AWS_SELECT_S3_ACCESS TO 'testsaveload'@'%' GRANT AWS_LOAD_S3_ACCESS TO 'testsaveload'@'%';
**注意:**在 Aurora MySQL 第 3 版中,可以使用資料庫叢集參數來啟用 activate_all_roles_on_login。這會在使用者連線到資料庫執行個體時,自動啟用所有角色。如需詳細資訊,請參閱授權在 Amazon Aurora MySQL 中載入資料。
9. 執行 SELECT INTO OUTFILE S3 或 LOAD DATA INTO S3 命令:
SELECT * from test1.test2034 INTO OUTFILE S3 's3://tests3saveloadaurora/testfile1prefix.part_00000'; LOAD DATA FROM S3 PREFIX 's3-us-east-1://tests3saveloadaurora/testfile1prefix.part_00000' INTO TABLE test3001; LOAD DATA FROM S3 's3-us-east-1://tests3saveloadaurora/prefix3.part_00000' INTO TABLE test3000;
Error Code: 1871.Missing Credentials
SELECT * from test1.test2034 INTO OUTFILE S3 '"s3://tests3saveloadaurora/testfile1prefix.part_00000'; Error Code: 1871. S3 API returned error: Missing Credentials: Cannot instantiate S3 Client
您可能會在下列情況下收到此錯誤:
- 遺失連接至資料庫叢集的 IAM 角色。若要修正此問題,請參閱上一節中的步驟 5。
- 未指定角色 ARN,且只有角色名稱列於參數群組中。請參閱上一節中的步驟 2 以解決此問題。
Incorrect Command: missing file/prefix/manifest keyword
如果您收到 "Incorrect Command: missing file/prefix/manifest keyword" 錯誤訊息,表示您尚未輸入正確的關鍵字來讓命令成功執行。若要修正此錯誤,請為命令輸入關鍵字。
Error code: 1045.Access denied error
如果輸入的命令不正確,您可能會收到錯誤訊息,例如 "1045: Access denied for user ''testsaveload'@'%';"。例如,下列命令撰寫不正確:
SELECT * from test1.test2034 INTO OUTFILE 's3://tests3saveloadaurora/testfile1prefix.part_00000';
請確定查詢中已輸入關鍵字 S3。下列命令撰寫正確:
SELECT * from test1.test2034 INTO OUTFILE S3 's3://tests3saveloadaurora/testfile1prefix.part_00000';
Error code: 1815.Internal error: Unable to initialize
LOAD DATA FROM S3 's3://tests3saveloadaurora/testfile1prefix.part_00000' INTO TABLE test3000; Error Code: 1815. Internal error: Unable to initialize S3Stream
有幾種原因導致您可能會收到 "Error code: 1815.Internal error: Unable to initialize" 錯誤訊息。
- 您的檔案不存在。請確認檔案存在於 S3 儲存貯體中,且您在指令碼中指定的名稱與檔案名稱相符。請務必區分大小寫。確認 S3 儲存貯體名稱、資料夾名稱和物件名稱與載入命令中指定的名稱完全相符。
- 您缺少檔案、資料夾或儲存貯體層級的適當許可。請檢閱步驟 2,確定您已設定正確的許可。
- 您的 LOAD 指令碼中可能出現語法錯誤。請檢閱您的 LOAD 指令碼,然後重新執行命令。
- S3 儲存貯體和資料庫叢集位於不同區域,而 S3 儲存貯體的路徑遺失區域值。如需 AWS 區域的詳細資訊,請參閱 Amazon S3 端點和配額。
- 讀取器和寫入器執行個體的網路組態不同。如需詳細資訊,請參閱使用讀取器端點。
Error Code: 1871.S3 API returned error: Access Denied
如果您的 S3 儲存貯體加密,就會收到 "Error Code: 1871.S3 API returned error: Access Denied" 錯誤訊息。或者如果您的 S3 儲存貯體內有加密檔案,就可能會收到此錯誤訊息。如果 ServerSideEncryptionConfigurationExists 不是 false,請在您連接至 IAM 角色 (用於執行 LOAD 操作) 的政策中加入 kms:*。例如,如果您未使用 FULLS3Access 政策,請使用下列自訂政策範例:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:*", "kms:*" ], "Resource": [ "arn:aws:s3:::<your_bucket_name>", "arn:aws:s3:::<your_bucket_name>/*" ] } ] }
相關資訊
相關內容
- 已提問 9 個月前lg...
- 已提問 3 個月前lg...
- 已提問 1 年前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前