[DevOps] AWS VPC, ECR, CodeDeploy

홍건의·2024년 9월 16일
0

DevOps

목록 보기
3/4

VPC (Virtual Private Cloud)

AWS 계정 전용 가상 네트워크.
독립된 하나의 네트워크를 구성하기 위한 가장 큰 단위.
각 Region에 종속되며 사설 IP 대역(RFC1918)을 준수한다.

10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255

VPC에서 한번 설정된 IP대역은 수정할 수 없으며, 각각의 VPC는 독립적이기 때문에 서로 통신할 수 없다.
통신하고 싶으면 VPC 피어링 서비스를 활용해야 한다.

Subnet

VPC의 IP주소를 나누어 리소스가 배치되는 물리적인 주소 범위

1개의 Availability Zone ~ 1개의 Subnet
1) Public Subnet
인터넷에 연결되어 있어서 Out-bound / In-bound 트래픽을 주고받을 수 있다.

2) Private Subnet
인터넷과 연결되어 있지 않은 Subnet

Router

VPC 안에서 발생한 네트워크 요청을 처리하기 위해 어디로 트래픽을 전송해야 하는지 알려주는 표지판 역할을 수행. 라우팅 테이블을 갖고 있으며, 가장 먼저 라우터로 트래픽을 전송한다.

Internet Gateway

VPC 리소스와 인터넷 간 통신을 활성화하기 위해 VPC에 연결하는 게이트웨이.
Public Subnet만 외부와 통신해야 하므로 Public Subnet의 라우팅 테이블에만 인터넷 게이트웨이로 향하는 규칙을 포함한다.
네트워크 요청 시 VPC 내부의 목적지인지 확인하고 아니면 해당하지 않는 모든 트래픽은 인터넷 게이트웨이를 통해 외부로 전송되어 목적지를 찾는다.

NAT Gateway

Private Subnet에서 발생하는 네트워크 요청이 VPC 내부의 주소를 목적지로 하는 것이 아니라면 Public Subnet에 존재하는 NAT로 트래픽을 전송한다.
트래픽을 받은 NAT는 public subnet의 라우팅 규칙에 따라 처리함으로써 Private Subnet이 인터넷과 통신할 수 있도록 한다.

VPC 엔드포인트

인터넷 게이트웨이나 NAT 게이트웨이와 같은 다른 게이트웨이 없이 AWS 서비스와 연결하여 통신할 수 있는 Private Connection을 제공하는 서비스

네트워크 ACL

주고받는 트래픽을 제어하는 가상 방화벽. 하나의 네트워크 ACL은 다수의 서브넷에 재사용할 수 있다.

CIDR 주소

네트워크 구분을 클래스 단위로 하지 않겠다는거
192.168.0.1/24 이런 식으로 적는 것이 CIDR 표기법이다.

AWS CLI

aws를 명령어로 관리하기 위한 tool.
파이썬으로 만들어졌다. 그래서 이거 쓰려면 어떤 환경이든 파이썬 설치하고, awscli라는 패키지를 사용하면 된다.

그리고 사용하려면 key를 등록해야 한다.

configure 명령어

key를 등록하는 명령어 중 하나.

aws configure
AWS Access Key ID :
AWS Secret Access Key : 
Default region name : 
Default output format : 

그리고 ~/.aws/config, ~/.aws/credentials 가보면 존재한다.

AWS ECR

ECR 구성 요소

1. 레지스트리

private 레지스트리는 aws 계정마다 제공된다. 여기에 1개 이상의 레포지토리를 생성하고, 이 레포에 이미지 저장이 가능하다.

2. 사용자 권한 토큰

ECR 레지스트리에 올리려면 AWS 사용자로서 인증해야 한다. 이는 docker run 명령어로 가능하다.

3. 레포지토리

도커 이미지, OCI 이미지 등등을 포함한다

4. 레포지토리 정책

정책을 통해 레포지토리 및 레포지토리 내의 이미지에 대한 액세스 제어가 가능하다

5. 이미지

레포지토리에 컨테이너 이미지를 푸시하고 가져올 수 있다.

ECR 기능

수명주기 정책

사용하지 않는 이미지를 정리하는 규칙을 정의함으로써 이미지 수명 주기를 관리한다.

이미지 스캔

컨테이너 이미지의 소프트웨어 취약성을 식별하는데 도움.
각 레포지토리는 푸시할 때 스캔하도록 구성되어 있어서 새 이미지가 스캔된다.
이미지 스캔 결과도 검색할 수 있다.

ECR 사용법

1. 레지스트리에 대해 도커 클라이언트 인증

2. 도커 이미지 빌드

3. 이미지에 태그를 저장

4. 레포지토리에 푸시한다.

ECR에 이미지 올리기

1) AWS CLI 설치부터 진행

AWS CLI
명령어로 AWS 작업할 수 있게 해주는 tool.
상세 내용은 AWS 홈페이지에 잘 나와있다.

2) IAM Role 생성 / IAM 사용자 생성 (액세스 키 발급)

~/.aws/credentials에 aws configure이 있게 된다.
명령어로 AWS CLI 사용하려면 초기 설정이 필요하다.

사용자 추가 - Administrator Access 선택
여기서 나온 Access Key ID / Secret Access Key

3) AWS ECR에서 "푸시 명령 보기" 보면 친절하게 나와있다.

올렸던 Dockerfile 스크립트

FROM python:3.9
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . /app
WORKDIR /app
CMD ["python3", "-m", "flask", "run", "--host=0.0.0.0"]

과정

ECR 푸시 감지

특정 명령어를 통해 배포

ECS에 배포

소스 공급자 : Amazon ECR
빌드 공급자 : AWS CodeBuild
배포 공급자 : Amazon ECS

위 3개를 모두 관리하는 건 AWS CodePipeline

이렇게 세팅해놓고 ECR에 도커 이미지를 푸시하면 자동의로 ECR의 변화를 감지하고 해당 이미지를 통해 ECS에 배포가 진행된다.

AWS CodeDeploy

여러 서비스 어플리케이션 배포를 자동화하는 서비스

이게 어떤 식으로 동작할지를 appspec.yaml에 기술한다.
파일에 정의된 일련의 수명주기 이벤트 후크를 각 배포를 관리하는데 사용한다.

files:
	- source: /
      destination: /home/ununtu/example
permissions:
	- object:
      owner:
      group:
hooks:
	ApplicationStop:
      - location:
        runas:
    AfterInstall:
    ApplicationStart:

CodeBuild에서 빌드 관련 설정을 적는 곳이 buildspec.yaml
CodeDeploy에서 배포 관련 설정을 적는 것을 appspec.yaml

profile
Backend Developer

0개의 댓글

관련 채용 정보