[AWS]테라폼(Terraform) 설치 및 캐시 설정(feat. packer, ansible)

2022년 02월 22일 by Xion

    [AWS]테라폼(Terraform) 설치 및 캐시 설정(feat. packer, ansible) 목차

| 테라폼 설치하기

https://learn.hashicorp.com/tutorials/terraform/install-cli?in=terraform/aws-get-started 

해당 repo 를 만들어 테라폼을 실행해보자.

1.brew tap 명령어 복사 후 실행

2.brew install 실행

 

테라폼 자동완성 설치

zshrc file이 없으면 생성
테라폼 자동완성 설치

 

zshrc 파일 확인

cat ~/ .zshrc

zshrc 파일 마지막에 2가지 명령어가 추가되어 있는 것을 확인할 수 있다.

 

그럼 zsh 재시작을 위해 zsh 입력 후 terraform을 입력 후 tab을 눌러보면 밑에 명령어들이 자동으로 확인되는 것을 볼 수 있다.

 

 

테라폼 캐시(cache) 설정

https://www.terraform.io/cli/config/config-file

 

테라폼 설정 중

위와 같은 설정 옵션이 존재하는데 해당 옵션을 설정해주기 위하여 파일 안에 해당 내용을 입력해주자.

해당 명령어를 입력하자.

 

:wq! 를 입력하여 저장한다.

 

그 후 이제 plugin-cache folder를 생성하자.

 

테라폼 cache dir 생성

 

여기까지 설정한다면, 테라폼을 사용하여 여러 워크스페이스를 관리하게 될 텐데 각 워크스페이스에서 필요하는 모듈이나 프로바이더를 다운로드를 하게 된다.

 

기본적으로 이 설정을 하지 않으면 해당 워크스페이스상에. terraform 디렉터리 안에다가 해당 캐시들을 설치하게 되는데

워크스페이스의 수가 증가할수록 해당 플러그인 캐시들의 용량이 기하급수적으로 증가하게 되는데 어느 순간 laptop에 저장소가 부족하게 된다.

 

따라서 이 플러그인 옵션 설정으로 테라폼의 캐시 저장 공간을 중앙집중식으로 효율적으로 관리할 수 있다.

 

동일한 캐시들은 한 번만 설치하도록 해주자!

 

 

+ 패커(Pakcer) 설치

패커는 이미지 빌드를 도와주는 도구인데, 앞서 설명한 글에서 보았듯이 이미지 빌드는 EC2 또는 머신들이 디스크 이미지를 읽어 들이는 형태를 의미합니다.

그중 대표적인 이미지 빌더로 Packer를 사용합니다.

그 이유는 여러 플랫폼을 지원하기 때문이죠 (EC2, VMware, Docker 등)

 

설치해봅시다.

https://www.packer.io/downloads

 

자동완성 기능 설치

packer -autocomplete-install

zshrc를 사용하기 때문에 해당 파일을 열어서 확인해줍니다.

 

다음과 같이 정상적으로 설치되어 있는 것을 확인할 수 있습니다. (autoload ~~~, complete blabla~~)

 

 

그 후 zsh 명령어를 입력하여 다시 zsh를 실행해줍니다.

tab key를 눌러보면 auto complete 기능이 정상적으로 실행됩니다.

 

 

 

+ 추가로 앤서블을 설치해주겠습니다.

 

앤서블이란?

여러 개의 서버를 효율적으로 관리할 수 있게 해주는 환경 구성 자동화 도구입니다.(레드헷이 인수 했습니다.)

필요할 때 마다 자동으로 실행 시킬 수 있는 것이 가장 큰 특징이죠.

 

기존 리눅스에서 동일한 환경을 구성하기 위해 Bash 쉘 스크립트에 패키지의 설치, 설정 파일 수정등을 나열하여 이를 실행하는 것이 일반적이었습니다.

 

이런 게 한계점으로 부각되자, 이를 위해 고안된 Infrastrucutre as a code 입니다.

 

환경의 배포와 구성을 규격화된 코드로 정의해 사용하는 것을 의미합니다.

Infrastructure as a code가 가능한 자동화 도구를 이용하여 인프라의 상태를 코드로 작성하고 이를 모든 서버에 배포함으로써 특정 환경을 동일하게 유지할 수 있도록 돕게 되었습니다.

 

이런 자동화도구 중 대표적인 툴이 바로 앤서블(ansible)이죠.

 

 

 

앤서블의 3가지 요소

 

크게 3가지인 인벤토리, 플레이북, 모듈로 이루어져있습니다.

 

인벤토리는 어디서 수행할지?

 

플레이북은 무엇을 수행할지?

 

모듈은 어떻게 수행할지? 를 정의합니다.

 

 

인벤토리(inventory)

인벤토리는 앤서블에 의해 제어될 대상을 정의합니다. 일반적으로 hosts.ini 파일에 정의해 사용 하며, 여러 서버들의 SSH접근 iP, 포트, 리눅스 사용자 와 같은 접속 정보를 아래와 같이 정의합니다. 

 

 

 

플레이북(Playbook)

플레이북은 인벤토리 파일에서 정의한 대상들이 무엇을 수행할 것인지 정의하는 역할을하며, yaml 포맷으로 설정합니다.

앤서블을 사용하려면 이 playbook을 잘 다룰줄알아야하며, 단독으로 사용되는 것이 아닌 인벤터리와 플레이북의 조합으로 같이 사용합니다.

플레이북 yaml 파일의 예시는 아래와 같습니다.

 

 

모듈(Module)

모듈은 플레이북에서 task가 어떻게 수행될지를 정의하는 요소입니다. 

 

타겟 호스트로 실제 작업을 처리하는 단위로 이 Module이라는 개념을 사용합니다. 

앤서블은 Python Code를 호출하여 실행하기 때문에 Python이 필수적으로 필요하며, 실제로 앤서블을 설치해보면 다양한 모듈이 같이 설치되는 것을 볼 수가 있습니다. 

 

yum sysctl systemd copy git docker_container ... 등. 예를 들어 yum 명령어를 통해 패키지를 설치할때 yum 모듈을 사용하면 되며 위 플레이북 예시에서 yum 부분이 yum 모듈을 정의하고 이를 사용하겠다는 의미 입니다.

 

 

앤서블의 멱등성

앤서블은 멱등성(Idempotency)이란 특징을 가집니다. 이게 무슨말이냐면 여러 번 적용해도 결과가 동일하며, 수정된 부분이 있다면 그 부분만 새롭게 반영 된다는 것입니다.

 

 

 

Ansible 앤서블 설치