서론
개발을 시작 할 때 쯤에는 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를 통해 직접 접근이 가능한 환경이어야 한다.
2-개념
앤서블을 이용하는데 알아두어야 할 기본 개념에 대해서 알아보겠습니다. 
플레이북은 실행할 작업들을 명시해 두는 파일이다.
일단 설치를 먼저 진행해 보자.
다음은 Ubuntu 환경에서 apt를 이용해 Ansible을 설치하는 방법이다.
sudo apt-add-repository ppa:ansible/ansible
sudo apt update
sudo apt install ansible
설치가 완료되면 /etc/ansible 경로가 생성 되어 있고, ansible 명령어도 실행이 되는 것을 확인 할 수 있다.
ansible --version
위 명령어를 실행하여 정상적으로 설치 되었는지 확인해본다.
Inventory 설정
다음은 관리할 서버들을 지정하기 위해 /etc/ansible/hosts 파일을 설정해 보자.
[{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키를 발급하여서 사용할 거라면
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에 대하여만 관리를 할 것이기 때문에 아래와 같이 작성했다.
[arkinfo_ec2_instance]
master ansible_host={ec2_domain} ansible_user=ubuntu ansible_ssh_private_key_file={keyFilePath}
Ping Test
내 hosts 파일이 정상적으로 명시해둔 서버에 접속이 가능한지 Ping Test를 이용하여 확인해 보자.
ansible arkinfo_ec2_instance -m ping
위 명령어를 입력했더니,
아래와 같은 응답이 왔다.
master | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
정상적으로 작동 하는 것을 확인했다.
hosts 파일에 직접 inventory를 설정할 수 도 있지만, 따로 ini 파일로 구성할 수 도 있다.
해당 예제는 아래 링크를 참조.
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
'DevOps' 카테고리의 다른 글
TypeScript에 jest를 적용해보자 (0) | 2023.05.08 |
---|---|
[Ansible] Ansible + git Action + EC2 자동배포 + IAM 보안 설정 (0) | 2023.04.27 |
[gitAction] Ansible + gitAction을 이용한 EC2 자동배포 (0) | 2023.04.26 |
[Ansible] Ansible role을 이용한 github 배포 (0) | 2023.04.26 |
[Ansible] Ansible roles (0) | 2023.04.25 |