JJONG`sFACTORY
반응형
 

서론

 

개발을 시작 할 때 쯤에는 DevOps라는 개념이 없었다.

요즘에는 협업, 어플리케이션의 안정성, 커뮤니케이션 코스트 감소, 빠른 개발 등 다양한 이유로 DevOps형태의 문화가 넓게 정착되었다.

그러면서 엔지니어들은 의외로 알아야 할 범주들이 또 넓어졌는데.. (업무 효율성이 올라가긴 하지만 공부해야 할 범위가 넓어진 것도 맞다)

개발과 커뮤니케이션 툴 이외에 추가적으로 알아야 할 개념들은

CI/CD , IaC , Monitoring , Test

등이 될 것 같다.

 

이중 IaC에 해당하는 Ansible과 CI/CD 쪽에 해당하는 Jenkins를 이용하여 EC2 자동배포 툴을 만들어 보려고 한다.

Ansible쪽을 살펴보면서 여러 서버를 손쉽게 구축할 수 있도록 도와주기도 하고, 배포, 유지관리에도 크게 도움을 줄 수 있다는 걸 느꼈다.

 

EC2 생성 및 관리, config설정 등 다양한 작업을 진행 할 수 있으나, 일단 현재 테스트용 EC2가 하나 있는 상태이고 접속/Jenkins를 이용한 배포까지 먼저 진행해 보려 한다.

 

 

Ansible 설치

 

Ubuntu 22 버전 환경에서 진행 되었다.

다른 Linux OS 위에서는 설치 방법이 따로 어렵진 않으나, 

Windows 환경에 있는 분들은 Cygwin 을 이용하여 설치하는 방법이 가장 좋아 보인다.

 

Window를 쓰시는 분들은 아래를 참조.

https://techdirectarchive.com/2020/03/01/ansible-installation-on-windows/

 

How to install Ansible on Windows with Cygwin

Ansible is an open-source software provisioning, configuration management, and application-deployment tool enabling infrastructure as code. It runs on many Unix-like systems and can configure both Unix-like systems as well as Microsoft Windows. Installing

techdirectarchive.com

 

Ansible 을 설치하는 곳은, 제어노드의 역할로서 관리해야할 서버 대상들에게 SSH를 통해 직접 접근이 가능한 환경이어야 한다.

https://wikidocs.net/130113

 

2-개념

앤서블을 이용하는데 알아두어야 할 기본 개념에 대해서 알아보겠습니다. ![ansible](https://wikidocs.net/images/page/130113/%E1%84%…

wikidocs.net

해당 서버에서는 인벤토리 / 플레이북 두가지 하위 개념을 추가적으로 만들어줘야 하는데

인벤토리는 내가 관리할 서버들 목록을 의미하고 (호스트 파일)

플레이북은 실행할 작업들을 명시해 두는 파일이다.

 

일단 설치를 먼저 진행해 보자.

다음은 Ubuntu 환경에서 apt를 이용해 Ansible을 설치하는 방법이다.

bash
sudo apt-add-repository ppa:ansible/ansible sudo apt update sudo apt install ansible

 

설치가 완료되면 /etc/ansible 경로가 생성 되어 있고, ansible 명령어도 실행이 되는 것을 확인 할 수 있다.

bash
ansible --version

위 명령어를 실행하여 정상적으로 설치 되었는지 확인해본다.

 

 

Inventory 설정

다음은 관리할 서버들을 지정하기 위해 /etc/ansible/hosts 파일을 설정해 보자.

bash
[{groupname}] {servername} ansible_host={server_host} ansible_user={login_user} ansible_ssh_private_key_file={keyfile_path}

위와 같이 작성하였는데, {변수} 는 적당한 값을 넣어 치환해서 사용하면 된다.

groupname은 동일한 작업을 수행할 서버들을 묶어주는 역할을 한다.

즉, [group_name] 하위에는 여러 서버를 적어두고 관리할 수 있다.

이번에는 대상 서버들이 EC2를 이용하여 구축 되어있기 때문에, 기존 AWS에서 생성된 ssh key file을 이용하여 접속 할 예정이기 때문에 ansible_ssh_private_key_file을 이용하여 key file의 path값도 명시해 주었다.

 

따로 ssh키를 발급하여서 사용할 거라면

https://wikidocs.net/130203

 

3-사전 작업 - ssh 연결 확인

# SSH 연결 확인 앤서블은 ssh로 제어 노드와 매니지드 노드가 연결됩니다. 앤서블을 이용하여 작업을 진행하기 전에 `authorized_keys`에 키를 추가하여 주는 것…

wikidocs.net

위 링크를 참조하면 될 것 같다.

 

ansible_host, ansible_user, ansible_ssh_private_key_file 이외에도 port를 따로 지정해준다던가, docker 명령어를 전달해 줘야 한다던가 하는 다양한 상황이 올텐데

https://acozine.github.io/html/plugins/connection.html

 

Connection Plugins — Ansible Documentation

<!-- Banner ads <a class="DocSiteBanner-imgWrapper" href="https://www.ansible.com/docs-top?utm_source=docs"> <a class="DocSiteBanner-imgWrapper" href="https://www.ansible.com/docs-top?utm_source=docs"> --> Connection plugins allow Ansible to connect to the

acozine.github.io

위 링크에 다양하게 명시되어 있으니 필요 할 때 마다 찾아서 사용하면 된다.

 

일단 현재는 하나의 EC2에 대하여만 관리를 할 것이기 때문에 아래와 같이 작성했다.

bash
[arkinfo_ec2_instance] master ansible_host={ec2_domain} ansible_user=ubuntu ansible_ssh_private_key_file={keyFilePath}

 

 

 

Ping Test

 

내 hosts 파일이 정상적으로 명시해둔 서버에 접속이 가능한지 Ping Test를 이용하여 확인해 보자.

bash
ansible arkinfo_ec2_instance -m ping

위 명령어를 입력했더니,

아래와 같은 응답이 왔다.

bash
master | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" }

정상적으로 작동 하는 것을 확인했다.

 

hosts 파일에 직접 inventory를 설정할 수 도 있지만, 따로 ini 파일로 구성할 수 도 있다.

해당 예제는 아래 링크를 참조.

https://wikidocs.net/131537

 

4-실행

앤서블 잘 설치되고, 실행 가능한지 `ping` 모듈을 실행하여 동작을 확인합니다. 옵션|설명 -|- -m|모듈 선택 -i|인벤토리 선택 -u|유저명 # ping 모듈 실…

wikidocs.net

위에서 사용하는 -m 에서 지정하는 모듈들 항목은 다음을 참조

https://acozine.github.io/html/modules/list_of_all_modules.html?highlight=module 

 

All modules — Ansible Documentation

For previous versions, see the

acozine.github.io

 

반응형