[Cloud Computing] 2. AWS S3

Minjeong Park·2021년 7월 25일
1

Cloud Computing

목록 보기
3/4

🙄 AWS S3가 뭔가요?


AWS S3내구성, 가용성, 성능, 보안이 뛰어난 스토리지 서비스입니다.

  1. 클라우드 컴퓨팅의 철학을 이용하는 만큼 사용하는 스토리지 만큼 요금이 청구되고

  2. 작은 규모에서 시작하여 성능 또는 안정성 저하 없이 원하는대로 애플리케이션을 확장할 수 있습니다.

    즉, 작은 규모를 돌리던 큰 규모를 돌리던 성능이 똑같다는 말입니다. 또, 파일의 안정성을 위해 데이터 센터 여러 개에 저장을 해서 백업을 해놓습니다.

  3. 웹 인터페이스를 사용해서, 제한없이 마음껏 저장 및 검색이 가능합니다.

  4. 같은 리전 내에서는 데이터 송수신이 무료입니다.

그러므로 실제 서버를 구축할 때, AWS EC2, AWS Lambda를 이용해서 컴퓨팅을 하고, 중간에 바뀔 일이 없는 정적 및 미디어 파일경우는 AWS S3를 이용해 큰 데이터를 전송하는 방식으로 사용합니다. Spring, Django, Node.js 등에서 AWS S3를 접근할 수 있는 3rd Party library를 많이 제공합니다.

🤓 S3를 이용하기 전 알아야 할 것

🧺 Bucket

말 그대로 데이터를 담을 수 있는 양동이입니다! AWS S3에서 최상위 디렉토리로 쓰입니다. 우리가 C드라이브에 SSD를 넣고 OS를 설치하고, D드라이브에 HDD를 넣고 용량은 크지만 빠른 처리는 필요 없는 것들을 넣는 것처럼, Bucket도 그렇게 설정이 가능합니다.

어떤 건 오래 보관하는 게 목적일 수 있습니다. 그럴 땐 오래 보관하고 속도가 느린 Bucket을 설정할 수 있습니다. 또 어떤 건 자주 읽고 쓰고 빠른 속도가 필요할 수 있습니다. 그럴 땐 요금이 높고 처리 속도가 빠른 Bucket을 사용하면 됩니다.

계정 당 100개의 버킷을 만들 수 있고, 이름은 S3 동일 리전 내에서 유일해야 합니다. 즉, 내가 apple이라는 버킷을 만들고 싶은데 만약 서울에서 사용 중인 버킷이라면 사용할 수 없습니다. 하지만 오하이오엔 없다면 오하이오에 만들 수 있습니다. 또, 저장할 수 있는 데이터는 무제한입니다.

📦 Object

Object 안에는 메타 데이터와 파일 쌍 이 있습니다. 메타 데이터에는 파일의 접근 권한, 이름, 유형(jpg, mp4...) 등이 적재되어있습니다.

😁 AWS S3 사용하기

버킷 만들기

먼저 AWS S3 콘솔에 접속합니다. 로그인을 하고, 버킷 만들기를 통해 버킷을 만들어봅시다!

버킷 이름과 리전을 설정해줍니다. 기존에 소유한 버킷에서 설정을 가져올 수도 있습니다.

그 밑에서는 퍼블릭 엑세스 관련 설정을 해줄 수 있습니다.
여기서 말하는 ACL은 버킷이나 객체에 대해서 요청자의 권한 허용 범위를 어디까지 설정해줄 것이냐에 대한 리스트입니다. ACL은 IAM이나 토큰을 이용한 접근을 설정할 수 있습니다. 만약 모든 사람들이 이 버킷에 접근할 수 있게 하기 위해선 모든 퍼블릭 액세스 차단을 체크 해제 합니다. 또는, 회사 사람들만 접근할 수 있게하기 위해선 새 ACL을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단을 체크하고, token을 발급하여 사용할 수 있게 할 수 있습니다.

만약 모든 퍼블릭 액세스 차단을 체크 해제하면 이렇게 경고문이 뜹니다. 꼭 체크를 해줘야 합니다!

태그 탭에선 태그를 추가할 수 있습니다. 나중에 우리가 S3에서 특정 버킷들을 가져올 때 태그로 분류한 버킷들을 쉽게 가져올 수 있어서 태그를 추가 해서 버킷에 태그를 연결해줄 수도 있습니다.

그 밑에선 암호화 설정을 통해 들어오는 파일을 자동으로 암호화할 수 있습니다. 비활성화 하면 보안은 떨어지지만, 활성화를 하면 돈이.. 들기 때문에 비활성화 합니다. 보안이 중요하면 활성화 해줍니다.

가장 아래 버킷만들기를 누르면 버킷이 생성된 모습을 확인할 수 있습니다.

버킷을 클릭하면 버킷에 대한 대시보드를 볼 수 있습니다. 파일을 업로드할 수도 있고, 폴더를 업로드할 수도 있습니다.

업로드를 클릭해서 파일을 업로드 해보도록 하겠습니다. 파일 추가를 누르고 파일을 추가합니다.

업로드 후엔 객체 하나하나에 대해서 권한을 설정해주는 것이 필요합니다. 밑에 내려가면 권한 탭이 있습니다.

속성의 스토리지 클래스는 아까 드라이브에 비유하며 말했던 말그대로 속성을 설정할 수 있습니다. 자주 접근하지 않지만 큰 용량이 필요하다, 자주 접근하고 속도가 빠른 걸 원한다 등에 대한 여러 선택지가 있으니 입맛에 맞춰서 선택하면 됩니다.

업로드버튼을 누르면 업로드가 된 것을 확인할 수 있습니다.

위 창에서 업로드 된 파일을 클릭해보면 파일에 대한 정보들이 나옵니다.

객체 URL을 클릭하면 우리가 올린 파일을 확인할 수 있습니다.

우리가 백엔드 서버를 만들 때 이렇게 AWS S3를 통해서 파일을 받을 수 있습니다.

IAM 설정하기

우리가 서버에서 사용자가 요청하는 파일을 받았다고 합시다. 이제 이걸 S3에 올려야할텐데, 어떻게 올릴 수 있을까요? 매번 로그인 할 수도 없고.. 코드를 구현한다고 해도 '어. 나 이 S3에 접근할 수 있어. 나 인증 받은 서버 컴퓨터야.'라고 할 수 있어야 할텐데..

이럴 때 AWS AIM을 통해 본인이라는 것을 인증할 수단이 필요합니다.


AWS IAM액세스 관리 탭으로 들어간 후 사용자를 클릭합니다.

사용자 추가를 눌러 사용자를 추가해줍니다. 사용자 이름을 입력하고, 프로그래밍 방식 엑세스에 체크합니다.

다음으로 넘어가서 권한 설정은 기존 정책 직접 연결로 체크하고, 정책 필터를 AmazonS3FullAccess로 선택합니다. 나는 이 유저에 대해서 S3에 관련된 모든 권한들을 허용해주겠다는 뜻입니다.

태그는 넘어가겠습니다.

검토를 하고, 사용자 만들기를 눌러줍니다.

그러면 이렇게 액세스 키 ID비밀 액세스 키가 생성된 것을 확인할 수 있습니다. 왼쪽의 csv 다운로드를 눌러서 액세스 키 ID와 비밀 액세스 키를 다운로드 받아주세요. 이 정보들은 절대 외부로 유출해서는 안됩니다! 특히, GitHub 같은 곳에 올리지 않도록 더더욱 주의해야 합니다!

AWS CLI 설치하기

AWS CLI를 설치하겠습니다. 설치는 아래 커맨드를 입력해주면 됩니다.

  • Windows
$ msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi
  • Linux
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
  • Mac
$ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
$ sudo installer -pkg AWSCLIV2.pkg -target /

저는 현재 Windows 운영체제를 쓰고 있어서 Windows로 설치했습니다.
계속 Next 누르면서 설치하면 됩니다.

설치가 다 되면 aws configure를 설정하기 위해 다음을 입력합니다. 각 섹션에 아까 할당받은 값을 입력해주고, 리전에도 S3에 설정한 리전을 입력해주면 됩니다.

  • Windows
$ setx AWS_ACCESS_KEY_ID AKIAIOSFODNN7EXAMPLE
$ setx AWS_SECRET_ACCESS_KEY wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
$ setx AWS_DEFAULT_REGION us-west-2
  • Linux or Mac
$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
$ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
$ export AWS_DEFAULT_REGION=us-west-2

리전 확인S3 Console에서 확인할 수 있습니다.

aws configure 셋팅을 완료했습니다.

파일 업로드 예제 - Python

파일를 업로드 할 Python 코드를 만들어 봅시다.
s3에 접속할 수 있도록 boto3를 설치합시다.

pip install boto3

혹시 설치 중 Error 13의 오류가 나왔다면, 이 링크를 참고해보세요!

소스코드 예제는 다음과 같습니다.

# main.py
import boto3
import sys 
import os # 파일명을 뜯어보기 위해서
from datetime import date

file_path = sys.argv[1]  # 올릴 파일경로
today = date.today()  # 오늘 날짜의 Date 객체
date_path = today.strftime("%Y/%m-%d/")  # 폴더 명 생성

session = boto3.Session(profile_name="default")  # boto3의 Session 생성
s3 = session.client('s3')  # Client 객체 생성

local_file_path = file_path  # 파일 경로 복사
file_name = os.path.basename(file_path)  # 파일 명 추출
bucket = "mindyeoi"  # 버킷명 설정
upload_path = date_path + file_name  # 업로드 경로 설정

s3.upload_file(local_file_path, bucket, upload_path)  # 업로드
print(f'{file_name}: File Upload Success')

main.py와 같은 경로에 올릴 파일을 두고, 터미널에서 다음 커맨드를 입력하면 업로드가 되는 것을 확인할 수 있습니다.

python3 main.py <올릴 파일 이름>

아래와 같이 폴더구조를 짠 저는 python3 main.py 1.txt를 입력해주면 되겠죠!

파일 다운로드 예제 - Python

아래와 같이 코드를 짜고

# main2.py
import boto3
import sys
import os

file_path = sys.argv[1]  # python main.py 파일경로
today = date.today()  # 오늘 날짜의 Date 객체

session = boto3.Session(profile_name="default")  # boto3의 Session 생성
s3 = session.client('s3')  # Client 객체 생성

upload_path = file_path  # 파일 경로 복사
file_name = os.path.basename(file_path)  # 파일 명 추출
bucket = "mindyeoi"  # 버킷명 설정

s3.download_file(bucket, upload_path, 'download/' + file_name)  # 다운로드
print(f'{file_name}: File Download Success')

아래처럼 커맨드를 입력해서 파일을 내려받을 수 있습니다.

python3 main2.py <내려 받을 파일 경로>

저는 python3 main2.py IMG_7140.JPG로 해야겠죠!

profile
아자아잣

0개의 댓글