시스템과 하드웨어 또는 인터페이스의 구성정보를 파일(스크립트)를 통해 관리 및 프로비저닝
IT Infrastructure, 베어 메탈 서버 등 물리 장비 및 가상 머신과 관련된 구성 리소스 관리
버전 관리를 통한 리소스 관리

그림과 같이 대표적으로 많이 사용되는 IAC 도구로서 Terraform이라던가 Ansible, AWS에 있는 CloudFormation 그리고 Ansible 이전에는 Chef라던가 Puppet 이런 제품들이 많이 사용이 됐었다.
Terraform은 인프라를 구축해 자체적인 내용을 구성하는 데 많이 사용되고, Ansible은 이미 구축되어 있는 서버들의 구성 정보를 변경하거나 관리하는 용도로 사용되는 사용된다.
Ansible은 선원적으로 또는 절차적으로 필요한 모든 작업들을 구성할 수 있으며 AWS하고도 잘 연동이 되어 S3, EC2, 람다 등 100개 이상의 모듈과 연결을 해서 원하는 구성 정보라든가 인프라를 관리하는 용도로도 사용이 된다.

위 그림에서 서버 4대가 있다.
그리고 다양한 형태의 디바이스라던가 도구를 이용해 서버를 관리하게 된다.

근데 여기서 특정 서버에 문제가 발생했다.
그런 문제를 관리자가 알게 됐을 경우에 필요한 서버를 더 증설을 하면 된다.

해당하는 서버를 삭제를 하고 새로운 서버를 추가해서 정상적으로 서비스가 지원될 수 있도록 유지시켜 줘야 한다.

만약에 이 작업에 있어서 Ansible를 도입했을 때 어떻게 변화가 되는지 확인해보자.

Ansible 앞에 오른쪽에 보이는 서버 4대를 관리할 수 있도록 지정을 한다.
이 서버를 관리함에 있어서 서버의 목록이라든가 그리고 어떠한 작업을 할 건지에 대한 절차를 담아놓는 파일, 그런 스크립트 파일을 지정을 해놓는다. (=PlayBooks)

여기서 서버 한 대가 문제가 생겼다고 했을 때 기록되어 있는 이 정보 (=PlayBooks)에 의해서 자동으로 서비스가 변경이 될 수 있는 형태로 만들 수 있다.
이 인프라의 관리에서 관리자가 직접 해야 되는 작업을 Ansible, Terraform과 같은 IaC 도구를 통해 가지고 대신 관리를 해준다.

그리고 이렇게 새롭게 추가된 서버들은 Ansible 에서 지속적으로 상태를 유지할 수 있도록 지원을 해주고 있다.
참고로 Ansible를 사용하게 되면 에이전트가 클라이언트 단에 필요가 없다라는게 특징이다.
Ansible은 여러 개의 서버를 효율적으로 관리할 수 있도록 지원해주는 환경 구성 자동화 도구
- Configuration Management, Deployment & Orchestration tool
- IT infrastructure 자동화
Push 기반 서비스
Simple, Agentless

바로 이전 포스트인 [DevOps] Jenkins를 이용한 CI/CD 자동화 도구 사용에서 이미지를 푸시를 하고 컨테이너를 생성하는 작업들에서 처음에는 잘 실행이 됐는데 두 번째 컨테이너를 실행할 때 문제가 생겼었다.
이유는 도커 컨테이너를 기동을 하며 있어서 같은 이름의 컨테이너 포트가 같다던가 이름이 같아서 두번째 작업부터는 진행이 안됐던 것이다.
이 작업은 기존에 작업되어 있었던 컨테이너를 중지하거나 아니면 여러 번 실행을 한다 하더라도 지속적으로 그 작업이 반응할 수 있도록 설정해놓으면 된다.
그래서 Ansible을 통해 기존에 도커에서 기동되었던 컨테이너를 중지하고 다시 기동을 하거나 이미지를 다시 배포하여 즉 Configuration Management라던가 Deployment를 관리해주는 용도로서 쓰려고 하는 것이다.

설치 작업
리눅스에서 apt, yum과 같은 패키지 관리 프로그램을 통해 필요한 소프트웨어 혹은 서비스 설치가 가능하다.
맥OS 사용한다고 하면 homebrew를 이용할 수 있다.
But, 윈도우즈에서는 자동화 설치 도구가 널리 알려져 있지는 않다.
윈도우즈 같은 경우엔 웹브라우저를 띄어 필요로 하는 소프트웨어를 다운받아 압축 해제, 인스톨러를 실행하여 실행하는 경우가 대부분이기에 윈도우즈에선 설치하는 작업을 자동화하기 쉽지 않다.
파일 및 스크립트 배포
다운로드
실행
파일 또는 스크립트를 복사하는 작업, 다운로드 받아오는 작업 그리고 가장 많이 사용되는 쉘 스크립트를 실행해주는 작업들을 할 수 있다.
즉, Ansible 서버에서 대상 서버가 되는 곳에다가 프로그램을 다운로드 받고 설치 작업을 할 수가 있고 파일을 복사할 수가 있고 시스템을 제어할 수 있다.
반환값 : ok / failed / changed / unreachable
Ansible은 명령어를 실행을 했을 때 결과값이 상당히 직관적으로 전달을 해준다.
실행이 됐다 / 실패했다 / 변경사항이 있다 / 전달하려는 메세지가 대상 서버에 전달되지 않았다
라는 4가지 반환 값만을 전달한다.

호스트 pc에 Ansible을 설치해야 하나 윈도우즈에선 Ansible 서버를 설치하는 것은 힘들다.
따라서 가상화 되어있는 운영체제에다가 설치하는 것을 권장한다.
현재 나는 도커를 사용하고 있기에 도커에서 Ansible 서버를 가동할 수도 있다.
Ansible 서버가 준비가 되어 있다고 가정을 했을 경우에 Ansible을 관리하고 있는 대상 서버를 Ansible-node1, Ansible-node2, Ansible-node3이라고 가정한다.
이렇게 다른 상태로 구성되어 있는 운영체제 일지라 할지라도 Ansible에 준비가 되어 있는 노드가 가지고 있는 파이썬 모듈만 준비가 되어 있다라고 하면 통신하는데 아무 제약이 없다.
이 노드들은 에이전트(agent)를 설치할 필요 없이 파이썬 상태에서 ssh만 사용할 수 있는 상태가 된다고 하면 Ansible 서버가 전달하는 명령어를 바로 실행할 수 있는 상태가 된다.

yum install ansible
ansible --version
윈도우즈에서 리눅스를 VM 상태로 설치한 다음 CentOS 혹은 Ubuntu로 VM 상태로 설치하여 Ansible를 실행을 해 볼 수 있고, 버전을 체크해 볼 수 있다.
Ansible을 설치하게 되면 두 가지 파일을 기억해 줘야 한다.
/etc/ansible/ansible.cfg
/etc/ansible/hosts
Ansible 환경 설정 파일과 Ansible에서 대상 서버 목록을 ip address 또는 hostname으로 기록된 파일이다.
앞에 있는 예시에선 nginx라는 그룹을 하나 만들었고, 그 그룹에는 11번 12번 13번의 ip address 가지고 있는 서버 3대를 만들었다.
이는 구성도 예시 그림에서 node1,node2,node3의 ip주소라고 보면 된다.
nignx라는 그룹이 Ansible-server에서 작업을 해주었다 볼 수 있다.
그룹의 이름과 대상목록은 자유롭게 만들어 사용할 수 있다.