본문 바로가기
카테고리 없음

TIL-11

by 오우지 2021. 9. 30.

AWS 정리

 

S3

클라우드 스토리지라고 생각하면 된다.

버킷과 파일 두 개 모두에서 접근 권한을 설정할 수 있는데 버킷에서 액세스를 넓게 풀지 않으면 파일별로 엑세스 권한을 자유롭게 줄 수 없기 때문에 재량껏 잘 설정해야 한다. 물론 중간에 바꿀 수 있기 때문에 걱정 할 필요는 없다.

버킷은 버전관리도 가능하고 암호화, 태그 설정을 통한 비용측정 혹은 검색이 가능하다.

S3에서 업로드된 파일을 URL을 통해 브라우저에서 볼 수 있다. 

기능은 많으니 필요할 때 혹은 잘 사용하고 있는 기업의 예시를 보고 따라하면 많은 도움이 될 것이다.

 

 

IAM(Identity and Access Management)

사용자, 역할을 관리하는 서비스이다.

각 프로그램 사용 전에 IAM의 사용자에서 각 마이크로 서비스에 대한 권한을 허용해 줘야 한다.

사용자 추가 시 엑세스키 ID, 비밀 엑세스 키를 복사해두고 절대 외부에 노출시키면 안된다.

 

 

AWS를 사용할 때 필요한 AWS SDK을 사용할 수 있는데

cmd에서 aws --version을 입력하면 설치 여부를 확인할 수 있다.

aws --configure를 입력하면 설정을 할 수 있다.

컴퓨터에 있는 파일을 업로드 하기 위한 명령어

aws s3 cp {파일명} s3://{버킷이름} --acl public-read

 

flask 어플리케이션에서 로컬호스트로 업로드한 정적 웹 페이지를 aws에 저장 할 수도 있는데 boto3 라이브러리를 이용하면 된다.

import boto3
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.put_object(
		ACL="public-read",
		Bucket="{버킷이름}",
		Body=file,
		Key=file.filename,
		ContentType=file.content_type)
	return jsonify({'result': 'success'})

if __name__ == '__main__':
	app.run()

 

cloudfront

웹 호스팅 시 aws의 리전을 선택해서 특정 지역에 올리게 되는데 이를 분산시켜 여러 리전에 포스팅 할 수 있어서 거리가 먼 지역에서 url에 접근해도 빠른 속도를 유지할 수 있게 해주는 시스템으로 s3에 직접 접근하는 방식에 비해 과금이 줄어든다는 장점이 있다.

기본값 루트 객체에 파일명을 적어주면 된다.

이렇게 하면 선택한 파일에 대한 cloudfront url을 통한 접근이 가능해진다.

 

GitHub Action

깃헙 액션을 사용하기 위해서는 CloudFront권한을 IAM에 추가해 줘야한다.

그 다음 깃헙 계정에 연결된 파이참을 이용해서 연동을 쉽게 할 수 있는데

 

다음 루트 상에 

 

이런 형식의 파일을 넣어서 실행할 수 있다.

 

그 다음 github의 secrets에 위의 yml상에 표시된 암호들을 하나씩 입력해주면 된다.

AWS_ACCESS_KEY_ID와 ACCESS_KEY는 S3 시작할 때 받은 것들이고 BUCKET_NAME도 s3의 버킷 이름, DISTRIBUTION_ID는 cloudfront의 ID를 적어주면 된다.