Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Archives
Today
Total
관리 메뉴

IT 개발일지

[빅데이터 파이프라인 마스터] Week5 - S3 and Boto3 실습 본문

카테고리 없음

[빅데이터 파이프라인 마스터] Week5 - S3 and Boto3 실습

맛난밤송이 2024. 6. 23. 01:15

실습

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의 변화가 있는 것을 확인할 수 있다.

 

 


출처

- Boto3 사용방법

- 빅데이터 파이프라인 마스터, inflearn 

- AWS SDK for Python