이전 포스팅에 이어서, 직접 S3에서 버킷을 생성해보고, 접근 권한을 퍼블릭으로 전환한 뒤, 로컬 환경에서 S3에 JSON 파일을 GET, POST 해보는 방법을 포스팅해보겠습니다!!
버킷 생성(권한 : 퍼블릭 액세스)
(1) 먼저 S3 사이트에 접속하고 버킷 만들기를 클릭합니다.
(2) 버킷 이름은 전역 고유기 때문에, 잘 작성해주시고, 리전을 선택하신 뒤 넘어갑니다.
(3) 이 부분을 액세스 차단을 해제해줍니다. 퍼블릭 액세스 관련 옵션인데, 퍼블릭 액세스를 켜려면 이 부분을 해제 해주셔야합니다.
(4) 다른 옵션은 그대로 두고, 버킷을 만듭니다.
(5) 일단 버킷을 생성하면, 저 부분이 퍼블랙 액세스 가능이 아니라, 퍼블릭 액세스 가능하게 할 수 있음?? 이렇게 적혀 있을 겁니다. 저희의 목표는 퍼블릭 액세스 가능으로 만드는 것이기 때문에 권한을 바꿔줘야합니다.
(6) 권한을 클릭합니다.
(7) 권한 탭에서 버킷정책 - 편집을 클릭하시면 이 탭이 나옵니다. 그리고 들어가서 정책 편집기를 클릭하시면, AWS POLICY GENERATOR 페이지가 나올 겁니다.
(8) 이렇게 설정하시고 ADD STATEMENT -> GENERATE POLICY KEY를 클릭하시면 JSON 파일 형식으로 텍스트를 줄텐데, 그 텍스트를 복사해서,
(9) 모자이크 한 이곳에 붙여줍니다. 이후 변경사항 저장을 클릭하면,
(10) 퍼블릭 액세스로 전환 됩니다.
BOTO 라이브러리 활용해서, FILE UPLOAD, GET 해보기
액세스 키 발급
먼저 BOTO 라이브러리를 활용하기 위해서는 AWS ACCESS KEY와 SECRET 키가 필요합니다. 방법을 알려드리면,
(1) 우측 상단 탭에서 ID를 클릭하시고, 보안자격 증명에 들어갑니다.
(2) 나온 페이지에서 그대로 스크롤 내리셔서 액세스 키를 찾고, 액세스 키 만들기를 클릭합니다. 그러면 루트 액세스 키에 대한 경고가 나올텐데, 후에 일단 테스트 겸 하는 것이기 때문에 IAM 사용자는 나중에 만들도록 하고, 계속해서 생성합니다.
(3) 그러면 ACCESS KEY와 SECRET KEY를 줄텐데, 어디엔가 잘 보관해둡니다. 이 액세스 키는 다시 발급 받을 수 있지만, 해당 페이지에서만 볼 수 있고, 이후 제공되지 않으니까 잘 적어두셔야합니다.
파일 업로드
import boto3
AWS_ACCESS_KEY_ID ="본인 액세스 키 입력"
AWS_SECRET_ACCESS_KEY = "본인 시크릿 키 입력"
AWS_DEFAULT_REGION = "ap-northeast-2" # REGION 입력
s3 = boto3.client('s3',
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
region_name=AWS_DEFAULT_REGION
)
file_name = '업로드 할 filepath'
bucket = '업로드될 버킷 이름'
key = 's3 내에 저장될 파일명' # 폴더 안에 넣고 싶다면 폴더/파일명으로 입력
s3.upload_file(file_name, bucket, key)
이 파이썬 코드를 활용하시면, 버킷에 파일을 업로드 할 수 있습니다.
파일 읽기
import boto3
import botocore
bucket = '업로드될 버킷 이름' #
key = 's3 내에 저장될 파일명'
resource = boto3.resource('s3',
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
region_name=AWS_DEFAULT_REGION
)
def read_object(bucket, key, resource):
obj = resource.Object(bucket, key)
obj_body = obj.get()['Body'].read().decode('utf-8')
obj_json = json.loads(obj_body)
return obj_json
read_object(bucket, key, resource)
일단 저는 JSON 파일을 읽어올거라, 중간에 json.loads 코드를 추가 했는데, 조금만 고쳐서 쓰시면 모든 파일 형태는 다 불러와서 쓸 수 있습니다.
일단 이렇게해서 포스팅 마무리하겠습니다! 저는 지금 에어플로우로 자동화할 때 boto를 사용하고 있는데, 일단은 ec2 서버를 열게 되면 에어플로우에서 제공하는 S3HOOK을 사용하면서 해볼 생각입니다. 혹시라도 이 글을 보신다면, 유용하게 사용하시기 바랍니다. 감사합니다;)
'AWS' 카테고리의 다른 글
[AWS REDSHIFT] AIRFLOW S3 → Redshift UPSERT 관련 에러('syntax error at or near "#"') (0) | 2023.06.17 |
---|---|
[AWS LAMBDA] DOCKER 활용 AWS LAMBDA 딥러닝 모델 적용 (1) | 2023.06.11 |
[S3] AMZON S3 기초개념 (2) | 2023.05.14 |
[EC2]AWS EC2 MOBAXTERM 연결 (0) | 2023.04.16 |
[EC2] AWS EC2 VSCODE 연결 (1) | 2023.04.16 |