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

所要時間3分
0

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 コマンドを実行する際に表示される一般的なエラーには、次のようなものがあります。

  • エラーコード: 1871。認証情報が見つかりません
  • 不正なコマンド: ファイル/プレフィックス/マニフェストのキーワードが見つかりません
  • エラーコード: 1045。アクセス拒否エラー
  • エラーコード: 1815。内部エラー: 初期化できません
  • エラーコード: 1871。S3 API がエラーを返しました: アクセス拒否が拒否されました

解決策

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 用のカスタム DB クラスターパラメータグループを作成します。

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'@'%';

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 では、DB クラスターパラメータを使用して、activate_all_roles_on_login を有効にできます。これにより、ユーザーが DB インスタンスに接続すると、すべてのロールが自動的に有効になります。詳細については、「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;

エラーコード: 1871。認証情報が見つかりません

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

次の場合にこのエラーが表示されることがあります。

  • DB クラスターへの IAM ロールのアタッチメントが見つからない場合。この問題を解決するには、前のセクションのステップ 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。内部エラー: 初期化できません

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

「エラーコード: 1815。内部エラー: 初期化できません」というエラーが表示される理由はいくつか考えられます。

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

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

S3 バケットが暗号化されている場合、「エラーコード: 1871。S3 API がエラーを返しました: アクセスが拒否されました」というエラーが表示されます。または、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>/*"
      ]
    }
  ]
}

関連情報

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

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

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

関連するコンテンツ