-
AWS cloudformation , codedeploy 를 활용한 프로비저닝 관리AWS 2016. 8. 3. 16:03
West Florida 대학교에서 작성한 Automated AWS Provisioning and Deployment Using CloudFormation and CodeDeploy 튜토리얼을 정리한 내용입니다.
먼저 기본적으로 사용하는 서비스는 아래와 같습니다.
- 인증 및 권한 관리 : IAM- main service : CloudFormation- Code Deploy : S3- Linux AMI 를 통해 Linux 인스턴스를 배포하고 인스턴스마다 AWS CLI 가 설치되어 있어야함1. Basic Mechanism1) 맨 위 레이어는 우리가 가진 build server- deploy.sh 은 bash script 이며 아래와 같은 커맨드들을 포함하고 있음. 모든 application 을 압축해서 S3 로 전송. CloudFormation 에게 EC2 인스턴스를 프로비저닝 할 것을 전달. CodeDeploy 에게 어떠한 인스턴스에 어떤 어플리케이션이 있는지 전달2) CloudFormation Template file (cfTemplate.json). 인스턴스와 네트워크 환경과 같은 CloudFormation 서비스에 대해 정의함. User Data 영역의 Bash script 를 가지고 있고 인스턴스가 기동 시 CodeDeploy Agent 를 설치하고 기동함3) A directory (/myApp). application 설치를 위해 필요한 모든 내용을 담고 있음(예제에서는 python 기반의 HTTP 서버를 띄워서 간단한 web site 를 구성할 것임). web site 는 single index.html 테스트 페이지가 있는데 CodeDeploy 를 사용하기 위해서서버를 기동하고 CodeDeploay Agent 구성 요소로 사용하는 appspec.yml 을 startApp.sh script 에 추가해야 한다.두번째 레이어는 AWS 서비스를 보여줌1) Cloudformation 은 자동으로 프로비저닝 하고 EC2 가상 하드웨어(Insatnaces, LB, Virtual Networks)를 구성하기 위한 AWS 의 서비스2) CodeDeploy 는 서비스와 agent 로 구성된 deployment serviceBuild server 는 application이 deployment 가능한 상태가 되었을 때 CodeDeploy 서비스에 전달인스턴스의 CodeDeploy Agent 는 주기적으로 배포할 job 이 있는지 CodeDeploy 서비스를 쿼리함3) S3 스토리지 서비스는 CodeDeploy Agent 가 설치를 위해 필요한 패키지와 application 압축 파일을 가지고 있음2. Authentication and Authorization Issues만약 cloudformation 과 codedeploy 가 H/W 와 application 을 배포할 수 있다면, 잠재적인 공격자는 악성 코드를 배포하는데 이용할 수 있다. 이러한 공격을 방지하기 위해서 자격 증명은 각 배포 프로세스 단계마다 확인해야 한다. AWS 는 IAM (Identity and Access Management) 서비스와 STS(simple token service)를 통해 필요한 자격증명을 생성/관리할 수 있다.authentication / authorization 진행 과정1) 인스턴스는 S3 에 접근하여 CodeDeploy Agent 패키지를 가져오고 사용자의 응용 프로그램 zip 파일을 읽는다. 이 때 cloudformation 은 새로운 인스턴스에 IAM 인스턴스 프로파일을 첨부한다.그 프로파일은 S3 에 접근할 수 있는 IAM EC2 role 을 포함하고 있고 EC2 서비스의 역할을 가정할 수 있는 신뢰 관계를 갖는다. 인스턴스에 기동되어 있는 어떠한 프로세스든 STS 를 부르기 위해 EC2 role 을 사용하고 S3 를 호출하기 위한 임시 토큰을 발급받는다.2) CodeDeploy 서비스는 어떤 spec 의 인스턴스에 어떤 application 이 배포되어야 하는지 사용자의 EC2 인스턴스를 스캔하고 태그를 확인한다. 이러한 접근을 위해 IAM service role 을 만들고 인스턴스 목록을 만들고 태그를 읽는것을 허용한다. service role의 신뢰 관계는 CodeDeploy 서비스가 역할을 가정 할 수 있다.3) cloudformation,Codedeploy,S3 의 자격증명을 통해 deploy.sh 스크립트가 수행된다. 이 자격증명 역시 서비스에 의해 상속된다. 예를들어 IAM 인스턴스 프로파일을 새로운 인스턴스에 전달하기 위해서는 IAM user 를 정책에 맞게 생성하고 IAM user 의 자격증명 (secret access key and access key id) 을 스크립트 기동 시 제공한다.두가지 보안 원칙1) 자격증명은 최소 인원이 만들고 접근해야한다.IAM role 과 IAM user 는 Administrator 로 구성하고 운영중에는 변경하지 않도록 한다. (자격증명은 주기적으로 변경해야한다.)생성된 자격증명은 스크립트에 하드코딩하면 안되고 코드 저장소에 대한 읽기 권한을 갖는 사람만 접근할 수 있어야 한다.2) 자격증명에는 최소한의 권한만 부여되어야 한다. 필요하지 않는 작업에 대해서는 허용되지 않아야 한다.3. SETTING UP AUTHENTICATION AND AUTHORIZATION1) IAM EC2 Role / IAM 인스턴스 프로파일 설정- S3 접근을 통해 인스턴스를 프로비저닝 하는 방법 / CodeDeploy 에이전트와 응용 프로그램 zip 파일을 포함하는 버킷에 대한 읽기 권한 부여2) IAM Service Role 설정- IAM service role 을 codedeploy 서비스에서 사용자의 EC2 목록을 가져오고 tag 를 읽을 수 있도록 허용하고 업데이트가 필요한 인스턴스를 확인할 수 있어야 함3) IAM User 설정- IAM user 는 build server 에서 deploy.sh 을 수행하는데 사용된다.4) 식별할 태그 선택- 앞에서도 얘기했지만 CodeDeploy 는 설치된 application 확인을 위하 인스턴스를 스캔하고 tag 는 key/value 로 구성되어 있다.5) Key Pair 생성- 필수 옵션 아니지만 인스턴스 로그인 할 때 필요하다.4. SETTING UP ON YOUR BUILD SERVER1) AWS CLI 를 통한 Build Server 프로비저닝- EC2 Linux 인스턴스 프로비저닝2) SETTING UP YOUR Application- 앞에서 얘기한대로 index.html 테스트 페이지만 있는 웹사이트를 만들 예정이고 서버와 CodeDeploy 에이전트에 대한 지침과 함께 appspec.yml 파일을 시작하는 startApp.sh 스크립트를 추가해야 CodeDeploy를 사용할 수 있음==>> startApp.sh#!/bin/bash# Start python HTTP server to show test page on port 8000# Run in background discarding outputcd /var/myApp/appData/nohup python -m SimpleHTTPServer &>/dev/null &==>> appspec.yml# appspec.yml file to install myApp using CodeDeployversion: 0.0os: linux# Copy all files to /var/myAppfiles:- source: /destination: /var/myApphooks:## After files have been copied, run the startApp.sh scriptApplicationStart:- location: scripts/startApp.shtimeout: 3004) SETTING UP CloudFormationCloudFormation 서비스는 템플릿에 정의된 가상 H/W 의 stack 을 배포한다.인스턴스 SPEC, Security Group 및 rule, AZ, DNS, Public IP, H/W 생성 후 수행되어야 하는 커맨드, 스크립트 에 대해서 템플릿을 정의함5. THE SCRIPTS AND HOW TO USE THEM1) deploy.sh script- Build 서버에서 deploy.sh 수행하면 기존에 수행되다 남아있는 작업을 제거하는 스크립트가 수행되고 (이건 deploy.sh 에 정의하기 나름) 앞에서 정의한 cloudformation 템플릿을 통해 EC2 인스턴스를 생성하고 startApp.sh 이 기동되면서 HTTP server 가 기동됨위 게시글은 아래 튜토리얼 스터디를 통해 작성되었습니다.
(http://uwf.edu/nwilde/codeDeployTutorial/CodeDeployTutorial.pdf)
반응형'AWS' 카테고리의 다른 글
[aws summit seoul 2023] Amazon EKS, 중요한 건 꺾이지 않는 안정성 (1) 2024.03.18 [aws summit seoul 2023] 12가지 디자인 패턴으로 알아보는 클라우드 네이티브 마이크로서비스 아키텍처 (0) 2024.03.15 [aws summit seoul 2023] 삼성전자/쿠팡의 대규모 트래픽 처리를 위한 클라우드 네이티브 데이터베이스 활용 (0) 2024.03.04 Auto Scaling 사용 관련하여 알아두어야 할 것 2 (0) 2016.08.03 AWS auto scaling 을 사용하기 위해 알아두면 좋을 내용들 (0) 2016.07.17