교차 계정으로 S3에서 Aurora로 직접 데이터 로드

7664 단어 오로라S3AWS

LOAD DATA FROM S3



AWS의 MySQL 호환 DB인 곳의 Aurora에는 데이터를 S3에서 직접 로드하는 구문이 준비되어 있다.
  • Amazon S3 버킷 텍스트 파일에서 Amazon Aurora MySQL DB 클러스터로 데이터 로드

  • 이것의 사용예는 클래스 메소드 등도 블로그로 하고 있으므로 거기까지 화제로 하지 않는다.
  • 【신기능】Amazon Aurora에 S3로부터의 직접 데이터 로드 기능이 추가.

  • SQL 구문



    자세한 설정 방법은 위의 공식 문서를 보고 싶다. 상당히 힘들어서, DB측에 전용의 IAM롤과, DB의 파라미터 그룹, 그리고 액세스하는 유저에게 퍼미션을 설정할 필요가 있다.

    그리고 무언가로 'S3-URI'에 파일 경로를 지정하면 읽을 수 있습니다.

    유용한 것입니다.
    LOAD DATA FROM S3 [FILE | PREFIX | MANIFEST] 'S3-URI'
        [REPLACE | IGNORE]
        INTO TABLE tbl_name
        [PARTITION (partition_name,...)]
        [CHARACTER SET charset_name]
        [{FIELDS | COLUMNS}
            [TERMINATED BY 'string']
            [[OPTIONALLY] ENCLOSED BY 'char']
            [ESCAPED BY 'char']
        ]
        [LINES
            [STARTING BY 'string']
            [TERMINATED BY 'string']
        ]
        [IGNORE number {LINES | ROWS}]
        [(col_name_or_user_var,...)]
        [SET col_name = expr,...]
    

    샘플 DDL


  • 쉼표로 구분 된 이중 따옴표, 헤더가있는 사양의 CSV를로드합니다.

    sample.sql
    LOAD DATA FROM S3 's3://your.name.of.bucket/normal.csv' 
    INTO TABLE `schema_name`.`table_name` 
    FIELDS TERMINATED BY ',' 
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    IGNORE 1 ROWS;
    

    S3가 같은 계정 내이거나 공공이 되어 있으면 이것으로 설정은 끝난다고 생각한다.

    교차 계정에서 작업 및 오류



    비록 올바르게 IAM을 설정해도 AuroraDB의 대향이 되는 S3를 보관 유지하는 AWS 계정이 자신의 것과 다른 경우 아래와 같은 에러가 나온다
    error: Unable to initialize S3Stream
    



    참고
  • Bulk Load Data Files in S3 Bucket into Aurora RDS
  • Discussion Forums > Category: Database > Forum: Amazon Relational Database Service >Thread: Aurora Load From s3 Error - Cannot instantiate S3 Client

  • 교차 계정에서 작업하기 위해 S3 설정



    예 2: 버킷 소유자가 교차 계정 버킷 권한을 부여
  • AccountB에 Aurora 측의 AWS 계정 ID를 설정
  • "Resource"는 "arn:aws:s3:::your.name.of.bucket/*"로 설정할 수 있어야합니다.
    {
       "Version": "2012-10-17",
       "Statement": [
          {
             "Sid": "Example permissions",
             "Effect": "Allow",
             "Principal": {
                "AWS": "arn:aws:iam::AccountB-ID:root"
             },
             "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket"
             ],
             "Resource": [
                "arn:aws:s3:::examplebucket"
             ]
          }
       ]
    }
    

    이것을 S3의 버킷으로 설정하면, Aurora내에서 LOAD FROM S3 를 실행할 수 있게 된다.
  • 좋은 웹페이지 즐겨찾기