본문 바로가기
Data Science

[SQL] Redshift severless 시작하기 w.Google Colab Can't load plugin 오류해결

by Lora Baek 2023. 5. 30.
300x250

Redshift 론치 데모

AWS에 가입 후, 로그인하면 첫 화면이 뜬다. 좌측 상단의 Services를 클릭하면 낯익은 서비스들을 볼 수 있는데, 그 중 Amazon Redshift를 클릭해 시작한다.

상단 바의 검색창에 Redshift라고 검색해도 된다.

Create cluster (Subnet 오류로 실패했음)

*현재는 free trial을 위해서는 하단의 serverless를 사용해야 하니, 과금을 원치 않는다면 바로 다음 제목으로 이동하시길 추천드린다

Redshift에 접속한 후, Clusters- "Create cluster"를 눌러줬다.

Node type은 저렴한 dc2.large를 선택했다.

나는 지역이 Virginia로 설정되어있는데, 한국에서 접속하면 Seoul로 뜰 것이다. 요금은 지역마다 다를 수 있다.

Sample data는 로드하지 않고, 적당한 패스워드를 설정해준다.

*이름에 대문자가 들어가니 오류가 떠서 사진과 다르게 마지막에 수정해주었다.

강의에서 Associated IAM roles를 redshift.read.s3라는 이름으로 설정하셨는데,

나도 무언가 할당이 되어야할 것 같아서

내 AWS 계정에 있는 내용과 S3 bucket에 접근 가능한 "Any S3 bucket" 을 클릭해 만들어주었다.

 

"Use defaults"를 해제한 다음,

network and security 부분에서 Publicly accessible을 "Enable"로 해줘야 구글 코랩 등으로 ID,PW만 있으면 접속할 수 있도록 되어있다.

Database configurations의 포트 넘버 "5439"도 기억해두자.

 

그런데 설정하는 중에 나는 문제가 하나 생겼다..! 'Cluster subnet group' 오류가 뜬 것.

InvalidClusterSubnetGroupStateFault :Vpc associated with db subnet group does not exist.

그래서 우선 serverless 대시보드를 만들어서 진행해보기로 했다.

 

 

 

 

Redshift Serverless Free trial 만들기

나는 Redshift serverless를 선택하면 300달러의 credit을 받을 수 있다는 메세지가 상단에 떴기 때문에, 버튼을 눌러주었다.

 

좌측의 메뉴 바나, Redshift 메인화면에서 serverless 만들기를 해도 된다.

현재는 유일한 Free trial이므로 요금 과금을 원하지 않는다면 Serverless로 진행하면 된다.

 

default와 customize settings 중 디폴트 옵션을 선택해줬다.

기본 네임스페이스와 작업 그룹을 생성하고, 기본 설정을 사용하며 기본 작업 그룹을 기본 네임스페이스에 연결할 때 활성화된다고 한다.

여기서 네임스페이스는 데이터베이스 개체 및 사용자의 모음으로, 데이터 속성에는 데이터베이스 이름과 암호, 권한, 암호화 및 보안이 포함된다.

네임스페이스 이름은 default, 데이터베이스 이름은 dev로 자동설정되었다.

나는 IAM role은 따로 설정하지 않았다. 생성을 완료하기까지는 몇 분 정도 걸린다.

 

생성이 완료된 Redshift serverless dashboard! 오른쪽 아래에서 Free trial의 남은 크레딧과 유효기간(약 90일)을 확인할 수 있다.

Google Colab 연동 준비

이제 이 Redshift 환경을 Google Colab에서 접근할 수 있도록 만들어줘야 한다. 아래 과정을 차근차근 따라가면 해결이다!

 

1. Enable publicly access

먼저 대시보드의 Namespaces/Workgroups 목록 중, 구글코랩과 연동할 네임스페이스의 "Workgroup(작업 그룹)"을 선택한다.

그러면 Network and security 화면이 뜰텐데, Publicly accessible이 꺼져있는 것을 볼 수 있다.

구글 코랩과 연동하려면 이 Publicly access를 "Enable"로 변경해줘야 한다.

Edit을 눌러 'Turn on publicly accessible'을 활성화해준 다음 저장한다.

2. VPC security group

이제 VPC 보안그룹에서, default 포트번호인 "5439"에 모든 IP에 대한 접근 권한을 부여해줘야 한다.

나는 지금 가려두었지만, 주황색 동그라미로 체크된 부분을 클릭하면 E2C 관리 콘솔 창의 보안 그룹으로 이동한다.

하단의 Inbound rules 클릭->보안그룹 선택->Edit inbound rules 를 누르면, 인바운드 규칙 편집 창이 뜬다.

Add rule-> 5439 -> 0.0.0.0/0을 추가해주자.

 

Google Colab으로 이동

이제 Google Colab으로 이동해서 다음 코드들을 실행해보자.

%load_ext sql #sql을 사용하기 위한 명령어

 

!pip install SQLAlchemy==1.4.47 #구글코랩보다 낮은 버전에서 수행되어야 한다

 

%sql postgresql://계정명:암호@endpoint

계정명은 대시보드 메인에서 "Namespace"의 Admin user name을 확인하면 된다.

여기서 admin password를 변경할 수도 있다.

endpoint는 "WorkGroup"으로 이동해서, 우측에 Endpoint를 복사하면 된다.

잘 설정되었다면 에러 메세지 없이 잘 연결될 것이다.

 

다른 분들은 다들 잘 되던데 나는 왜 자꾸 에러가 날까?!

어떤 문제인건지, 좀 더 찾아봐야겠다.

 

------

에러 해결

 

나는 이 코드를 실행할 때 계속 에러가 발생했다.

%sql postgresql://계정명:패스워드@endpoint
에러 메세지는 아래 내용.. 

Connection info needed in SQLAlchemy format, example:

postgresql://username:password@hostname/dbname

or an existing connection: dict_keys([])

Can't load plugin: sqlalchemy.dialects:postgresql

Connection info needed in SQLAlchemy format, example:

postgresql://username:password@hostname/dbname or an existing connection: dict_keys([])

SQLAIchemy 포맷으로 작성도 잘 되어있고,

플러그인도 잘 설치되었는데 대체 왜일까?

 

해결방법은 바로 플러그인 재설치 후 "Colab 런타임 재시작"이다!

코랩에서 플러그인 설치 후 사용을 하기 위해서는 꼭 런타임 재시작을 해주어야 하는데, 이 부분을 놓쳤다.

런타임을 재시작한 다음 코드를 실행하니 에러 메세지 없이 깔끔하게 해결되었다.

댓글