Cómo aprovisionar la infraestructura de AWS con Ansible

Infraestructura como código (IaC) es un método de aprovisionamiento y administración de infraestructura y otros recursos mediante archivos o código de definición declarativa. En lugar de configurar manualmente servidores (físicos o virtuales) y dispositivos de red (y otros recursos), puede usar IaC para administrar todo el ciclo de vida de la infraestructura. Ansible es una de las mejores herramientas de IaC y este artículo explica cómo usarla para aprovisionar infraestructura y otros recursos en una nube pública.

Índice

    Modos de operación actuales vs futuros

    En el método actual, realiza manualmente cada tarea para crear y construir su infraestructura. Recopila detalles de clústeres o regiones para implementar sus servidores, subredes de red, almacenamiento y más. Una vez que tenga los detalles, cree el proyecto de nube privada virtual (VPC), grupos de seguridad, políticas de red y más. Luego, crea servidores (máquinas virtuales, instancias, droplets, como los llame) y configúrelos con discos adicionales si es necesario. Antes de terminar, instala y configura aplicaciones y paquetes, crea usuarios y grupos, y hace muchas otras cosas.

    En el futuro modo de operación, el uso de Ansible como herramienta IaC le permite automatizar todas estas operaciones y la gestión de su infraestructura se vuelve más eficiente. En lugar de realizar tareas manualmente, crea los recursos mediante módulos de Ansible.

    ¿Por qué elegir Ansible para la gestión de la nube pública?

    La comunidad de Ansible está creciendo rápidamente y los proveedores de productos están aportando cada vez más contenido de Ansible a la comunidad pública. Esto significa que tiene módulos y complementos listos para usar para administrar plataformas populares de nube pública y nube privada, como AWS, Azure, Google Cloud Platform, IBM, OpenShift, OpenStack, Oracle, VMware y otras.

    Usaré AWS como ejemplo en este artículo. Puedes encontrar documentación sobre todos los módulos de la nube, y los módulos de nube administrados por proveedores están disponibles como Colecciones de contenido de Ansible dentro galaxia ansible.

    Cómo administrar AWS con Ansible

    Hay muchos módulos disponibles en la comunidad para administrar AWS usando Ansible. Puedes acceder a la Colección de la comunidad de AWS Donde Colección Amazon AWS de la galaxia Ansible.

    [ Find out what's new in Red Hat Ansible Automation Platform 2. ]

    Crear instancias de Elastic Compute Cloud (EC2)

    La creación de instancias EC2 en AWS es una tarea única que utiliza el ec2_instance module módulo, pero como práctica recomendada, puede agregar más tareas previas y validaciones si es necesario [editor's note: this article was updated on Nov. 11, 2021, to use the ec2_instance module rather than the deprecated ec2 module]:

    - name: Launching EC2 instances
      community.aws.ec2_instance:
        #aws_access_key: "{{ec2_access_key}}"
        #aws_secret_key: "{{ec2_secret_key}}"
        profile: "{{ aws_boto_profile }}"
        key_name: "{{ aws_demo_key }}"
        security_group: "{{ aws_security_group }}"
        instance_type: "{{ item.value.instance_type }}"
        image_id: "{{ aws_ami_id }}" 
        state: present
        wait: yes
        wait_timeout: 300
        region: "{{ aws_region }}"
        tags:
           Name: "{{ item.value.name }}"
        detailed_monitoring: no
        vpc_subnet_id: "{{ vpc_subnet_list | random }}"
        network:
          assign_public_ip: yes
      loop: "{{ lookup('dict', ec2_new_list, wantlist=True) }}"

    Crear grupos de seguridad

    Los grupos de seguridad de AWS controlan la instancia y el acceso a otros recursos. Puede refinar el acceso a la red por IP de origen, red, puerto, etc. :

    - name: Create Security group
      amazon.aws.ec2_group:
        profile: "{{ aws_boto_profile }}"
        name: "{{ aws_security_group }}"
        description: 'Security Group with SSH and HTTP rules'
        vpc_id: "{{ aws_vpc_id }}"
        region: "{{ aws_region }}"
        rules:
          - proto: tcp
            ports:
            - 80
            cidr_ip: 0.0.0.0/0
            rule_desc: allow all on port 80
          - proto: tcp
            ports:
            - 22
            cidr_ip: 0.0.0.0/0
            rule_desc: allow all on port 22 

    Crear balanceadores de carga elásticos

    el elb_application_lb le ayuda a crear un Elastic Load Balancer (ELB) con un solo módulo:

    # create elb
    - name: Create Amazon ELB
      amazon.aws.ec2_elb_lb:
        profile: "{{ aws_boto_profile }}"
        name: "{{ aws_elb_app_lb }}"
        region: "{{ aws_region }}"
        zones:
          - "{{ ap_zone1 }}"
          - "{{ ap_zone2 }}"
        listeners:
          - protocol: http
            load_balancer_port: 80
            instance_port: 80
            proxy_protocol: True
        state: present
      register: elbcreated

    Instalar y configurar una aplicación

    Una vez que su infraestructura esté lista y operativa, debe implementar la aplicación y configurarla. Ansible es muy bueno en eso:

    - name: Deploy Webserver to EC2 instances
      hosts: "{{ inventory_webgroup }}"
      remote_user: ec2-user
      become: true
      tasks:
        - name: Deploy Web service
          include_role: 
            name: deploy-web-server

    Un ejemplo: construir una infraestructura de servidor web y una aplicación

    (Gineesh Madapparambath, CC BY-SA 4.0)

    En esta demostración, implementa una infraestructura de pila completa que incluye:

    • Grupos de seguridad
    • Grupos objetivo de ELB
    • Equilibrador de carga de aplicaciones
    • Par de claves dedicado
    • 2 instancias EC2
    • Servidor web configurado con contenido de sitio web predeterminado

    Todo el código de infraestructura está disponible en mi GitHub repositorio para referencia.

    Iniciar sesión en AWS con credenciales

    Configure las credenciales de AWS que utilizará Ansible y automatice la gestión de la infraestructura. Este es un proceso estándar y puede consultar "Cómo instalar y configurar la interfaz de línea de comandos (CLI) de AWS"para configurarlos.

    Si tiene varias credenciales configuradas, use el perfil correcto en su libro de jugadas como profile: "{{ aws_boto_profile }}" o aws_boto_profile es la variable que configuró como el nombre del perfil.

    Ejecute el libro de jugadas de Ansible

    Ingrese lo siguiente para decirle a Ansible que cree todos los recursos y muestre la URL del ELB para acceder al sitio web:

    $ ansible-playbooks aws-infra-provisioning.yaml

    Destruir infraestructura

    Un IaC administra todo el ciclo de vida de la infraestructura, por lo que puede crear un libro de jugadas separado para destruir la infraestructura. Cuando termine la prueba, llame aws-infra-destroy.yaml libro de jugadas para destruir toda la infraestructura que creaste:

    $ ansible-playbooks aws-infra-destroy.yaml

    Concluir

    Con Ansible, puede administrar AWS o cualquier plataforma y recurso de nube pública o privada. Asegúrese de seguir todas las mejores prácticas y validaciones para administrar el suministro y la destrucción.

    Artículos de interés

    Subir