본문 바로가기

문돌이 존버/AWS 스터디

AWS EC2, RDS, S3 연동, feat. access denied 오류 해결

반응형
S3 버킷 생성하는 법부터 보려면 글 아래를 먼저 참고해주세요^^

S3 연동을 위해 필요한 boto3 모듈을 설치하겠습니다.

sudo apt-get update
pip install boto3

파이썬을 통해 S3에 특정 파일을 업로드하는 코드는 아래와 같습니다.

import boto3
from botocore.exceptions import ClientError
import datetime

s3 = boto3.client(
        's3',  # 사용할 서비스 이름, ec2이면 'ec2', dynamodb이면 'dynamodb'
        aws_access_key_id="your id",         # Access ID
        aws_secret_access_key="your key")    # Secret Access Key

nowDate = datetime.datetime.now()
file_name = 'example.csv' # file_path 설정 주의
s3.upload_file(file_name, "bucket name", nowDate.strftime('%Y-%m-%d_%H%M') + '.csv')

MySQL을 사용하기 위해서 mysql server와 파이썬과 연동하기 위한 mysqlclient도 설치해줍니다. 참고로 우분투에서 mysqlclient 설치가 손쉽게 되지 않기 때문에 아래와 같은 여러 명령어를 거쳐야 합니다.

sudo apt-get install libssl-dev
sudo apt-get install python3-mysqldb
sudo apt-get install libmysqlclient-dev
pip install mysqlclient

sudo apt-get install mysql-server
sudo systemctl start mysql # mysql 실행 -> 우분투를 시작할 때마다 매번 실행시켜야 함
# sudo systemctl enable mysql <- 우분투가 시작하면 자동으로 mysql 실행

MySQL에서 쿼리문 결과를 csv 파일로 내보내기(export) 위해선 아래 명령어가 필요합니다. AWS RDS의 DB에 접속해서 명령어를 입력하는 것이 아니라 쉘에서 SQL문과 내보낼 파일 이름까지 모두 입력하면 됩니다.

mysql -h [RDS 엔드포인트] -P 3306 -u [유저네임] -p --batch -e "SELECT * FROM [DB].[TABLE]" > [저장할 파일 이름].csv

 

아시겠지만 위에서 SQL문은 알아서 커스터마이징하면 됩니다.

일반적으로 MySQL에서 csv 파일을 내보낼 때 아래와 같은 방법을 사용하는데, AWS RDS에서 이렇게 사용하면 access denied 에러가 발생합니다.

-- 해결방법 X
SELECT * FROM TABLE
INTO OUTFILE '[file name].csv'
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

제가 찾아낸 해결 방법은 공식 문서에서 설명한 것이 아니라(제가 못 찾은 걸 수도...), 구글링 한 결과 AWS 디스커션 포럼에서 참고한 것입니다.


참고

S3 버킷을 만드는 방법은 꽤나 간단합니다. 먼저 아래 "버킷 만들기" 버튼을 클릭합니다.

아래 버킷 이름AWS 리전만 선택하고 나머지 옵션은 건드리지 않아도 됩니다. 저의 경우 모든 퍼블릭 엑세스를 차단했고 IAM 역할 설정에서 S3에 대한 Secret Access Key를 발급받았습니다.

그다음 IAM 서비스에 가서 아래 화면의 "사용자" 탭을 클릭합니다.

"사용자 추가" 버튼을 클릭하면 아래 화면이 나타납니다. 사용자 이름을 입력하고, 액세스 유형은 "프로그래밍 방식 액세스"를 체크합니다.

이후 "기존 정책 직접 연결"을 선택하고 필터에 s3를 입력하여 "AmazonS3FullAccess"를 클릭합니다.

다음에 나오는 태그는 선택사항이기 때문에 더 이상 할 것이 없습니다. 이렇게 하면 csv 파일 형식으로 시크릿 키를 받을 수 있는데, 해당 파일은 반드시 가지고 있어야 합니다.

728x90
반응형