DevOps 30

Session Manger 를 이용하여 EC2에 연결하기

AWS Systems Manager에서는 Session Manager라는 기능을 제공하는데 사전에 SSM-Agent가 설치된 EC2 SSH를 연결할 수 있는 기능을 제공한다. Session Manager를 사용하기 위해서는 EC2와 IAM, 그리고 로컬 컴퓨터에 각각의 준비가 되어있어야 한다. SSM 특징 인바운드 포트를 열거나 SSH 키를 관리할 필요 없이 관리형 인스턴스에 안전하게 연결한다. Bastion Host 나 Key Pair 가 필요 없다. SSH가 아닌 HTTP를 사용하여 접속이 가능하다. 선택한 목적 또는 활동에 따라 AWS 리소스를 그룹화하여 중앙 집중식 관리가 가능하다. 주의 인터넷으로 아웃바운드 허용해주어야 한다. 퍼블릭 IP가 필요 없다고 하지만 퍼블릭 IP가 없으면 연결할 수 없..

DevOps/AWS 2023.06.18

AWS Aurora DB

AWS가 MySQL 및 PostgreSQL을 호환해서 만든 RDBMS로 RDS와는 다른 AWS만의 RDBMS로 기존 소스들을 AWS에 맞게 고쳐서 만들어졌다. 특징 성능 오로라는 기존의 MySQL과 PostgreSQL 데이터베이스보다 뛰어난 성능을 제공합니다. 오로라는 분산 스토리지 및 복제 기능을 활용하여 처리량과 응답 시간을 향상시킵니다. 또한 자동 스케일링 기능을 통해 워크로드의 요구에 따라 자동으로 리소스를 조정할 수 있습니다. 확장성 오로라는 수평 및 수직 확장이 가능합니다. 수평 확장을 통해 여러 개의 인스턴스를 사용하여 데이터베이스 처리 능력을 증가시킬 수 있으며, 수직 확장을 통해 인스턴스 유형을 업그레이드하여 더 많은 리소스를 할당할 수 있습니다. 내구성 오로라는 데이터를 여러 가용 영역..

DevOps/AWS 2023.06.18

[WAF] NestJS 애플리케이션 AWS에 배포하기 08

인프라 구성도 이번 시간에는 ALB를 방어하기 위해 WAF를 설정하겠습니다 WAF(Web Application Firewall) 기본적으로 AWS에 모든 리소스는 AWS Shield Standard로 보호됩니다. Shiled Standard는 네트워크 레벨에서의 DDos 보호, SYN Flood, UDP Flood 및 Reflection Attacks와 같은 공격 유형에 대한 자동 탐지 및 차단, 대역폭 공격에 대한 자동 스무딩을 무료로 제공합니다. 만일 더 다양한 보안 위협을 탐지 및 차단하고 싶다면 WAF를 사용하는 게 좋습니다. WAF는 아키텍처의 변경 없이 CloudFront, API Gateway, AppSync, ALB에 적용할 수 있으며 웹 ACL(액세스 제어 목록)을 정의한 다음 보호하려는..

DevOps/AWS 2023.04.25

[CodeDeploy] NestJS 애플리케이션 AWS에 배포하기 07

인프라 구성도 이전 시간까지 GithubActions을 통해 코드를 빌드하였습니다. 이제 CodeDeploy로 오토스케일링 그룹에 배포하는 설정을 진행하겠습니다. Dockerfile NestJS 애플리케이션을 도커 이미지로 만들기 위한 도커파일입니다. 프로젝트 루트에 생성합니다. FROM node:18 WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . EXPOSE 3000 CMD ["npm" ,"run","start:prod"] nginx.conf 프록시로 사용될 nginx 설정 파일입니다. 프로젝트 루트에 /nginx 디렉토리에 생성합니다. user nginx; worker_processes auto; error_log /..

DevOps/AWS 2023.03.31

[Github Actions] NestJS 애플리케이션 AWS에 배포하기 06

인프라 구성도 저번 시간에 이어 Github Actions를 설정하고 workflow 파일을 작성하겠습니다. Github Actions에 Secret 설정하기 Github 레포지토리의 Settings > Secrets and variables > Actions 탭을 선택하고 New repository secret을 선택합니다. 이전에 S3에 접근하기 위해 생성한 사용자 정보와 데이터베이스 정보와 OAuth 정보를 등록합니다. Workflow 파일 작성하기 프로젝트 디렉토리에 .github/workflows/workflow.yml 파일을 생성합니다. 파일명은 사실 아무거나 괜찮다고 합니다. name: Deploy NestJs Application on: push: branches: [ release ] p..

DevOps/AWS 2023.03.23

[RDS] NestJS 애플리케이션 AWS에 배포하기 04

인프라 구성도 이번 시간에는 저번 시간에 이어 프라이빗 서브넷에 RDS를 구축합니다 데이터베이스 서브넷 그룹 생성 RDS를 이용하기 위해서는 서브넷 그룹을 생성해야 합니다. 서브넷 그룹은 두 개 이상의 가용영역에 생성된 프라이빗 서브넷으로 구성합니다. 이전에 새성했던 프라이빗 서브넷 두개를 선택후 생성합니다. 보안 그룹 생성하기 RDS에 연결될 보안 그룹을 생성합니다. 저는 MariaDB를 사용하기에 인바운드 규칙에 MYSQL/Aurora을 선택했고 소스로 EC2-SG를 선택했습니다. EC2에 연결되어 있는 보안 그룹의 아웃바운드를 수정합니다. 대상으로 RDS에 연결되어있는 보안그룹을 선택합니다. RDS 생성하기 사용하고 싶은 데이터베이스 엔진을 선택합니다. db 인스턴스 식별자와 마스터 사용자 이름, ..

DevOps/AWS 2023.03.19

[ALB, EC2] NestJS 애플리케이션 AWS에 배포하기 03

인프라 구성도 이전에 구성한 서브넷에 NestJS와 NextJS를 위한 오토스케일링 그룹과 ALB를 배포 후 HTTPS를 적용할 계획입니다. Route53에 도메인이 있어야 진행할 수 있습니다. 생성하는 리소스는 모두 EC2 서비스에서 생성 및 편집할 수 있습니다. 보안 그룹 생성하기 보안 그룹(Security Group)은 EC2 인스턴스와 RDS, Load Balancer 등 AWS 리소스에 대한 인바운드 및 아웃바운드 트래픽을 제어하는 가상 방화벽 역할을 합니다. 보안 그룹은 인스턴스 또는 서비스마다 적용되며, 각 보안 그룹은 특정 포트, 프로토콜, IP 주소 범위에 대한 규칙을 설정하여 허용되는 트래픽을 제한할 수 있습니다. 로드 밸런서용 보안 그룹 인터넷으로부터 오는 HTTP와 HTTPS를 허용..

DevOps/AWS 2023.03.17

[VPC, Subnet] NestJS 애플리케이션 AWS에 배포하기 02

인프라 구성도 이번 시간에 생성하게 될 인프라 구성도입니다. VPC와 퍼블릭 서브넷, 프라이빗 서브넷, 그리고 서브넷에서 사용하게 될 라우팅 테이블과 NACL에 대해서 다룹니다. AWS 콘솔을 이용하면 생성하기 쉽고 또한 많은 블로그들이 있기 때문에 개념적인 내용과 설정에 대해서만 집중하겠습니다. VPC 생성하기 IPv4로 CIDR로 10.0.0.0/16를 입력하고 생성해 줍니다. (10.0.0.0 ~ 10.0.255.255입니다) VPC 설정 옵션 중에 DNS라는 단어가 나와서 헷갈리는 몇 가지 옵션이 있습니다. DNS 호스트 이름 활성화 옵션은 EC2 인스턴스의 호스트 이름을 DNS에 등록하는 옵션이며, DNS 확인 활성화 옵션은 DNS 서버가 호스트 이름의 소유자가 DNS 레코드를 변경할 수 있는 ..

DevOps/AWS 2023.03.16

[개요] NestJS 애플리케이션 AWS에 배포하기 01

사이드 프로젝트를 AWS에 배포하는 과정을 기술합니다. 인프라 구성도 저희 사이드 프로젝트는 5월부터 약 한 달간 운영되는 서비스로 트래픽을 전혀 예상할 수 없고 비용을 최대한 아끼는 쪽으로 인프라를 구성할 계획입니다. 이번 시간에는 간단히 설명을 진행하고 이후 시리즈로 각 단계별로 자세히 다뤄보겠습니다. 배포 배포는 GithubAction과 CodeDeploy를 통해 이루어집니다. release 브랜치에 코드가 merge 혹은 push 되면 Github Action에 의해 빌드되고 S3로 ZIP파일이 업로드됩니다. 이후 EC2에 CodeDeploy Agent가 S3에 접근하여 각각에 EC2에 배포를 진행합니다. EC2에는 Nginx가 리버스 프록시로 사용하고 뒤에 각각의 애플리케이션이 배포됩니다. 무중..

DevOps/AWS 2023.03.16

[Build & Deploy 리소스] NestJS 애플리케이션 AWS에 배포하기 05

인프라 구성도 이번 시간에는 이미지 상에서 빨간 네모 속, 코드를 빌드하고 배포에 필요한 리소스들을 생성 및 설정하겠습니다. IAM 사용자 생성하기 Github Action에서 S3에 접근하기 위해서 IAM 사용자를 생성해야 하니다. IAM 역할은 AWS 리소스나 사용자에 부여할 수 있기 때문에 IAM 사용자를 생성해 주어야 합니다. AmazoneS3FullAccess와 AWSCodeDeployFullAccess 권한을 부여합니다. 사용자 상세 화면에서 액세스 키 만들기를 선택합니다. 액세스 키 모범 사례 및 대안은 아무거나 선택해 줍니다. 액세스 키는 웬만하면 csv 파일로 다운로드하는 걸 추천드립니다. IAM 역할 생성하기 CodeDeploy에서 EC2에 접근하기 위한 역할 AWSCodeDeployR..

DevOps/AWS 2023.03.16