Boto3을 활용한 Python과 AWS 연동
먼저 터미널에 'pip install boto3'을 입력하여 boto3이라는 패키지를 설치한다.
boto3은 aws와 연동하기 위해 사용하는 라이브러리이다.
간단하게 아래 웹페이지에서 파일 업로드 및 저장을 클릭할 경우, AWS S3에 파일이 자동으로 저장되도록 구현할 것이다.
아래는 boto3을 활용하여 파이썬과 AWS S3를 연동하는 코드이다. Flask를 사용하였고,
Bucket="{버킷이름}"에서 {버킷이름} 대신 S3와 연동할 버킷 이름을 넣어주면 된다.
import boto3 #aws와 연동하기 위해 사용하는 라이브러리
from flask import Flask, render_template, request, jsonify
app = Flask(__name__)
@app.route('/')
def main():
return render_template('index.html')
@app.route('/fileupload', methods=['POST'])
def file_upload():
file = request.files['file']
s3 = boto3.client('s3') #s3와 연동함
s3.put_object(
ACL="public-read",
Bucket="{버킷이름}",
Body=file,
Key=file.filename,
ContentType=file.content_type)
return jsonify({'result': 'success'})
if __name__ == '__main__':
app.run()
이제 app.py 실행시키고 localhost:5000에 접속한다. 그리고 파일 업로드 후 "저장" 버튼을 클릭하면 파일 업로드가 성공적으로 완료된다. 테스트 전 업로드되어있던 파일을 모두 삭제한 상태였고, 파일 업로드 시 업로드 했던 rabbit.JPG 파일이 잘 업로드되어있었다.
S3 정적호스팅 기능을 이용하여 외부에 공개하기
S3 기능에는 단순히 저장하는 기능 이외에 정적 웹 사이트 호스팅 기능이 있다. 이 기능을 이용해서 프론트 페이지를 구성해볼 것이다.
먼저 버킷의 "속성" 탭에 들어가서 아래로 쭉 내려보면 "정적 웹 사이트 호스팅"이 있다.
"편집" 버튼을 눌러 정적 웹 사이트 호스팅을 활성화 시킨다.
호스팅 유형은 정적 웹 사이트 호스팅을 선택하여 저장된 파일을 웹사이트처럼 만들어주도록 설정한다.
인덱스 문서는 기본 페이지를 설정한다.
오류 문서는 에러가 발생했을 때 이동될 페이지를 설정하는 곳이다. 일단 테스트용이므로 똑같이 index.html로 설정해두었다.
단순 HTML 구성일 때는 개발 환경에 맞게 구성하고, React, Vuejs 구성일 때는 index.html을 입력한다.
설정을 저장했으면 이제 index.html 파일을 S3 버킷에 업로드해보자.
S3 활용에 익숙하지 않다면 아래 링크를 참고하여 index.html 파일을 S3 버킷에 업로드하고, 업로드 된 파일 권한을 퍼블릭으로 변경한다.
https://daeunnniii.tistory.com/136?category=876905
이제 업로드한 HTML 파일의 객체 URL로 들어가면 업로드했던 웹사이트가 잘 보이는 것을 확인할 수 있다!
만약 우리가 직접 서버를 돌린다면 계속 서버 컴퓨팅 자원을 관리해주어야하지만, 이 정적 호스팅 기능을 사용하면 AWS에서 S3를 계속 관리해주기 때문에 적은 인력으로 효율적으로 웹 사이트를 운영할 수 있다.
S3 비용 계산
AWS 의 모든 서비스는 비용 계산이 비교적 복잡하다. S3는 저장된 파일의 용량과 파일을 호출하는 트래픽에 따라 비용이 부과되므로, 비용계산을 대략적으로 해놓지 않으면 생각보다 많은 요금이 부과될 수 있다.
아래 링크를 들어가면 AWS에서 조건에 따른 비용을 예상해준다.
https://calculator.aws/#/createCalculator/S3
리전에 따라 비용이 다르게 부과된다. 리전, S3 사용량, 기간 등등 여러가지 조건을 설정하여 비용을 예상할 수 있다!
참고: 스파르타코딩클럽 핵심쏙쏙AWS
'AWS > 실습 기록' 카테고리의 다른 글
AWS EC2 탄력적 IP 사용하기 (EC2 IP주소 고정하기) (0) | 2021.09.17 |
---|---|
AWS CloudFront과 S3 연동 방법 알아보기 (0) | 2021.09.17 |
IAM을 이용하여 AWS SDK 활용한 S3 파일 업로드하기 (0) | 2021.09.16 |
AWS를 사용하는 기업 사례 알아보기 - 넷플릭스 (0) | 2021.09.16 |
Amazon transcribe로 한국어 음성인식 Speech To Text(STT) 사용하기 (1) | 2021.08.02 |