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