본문 바로가기

반응형

AWS

(55)
[Shell Script] CLB 인스턴스 상태 및 등록, 해제하는 쉘 스크립트 업무 중 특정 고객사에서 CLB에 등록된 웹 서비스에서 배포 작업이 있을 때 팀 내 엔지니어가 서로 연락을 취하면서 1) CLB에 등록된 인스턴스 해제 2) A 웹 서비스 배포 및 서비스 재시작 3) CLB에 등록된 인스턴스 재등록 .. 4) B 웹 서비스 동일 작업.. 와 같은 작업을 하는 것을 보고 아래의 스크립트를 작성한 뒤 배포 개발자에게 최소한의 IAM Policy만을 부여한 IAM User로 쉘 스크립트를 돌리게 하면 어떨까 해서 작성하였다. (어려운 일은 아니지만 서로 연락하면서 시간 소비가 어느 정도 있다 보니...) 내가 주로 담당하는 업무는 아니기 때문에 개인적으로만 짜보았고 실 업무에 적용하지는 않았다. 혹여나 필요한 분이 있으시다면 필요한 부분 추가 및 수정해서 사용하면 될 것으로 ..
[Lambda] AWS에서 발생하는 Event를 Slack으로 알림 받기 Account 내에서 IAM User 생성 및 삭제가 발생할 경우 관리자에게 Slack 메시지를 보내는 방법에 대해서 정리하였다. Slack Message 포매팅 및 전반적으로 수정할 부분이 많지만 처음으로 Slack과의 Message 연동을 한 과정이기 때문에 점차 개선되는 과정을 별도로 정리해볼 예정이다. AWS와 같은 Public Cloud는 모두 API CALL에 의해 동작이 수행되고 감시된다. ⇒ Security Group의 변경, 삭제, 생성은 물론 EC2, RDS, .. 모든 이벤트가 감시된다. 이런 Event가 발생하면 해당 Event 내용을 Lambda로 Trigger하고 Lambda에서 Event를 받아 내용을 Parsing 한 다음에 Slack API를 사용하여 Message를 보낼 ..
[IAM] A 계정의 IAM 유저 리스트를 B 계정의 Lambda에서 조회하기 (Cross account - STS Assume role) 동일 계정내에서 A 리소스 → B 리소스에 접근하기 위해서는 고려할 사항이 적지만 멀티 어카운트에서는 고려해야 할 사항이 늘어나게 된다. A계정에서 B계정을 신임해야 하며, B 계정에서도 A 계정을 신임해야 한다. ⇒ STS: Assume Role에 대해 이해해야 함 A 계정 : 1111111111 B 계정 : 2222222222 이라고 가정하겠음 A 계정 Role 1. A 계정의 IAM User, 각각 IAM User들의 Access Key를 확인하도록 허용해주는 Policy 추가 { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListIAMUserandListAccessKeys", "Action": [ "iam:ListUsers", "iam:Lis..
[CICD / ECS] CodePipeline으로 ECS Fargate 배포 자동화 #6 - CodePipeline 설정 및 Blue/Green 배포 자동화 1. CodeDeploy에서 Target Group 및 기타 수정 아래의 편집 클릭 대상 그룹을 tg-B로 변경 코드 디플로이가 수행되고 Green 타겟 그룹에서 정상 트래픽 헬스 체크를 감지할 경우 Blue에서 Green으로 즉시 트래픽을 라우팅하며, Blue는 5분 동안 컨테이너를 남겨놓는다. 배포에 실패하는 경우 롤백하도록 롤백 설정 2. CodePipeline 생성 파이프라인 이름 설정 서비스 역할의 경우 기존에 생성해둔게 있으면 기존 서비스 역할 사용해도 무방하며, 없을 경우 새 서비스 역할을 생성해준다. 아티팩트를 저장할 위치를 지정해도 되고 기본 위치로 설정해도 된다. 소스 스테이지 추가 CodePipeline을 통해 소스 변경을 감지한다. 빌드 스테이지 추가 기 생성해준 CodeBuild로..
[CICD / ECS] CodePipeline으로 ECS Fargate 배포 자동화 #5 - CodeBuild 생성 및 빌드, Fargate 배포 1. CodeBuild 생성 프로젝트 이름, 소스 등을 설정 어떤 환경에서 빌드를 할 것인지 설정 추가 구성 클릭 후 추가 구성하기 제한 시간, VPC 설정, 서브넷 설정, 보안 그룹 설정 등을 할 수 있으며 환경 변수를 buildspec.yml 에서뿐만 아니라 웹 콘솔에서도 가능하다. AccountID는 웹콘솔에 지정해보았음 Buildspec.yml 파일이 어디 있는지, Artifact는 어느 S3의 버킷에 저장되는지 등을 설정할 수 있다. CodeBuild가 지니고 있는 IAM Role에 권한 추가 - CloudWatch Logs 관련 권한 - SecretManager 관련 권한 - ECR 관련 권한 2. Build 수행 빌드 시작을 누르면 빌드를 수행할 수 있다. 빌드 로그 또한 실시간으로 확인할 ..
[CICD / ECS] CodePipeline으로 ECS Fargate 배포 자동화 #4 - buildspec.yml, appspec.yml, taskdef.json 설정 해당 부분에서는 Secret 설정 및 변수 설정 등을 진행하며, appspec.yml과 buildspec.yml, taskdef.json 파일 생성 등에 대해 다룰 것이다. Git에서 형상 변화가 일어나면 CodePipeline이 이를 감지하고, Build → Deploy 까지 배포 자동화 프로세스를 구현하기 위해 스크립트 파일을 잘 작성해야 한다. 또한 생성한 컨테이너 이미지나 빌드 아티팩트들이 S3 혹은 Container Registry에 저장될 수 있도록 Buildspec.yml에서 잘 설정해주어야 한다. 1. Secrets Manager 생성 간단하게 APP_NAME 및 ECR_REPOSITORY_URI 시크릿을 생성해준다. 그 외, 데이터베이스의 암호 등을 이 시크릿 매니저를 통해 설정해 줄 수..
[CICD / ECS] CodePipeline으로 ECS Fargate 배포 자동화 #3 - 테라폼으로 인프라 기본 환경 프로비저닝 Terraform을 활용하여 간단한 인프라 환경을 프로비저닝 하였다. 기본적인 VPC, Security Groups, ECS Cluster, Application Load Balancer, Blue-Green을 위한 Target Group A, B 등을 생성하였다. Dev, Stg, Prd 등 각 환경마다 설정을 다르게 하고 싶다면 env 디렉터리에 각각 설정값을 저장한 tfvars 파일 생성 후 각 Workspace에서 terraform 명령을 수행하면 된다. 예를 들어, Dev 환경 인프라를 만든 후 STG 환경을 만들고싶다면 VPC 대역, ENV 이름 등을 겹치지 않게 수정 후 별도 Workspace에서 terraform init, .. 등을 수행하면 된다. Code Build, Deploy, Pi..
[CICD / ECS] CodePipeline으로 ECS Fargate 배포 자동화 #2 - 도커 빌드 및 테스트 배포 간단하게 Local에서 docker가 정상 작동하는지 확인해 볼 예정이다. ❯ cat server.js 'use strict'; const express = require('express'); // Variables const PORT = 8080; const HOST = '0.0.0.0'; // Application const app = express(); app.get('/', (req, res) => { res.send("Hello world " + process.env.HELLO + " v1"); }); app.listen(PORT, HOST); console.log(`Running on http://${HOST}:${PORT}`) ❯ cat Dockerfile FROM node:12 WORKDI..

반응형