Führen Sie die folgende Verarbeitung in Ansible durch. Außerdem wird Ansible auf einem Docker-Container ausgeführt. ① Verwenden Sie die AWS-CLI, um die Ziel-EC2 von der ELB zu trennen ② Führen Sie nach Abschluss der Trennung ein yum-Update durch ③ Starten Sie die Instanz neu ④ Registrieren Sie sich erneut bei ELB
1-1. Erstellen eines Docker-Verzeichnisses und einer Docker-Datei Erstellen Sie ein Verzeichnis und eine Docker-Datei.
$ sudo mkdir docker-demo
$ cd docker-demo
$ sudo vim Dockerfile
1-2. Bearbeiten der Docker-Datei Da Ansible Python benötigt, werden wir den leichten Slim-Buster im offiziellen Docker Python-Image verwenden. WORKDIR gibt das Verzeichnis an, in dem die später erstellten Ansible-Dateien abgelegt werden. Installiere ansible und ssh. (Wenn Sie ssh mit einem Kennwort eine Verbindung zum Zielknoten herstellen möchten, müssen Sie auch sshpass installieren.)
Dockerfile
FROM python:3.9.0-slim-buster
WORKDIR /usr/src/app
RUN pip install ansible
RUN apt-get update && apt-get install -y \
vim \
ssh
2-1. Dateierstellung Erstellen Sie eine Datei zur Verwendung mit Ansible.
$ cd /usr/src/app
$ sudo touch inventory main.yml ansible.cfg
2-2. Bearbeiten der Inventardatei Geben Sie die IP-Adresse des Zielknotens an. Da die Verbindung über SSH hergestellt wird, geben Sie außerdem den Benutzernamen und den Pfad des privaten Schlüssels ein.
inventory
[targets]
10.0.1.100
[targets:vars]
ansible_connection=ssh
ansible_user=ec2-user
ansible_ssh_private_key_file=/usr/src/app/.ssh/Private Schlüsseldatei
2-3. Bearbeiten von main.yml Dieses Mal sind alle Prozesse in main.yml beschrieben. (Ich habe den Befehl aws cli in der Shell geschrieben und arn in main.yml angegeben, aber ich denke, es gibt einen besseren Weg, ihn zu schreiben ...) yum, reboot und wait_for_connection verwenden das Ansible-Modul. Ermöglicht wait_for_connection, die Verarbeitung auch nach dem Neustart fortzusetzen.
main.yml
- hosts: targets
become: yes
gather_facts: no
tasks:
##################################################
# deregister instances from elb
##################################################
- name: deregistering instances from elb
become: yes
shell: >
aws elbv2 deregister-targets
--target-group-arn arn:aws:elasticloadbalancing:ap-northeast-1:0123456789:targetgroup/target-group-name/abc123456789
--targets Id=i-0123456789,Port=80
--region ap-northeast-1
async: 600
poll: 300
##################################################
# yum update
##################################################
- name: upgrade all packages
yum:
name: "*"
state: latest
async: 180
poll: 60
##################################################
# reboot
##################################################
- reboot:
##################################################
# wait for connection
##################################################
- wait_for_connection:
##################################################
# register instances with elb
##################################################
- name: registering instances with elb
become: yes
shell: >
aws elbv2 register-targets
--target-group-arn arn:aws:elasticloadbalancing:ap-northeast-1:0123456789:targetgroup/target-group-name/abc123456789
--targets Id=i-0123456789,Port=80
--region ap-northeast-1
async: 180
poll: 60
2-4 Bearbeiten von ansible.cfg Geben Sie die Konfigurationsoptionen an. Setzen Sie host_key_checking = False, um die Aufzeichnung von Fingerabdrücken im bekannten_Inventar zu deaktivieren.
ansible.cfg
[defaults]
host_key_checking=False
3-1. Führen Sie den Docker-Build aus Führen Sie den Befehl in dem Verzeichnis aus, das die Docker-Datei enthält. Sie können sehen, dass es mit Docker-Bildern erstellt wurde.
$ docker build -t ansible-demo .
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ansible-demo latest abc123456789 21 seconds ago 603MB
4-1. Start des Containers Wechseln Sie in das von WORKDIR angegebene Verzeichnis und starten Sie den Container mit Docker-Lauf. Die Erläuterung der Optionen lautet wie folgt. -it: Weisen Sie dem Container ein Pseudo-Terminal zu und lassen Sie die Standardeingabe offen -v: Host-Verzeichnis auf Container einbinden -rm: Container beim Beenden automatisch löschen
$ cd /usr/src/app
$ docker run -it --rm -v $(pwd):/usr/src/app ansible-demo /bin/bash
4-2. Ansible Befehlsausführung Führen Sie den Befehl wie folgt aus. An der AWS-Konsole können Sie erkennen, dass der Status der Zielgruppe abläuft. Schließlich wurde es erneut in ELB registriert und es wurde bestätigt, dass es gesund war.
root@abc012345:/usr/src/app# ansible-playbook -i ./inventory ./main.yml
PLAY [targets] ************************************************************************************
TASK [deregistering instances from elb] ***********************************************************
changed: [10.0.1.100]
TASK [upgrade all packages] ***********************************************************************
ok: [10.0.1.100]
TASK [reboot] *************************************************************************************
changed: [10.0.1.100]
TASK [wait_for_connection] ************************************************************************
ok: [10.0.1.100]
TASK [registering instances with elb]**************************************************************
changed: [10.0.1.100]
PLAY RECAP ****************************************************************************************
10.0.1.100 : ok=5 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0