[DOCKER] Führen Sie AWS CLI-Befehle in Ansible aus

Was Sie erreichen wollen

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. Vorbereitung der Docker-Umgebung

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. Ansible Umgebungsvorbereitung

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. Erstellen Sie einen Docker-Container

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. Ansible Befehlsausführung

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

Recommended Posts

Führen Sie AWS CLI-Befehle in Ansible aus
Führen Sie die AWS CLI in Docker aus
[CentOS7] Installiere aws cli
Befehle in Java ausführen (Ping)
Einführung von AWS CLI in CentOS 7