[DOCKER] Exécutez les commandes AWS CLI dans Ansible

Ce que vous voulez réaliser

Effectuez le traitement suivant dans Ansible. En outre, Ansible s'exécute sur un conteneur Docker. ① Utilisez l'AWS CLI pour séparer l'EC2 cible de l'ELB ② Une fois la déconnexion terminée, exécutez la mise à jour de yum ③ Redémarrez l'instance ④ Enregistrez-vous à nouveau auprès d'ELB

1. Préparation de l'environnement Docker

1-1. Création d'un répertoire Docker et d'un Dockerfile Créez un répertoire et un Dockerfile.

$ sudo mkdir docker-demo
$ cd docker-demo
$ sudo vim Dockerfile

1-2. Modification du Dockerfile Comme Ansible nécessite Python, nous utiliserons le slim-buster léger dans l'image officielle Docker Python. WORKDIR spécifie le répertoire dans lequel les fichiers Ansible qui seront créés ultérieurement seront placés. Installez ansible et ssh. (Si vous souhaitez vous connecter ssh au nœud cible avec un mot de passe, vous devez également installer sshpass)

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. Préparation de l'environnement Ansible

2-1. Création de fichiers Créez un fichier à utiliser avec Ansible.

$ cd /usr/src/app
$ sudo touch inventory main.yml ansible.cfg

2-2. Modification du fichier d'inventaire Spécifiez l'adresse IP du nœud cible. De plus, puisque la connexion est établie par SSH, entrez le nom d'utilisateur et le chemin de la clé privée.

inventory


[targets]
10.0.1.100

[targets:vars]
ansible_connection=ssh
ansible_user=ec2-user
ansible_ssh_private_key_file=/usr/src/app/.ssh/Fichier de clé privée

2-3. Modification de main.yml Cette fois, tous les processus sont décrits dans main.yml. (J'ai écrit la commande aws cli dans le shell et spécifié arn dans main.yml, mais je pense qu'il y a une meilleure façon de l'écrire ...) yum, reboot et wait_for_connection utilisent le module Ansible. Utilisez wait_for_connection pour continuer le traitement même après le redémarrage.

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. Modification de ansible.cfg Spécifiez les options de configuration. Définissez host_key_checking = False pour désactiver le processus d'enregistrement des empreintes digitales dans known_inventory.

ansible.cfg


[defaults]
host_key_checking=False

3. Créer un conteneur Docker

3-1. Exécuter la version de docker Exécutez la commande dans le répertoire contenant le Dockerfile. Vous pouvez voir qu'il a été créé avec des images docker.

$ docker build -t ansible-demo .
$ docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
ansible-demo           latest              abc123456789        21 seconds ago      603MB

4. Exécution de la commande Ansible

4-1. Démarrage du conteneur Accédez au répertoire spécifié par WORKDIR et démarrez le conteneur avec docker run. L'explication des options est la suivante. -it: Assigne un pseudo terminal sur le conteneur et garde l'entrée standard ouverte -v: monter le répertoire hôte sur le conteneur -rm: supprimer automatiquement le conteneur en quittant

$ cd /usr/src/app
$ docker run -it --rm -v $(pwd):/usr/src/app ansible-demo /bin/bash

4-2. Exécution de la commande Ansible Exécutez la commande comme suit. Vous pouvez voir à partir de la console AWS que l'état du groupe cible s'épuise. Finalement, il a été de nouveau enregistré dans ELB, et il a été confirmé qu'il était sain.

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

Exécutez les commandes AWS CLI dans Ansible
Exécutez l'AWS CLI sur Docker
[CentOS7] Installez aws cli
Exécuter des commandes en Java (ping)
Présentation de l'AWS CLI à CentOS 7