DevOps 8

Cloudwatch에 수집된 로그를 Lambda와 연동하여 Slack 메세지 보내기

애플리케이션 로그를 CloudWatch로 수집하고 로그를 통해서 문제가 생겼음을 감지하기 위해 CloudWatch로 수집된 로그 중 특정 조건(필터)를 통해서 Slack으로 메세지를 보내는 설정을 구성해보고자 한다. Spring Boot에서 CloudWatch 로그를 수집하는 내용은 이전 포스팅에서 다뤘기 때문에 참고하면 된다. 실습 환경 AWS EC2 CloudWatch Lambda (Node 16) Slack Webhook 구조 CloudWatch에 저장된 로그를 Lambda 함수에 특정 필터와 함께 트리거하여, Slack에 메세지를 보내는 구조이다. 수집된 로그 확인 일반적으로 애플리케이션에서 이런 식의 여러 레벨의 로그들이 꾸준히 발생되고 있을 것이다. 애플리케이션이 정상적으로 동작하기 위해 특별..

DevOps 2022.08.26

Spring boot 에서 CloudWatch 로그 수집 (feat. Profile 별로)

기존에 회사에서 애플리케이션 로그를 수집하는 방식은 애플리케이션 서버에 일주일 로그를 저장을 하고 매 주마다 로그를 저장하는 원격 서버로 파일을 저장하는 명령어인 scp를 통해 저장하고 로그 정책에 따라 shell 스크립트를 이용해 저장 기간이 지난 로그를 삭제하는 구성이었다. 로그를 원격지에 소산하는 것에는 큰 문제가 없었지만, 생각보다 스크립트를 작성하고 관리하는 측면에서 꽤나 여러가지 문제가 있었다. 예를 들면, 사전에 충분히 테스트가 되지 않아 스크립트 자체에 문제가 있는 경우 혹은 서버 레벨에서 cron을 통해 주기적으로 스크립트를 실행했는데 cron이 올바르게 동작하지 않는다든가, 꽤 관리적 측면에서 많이 신경을 써줘야 했다. 그래서 간단한 설정으로 Spring Boot 애플리케이션 자체에서 ..

DevOps 2022.08.25

Day 3 - 백엔드 설정 및 리소스 작업 디렉토리 분리

Terraform Backend 사용하는 이유 협업 시에 리소스가 겹치거나 꼬이지 않게 Locking 하는 기능을 제공 로컬에 .tfstate 파일을 저장하여 관리하는 것보다 원격 저장소에 관리하는게 보안/관리적 측면에서 더 효과적임 생성된 리소스 자원(실제 상태)의 정보를 받아와 사용할 수 있음 코드로 보는 예제 기존 방식대로, 리소스를 개별 생성하고 output을 사용하지 않으면 생성된 리소스 자원을 하드 코딩하여 사용해야 함 기존 방식 resource "aws_instance" "example" { ami = data.aws_ami.amazon_linux_2.image_id instance_type = "t2.micro" availability_zone = "ap-northeast-2a" assoc..

DevOps/Terraform 2022.08.23

Day 2 - VPC 프로비저닝

Day 2 - VPC 프로비저닝 모듈을 사용하는 이유 캡슐화 재사용성 일관성 코드로 보는 예제 모듈을 사용하지 않으면, 각각의 개별 리소스들을 하나씩 생성해주고, 의존성을 확인해줘야 함. 모듈을 사용하면 모듈 내 변수에 값만 할당해주면 알아서 리소스들을 생성해줌 사용 예제를 보면 훨씬 간결하고 많은 공수 필요 없이 생성 가능 모듈을 사용하지 않았을 때 resource "aws_vpc" "main" { cidr_block = "192.168.0.0/22" instance_tenancy = "default" tags = { Name = "main" } } resource "aws_subnet" "public-2a" { vpc_id = aws_vpc.main.id cidr_block = "192.168.0.0..

DevOps/Terraform 2022.07.30

AWS Parameter Store로 소스 코드 내 중요 설정 값 보안하기

Spring 코드를 작성하다가 JWT 토큰 혹은 암호화 키 값 등과 같이 코드 내에 중요 설정 값을 하드코딩되어 있는 것을 보고 보안 상 취약할 거 같아 관련 레퍼런스들을 찾아보니, AWS Parameter Store를 통해 키/값을 저장하고 코드 내에서 키를 통해 불러올 수 있는 것을 알아냈다. 하지만, 현재 필자는 Spring boot 2.7.0 버전을 사용하고 있는데 2.4.0 버전 이상부터 application 리소스 설정하는 방식이 바뀌어서 기존에 나와 있는 레퍼런스를 그대로 참고해서는 제대로 동작을 안 했다. 그래서 이번 기회에 최신 버전으로 동작하는 코드를 정리해보려고 한다. 추가로, 이번 기회에 Spring boot 2.4.0 이전 버전에서 파라미터 스토어를 사용하다가 2.4.0 버전 ..

DevOps 2022.07.29

Day 1 - EC2 프로비저닝 (인스턴스 생성)

Day 1 EC2 프로비저닝 (인스턴스 생성) 테라폼 문법 리소스 선언 “” “” "" "" { ami = "ami-123456" instance_type = "t2.micro" } resource "aws_instance" "db" { ami = "ami-123456" instance_type = "t2.micro" } ""은 소스 내에서 참조를 위해 사용하는 변수 Output 프로비저닝 된 리소스의 메타데이터를 가져옴 코드 내용 암시적(Implicit), 명시적(explicit) 종속성 암시적 종속성 (Implicit Dependency) EC2 인스턴스가 생성된 이후에 EIP가 생성되어 연결 됨 resource "aws_instance" "example_a" { ami = data.aws_ami.a..

DevOps/Terraform 2022.07.25

Day 0 - Terraform 환경 구성

이번 회사에서 AWS 및 테라폼 관련 교육을 진행하기 위해서 자료를 만들어보고자 작성하고 있다. 나도 아직 테라폼에 대해서는 잘 모르는 부분이 많기 때문에, 이번 기회를 통해서 학습 및 정리를 하려고 한다. 직접 AWS 콘솔에서 인프라 환경을 프로비저닝하고, 그 이후에 테라폼으로 작성하여 프로비저닝 하는 순서로 진행될 예정이다. 기본적으로, 이번 포스팅의 테라폼 환경 구성은 AWS 계정이 있는 것을 전제로 한다. Terraform 환경 구성 환경 구성에 필요한 건, Terraform과 AWS IAM이다. Terraform 설치 내가 처음에 테라폼을 사용했을 때는 정확하게는 잘 모르겠지만, 직접 Terraform을 설치하여 버전 관리가 조금 어려웠다. 근데 버전 관리를 쉽게 할수 있도록 tfenv를 지원하..

DevOps/Terraform 2022.07.25

AWS Secrets Manager로 애플리케이션에서 RDS 자격증명 정보 보안하기

보통 AWS를 처음 시작하게 되면 EC2와 관련된 컴퓨팅 리소스를 많이 사용하게 되고, 그 다음으로는 RDS인 것 같다. 그리고 개발자들은 소스 코드의 설정 파일에 RDS 접속 정보를 넣어서 연결하게 된다. 이 때, 생길 수 있는 문제는 바로 RDS의 자격증명 정보(마스터 계정 아이디, 비밀번호)가 여과없이 소스 코드에 드러나게 되는 것이다. 이 부분을 해결하기 위해 AWS는 Secrets Manager라는 서비스를 출시했다. AWS Secrets Manager 란? AWS Secrets Manager는 애플리케이션, 서비스, IT 리소스에 액세스할 때 필요한 보안 정보를 보호하는 데 도움이 됩니다. 이 서비스를 사용하면 수명 주기에 걸쳐 데이터베이스 자격 증명, API 키 및 다른 보안 정보를 손쉽게 ..

DevOps 2021.08.06