7-2정리( https://mo-i-programmers.tistory.com/17 )
7-3 정리( https://mo-i-programmers.tistory.com/18?category=1053538 )
프론트와 백엔드의 분리
-Monolithic
프로젝트에 관한 모든 부분을 하나의 서버에 배치
-MSA
가장 간단하게는 프론트, 벡엔드를 물리적으로 다른 서버에 배치
AWS는 아마존이 사용하던 인프라를 그대로 서비스로 만든 것인데. 블록처럼 조립해서 쓸 수 있게 서비스를 구성하였다.
AWS를 사용한다는 것은 단순히 클라우드 사용을 넘어 개발 방식도 클라우드 철학에 맞게 변해야 한다.
결론 : 분리해야 할 부분은 무조건 분리
프론트 구성
(CloudFront 참고문서
https://docs.aws.amazon.com/cloudfront/?id=docs_gateway )
CloudFront는 CDN 서비스와 유사한 기능을 하는데
글로벌 서비스를 해야하는 상황에서 매우 유용
-배포 생성하기
옵션들을 설정하면 바로 생성을 할 수 있는데 무수히 많기 때문에 Origin Domain Name만 설정하고 생성해보자.
이후 필요한 옵션은 생성 후 수정 가능
-리스트 확인-
ID는 자동으로 부여되는 값, 나중에 배포할때 사용
Domain name은 URL이고, 브라우저에서 호출 가능
Origin은 이전에 생성한 S3의 URL이다.
Status가 In Progress인 이유는 그림에서 봤던 Edge Location이라는 곳에 배포중이기 때문이고 배포가 완료되면 Deployed 상태가 된다.
이 때 Cloud Front URL을 이용해 브라우저에서 호출하면
이런 에러가 뜨는데 설정 살펴보면
Default Root Object 라는 부분이 비어 있이 때문이다.
이 부분을 수정해 S3에 업로드한 파일인 index.html을 인식 할 수 있게 만들자.
GitHub Action
GitHub에서 제공하는 배포 서비스! (간단하게 서버에 소스를 배포하는 서비스)
CI/CD의 통합으로 소스 저장소와 배포 시스템을 통합하는 것이다. 아키텍처의 변화로 작아진 어플리케이션을 부담없이 자주배포하기 위함!
-사용법
GitHub 소스 리파지토리에 .github/workflows/main.yml 파일만 추가하면 된다.
(참고문서
https://docs.github.com/en/actions )
-자동배포 만들어보기
먼저 I AM을 이용해 CloudFront에 권한을 추가 해보자
이후 GitHub에 로그인 해 리파짙토리를 만들고 파이참 연동
(참고문서 https://github.com/marketplace?type=actions&query=cloudfront )
프론트 코드를 Github에 업로드
배포 스크립트 추가!
/.github/workflows/main.yml
name: my-front
on:
push:
branches: //브랜치 위치
- main
jobs:
build:
runs-on: ubuntu-latest
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} //IAM에서 받은 엑세스 키id
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}// 엑세스 키
AWS_REGION: 'ap-northeast-2' //리전 위치
steps:
- name: Checkout source code.
uses: actions/checkout@master
- name: Upload binary to S3 bucket
uses: jakejarvis/s3-sync-action@master
with:
args: --acl public-read --exclude '*' --include 'index.html'
env:
AWS_S3_BUCKET: ${{ secrets.BUCKET_NAME }} // S3에 등록된 버킷이름
- name: Invalidate cache CloudFront
uses: chetan/invalidate-cloudfront-action@master
env:
DISTRIBUTION: ${{ secrets.DISTRIBUTION_ID }} // CloudFront id
PATHS: '/index.html'
continue-on-error: true
소스에다 적을 경우 보안상 굉장히 취약해지기 때문에 적지 않는다.
Github의 리파지토리에서 settings 부분에 secrets 탭1 - 이후 엑세스 키와 버킷이름 클라우드프론트 아이디를 입력한다.
소스 추가 PUSH
{프로젝트 폴더}/.github/workflows/main.yml
이후 Actions 탭에서 배포 확인!
네트워크 1- VPC, 서브넷, 라우팅 테이블, 인터넷 게이트 웨이
(VPC참고문서 https://docs.aws.amazon.com/ko_kr/vpc/ )
개념 - AWS 클라우드내으 ㅣ네트워크로, 사용자가 논리적으로 네트워크를 만들어서 서비스에 적용할 수 있다.
메인에서 IPV4 CIDR은 IP의 범위를 지정하는 방법
ex) 172.32.0.0/16 이라고 하면 IP의 범위가 172.32.0.0 ~ 172.32.255.255 지정되게 된다.
-간단 사용 예시
--서브넷
서브넷은 연결되는 서버 컴퓨팅 자원들에 내부 IP를 할당
--라우팅 테이블 (라우팅 : 어떤 네트워크 안에서 통신 데이터를 보낼 때 최적의 경로를 선택하는 과정이다. 최적의 경로는 주어진 데이터를 가장 짧은 거리로 또는 가장 적은 시간 안에 전송할 수 있는 경로)
연결된 서브넷들을 라우팅 합니다.
서브넷과 연결되어 있다.
--인터넷 게이트웨이
인터넷과 VPC를 연결한다. 인터넷 게이트웨이가 연결된 VPC 만이 외부와 통신이 가능
네트워크 2 - 보안그룹, 탄력적 IP
보안그룹은 이제 계속해서 볼 수 있으니 익혀두자.
보안그룹은 방화벽과 비슷한 역할을 하는데 보안그룹과 연결된 인스턴스들의 접근을 제안한다.
--탄력적 IP
인스턴스에 고정된 IP를 부여할 수 있게 해줍니다.
EC2 인스턴스 IP는 중지 & 시작 하게 되면 IP가 변경되기에 탄력적 IP를 이용해 고정시키자.
'정리' 카테고리의 다른 글
7-3TIL 정리(마지막 EB) (0) | 2022.04.27 |
---|---|
7-2TIL 정리(AWS 기초) (0) | 2022.04.27 |
6-TIL 정리 (간단한 AWS-S3,IAM,CloudFront) (0) | 2022.04.25 |
5-TIL 정리(간단 pymongo정렬과 CSS flex) (0) | 2022.04.22 |
4-TIL 정리(flask와 aws를 이용한 서버세팅)-스파르타코딩클럽- (0) | 2022.04.22 |