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。認証情報が見つかりません
  2. コマンドが正しくありません: ファイル/プレフィックス/マニフェストキーワードがありません
  3. エラーコード: 1045。アクセス拒否エラー
  4. エラーコード: 1815。内部エラー: 初期化できません
  5. エラーコード: 1871。S3 API がエラーを返しました: アクセス拒否が拒否されました

解決策

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 用のカスタム DB クラスターパラメータグループを作成します。Amazon 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. 作成した 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'@'%';
  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 では、DB クラスターパラメータを使用して activate_all_roles_on_login を有効にします。ユーザーが DB インスタンスに接続すると、すべてのロールが自動的にアクティブ化されます。詳細については、「Amazon Aurora MySQL でデータをロードするためのアクセス許可を付与する」を参照してください。 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;

エラーコード: 1871。Missing Credentials

DB クラスターにアタッチされる IAM ロールが欠けている場合は、「SELECT INTO OUTFILE S3 コマンドまたは LOAD DATA FROM S3 コマンドを実行する」セクションのステップ 5 を参照してください。ロールの ARN が指定されておらず、ロール名のみがパラメータグループに含まれている場合は、ステップ 2 に進んでください。

コマンドが正しくありません: ファイル/プレフィックス/マニフェストキーワードが欠けています

このエラーが表示された場合は、コマンドのキーワードが正しいことを確認してください。

エラーコード: 1045。アクセス拒否エラー

間違ったコマンドを入力すると、「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。内部エラー: 初期化できません

上記のエラーが発生した場合は、次の手順を実行します。

  1. ファイルが S3 バケット内にあることを確認した後、スクリプトで指定した名前がファイルの名前と一致していることを確認します。S3 バケット、フォルダ、オブジェクトの名前が load コマンドと一致することを確認します。
  2. SELECT INTO OUTFILE S3 コマンドまたは LOAD DATA FROM S3 コマンドを実行する」セクションのステップ 2 を参照し、正しいアクセス許可が設定されていることを確認します。
  3. LOAD スクリプトに構文エラーがある場合は、LOAD スクリプトをレビューしてからコマンドを再実行します。
  4. S3 バケットと DB クラスターが別々のリージョンにあり、S3 バケットへのパスに Region 値がない場合は、「Amazon Simple Storage Service のエンドポイントとクォータ」で詳細を確認してください。
  5. リーダーインスタンスとライターインスタンスのネットワーク設定が異なる場合は、「Amazon Aurora エンドポイント接続」で詳細情報を参照してください。

エラーコード: 1871。S3 API がエラーを返しました: Access Denied

このエラーは、S3 バケットが暗号化されている場合や、S3 バケット内に暗号化されたファイルがある場合に発生する可能性があります。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>/*"
      ]
    }
  ]
}

エラー: S3 API がエラーを返しました: リソースが見つかりません: 応答本文がありません。

このエラーを解決するには、ARN とバケット名が正しいことを確認してください。

関連情報

Amazon Aurora MySQL DB クラスターから Amazon S3 バケット内のテキストファイルへのデータの保存

Amazon S3 バケットのテキストファイルから Amazon Aurora MySQL DB クラスターへのデータのロード

AWS公式
AWS公式更新しました 1ヶ月前
コメントはありません

関連するコンテンツ