안경잡이개발자

728x90
반응형

  AWS S3는 이미지, 동영상 등 다양한 파일을 저장하기 위한 목적으로 사용할 수 있는 서비스입니다. Python에서 AWS S3에 다양한 파일을 업로드하기 위해서는 boto3라는 이름의 라이브러리를 사용해 연동할 수 있습니다. 따라서 실습을 위해 AWS S3 서비스로 이동하여 [버킷 만들기]를 진행하겠습니다.

 

  버킷은 특정한 파일이 저장되는 루트 폴더라고 이해할 수 있습니다.

 

 

  버킷의 이름은 임의대로 설정해줍니다.

 

 

  다른 구성은 기본 설정대로 진행하시고 간단한 실습을 위해 [권한 설정] 탭에서는 모든 체크를 해제해주겠습니다.

 

 

  결과적으로 버킷이 생성된 것을 확인할 수 있습니다.

 

 

  이제 이러한 버킷에 프로그래밍을 이용해서 파일을 업로드하거나 다운로드 받을 수 있습니다. 이 때는 [내 보안 자격 증명]에 들어가시면 됩니다.

 

 

  자격 증명을 생성하실 때에는 IAM Users를 이용하여 [사용자 추가]를 진행하시면 됩니다.

 

 

 

  저는 다음과 같이 사용자 이름을 대충 설정한 뒤에 [프로그래밍 방식 액세스]에 체크했습니다.

 

 

  이후에 정책으로는 [AmazonS3FullAccess]를 선택합니다. S3에 접근할 수 있는 권한이라고 이해하시면 됩니다.

 

 

  결과적으로 사용자가 추가되면 [액세스 키 ID][비밀 액세스 키]를 확인할 수 있습니다.

 

 

  이제 실제로 우리의 컴퓨터에서 파이썬(Python)을 이용하여 AWS S3에 파일을 올리거나 다운로드 받을 수 있습니다. 이 때 2가지 라이브러리가 사용됩니다. 바로 boto3와 awscli입니다. 따라서 두 개를 pip3를 이용하여 설치합니다.

 

 

 

  이제 awscli가 설치 되었으므로 aws configure 명령을 이용하여 AWS 계정 연결을 수행할 수 있습니다.

 

 

  이제 파이썬을 이용하여 우리 AWS 계정의 모든 버킷을 출력하도록 할 수 있습니다.

 

import boto3
s3 = boto3.resource('s3')
for bucket in s3.buckets.all():
    print(bucket.name)

 

 

728x90
반응형

728x90
반응형

  AWS S3는 스토리지 서비스(Storage Service)입니다. 쉽게 말하자면 특정한 사진, 동영상 등의 파일을 저장하기 위해 사용할 수 있는 서비스입니다. 사용 예시는 매우 광범위합니다. 게시판 웹 사이트를 개발 할 때 이미지 파일만을 S3에 저장할 수 있으며, 특정한 로고 사진 등을 S3에 저장하여 사용자가 빠르게 사진 파일을 다운로드 받도록 처리하는 등의 작업이 가능합니다.


  S3에서 객체(Object)란 저장되는 파일을 의미하고, 버킷(Bucket)은 파일이 저장될 프로젝트를 의미합니다.

AWS S3 서비스에 파일 올리기

  바로 한 번 AWS S3 서비스를 이용해 보도록 하겠습니다.



  AWS S3에서는 [버킷 만들기] 버튼을 눌러서 버킷을 생성할 수 있습니다. 쉽게 말하면 하나의 프로젝트를 생성해주는 것입니다.



  - [버킷 이름]은 다른 서버와 겹치지 않는 고유한 이름이 되어야 합니다.

  - 리전(Region)은 일반적으로 S3을 사용하는 사용자와 가까운 위치가 되도록 설정합니다. 다만 저는 Cloud Front의 성능을 측정하기 위해서 EU(런던)으로 설정했습니다.



  이후에 [권한 설정] 탭에서는 실습을 위하여 일단 간단히 퍼블릭(Public) 공간에서 누구든지 접속할 수 있도록 하겠습니다. 따라서 권장 사항으로 제시되어 있는 모든 권한 정책에 체크를 풀어줍니다.



  이후에 만들어진 S3 버킷을 확인합니다.



  이후에 실습을 위하여 두 개의 파일을 이용하겠습니다. 약간 무거운 파일(5 MB 파일)과 가벼운 파일(1KB 미만)을 준비했습니다. 이 두 개의 파일을 버킷 내에 업로드하여 확인하고자 합니다.



Example.zip

5.20MB


index.txt

0.00MB


  이후에 [개요] 탭으로 가서 실제로 파일을 업로드할 수 있습니다.



  두 개의 파일을 올린 이후에 업로드를 진행하면 됩니다.



  두 파일이 올라간 이후에는 언제든지 다운로드 할 수 있습니다.



  이제 사용자 입장에서 해당 파일을 다운로드 받는다고 가정하겠습니다. 특정한 파일을 누르면 퍼블릭(Public)에서 접근 가능한 URL 경로를 확인할 수 있습니다.



  하지만 실제로 해당 경로에 접속을 해보면 접근 불가(Access Denied)라고 출력되는 것을 알 수 있습니다.



  따라서 S3는 개별적으로 파일을 선택하여 [퍼블릭으로 설정]을 눌러 퍼블릭 형태로 설정할 수 있습니다. 한 번 해당 파일을 퍼블릭으로 설정해보도록 하겠습니다.



  [퍼블릭으로 설정] 버튼을 누르시면 됩니다.



  [퍼블릭으로 설정]한 이후에는 다시 해당 경로로 접속했을 때 내용을 확인할 수 있습니다.


버킷 정책 수정하기

  다만 이렇게 일일히 파일을 [퍼블릭으로 설정]하는 것을 귀찮은 작업이 될 수 있습니다. 따라서 특정한 범위의 파일에 대해서 전부 한꺼번에 [퍼블릭으로 설정]하는 방법도 있습니다. [권한] 탭으로 가서 [버킷 정책]을 수정하여 버킷 내에 모든 파일들이 퍼블릭(Public)에서 접근이 가능하도록 설정할 수 있습니다. 다만 여기에 들어가는 내용은 [정책 생성기]를 통해 생성할 수 있습니다.



  [정책 생성기] 버튼을 눌러서 S3 접근을 위한 설정을 할 수 있습니다. 다음과 같이 [S3 Bucket Policy]를 선택한 뒤에 Principal에는 *을 넣습니다. AWS Service에는 [Amazon S3]를 넣습니다. 이후에 Actions에 [GetObject]를 넣습니다.


  이는 해당 URL을 알고 있는 모든 주체(Principal)가 객체에 접근할 수 있는 것을 의미합니다. 또한 객체(Object) 즉, 파일을 다운로드 할 수 있도록 설정하겠다는 의미입니다.



  그리고 Resource에는 자신의 AWS S3 고유 경로를 넣은 뒤에 접근할 수 있는 파일의 URL을 설정합니다. 파일의 URL로 /*라고 넣어주게 되면 해당 버킷 내의 모든 객체에 접근할 수 있도록 하겠다는 의미입니다.



  이제 [Generate Policy] 버튼을 눌러서 실제로 정책을 생성할 수 있습니다.



  이제 생성된 정책 내용을 복사하여 [버킷 정책]의 내용으로 붙여넣기 합니다.



  이제 [퍼블릭으로 설정]을 진행하지 않은 Example.zip 파일에 대해서도 URL 경로에 접속하면 다운로드를 받을 수 있게 되었습니다. 다시 말해 모든 파일에 누구든지 접근하여 다운로드 받을 수 있도록 설정한 것입니다.



  실제로 다음과 같이 다운로드가 이루어지는 것을 확인할 수 있습니다.


Cloud Front 적용하기

  이제 Cloud Front을 이용하여 더 빠르게 리소스를 제공할 수 있도록 하겠습니다. 따라서 Cloud Front 콘솔로 이동합니다. 그리고 [Create Distribution]을 누릅니다.



  이후에 배포하고자 하는 대상(Origin Domain Name)으로 우리의 S3를 설정합니다.



  이후에 기본 설정으로 바로 [Create Distribution]을 눌러 배포를 진행합니다.



  이후에 다음과 같이 처리 진행 중(In Progress) 상태인 것을 확인할 수 있습니다.



  약 20분의 시간이 흐른 뒤에 배포 완료(Deployed) 상태가 된 것을 확인할 수 있습니다.



  이제 다음과 같이 클라우드 프론트의 URL을 이용해 index.txt를 확인할 수 있게 되었습니다. 맨 처음에 특정 리소스에 접근하려고 하면 아직 CDN 서버에 퍼지지 않았기 때문에 [Miss from cloudfront]라는 캐시를 확인할 수 있습니다.



  이후에 두 번째 접속을 할 때부터는 [Hit from cloudfront]이라는 캐시(X-Cache) 메시지를 확인할 수 있습니다. 다시 말해서 Cloud Front를 거쳐서 리소스를 다운로드 받게 된 것입니다.



  이상으로 AWS S3 및 Cloud Front의 기본적인 사용법을 알아보았습니다.

728x90
반응형