Dev/DevOps, Infra 32

[AWS, Post-mortem] EC2 리소스 과다 사용으로 인한 인스턴스 상태 확인 실패 문제와 SQS dead-letter queues

AI 분석이 필요한 메세지가 AWS standard SQS에 들어오면 AI analyzer가 해당 메세지를 가져가서 분석을 시작하는 형태의 서비스가 있습니다. 이런 서비스에서 AI 분석 도중 EC2가 멈추고 Status check에서도 instance reachability check failed가 뜨는 경우가 발생할 때 어떤 식으로 대응을 해 나갈 것인지 고민하는 과정을 가졌습니다. 그리고 그 과정에서 알게된 SQS dead-letter queues에 대해서 정리하였습니다. AI analyzer가 도커 형태로 띄워져 있는 EC2 서버의 유형은 아래와 같다. 인스턴스 GPU vCPU 메모리 (GiB) GPU 메모리(GiB) 스토리지(GB) 네트워크 성능(Gbps) g4dn.4xlarge 1 16 64 1..

Dev/DevOps, Infra 2021.09.12

[Github, CI/CD] 특정 파일이나 폴더에 대해서만 Github Actions가 trigger되는 방법

Dockerfile이 변경되었을 때만 build를 다시해서 ECR에 push 하는 작업이 필요했다. Github Actions에서 이렇게 변경 사항이 있는 아티팩트에 대해서만 액션이 트리거되어 CI/CD를 해주는 방법은 paths selector를 사용하는 것이다. name: Deploy Analyzer image to Amazon ECR on: push: paths: # HERE! - "Dockerfile" # HERE! branches: [main, release] jobs: deploy: name: Deploy runs-on: ubuntu-latest 이 방법은 monorepo에서 github actions로 CI/CD를 구성하고자 할 때도 유용하게 사용할 수 있다. https://medium.co..

Dev/DevOps, Infra 2021.08.09

[HTTP, AWS] 3xx 대 Status와 Lambda@Edge

3xx - Redirection 서버가 클라이언트의 요청을 완료하기 위해 유저 에이전트(웹 브라우저)의 추가 조치가 필요할 때 3xx 대 status code와 함께 client 에게 다시 보내는 것이다. 리다이렉션의 이해 웹 브라우저는 3xx 대 status code 가 있는 응답 결과에 Location 헤더가 있으면 Location 위치로 자동 이동하는데, 이를 리다이렉트라고 한다. 리다이렉트의 흐름을 보면, 3xx status code 300: Multiple Choices 사용하지 않는다. 영구 리다이렉션: 특정 리소스의 URI가 영구적으로 이동하여 이 리다이렉션은 영원히 지속된다. 그리고 검색 엔진도 이런 리다이렉션을 인지한다. 301: Moved Permanently 리다이렉트시 요청 메서드가..

Dev/DevOps, Infra 2021.06.24

[DevOps] CI/CD 파이프라인 구축하기

1. CICD 파이프라인을 어떻게 구축하고 있을까? 몇 기업들의 빌드/배포 자동화 파이프라인 구축에 대해서 알아보았고, 그 중 가장 자세하고, 도움이 되었던 글은 하루에 1000번 배포하는 조직 되기 | 뱅크샐러드 이다. 파이프라인 재구축 전 상황과 pain point, 그래서 어떻게 변경했는지, 현재 어떤 식으로 운영되고 있는지가 자세히 설명되어져 있었기 때문이다. 예전에는 아래와 같은 AWS의 서비스를 사용하여 CodeBuild: 소스 코드를 컴파일하는 단계에서부터 테스트 후 배포까지의 단계를 지원하는 CI 서비스. Github과의 연결을 통해 빌드를 시작할 수 있으며 Codepipeline과 연결하여 커밋이 발생할 때마다 자동으로 빌드를 수행할 수 있음. 코드에 대한 빌드와 테스트 또한 사전 구성된..

Dev/DevOps, Infra 2021.05.16

[(IaC)Terraform] Terraform Variables 활용하기

Terraform은 HCL 문법을 가진 언어로, 변수를 정의하고 주입해서 사용할 수 있다. 지원하는 type들은 www.terraform.io/docs/language/values/variables.html에서 확인 할 수 있다. 1. Variables를 사용하는 이유 일반적으로 코드작업을 할 때 변수를 사용하는 것처럼 매번 변수 대신 해당하는 값을 직접 적어주면 너무 불편하다. 게다가 여러 서비스가 연결되어 작동하는 인프라인 경우 변수가 매우 편리하다. 2. 변수 정의하기 해당 인프라 코드, 즉 .tf 파일 어디서나 변수를 정의할 수는 있지만 보통 variables.tf 파일을 따로 만들어 그 파일에 정의하는게 편하다. variable ["변수명"] { type = [타입] default = [defa..

Dev/DevOps, Infra 2021.05.10

[(IaC)Terraform] Terraform Backend 활용하기

[AWS][Network][(IaC)Terraform] AWS Network의 구성 요소와 생성처럼 terraform apply를 하는 경우, 리소스가 생성된 후 terraform.tfstate 파일이 생성된다. 이 파일의 내용(terraform metadata; terraform knows what infrastructure it controls)이 terraform state이다. 즉, 내가 실행한 apply의 결과를 저장해놓은 상태이다. (여기서 상태란 terraform apply를 했을 시점의 상태이지, 현재 인프라의 상태를 반영해주는 것은 아니다. ) 이 state는 backend에도 저장 될 수 있다. backend가 뭐지?? 그리고 이는 어떻게 활용되고 왜 사용될까? 어떻게 쓰는걸까? 1. ..

Dev/DevOps, Infra 2021.05.09

[AWS][Network][(IaC)Terraform] AWS Network의 구성 요소와 생성

0. Infrastructure as Code 코드로써의 인프라란 인프라를 이루는 서버, 미들웨어 그리고 서비스 등의 인프라 구성요소들을 코드를 통해 구축하는 것이다. 이렇게 코드로 구축하게되면 재사용성, 유지보수 등의 장점을 가진다. 1. AWS VPC AWS VPC(Amazon Virtual Private Cloud)를 사용하면 AWS Cloud에서 논리적으로 격리된 공간을 프로비저닝하여 고객이 정의하는 가상 네트워크에서 AWS 리소스를 시작할 수 있다. 클라우드 위에서 생성한 리소스(EC2, RDS....등)들은 네트워크를 통해 접근하는데, 클라우드 서비스인 AWS는 다양한 고객들이 사용하는 공용공간이다. 즉, 너무 많은 리소스들이 있다. 그리고 이 리소스들에도 하나의 계정에서 생성하는 리소스들만의..

Dev/DevOps, Infra 2021.05.02

[Docker] Docker Compose

Docker Compose란 다중 컨테이너 도커 애플리케이션을 정의하고 실행하기 위한 도구 Docker Compose를 사용해서 이러한 구조의 애플리케이션을 정의하고 실행해보고자 한다. 1. Redis 1) Redis(REmote Dictionary Server)는 메모리 기반의 키-값 구조 데이터 관리 시스템이며, 모든 데이터를 메모리에 저장하고 빠르게 조회할 수 있는 비관계형 데이터베이스(NoSql)이다. 2) Redis를 쓰는 이유는 - 데이터를 메모리에 저장해주는 특성상 Mysql과 같은 데이터베이스에 저장하는 것 보다 데이터를 불러 올 때 훨씬 빠르게 처리 할 수가 있다. - 메모리에 저장하지만 영속적으로 보관이 가능하며 서버를 재부팅해도 데이터를 유지 할 수 있다는 장점이 있다. 2. Node..

Dev/DevOps, Infra 2021.01.28

[Docker] 도커 환경에서 실행되는 Nodejs 애플리케이션

// index.js const express = require('express') const PORT = 8080; const HOST = '0.0.0.0'; const app = express() app.get('/', (req, res =>{ res.send('Hello World') } app.listen(PORT, HOST); console.log(`Running on http://${HOST}:${PORT}`) 이런 간단한 nodejs 애플리케이션이 도커환경에서 실행될 수 있도록 해보자. 즉, nodejs 앱을 만든 후, 그를 실행하기 위한 도커 이미지 생성 후 컨테이너에서 앱이 실행되도록 해볼 것이다. 1. 먼저 Node.js 앱을 만든다. // index.js const express = ..

Dev/DevOps, Infra 2021.01.28