[AWS Devops Discovery] 02. AWS와 Devops를 위한 Tool

leny·2021년 7월 10일
0

AWS Devops Discovery

목록 보기
2/3
post-thumbnail

Infra As A code(IAC)란?

IT 서비스를 위한 시스템을 구성할 때, 수동으로 구성하는 대신 shell 기반의 script를 사용하여 컴퓨팅 인프라를 구성하는 기술을 말한다.

보통 프로그래밍형 인프라라고도 하는 infrastructure as a code는 인프라 구성을 프로그램 처리하는 방식을 말한다. 결과적으로 앱을 작성하는 작업과 앱의 실행되는 환경을 구현하는 작업사이의 경계가 모호해지기 시작했는데, 앱은 자체적으로 VM을 생성하고 오케스트레이션하는 script를 통해서 it 서비스를 위한 인프라를 쉽고 편리하게 구축할 수 있으며, 추후 인프라의 확장과 관리를 보다 효율적으로 수행할 수 있다.

CI/CD 의 progress
code > version > code review > integerate > deploy

IaC 도구

IaC 도구에 대한 내용 중 명확히 이해해야 하는 것은 구성조정 도구와 구성관리 도구의 차이이다.

- 구성조정 도구(Configuration Orchestration Tool)
: Terraform , AWS Cloudformation

- 구성관리 도구(Configuration Management Tool)
: Chef, Puppet

구성조정 도구는 어느정도 수준의 구성관리를 수행할 수 있으며, 구성관리 도구는 어느 정도의 구성 조정 작업을 수행할 수 있다. (서로 완충작용을 해줄 수 있음을 뜻함)

Template 기반의 구성 조정도구 : Cloudformation

Cloudformation은 AWS 리소스를 모델링하고 설정하여 리소스 관리 시간을 줄이고, AWS에서 실행되는 애플리케이션에 더 많은 시간을 사용하도록 해주는 대표적인 IaC 기반의 구성 조정 도구이다.

필요한 모든 AWS 리소스를 설명하는 템플릿을 생성하면 AWS Cloudformation이 해당 리소스의 프로비저닝과 구성을 담당한다. AWS 리소스를 개별적으로 생성하고 구성할 필요가 없으며, 어떤 것이 무엇에 의존하는지 파악할 필요도 없다. AWS Cloudformation에서 모든 것을 처리한다.

AWS Cloudformation 에서는 클라우드 환경 내의 모든 인프라 리소르를 설명하고, 프로비저닝할 수 있도록 공통언어(json, yaml)를 통해 코드 기반 인프라를 구성하고 프로비저닝을 할 수 있다. Cloudformation 을 사용하면, 간단한 텍스트 파일을 사용하여 자동화되고, 안전한 방식으로 모든 리전과 계정에 걸쳐, 애플리케이션에 필요한 모든 리소스를 모델링 및 프로비저닝할 수 있다.
이 파일은 클라우드 환경에서 신뢰할 수 있는 단일 소스로 사용된다.

- 주요 특징
사용자 인프라용 템플릿 생성
JSON, YAML 로 텍스트 모델링 작성
인프라 변경 사항에 대해 미리보기 기능 제공
코드처럼 버전 관리/코드 검토/ 템플릿 업데이트 기능 제공
종속성 요구에 기반하여 AWS 리소스 제공
개발,CI/CD 및 관리 도구와 통합
추가적인 비용없이 사용할 수 있으며, 리소스 사용 비용만 지불하면 됨

참고로, Cloudformation 의 사용은 무료(프리티어)이지만, AWS 리소스에 대한 비용은 발생됨

- 특징
1. 인프라 관리 간소화
2. 신속하게 인프라 복제 가능
3. 인프라 변경 사항을 쉽게 제어하거나 추적할 수 있음

AWS Cloudformation 의 작동방식

  1. yaml / json 포맷으로 cloudformation 템플릿을 작성하거나, 샘플 템플릿을 사용하여 인프라를 코드로 작성

Cloudformation 템플릿 by AWS 공홈

  1. 로컬의 템플릿 코드를 체크아웃하거나, S3 버킷에 템플릿 업로드
  2. AWS 콘솔, 명령줄 도구 (CLI) 또는 API를 통해서, AWS Cloudformation을 사용해 켐플릿 코드를 기반으로 스택 생성
  3. 템플릿에 지정된 스택(stack)을 통해 AWS 리소스에 대한 프로비저닝 및 구성 작업

AWS Cloudformation 의 구성 요소

1. template
Json/Yaml 형식의 파일
: parameter 정의, resource 생성, 실제 구성 액션

2. cloudformation
프레임워크
: stack 생성 및 업데이트, 에러감지 및 롤백

3. stack
구성된 AWS 서비스
: 포괄적인 AWS 서비스 지원, service event aware, customisable

AWS Cloudformation 의 세부 구성

AWS의 리소스를 인프라로 표현하는 cloudformation 템플릿은 JSON 또는 YAML 형식으로 작성할 수 있으나, AWS Cloudformation Designer를 사용하여, GUI 기반으로 손쉽게 템플릿을 작성할 수도 있다.

AWS Cloudformation Designersms 템플릿 생성, 보기 및 수정을 위한 그래픽 도구로 끌어놓기 위해 인터페이스를 사용해 템플릿의 리소스 다이어그램을 생성한 다음, json 및 yaml 편집기를 사용하여 인프라의 세부 정보를 손쉽게 편집할 수 있다.

AWS Cloudformation Designer를 사용하면, cloudformation 의 신규 사용자나 숙련된 사용자 모두 템플릿의 리소스 간 연관성을 빠르게 파악하고 템플릿을 쉽게 수정할 수 있다.

AWS Cloudformation template 구성사항

AWS Cloudformation Template은 AWS 인프라를 설명하는 JSON 또는 YAML 형식의 텍스트 파일이다. 템플릿은 "포맷 버전, description, metadata, parameters, mapping, conditions, transform, resources, outputs" 과 같은 섹션들로 구분되며, 주요 세션별 역할은 다음과 같다.

이중 필요한 섹션은 resource 이며, 그 외 나머지 세션은 옵션 사항이다.

Parameters 섹션은 stack 생성 시, Resources와 paramters 섹션에서 참조할 수 있는 값들을 지정하는 섹션으로 parameters 를 전달하기 위해 사용자가 직접 파이팅하거나, 선택 옵션들을 통해 선택할 수 있도록 설정하는데 필요한 섹션이다. (생성 리소스 수량, 크기 설정 등)

Lab1 : AWS Cloudformation을 활용한 VPC 생성하기 (cloudformation을 통해 스택 생성하기)

(My think : vpc 구성요소에 대해 생각을 하고 그 요소들을 코드에 넣는다.
vpc 구성 시 설정/구성되어야 하는 기본 요소가 뭐가 있을까?
당연히, cidr block 인 기본 ip 주소가 필요하지, 그다음 인터넷 게이트웽, 이 vpc를 서브넷으로 쪼개는데 public subnet 과 private subnet으로 쪼갠다.

그 다음 라우팅 테이블도 설정되어야 하겠지?
라우팅테이블은 그럼 public 과 private 으로 나눠서 설정해야겠지?

private route table, public route table 모두 필요할 것이다.
az 설정은 당연히 들어가야겠지.

아래 코드에서는 resources와 outputs 섹션만 기술되어 있고 나머지 값들은 모두 빠져있다.
즉, 각각의 섹션들이 필요조건일수도 있고 충분조건일 수도 있다는 뜻이고, 아래코드는 createVPC1.yaml이고, createVPC2.yaml은 createVPC1에서 privatesubnet 하나, publicsubnet 하나씩을 추가하고 당연하게, subnetroutetableassociation syntax를 추가해줬다.

또한 빠르고 직관적인 이해를 위해, diagram도 만들어서 추가하였디.

public subnet 1과 2는 igw 을 통해서 internet으로 networking(통신)이 가능하며,
다이어그램에는 그리지 않았지만, 당연히 라우터에는 라우팅테이블이 있고, 각각의 서브넷에 대한 라우팅주소가 나와있다.

Cloudformation 에 들어가서, createVPC01.yaml 파일을 배포함으로서, 컴퓨팅 리소스들을 띄우고 또 자동으로 관리할 수 있다.

소스코드를 배포하여 띄운 object 그 자체를 여기서는 stack이라고 칭하고, cloudformation 과 같은 IaC 툴에서는 stack 단위로 컴퓨팅 리소스를 orchestrating 한다고 보면 된다.

참고로, cloudformation 외에도 많은 IaC툴이 있는데,
아래에서 terraform과 ansible을 많이 사용하는 것 같고, top10 iac tool은 아래와 같다.

Additionally, you can refer teh "The difference between Ansible & Terraform " !

그리고, 당연한 얘기이지만, GUI 기반으로, stack 삭제가 가능한데, Cloudformation Designer 항목에 들어와서 삭제하면, 삭제가 가능하다. 당연히 cloudFormation에 들어가서도 확인할 수 있다.

스택 목록에서 createVPC2가 삭제되어, 없어졌다. (한 5분정도 소요됨)

Lab2 : Cloudformation으로 웹 애플리케이션 배포하기

웹 어플리케이션 배포하기

실행 중인 스택의 업데이트를 하는 과정에 대해 실습을 해보겠다.
운영 환경에서 실행 중인 s/w에 대해 버전 컨트롤을 수행하는 것과 같이 cloudformation 템플릿을 사용해서 AWS 인프라 구성에 대한 버전 컨트롤을 통한 관리 방법에 대해 다음과 같이 수행한다.
이번 실습은 AWS Cloudformation 설명서의 '연습스택 업데이트'를 기반으로 한다.

webApplication.json 코드는 아래와 같다.

스택에 넣고 배포 완료한 후, 해당 php 웹 사이트에 접속 시, 아래와 같이 확인이 가능하다.

EC2 인스턴스 유형 업데이트하기

수행하려는 작업
1. cloudformation을 통해 생성된 ec2 인스턴스에 접속하기 위한 key pair를 부여한다.

2. ssh 접속을 위해 security 그룹을 변경하는 리소스를 추가하여 기존 스택을 업데이트한다.

ssh 접속을 위해 보안그룹을 변경하는 리소스를 추가한 후속버전인 webApplication 를 배포하여 스택을 업데이트 한 뒤의 모습이다.

추가된 코드 줄은 총 3줄로, 아래에 빨간 색연필 emoji를 추가하여 표시해놓았다 !

websiteURL을 방문했을 시에, 아래와 같이 웹 페이지가 업데이트(수정)이 완료되었다.

그리고, ec2(인스턴스)를 확인했을 시에, t2.nano가 삭제되고, t2.micro가 생성됨으로서 교체(업데이트)되었음을 확인할 수 있다.

putty

Chef 기반의 구성 관리도구 : Opsworks

AWS OpsWorks는 엔터프라이즈 기업 및 많은 클라우드 인프라를 사용하는 환경에서 애플리케이션 및 인프라를 구성하고 운영하도록 지원하는 대표적인 IaC 서비스이다.

IaC 서비스 중 대표적인 도구인, Chef, Puppet과 같은 구성관리도구를 클라우드 기반의 Managed 환경에서 사용할 수 있도록 서비스를 제공한다

Opsworks에는 3가지 서비스가 존재하는데,

특히, lab을 통해 해볼 것은 chef automate이다.

Chef Automate 는 인프라 운영을 위해 필요한 작업을 자동화하는데 도움이 되는 자동화 플랫폼으로, amazon elastic compute cloud 인스턴스(ec2) 와 리눅스 또는 윈도우 를 실행하는 온프레미스 서버를 모두 실행할 수 있다.

그래서 Opswork Chef Automate 뭐하는 애인데?

인프라의 구성관리를 위해서 chef를 통해서, 템플릿 코드 (template code) 또는 cookbook를 작성하여 ec2-instance 혹은 on premise 인프라에 대한 구성을 작성할 수 있다.

cookbook에는 구성을 원하느 항목에 대한 상태정보와 상태변경을 위해 필요한 절차, 시스템 설정, 파일 배포 방법 등의 정보가 레시피에 포함된다.

cookbook을 사용하여 호스트 및 앱 구성, 패키지 설치, 인스턴스 종료 등과 같은 운영 작업을 자동화 할 수도 있으며, 커스텀 쿡북을 만들거나, chef 커뮤니티에 공개되어 있는 3,000개 이상의 쿡북을 활용/쉐어할 수도 있다. 또한 파트너사의 협업을 통해 다양한 시스템과의 통합 및 연동 구성 또한 가능하다.

참고로, Opswork 서비스의 경우, 프리티어(freetier) 가 없고, 사용하는대로 모두 과금되므로, 실습으로 생성하였다면, 모두 완료한 후에 삭제 처리해야한다.

Lab 1 : Opswork for Chef Automate Server 활용하기

참고할 만한 글) Creating a Chef Automate server

Chef Automate 다운로드 링크

(참고) Chef Automate와 다른 서비스들 (ex. Chef infra 등)과 헷갈리지 말자.

순서 1. AWS OpsWork Chef automate Server 설치

EC2 타입을 지정해주고, next를 누른다.

그 후, 다시 ec2 카테고리로 돌아와서, 키페어를 생성해준다. ((중요)싱가폴 리전에 생성)

다시 아까 chef automate server 화면에 돌아와서, 위와 같이 입력해주고(생성했던 key pair로 선택하여) 생성해준다.

5분 정도 기다리면 위와 같이 정상적으로 생성이 완료되었다는 화면을 확인할 수 있으며,

이제, credential과 starter kit를 다운 받을 차례이다.
말 그대로 credential은 chef automate server에 접속할 때 사용할 private 한 Id/pw이고, starter kit는 readme file를 포함하여, knife.rb등의 configuration 파일, private key 파일, pivotal 파일, 그리고 유저등을 포함한다.

특히나, credential의 경우에는 id/pw를 chef url에 접속할 때 사용하기 때문에, 꼭꼭 저장해두어야 하고, 초기 현재 화면에서밖에 다운로드할 수 없으므로, 유의해서 다음 페이지로 넘겨야 한다.
물론 startkit는 다시 download 할 수도 있긴 하다.

자세한 내용은 Configure the Chef Server Using the Starter Kit을 참고하면 된다.

Open Chef Automate Dashboard를 클릭해서 해당 Chef Automate Server url로 접속한다.

혹시나, Open Chef Automate Dashboard 클릭 시에, chrome으로 액세스가 어렵다면, safari나 다른 브라우저환경에서 열어보는 것을 권장한다.
나는 chrome 에서 액세스가 되지 않아서, safari 에서 액세스하였다.

Chef Server Url에 접속하여(Open Chef Automate Dashboard 클릭), 이전에 다운로드 받았던 credential(id/pw) 이용해서 접속한다.

아래와 같이 정상적으로 접속이 된 모습을 확인할 수 있다.

순서 2. Chef automate Workstation 설치

우선, ubuntu 서버를 생성한다.
옵션은 아래와 같이 진행했다.
ubuntu server 18.04 lts/ t2.micro / security group inbound port ssh 22 / only my ip select / ket pair creation : chef-keypair01

아래와 같이 키 매칭을 해서 automate server를 생성한다.
옵션은 아래와 같이 진행했다.

chef automate server name : AWSOpsWorksChefAutomate01
Chef Automate server region : singapore (south korea is not available yet)
ec2 instance type : m5.large
EC2 key pair : chef-keypair01.pem
.
.
.
나머지는 default selection

지금 이거 putty에서 해야되서 오늘 devops 부분은 quit 못할거 같음..

순서 3. Github로부터 Cookbook 다운로드 및 배포

순서 4. Chef Automate Node 추가 작업

순서 5. Node에 Template 코드 추가 및 소스 배포

순서 6. Chef Automate Node 제거

순서 7. Resource Termination - 모든 Chef Automate Server, Node, Workstation 삭제하기

Serverless 컴퓨팅 서비스 : Lambda

CI/Cd를 위한 최적의 모니터링 도구 : Cloudwatch

profile
행복과 성장에 대해 고민하는 사람🤓 , 포스팅 주기가 잦지 않을 수 있습니다만, 항상 좋은 내용을 담고자 합니다🙇🏼

0개의 댓글