S3의 CSV 파일을 Aurora MySQL 클러스터에 insert 하기
Aurora에 S3의 csv 파일을 업로드 하는 과정이 생각보다 복잡해서 관련 내용을 정리했다.
Aurora MySQL은 DB Cluster 만 가능하다
- Aurora 생성시 Engine Option으로 MySQL, PostgreSQL, MariaDB 등을 선택할 수 있다.
- 인프라로 Serverless 또는 DB Cluster 타입을 선택할 수 있다 (version에 따라서 자동선택됨)
- MySQL의 경우
- Serverless는 S3에서 데이터 Load가 불가
- DB Cluster만 S3에서 데이터를 직접 Load 가능 (링크)
- 참고로 PostreSQL은 Serverless 및 DB Cluster 둘다 가능 하다고함
Aurora MySQL 에 S3 접근 IAM Role 추가
Aurora에서 DB 선택 -> Connectivity & Security -> Managed IAM Roles -> Select a service to connect to this cluster -> S3 및 Bucket ARN 입력
Aurora에서 DB 선택 -> Configuration -> DB cluster parameter group 선택 -> s3 검색 -> aurora_load_from_s3_role 의 value 확인 -> 위에서 추가한 IAM Role으로 설정되어 있다면 정상. 그렇지 않다면 Value값 변경이 필요
S3 VPC Endpoint 생성하기
Role을 추가하면 권한은 있으나 실제 통신을 보장하진 않는다. S3의 Public Access가 Deny되어 있다면 외부에서 접속이 되질 않는다. 이를 해소하기 위해 VPC Endpoint 를 생성해야 한다.
VPC -> Endpoints -> Create Endpoint -> S3검색 -> com.amazonaws.ap-northeast-2.s3 및 Gateway Type 선택 -> Aurora 인스턴스가 있는 VPC 및 관련 Routing Table 선택 -> Create
LOAD DATA FROM S3
Aurora에 mysql 커맨드로 접속할 수 있는 EC2 혹은 local pc에서 Auaroa MySQL에 접속하고 아래 명령어를 입력한다. (아래 명령어는 csv파일의 첫줄을 제외시킨다)
LOAD DATA FROM S3 [s3파일 uri] INTO TABLE [Table명] FIELDS TERMINATED by ',' LINES TERMINATED BY '\n' IGNORE 1 lines;
혹시 에러가 발생한다면 Role 및 Endpoint를 확인해보거나, 링크를 참고한다