Amazon Aurora에서 Amazon S3로 데이터를 업로드하거나 다운로드하는 동안 발생하는 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 12월 14일

Amazon Simple Storage Service(Amazon S3)에서 Amazon Aurora로 데이터를 업로드하려고 합니다.

-또는-

Amazon Aurora에서 데이터를 다운로드하여 Amazon S3에 업로드하고 싶습니다.

Amazon Aurora에서 Amazon S3로 또는 Amazon S3로 데이터를 업로드하거나 다운로드하는 동안 발생하는 오류를 해결하려면 어떻게 해야 합니까?

간략한 설명

데이터를 Amazon Aurora에서 Amazon S3로 텍스트 파일로 로드하려면 Amazon Aurora의 SELECT INTO OUTFILE S3를 실행합니다.

Amazon S3의 데이터를 텍스트 형식으로 Amazon Aurora로 로드하려면 LOAD DATA FROM S3 명령을 실행합니다.

SELECT INTO OUTFILE S3 또는 LOAD DATA FROM S3 명령을 실행할 때 발생할 수 있는 일반적인 오류는 다음과 같습니다.

  • 오류 코드: 1871. 자격 증명 누락
  • 잘못된 명령: 파일/접두사/매니페스트 키워드 누락
  • 오류 코드: 1045. 액세스 거부 오류
  • 오류 코드: 1815. 내부 오류: 초기화할 수 없음
  • 오류 코드: 1871. 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. 사용자 지정 DB 클러스터 파라미터 그룹을 생성합니다. 그런 다음 IAM 역할 ARN 값으로 aurora_select_into_s3_role 또는 aws_default_s3_role/aurora_load_from_s3_role 또는aws_default_s3_role을 편집합니다.

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 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;

SELECT INTO OUTFILE S3 또는 LOAD DATA INTO S3 명령을 실행하는 동안 오류가 발생하면 아래 단계를 따르세요.

오류 코드: 1871. 자격 증명 누락

다음과 같은 경우 아래 오류가 표시됩니다.

  • 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. 액세스 거부 오류

잘못된 명령을 입력하면 "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. 내부 오류: 초기화할 수 없음

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(오류 코드: 1815. 내부 오류: 초기화할 수 없음)” 오류가 발생하는 이유는 많습니다.

  • 파일이 없습니다. 파일이 S3 버킷에 있고 스크립트에서 지정한 이름이 파일 이름과 일치하는지 확인합니다. 대/소문자 구분이 중요합니다. S3 버킷 이름, 폴더 이름 및 객체 이름이 로드 명령에 지정된 것과 정확히 일치하는지 확인합니다.
  • 파일, 폴더 또는 버킷 수준에 대한 적절한 권한이 없습니다. 2단계를 검토하여 올바른 사용 권한을 설정했는지 확인합니다.
  • LOAD 스크립트에 구문 오류가 있을 수 있습니다. LOAD 스크립트를 검토한 다음 명령을 다시 실행하세요.
  • S3 버킷과 DB 클러스터가 서로 다른 리전에 있고 S3 버킷에 대한 경로에서 리전 값이 누락되었습니다. AWS 리전에 대한 자세한 내용은 Amazon S3 엔드포인트를 참조하세요.
  • 리더 및 라이터 인스턴스에 대한 네트워크 구성이 다릅니다. 자세한 내용은 Amazon Aurora 연결 관리를참조하세요.

오류 코드: 1871. S3 API에서 오류 반환: 액세스 거부

S3 버킷에 암호화가 있거나 S3 버킷 내에 암호화된 파일이 있는 경우 "Error Code: 1871. S3 API returned error: Access Denied(오류 코드: 1871. S3 API에서 오류 반환)” 오류가 발생합니다. ServerSideEncryptionConfigurationExists가 거짓이 아닌 경우 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>