Amazon Aurora から Amazon S3 へのデータのアップロードまたはダウンロード中に発生したエラーを解決する方法を教えてください。

最終更新日: 2020 年 12 月 14 日

Amazon Aurora from Amazon Simple Storage Service (Amazon S3) から Amazon Aurora にデータをアップロードしたいです

- または -

Amazon Aurora からデータをダウンロードして Amazon S3 にアップロードしたいです。

Amazon Aurora から Amazon S3 へのデータのアップロードまたはダウンロード中に表示されたエラーの解決方法を教えてください。

簡単な説明

Amazon Aurora から Amazon S3 にデータをテキストファイルとしてロードするには、Amazon Aurora で SELECT IN OUTFILE S3 を実行します。

Amazon S3 から Amazon Aurora にデータをテキストとしてロードするには、Amazon Aurora で LOAD DATA FROM S3 コマンドを実行します。

SELECT INTO OUTFILE S3 または LOAD DATA FROM S3 コマンドの実行時に発生する一般的なエラーには、次のようなものがあります。

  • エラーコード: 1871。Missing Credentials (クレデンシャルが見つかりません)
  • Incorrect Command: missing file/prefix/manifest keyword (コマンドが正しくありません: ファイル/プレフィックス/マニフェストキーワードがありません)
  • エラーコード: 1045。Access denied error (アクセス拒否エラー)
  • エラーコード:1815。Internal error: Unable to initialize (内部エラー: 初期化できません)
  • エラーコード: 1871。S3 API returned error: Access Denied (S3 API がエラーを返しました: アクセスが拒否されました)

まず、以下の手順に従って、Amazon Aurora を使用して SELECT INTO OUTFILE S3 または LOAD DATA FROM S3 コマンドを実行します。エラーが発生した場合は、表示されるエラーコードのトラブルシューティング手順を実行します。

解決方法

SELECT INTO OUTFILE S3 または LOAD DATA FROM S3 コマンドを実行します。

Amazon Aurora を使用して SELECT INTO OUTFILE S3 または LOAD DATA FROM S3 コマンドを実行するには、次の手順を実行します。

1.S3 バケットを作成し、ARN をコピーします。

2. アクセス許可を持つ S3 バケット用の 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>/*"
            ]
        }
    ]
}</your_bucket_name></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 のカスタム DB クラスターパラメータグループを作成します。次に、aurora_select_into_s3_role または aws_default_s3_role/aurora_load_from_s3_role または aws_default_s3_role を編集して、IAM ロール ARN の値にします。

5.作成した DB クラスターに IAM ロールをアタッチします。詳細については、「IAM ロールを Amazon Aurora MySQL DB クラスターと関連付ける」を参照してください。

6.Amazon Aurora DB クラスターにログインします

7.次のコマンドを実行し、新しいユーザーを作成します。

CREATE USER 'testsaveload'@'%' IDENTIFIED BY 'somepassword’;
show grants for 'testsaveload'@'%’;

8.次のコマンドを実行して、ユーザーに権限を付与します。

GRANT SELECT, CREATE, INSERT, DROP ON *.* TO 'testsaveload'@'%’;
GRANT SELECT INTO S3 ON *.* TO 'testsaveload'@'%’;
GRANT LOAD FROM S3 ON *.* TO 'testsaveload'@'%’;

9.SELECT INTO OUTFILE S3 または LOAD DATA FROM 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;

SELECT INTO OUTFILE S3 または LOAD DATA FROM S3 コマンドの実行中にエラーが発生した場合は、次の手順を実行します。

エラーコード: 1871。Missing Credentials (クレデンシャルが見つかりません)

以下の場合、次のエラーが表示されます。

  • DB クラスターへの IAM ロールのアタッチメントがありません。この問題を解決するには、上記の手順 5 を参照してください。
  • ロール ARN は指定されておらず、パラメータグループにはロール名のみがリストされています。この問題を解決するには、上記の手順 2 を参照してください。
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

Incorrect Command: missing file/prefix/manifest keyword (コマンドが正しくありません: ファイル/プレフィックス/マニフェストキーワードがありません)

「コマンドが正しくありません: ファイル/プレフィックス/マニフェストキーワードがありません」というエラーが表示された場合は、コマンドが正常に実行するための正しいキーワードが入力されていないことを意味します。このエラーを解決するには、コマンドのキーワードを入力します。

エラーコード: 1045。Access denied error (アクセス拒否エラー)

コマンドを正しく入力しないと、「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 (内部エラー: 初期化できません)

LOAD DATA FROM S3 's3://tests3saveloadaurora/testfile1prefix.part_00000' INTO TABLE test3000;
Error Code: 1815. Internal error: Unable to initialize S3Stream

「エラーコード:1815。内部エラー: 初期化できません」エラーが表示される理由は複数あります。それには、以下が含まれます。

  • ファイルが存在しません。ファイルが S3 バケットに存在し、スクリプトで指定した名前がファイル名と一致することを確認してください。大文字と小文字の区別は重要です。S3 バケット名、フォルダ名、オブジェクト名が load コマンドで指定されているものと正確に一致するようにしてください。
  • ファイル、フォルダ、またはバケットレベルで適切なアクセス許可がありません。手順 2 を確認して、正しいアクセス許可が設定されているようにしてください。
  • LOAD スクリプトに構文エラーがある可能性があります。LOAD スクリプトを確認し、コマンドを再実行します。
  • S3 バケットと DB クラスターが異なるリージョンにあり、S3 バケットへのパスにリージョン値がありません。AWS リージョンの詳細については、「 Amazon S3 エンドポイント 」を参照してください。
  • リーダーインスタンスとライターのインスタンスのネットワーク設定が異なります。詳細については、「Amazon Aurora 接続管理」を参照してください。

エラーコード: 1871。S3 API returned error: Access Denied (S3 API がエラーを返しました: アクセスが拒否されました)

S3 バケットに暗号化がある場合、または S3 バケット内に暗号化されたファイルがある場合、「エラーコード: 1871。S3 API がエラーを返しました: アクセスが拒否されました」エラーが表示されます。ServerSideEncryptionConfigurationExists が false でない場合は、LOAD 操作の実行に使用される IAM ロールにアタッチしたポリシーに 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>/*"
            ]
        }
    ]
}</your_bucket_name></your_bucket_name>