일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- priorityqueue
- hdfs
- wrapper class
- MVC
- namenode
- Algorithm
- boto3
- SQL
- MySQL
- BIT연산
- Parquet
- 백준
- JPA
- 우선순위큐
- greedy
- 구현
- ES6
- S3
- 시뮬레이션
- EventScheduler
- 프로그래머스
- Transaction
- spark
- bigdata
- procedure
- database
- BFS
- datanode
- ACID
- Spring
- Today
- Total
IT 개발일지
[빅데이터 파이프라인 마스터] Week5 - S3 and Boto3 실습 본문
실습
1. AWS Access Key 발급
- 우선 AWS에서 자신의 이름 클릭 > Security credentials(보안 자격 증명) 클릭
- Access Keys 항목에서 key가 없다면 하나 생성한다.
Acess key를 발급받아야 하는 이유
- AWS의 CLI, API를 사용할 때 인증이 되는 Access Key는 크게 다음과 같이 나뉜다.
1. 엑세스 키 ID
2. 보안 엑세스 키
- 따라서 이후에 서술된 boto3라이브러리를 활용해 실습을 진행하기 위해서는 AWS CLI를 통해 S3의 각종 설정을 하기 위해서는 미리 Access Key 설정은 필수다.
2. AWS 설정 파일 생성
- Linux, MacOS기준으로 다음과 같이디렉토리를 생성하고 설정 파일을 생성한다.
mkdir ~/.aws
vim ~/.aws/config
- 그리고 vim에서 방금 다운받았던 access key id및 key를 입력 후 저장한다.
[default]
aws_access_key_id = id입력
aws_secret_access_key = 키 입력
3. boto3 설치
boto3란?
- AWS CLI를 사용하기 위한 AWS SDK
- AWS의 S3, DynamoDB등 AWS의 다양한 서비스를 활용할 수 있도록 지원한다.
- boto3 라이브러리를 python (가상)환경에 설치한다.
pip install boto3
boto3를 활용한 실습
- boto3에서는 S3의 버킷 관리, 객체 관리, 버전 관리, 라이프사이클 관리 등 다양한 서비스를 제공한다.
- 우선 해당 예제에서는 간단한 실습만 진행할 예정이다.
1. S3 Bucket List 조회
- 우선 특정 profile의 S3 bucket 목록을 조회하는 코드를 짜보자.
- 여기서는 boto3.Session이라는 객체를 통해 접근하였다.
- boto3.client도 활용할 수 있지만, Session객체를 통해 여러 클라이언트, 리소스를 생성할 수 있고 다양한 region, 계정, profile을 다루기에 Session이 더 유용하다.
s3_list.py
import boto3
session = boto3.Session(profile_name='default')
s3 = session.resource('s3')
for bucket in s3.buckets.all():
print(bucket.name)
- 그리고 CLI창에 다음과 같이 입력해보자. (grep : 2024가 들어간 결과만 console창에 출력 => 보안상)
python s3_list.py | grep 2024
2. S3 Content Download
- S3의 특정 bucket에 저장된 사진 파일을 다운로드 받아보자.
- 2024라는 폴더 내에 apple.png파일을 다운로드 받아봐도록 하겠다.
s3_down.py
import os
import boto3
import time
bucket_name = "버킷 이름"
folder_name = "2024/"
path = "apple.png" # 파일명
print(folder_name + os.path.basename(path))
session = boto3.Session(profile_name='default')
s3 = session.client('s3')
s3.download_file(bucket_name, folder_name+os.path.basename(path), "./" + os.path.basename(path))
3. S3 content upload
- 반대로 파일을 업로드해보겠다.
- file_name : 로컬 파일 경로
- target_file_name : S3 버킷에 업로드 될 때 사용될 이름
s3_upload.py
import os
import boto3
bucket_name = "2024-bigdata-course"
file_name = "apple.png" # 파일명
local_file_path = os.getcwd() + "/" + file_name
target_file_name = "temp_apple.png"
session = boto3.Session(profile_name='default')
s3 = session.client('s3')
s3.upload_file(local_file_path, bucket_name, target_file_name)
4. S3 ACL 변경
- 그리고 S3에 업로드된 콘텐츠의 ACL 권한 또한 수정해 볼 수 있도록 하겠다.
- temp_apple.png파일의 ACL을 모든 사람이 access할 수 있는 "public-read" 상태로 해보겠다.
s3_public.py
import os
import boto3
bucket_name = "2024-bigdata-course"
target_file_name = "temp_apple.png"
session = boto3.Session(profile_name='default')
s3 = session.client('s3')
s3.put_object_acl(ACL='public-read', Bucket=bucket_name, Key=target_file_name)
- 그러면 다음과 같이 해당 파일의 권한을 들어가보면 ACL의 변화가 있는 것을 확인할 수 있다.