如何解決在 Amazon Aurora 和 Amazon S3 之間載入資料時的錯誤?

3 分的閱讀內容
0

我想要修復在 Amazon Aurora 和 Amazon Simple Storage Service (Amazon S3) 之間載入資料時出現的錯誤。

簡短說明

若要在 Amazon Aurora 和 Amazon S3 之間將資料作為文字檔案載入,請使用 SELECT INTO OUTFILE S3 命令或 LOAD DATA FROM S3 命令。當您執行任一命令時,您可能會收到以下錯誤:

  1. 錯誤代碼: 1871.Missing Credentials
  2. Incorrect Command: missing file/prefix/manifest keyword
  3. Error code: 1045.Access denied error
  4. Error code: 1815.Internal error: Unable to initialize
  5. Error Code: 1871.S3 API returned error: Access Denied

解決方法

執行 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. 為 Amazon Aurora 建立自訂資料庫叢集參數群組。對於 Amazon Aurora MySQL 相容版本第 1 版或第 2 版,將 aurora_select_into_s3_roleaws_default_s3_role 編輯為 IAM 角色 ARN 的值。對於 Aurora MySQL 相容第 3 版,將 aws_default_s3_role 編輯為 IAM 角色 ARN 的值。

  5. 將 IAM 角色附加至您建立的資料庫叢集。如需詳細資訊,請參閱將 IAM 角色與 Amazon Aurora MySQL 資料庫叢集關聯

  6. 登入您的 Amazon Aurora 資料庫叢集

  7. 若要建立新的使用者,請執行下列命令:

    CREATE USER 'testsaveload'@'%' IDENTIFIED BY 'somepassword';show grants for 'testsaveload'@'%';
  8. 若要將權限授予使用者,請執行下列命令:

    GRANT SELECT, CREATE, INSERT, DROP ON *.* TO 'testsaveload'@'%';
  9. 對於 Aurora MySQL 第 1 版或第 2 版,請使用下列陳述式:

    GRANT SELECT INTO S3 ON *.* TO 'testsaveload'@'%';GRANT LOAD FROM S3 ON *.* TO 'testsaveload'@'%';
  10. 對於 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 中載入資料。 執行 SELECT INTO OUTFILE S3LOAD 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;

錯誤代碼: 1871.Missing Credentials (缺少憑證)

如果缺少資料庫叢集的 IAM 角色附件,請參閱「執行 SELECT INTO OUTFILE S3 或 LOAD DATA FROM S3 命令」一節中的步驟 5。如果未指定角色 ARN,且參數群組中僅列出角色名稱,則請參閱步驟 2。

Incorrect Command: missing file/prefix/manifest keyword (錯誤命令:缺少檔案/首碼/資訊清單關鍵字)

如果您收到此錯誤,請確定命令關鍵字正確。

錯誤代碼: 1045.Access denied error (拒絕存取錯誤)

如果輸入的命令不正確,那麼您可能會收到錯誤訊息,例如「1045: Access denied for user ''testsaveload'@'%';」(1045:拒絕使用者「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';

錯誤代碼: 1815.Internal error: Unable to initialize (內部錯誤:無法初始化)

如果您收到此錯誤,請完成以下步驟:

  1. 確認檔案存在於 S3 儲存貯體中,然後確認您在指令碼中指定的名稱與檔案名稱相符。確認 S3 儲存貯體、資料夾和物件名稱與載入命令相符。
  2. 請參閱「執行 SELECT INTO OUTFILE S3 或 LOAD DATA FROM S3 命令」一節中的步驟 2,確認您已設定正確的權限。
  3. 如果 LOAD 指令碼中出現語法錯誤,請檢閱 LOAD 指令碼,然後重新執行該命令。
  4. 如果 S3 儲存貯體和資料庫叢集位於不同的區域,且 S3 儲存貯體的路徑缺少「區域」值,請參閱 Amazon Simple Storage Service 端點和配額以取得更多資訊。
  5. 如果讀取器和寫入器執行個體的網路組態不同,請參閱 Amazon Aurora 端點連線以取得更多資訊。

錯誤代碼: 1871.S3 API returned error: Access Denied (S3 API 傳回錯誤:拒絕存取)

如果 S3 儲存貯體上有加密,或 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>/*"
      ]
    }
  ]
}

錯誤: S3 API returned error: Resource Not Found: No response body. (S3 API 傳回錯誤:找不到資源:沒有回應主體。)

若要解決此錯誤,請確定 ARN 和儲存貯體名稱正確。

相關資訊

將來自 Amazon Aurora MySQL 資料庫叢集的資料儲存至 Amazon S3 儲存貯體中的文字檔案

從 Amazon S3 儲存貯體中的文字檔案將資料載入 Amazon Aurora MySQL 資料庫叢集

AWS 官方
AWS 官方已更新 3 個月前