Icono del sitio ICPINFO

Demo de Ansible en GCP

En la siguiente demo usaremos un playbook de Ansible para crear automáticamente 4 instancias en GCE, instalar el servidor web Apache, desplegar un sitio web estático y crear un balanceador de carga para distribuir el tráfico entrante entre las 4 VMs.

Pre condiciones.

Primero que todo necesitamos tener una cuenta con Google Cloud Platform. Esto se hace en pocos minutos usando una cuenta de Gmail o Gsuite: https://cloud.google.com/gcp/

Para poder completar este tutorial necesitamos tener instalada la SDK de GCP en nuestros equipos locales. La misma se puede obtener desde: https://cloud.google.com/sdk/. En caso contrario se puede hacer uso de cloud Shell directo en la consola de GCP.

Comprobamos que la SDK funciona correctamente usando el comando:

gcloud -v

Actualizamos los componentes de la SDK si ya la teníamos instalada pero desactualizada:

gcloud components update

Una vez que tengamos la SDK instalada correctamente podemos comenzar el tutorial.

Primero, necesitamos tener un proyecto donde crear todos los recursos necesarios. Debemos crear una configuración y autenticarnos desde nuestra línea de comandos a nuestra cuenta en GCP. Para ello usaremos el comando:

gcloud init

Ahí seleccionamos crear o re-inicializar una configuración.

Usamos la cuenta de GCP deseada.

Creamos un nuevo proyecto introduciendo el id (por ej: ansible-20180815).

Verificamos que el proyecto seleccionado es el correcto mediante el comando:

gcloud config list project

Ahora debemos habilitar el billing del proyecto recién creado para poder hacer uso de Google Compute Engine (GCE). Esto lo podemos hacer ingresando a la consola de GCP: https://console.cloud.google.com Seleccionando el proyecto en cuestión y luego el menú Compute Engine.

O mediante los commandos:

gcloud alpha billing accounts list

Es possible que no estén instalados los componentes “ALPHA” en la SDK, en este caso sigue los pasos sugeridos e intente el comando nuevamente.

Una vez obteniedo el ID del billing account con el comando anterior habilitamos la facturación mediante el comando:

gcloud alpha billing projects link ansible-20180815 --billing-account XXXXXX-XXXXXX-XXXXXX

Para poder realizar cualquier acción automática en GCP se debe asignar al agente automatizador los permisos necesarios para ejecutar la misma, esto se consigue mediante el uso de un service account, es recomendable crear uno nuevo y no usar el default de GCE. Usaremos los siguientes comandos:

Para crearla:

gcloud iam service-accounts create demo-ansible --display-name "Ansible Demo"

Para asignar los roles necesarios:

gcloud projects add-iam-policy-binding ansible-20180815 --member serviceAccount:demo-ansible@ansible-20180815.iam.gserviceaccount.com --role roles/iam.serviceAccountUser

y

gcloud projects add-iam-policy-binding ansible-20180815 --member serviceAccount:demo-ansible@ansible-20180815.iam.gserviceaccount.com --role roles/compute.instanceAdmin.v1

Para crear la key asociada al service account:

gcloud iam service-accounts keys create --iam-account demo-ansible@ansible-20180815.iam.gserviceaccount.com key.json

Una vez creada la key, podemos encontrar llave privada localmente en la ruta de donde ejecutamos el comando, en mi caso:

C:\Users\proyecto\key.json

Y la llave pública en:

https://www.googleapis.com/service_accounts/v1/jwk/demo-ansible@ansible-20180815.iam.gserviceaccount.com

Ejecución.

Aunque Ansible soporta algunas versiones de Windows es más sencillo ejecutarlo en Linux o MAC.

Para este caso usaremos una VM estándar de GCE con Debian como host. Para crearla podemos usar el siguiente comando:

gcloud compute instances create all-default-vm --zone=us-central1-f --machine-type=f1-micro

Una vez que termine el provisionamiento de la VM accedemos a la misma por SSH y preparamos el ambiente.

Instalamos las dependencias:

sudo apt-get install -y build-essential git python-dev python-pip python-paramiko

Instalamos Ansible:

git clone https://github.com/ansible/ansible.git --recursive
source ./ansible/hacking/env-setup

Instalamos los paquetes de Python necesarios:

sudo pip install apache-libcloud==0.20.1
sudo pip install Jinja2
sudo pip install pyyaml

Y exportamos las siguientes variables de entorno:

export ANSIBLE_HOSTS=ansible_hosts
export ANSIBLE_HOST_KEY_CHECKING=False

Ahora tenemos que subir al disco de la VM el fichero key.json generado en los pre-requisitos.

Generamos las ssh key para gcloud en la VM que se usará como host, para ello debemos asignar a la instancia el service account que creamos mediante el comando:

gcloud auth activate-service-account demo-ansible@ansible-20180815.iam.gserviceaccount.com --key-file /home/rene_martinez_b86/key.json

Y nos conectamos a la misma VM por ssh para generar las keys:

gcloud compute ssh all-default-vm

De esta forma ya tenemos una VM en GCE preparada para ejecutar cualquier playbook de Ansible usando las librerias de GCP.

Solo queda descargar el ejemplo de playbook que hace lo que se mencionó al inicio del tutorial y ejecutarlo.

git clone https://github.com/renemartinezb86/ansible-demo.git

Para que funcione en sus ambientes deben actualizar los siguientes ficheros:

gce_vars/auth

y

group_vars/all

Con los valores correspondientes y ubicados en la carpeta del proyecto descargado de GitLab ejecutamos el comando:

ansible-playbook site.yml

Las máquinas virtuales deberían quedar así:

Y el balanceador:

Cualquier sugerencia o interrogante no dude en comentar.

Gracias.

Salir de la versión móvil