En este artículo, analizaremos el proceso de automatización de los servicios de AWS mediante AWX, una máquina virtual proporcionada por Ansible Tower. Ansible Tower es un motor de automatización de TI simple que automatiza el aprovisionamiento, la configuración, la implementación y la orquestación de la nube. AWX proporciona una interfaz de usuario basada en la web, una API REST y un motor de tareas construido sobre Ansible . Es el proyecto upstream de Ansible Tower.
Requisito previo:
- Instale AWX.
- Debe tener una cuenta de nivel gratuito de AWS, un usuario en los servicios de IAM que tenga suficientes permisos para crear una VPC, subred, IGW, RouteTables, instancia EC2 y también tener una ID de clave de acceso y una clave de acceso secreta.
- Además, crear un key-pair (clave) en la región donde queremos lanzar estos servicios. Dado que no estamos utilizando los servicios de Elastic IP, hacer este trabajo no cuesta nada.
Ahora siga los pasos a continuación para automatizar los servicios de AWS usando AWX:
Paso 1: agregue una credencial en el tablero de AWX.
Paso 2: Cree un nuevo directorio de proyectos (p. ej., AWS) dentro de /var/lib/awx/projects/ en el host donde se ejecuta AWX. En este ejemplo, AWX se ejecuta en contenedores Docker, administrados mediante docker-compose. Por lo tanto, cree este directorio en el mismo host donde se ejecuta AWX.
[root@localhost ~]# mkdir /var/lib/awx/projects/AWS
Paso 3: cree un nuevo libro de jugadas dentro del proyecto que habíamos creado anteriormente. (por ejemplo, AWS)
[root@localhost ~]# cat << EOF >> /var/lib/awx/projects/AWS/playbook.yml --- - name: "Run the playbook for AWS resources provisioning." hosts: localhost vars: aws_region: us-east-1 tasks: - name: "Create VPC with cidr block" ec2_vpc_net: name: "awx_vpc" cidr_block: 10.10.0.0/16 region: "{{ aws_region }}" tags: module: ec2_vpc_net this: works tenancy: default register: awx_vpc - name: "Create Internet Gateway and Associate it with above VPC" ec2_vpc_igw: vpc_id: "{{ awx_vpc.vpc.id }}" region: "{{ aws_region }}" state: present register: awx_igw - name: "Create a subnet in the above VPC" ec2_vpc_subnet: state: present vpc_id: "{{ awx_vpc.vpc.id }}" cidr: 10.10.0.0/20 region: "{{ aws_region }}" tags: Name: "EC2 Instance Subnet" register: awx_subnet - name: "Create Route Table for the public Subnet" ec2_vpc_route_table: vpc_id: "{{ awx_vpc.vpc.id }}" region: "{{ aws_region }}" tags: Name: Public subnets: - "{{ awx_subnet.subnet.id }}" routes: - dest: 0.0.0.0/0 gateway_id: "{{ awx_igw.gateway_id }}" register: awx_public_route_table - name: "Create Security Group rules for EC2 Instance" ec2_group: name: awx_sg description: "sg for allowing ssh connections" vpc_id: "{{ awx_vpc.vpc.id }}" region: "{{ aws_region }}" rules: - proto: tcp ports: - 22 cidr_ip: 0.0.0.0/0 rule_desc: allow all connections on port 22 - name: "Provisioning of a RHEL8 EC2 Instance" ec2: region: "{{ aws_region }}" key_name: aws-awk-key-us-east-1 instance_type: t2.micro image: ami-098f16afa9edf40be wait: yes group: awx_sg count: 1 vpc_subnet_id: "{{ awx_subnet.subnet.id }}" assign_public_ip: yes register: awx_instance - name: "Debug task to show the public IP of RHEL8 EC2 Instance" debug: msg: "Public IP of the RHEL8 Instance is {{ awx_instance.instances[0].public_ip }}"
Todos los módulos que se utilizan en el libro de jugadas anterior tienen documentación disponible. Módulos utilizados en el libro de jugadas anterior:
- ec2_vpc_net
- ec2_vpc_igw
- ec2_vpc_subred
- ec2_vpc_route_table
- ec2_vpc_route_table
- ec2_grupo, ec2
Paso 4: Cree un nuevo proyecto «AWS» desde el panel de control de AWX.
Paso 5: Crea una nueva plantilla.
Paso 6: Comience un trabajo usando esta plantilla.
Al ejecutar este trabajo en Depuración (verbosidad), verifique el resultado si falló o tuvo éxito. Si falla, vuelva a ejecutar el trabajo fallido. El último mensaje de depuración que hemos utilizado para mostrar la IP pública asignada a la instancia EC2.
Verificación final, vaya a la consola de AWS y a la región donde lanzó la instancia ec2 y verifique si la instancia se está ejecutando o no.
Paso 7: También podemos usar la ayuda de AWS Dynamic Inventories para ver la IP de los hosts recién creados en la región de AWS que habíamos elegido anteriormente. Primero, tenemos que agregar un inventario en el AWX.
Luego de crear el inventario, ve a la opción FUENTES y Crea una nueva FUENTE. Aquí requerimos nuestra región de AWS y las credenciales que usamos para lanzar las instancias ec2.
Ahora sincronice desde la FUENTE que habíamos creado en el paso anterior.
A medida que se completa el proceso de sincronización, podemos descubrir los nuevos hosts en la sección de hosts del inventario.