AWS Front(S3, IAM, SDK, Cloudfront) - 04/25

호호빵·2022년 4월 25일
0

AWS

목록 보기
1/6

AWS, S3, IAM, SDK

AWS(Amazon Web Service)

클라우드는 우리가 만든 서비스를 돌아갈 수 있게 해주는 곳
웹사이트를 운영하기 위해 필요한 도메인, 서버, 데이터베이스 등등을
제공. (인프라라고 이야기함.)

- AWS는 여러 나라에 데이터 센터를 갖고 있음
 데이터 센터가 있는 나라를 리전이라고 하고, 리전 내의 데이터 센터 위치를 존(AZ)이라고 함.
 (서울에 데이터 센터가 영등포, 강남에 위치하고 있으면 서울리전에 영등포 존, 강남 존이라고 
  불리어지는 것.)
- 리전과 존이 중요한 이유는 AWS 사용하여 인프라를 구성할때 서비스 하려는 지역의 리전과 존을 
  사용해야 한다는 것.(한국에서 서비스 하려면 ap-northeast-2 리전을 사용)
- 서비스하려고 하는 지역과 가까운 곳의 리전을 사용할수록 사용자들에게 좀 더 빠른 속도로 
  서비스를 제공할 수 있음.


----------- AWS -----------------

프론트백엔드데이터베이스
S3EC2RDS
IAMELBElastiCache
CloudfrontElastic BeanstalkElasticSearch Service

----------------------------------


프론트엔드

S3

클라우드의 확장 가능한 스토리지(파일 저장 서비스)

액세스 차단 목록

  • 버킷에 저장한 파일의 권한을 설정하는 기능
  • 퍼블릭 엑세스 : 버킷이 생성되면 고유한 URL이 부여됨. URL을 통해서
    저장된 파일에 접근 할수 있게 하는 기능
  • ACL(Access Control List : 액세스 관리 목록) :버킷과 객체에 대한 액세스를 관리

- 버킷 : 파일을 저장하는 폴더

- 버킷 버전 관리 : 개발할때 소스를 git, svn으로 관리하는 것처럼 버킷내의 파일들을 버전을 
  				관리할 수 있는 기능
- 태그 : 해당 버킷을 태깅해놓고 이후에 비용측정이라던지 많은 버킷중에 태그로 검색을 한다던지 
  		할때 쓰는 태깅 기능
- 파일 업로드 : S3에 업로드 되는 모든 파일에는 객체 URL이 부여됨.
			 해당 URL을 브라우저 주소창에서 호출하면 업로드된 파일이 보임
             (AccessDenied 에러 : 퍼블릭 권한 수정해야 함.)

IAM (Identity and Access Management)

AWS의 resource, 계정에 관한 access 관리
사용자, 역할을 관리하는 서비스

액세스 유형

프로그래밍 방식 엑세스 : 개발 언어와 연계해서 사용하는 방식
AWS Management Console 엑세스: 해당계정을 AWS 콘솔에서 로그인해서
							 사용하게 하는 방식

권한 부여

- 생성하는 사용자에게 권한을 부여
- 기존그룹에 추가하는 방법, 기존사용자 권한 복사, 기존 정책 직접 연결 하는 방법이 있음.
- S3를 위한 사용자이기 때문에 AmazonS3FullAccess 권한을 부여

키 확인

- 엑세스 키 ID, 비밀 엑세스 키를 복사해두기

AWS SDK(Software Development Kit)

프로그래밍을 돕는 라이브러리
개발과 연동해서 AWS를 사용할 수 있음

터미널 창에서
설치 후  확인 : aws --version
설정 : aws configure
SDK로 S3 파일업로드 : aws s3 cp {파일명} s3://{버킷이름} --acl public-read

Cloudfront

  • 글로벌 콘텐츠 전송 네트워크
  • CDN (Content Delivery Newwork)과 유사하게 정적 파일들을 캐싱해주는 서비스(속도를 높이기위해)
    (Caching : 사용자들의 요청이 많은 콘텐츠를 별도 서버에 임시저장한 뒤 필요할 때마다 바로바로 데이터를 전송하는 기술)

Github Action을 통한 자동배포

+ 개발언어와 연동하기

Flask를 사용하여 S3 업로드 웹페이지 구현

# Flask + PyCharm 
# new project - flask 만들기
# app.py

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

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


+ S3 정적호스팅 기능

  • 속성에서 정적호스팅 활성화
  • 저장한 index.html 파일 버킷에 올리기 (퍼블릭)
  • 버킷 웹 사이트 엔드 포인트 url로 index 페이지 보기 가능

+ 오류

  • SignatureDoesNotMatch : AWS IAM Credential의 Secret Access Key의 / 또는 % 기호가 포함되어있을 때 발생
    -> IAM Credential을 기호 없이 만들기
    -> 잘못 넣은 key는 cd .aws -> ls -> open credentials로 변경(터미널에서)
  • Could not connect to the endpoint URL : 오타가 났을 경우

+ 간단 정리

  • AWS : 클라우드 서비스
  • S3 : 파일을 저장하는 서비스
  • IAM : AWS의 내의 계정을 관리하는 서비스
  • SDK : AWS의 서비스를 좀 더 프로그래밍 하게 사용하게 해주는 라이브러리
  • S3 의 정적 호스팅 기능을 이용하면 웹서버 없이도 정적페이지를 웹사이트로 만들 수 있음
  • CloudFront : S3에 저장된 파일들을 지역에 관계없이 빠르게 접근이 가능하도록 함
profile
하루에 한 개념씩

0개의 댓글