에이전트리스(Agentless)
별도의 소프트웨어 설치 없이 SSH를 통해 서버에 접속하여 명령을 실행
플레이북(Playbook)
YAML 형식의 설정 파일로, 자동화할 작업을 정의
호스트(Hosts): 작업을 실행할 서버 지정
태스크(Tasks): 실행할 작업 목록
롤(Roles): 관련 태스크와 파일을 그룹화하여 관리
모듈(Modules):다양한 작업(패키지 설치, 파일 복사 등)을 수행하는 기능, 재사용 가능
인벤토리(Inventory)
관리할 서버 목록과 정보를 담고 있는 파일. Ansible이 작업할 서버를 결정
핸들러(Handlers)
특정 태스크가 변경되었을 때만 실행되는 태스크 ex) 설정 파일 수정 후 서비스 재시작
변수(Variables)
구성 정보를 동적으로 관리 ex) IP 주소나 패키지 이름을 변수로 지정
조건문과 반복문
특정 조건에 따라 태스크를 실행하거나 리스트 항목을 반복



- name: Install packages
hosts: all
become: yes
tasks:
- name: Install nginx
apt:
name: nginx
state: present
- name: Start and enable nginx service
hosts: all
become: yes
tasks:
- name: Start nginx
service:
name: nginx
state: started
enabled: yes
- name: Copy configuration file
hosts: all
become: yes
tasks:
- name: Copy nginx configuration
copy:
src: ./nginx.conf
dest: /etc/nginx/nginx.conf
owner: root
group: root
mode: '0644'
- name: Install packages on multiple hosts
hosts: webservers
become: yes
tasks:
- name: Install common packages
apt:
name: "{{ item }}"
state: present
loop:
- git
- vim
- curl
- name: Conditional task execution
hosts: all
tasks:
- name: Install httpd if RedHat based
yum:
name: httpd
state: present
when: ansible_os_family == "RedHat"
- name: Using variables
hosts: all
vars:
http_port: 80
max_clients: 200
tasks:
- name: Configure httpd
template:
src: httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
- name: Handlers example
hosts: all
become: yes
tasks:
- name: Install nginx
apt:
name: nginx
state: present
notify: restart nginx
handlers:
- name: restart nginx
service:
name: nginx
state: restarted
- name: Manage users
hosts: all
become: yes
tasks:
- name: Ensure user is present
user:
name: newuser
state: present
shell: /bin/bash
groups: sudo
- name: Create directories and files
hosts: all
become: yes
tasks:
- name: Create a directory
file:
path: /var/www/myapp
state: directory
mode: '0755'
- name: Create a file
copy:
content: "Welcome to my app!"
dest: /var/www/myapp/index.html
- name: Update all packages
hosts: all
become: yes
tasks:
- name: Update apt packages
apt:
update_cache: yes
upgrade: dist
- name: Manage cron jobs
hosts: all
become: yes
tasks:
- name: Add a cron job
cron:
name: "Backup my files"
minute: "0"
hour: "2"
job: "/usr/bin/rsync -av /home/user/ /backup/user/"
- name: Deploy Docker containers
hosts: all
become: yes
tasks:
- name: Pull nginx image
docker_image:
name: nginx
tag: latest
state: present
- name: Run nginx container
docker_container:
name: my_nginx
image: nginx
state: started
ports:
- "80:80"
- name: Remove packages
hosts: all
become: yes
tasks:
- name: Remove apache2
apt:
name: apache2
state: absent
- name: Template example
hosts: all
become: yes
tasks:
- name: Configure nginx with template
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: restart nginx
- name: Send API requests
hosts: localhost
tasks:
- name: Make a GET request
uri:
url: http://api.example.com/data
method: GET
return_content: yes
register: response
- name: Show response
debug:
var: response.content