Implementación automatizada de redes: descripción general

En este instructivo, se explica cómo usar Cloud Deployment Manager y Terraform de HashiCorp para automatizar la creación y la administración de los recursos de Google Cloud.

  • Deployment Manager es un servicio de implementación de infraestructura integrado en Google Cloud.
  • Terraform es una herramienta de código abierto que te permite automatizar las implementaciones para tus experimentos y operaciones.

Este instructivo es la primera parte de una serie de tres, en la que se demuestra la implementación automatizada de patrones de recursos de red comunes.

Cuando cambias a la nube pública, las primeras tareas de infraestructura que abordas son la planificación y la implementación de tus recursos de red. El proceso para conseguir que tu red esté activa y se ejecute es parte de cualquier experimentación inicial o prueba de concepto. En estos instructivos, se presentan algunas configuraciones de red comunes que puedes usar como referencia para tus proyectos.

En este instructivo, se usa un enfoque basado en archivos para la autenticación que funciona con Deployment Manager y Terraform. Puedes reutilizar la configuración resultante, lo que te permite enfocarte en los requisitos críticos del recurso para tus aplicaciones.

La serie tiene la siguiente estructura:

  1. Esta es la descripción general. Sigue este instructivo a fin de configurar un entorno operativo que incluya credenciales de autenticación para tu proyecto de Google Cloud. Los otros instructivos de esta serie dependen de la configuración de autenticación que se resume aquí. Los métodos de autenticación alternativos también existen con la herramienta de línea de comandos de gcloud.
  2. A continuación, en el Instructivo de inicio, se presenta Deployment Manager y Terraform. A modo de comparación, puedes ejecutar la implementación simple que proporciona cada herramienta. También puedes analizar los archivos de configuración para estudiar enfoques distintos y ver cuál se adapta a tus requisitos. Tienes que completar el instructivo Descripción general antes de comenzar el instructivo de inicio.
  3. Compila una VPN entre Google Cloud y AWS es un instructivo avanzado. No depende del instructivo de inicio, pero sí da por hecho que completaste el instructivo Descripción general. En este instructivo avanzado, se demuestra cómo ejecutar estas acciones:

    • Implementar una aplicación de múltiples nubes o compilar un entorno híbrido con conexiones a tu infraestructura local
    • Implementar la infraestructura de red y las instancias de máquinas virtuales (VM) en Google Cloud y Amazon Web Services (AWS)
    • Establecer conexiones entre ambos proveedores, lo que te permite distribuir tus recursos implementados para cumplir con las demandas de confiabilidad y disponibilidad

¿Por qué realizar implementaciones automatizadas de redes?

Una estrategia de automatización es importante para la eficiencia de tu desarrollo y de las operaciones y puede maximizar la calidad de tu aplicación. Las implementaciones automatizadas de redes ofrecen las siguientes ventajas:

  • Admiten muchas aplicaciones diferentes y los entornos en fases (desarrollo, prueba, etapa de pruebas y producción) que contribuyen a un proceso predecible y a operaciones confiables. La creación para disponer de copias de entornos es un proceso sencillo cuando usas archivos de configuración basados en código.
  • Las implementaciones automatizadas basadas en código te permiten reutilizar patrones de infraestructura comunes en tu organización
  • Las implementaciones basadas en código admiten un proceso de revisión estructurado que te ayuda a alinear los equipos y evitar problemas inesperados. Con este proceso, puedes colaborar con tus duplicados en varias disciplinas, como las operaciones de seguridad, las operaciones de red, la administración de proyectos y los equipos de calidad.

Descripción general

Deployment Manager y Terraform realizan una revisión compleja de las dependencias, lo que te permite evaluar tu entorno y crear recursos en paralelo con efectividad cuando sea posible. En los otros instructivos de esta serie, usarás estas herramientas para implementar estructuras de red más complejas.

A pesar de que este instructivo se vincula con herramientas relacionadas, su objetivo es consolidar detalles, lo que te permite construir entornos de trabajo útiles sin la necesidad de consultar varias páginas y sitios web.

Objetivos

  • Crear credenciales de acceso para la automatización en Google Cloud y AWS
  • Crear un entorno funcional para usar Deployment Manager y Terraform
  • Generar un par de clave necesario para usar Secure Shell (SSH) a fin de comunicarte con tus instancias de VM

Costos

En este instructivo de descripción general, no se usan recursos facturables de Google Cloud. En otros instructivos de esta serie, se implementan recursos facturables en Google Cloud y AWS.

Antes de comenzar

  1. En Google Cloud Console, crea un proyecto de Google Cloud llamado gcp-automated-networks.

    Ir a la página Proyectos

    Tu proyecto tiene un nombre y un ID del proyecto de Google Cloud único. Toma nota del ID del proyecto de Google Cloud. Puedes encontrarlo en el panel Información del proyecto (Project info) en la Página principal de Google Cloud Console.

    Panel de información del proyecto que muestra el nombre y el ID del proyecto.

  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo confirmar que tienes habilitada la facturación para tu proyecto.

  3. Habilita las API de Compute Engine and Deployment Manager.

    Habilita las API

  4. Inicia una instancia de Cloud Shell Ejecuta todos los comandos de terminal en este instructivo desde Cloud Shell.

    Abre Cloud Shell

    Cloud Shell puede tardar varios minutos en aprovisionarse. Una vez que se complete el proceso, verás este mensaje de bienvenida:

    Welcome to Cloud Shell! Type "help" to get started.

En los instructivos de esta serie, suponemos que estás familiarizado con GitHub y que tienes acceso a la consola de administración de AWS.

Arquitectura de implementación

En este instructivo, compilarás el entorno de implementación que se ilustra en el siguiente diagrama.

Componentes de la arquitectura de implementación.

En el diagrama anterior, se ilustran los componentes que se usan en este instructivo:

  • Las credenciales de Google Cloud
  • Los archivos de configuración de implementación
  • Las llaves SSH
  • Las credenciales de AWS
  • Tu proyecto de Google Cloud
  • La red de VPC

Prepara tu entorno de trabajo de Google Cloud

En esta sección, harás lo siguiente:

  • Clonar el código del instructivo
  • Elegir tu región y zona de Google Cloud

Clona el código del instructivo

  1. En Cloud Shell, clona el código del instructivo desde GitHub:

    git clone https://github.com/GoogleCloudPlatform/autonetdeploy-startup.git
  2. Navega hacia el directorio del instructivo:

    cd autonetdeploy-startup
    

Verifica la región y la zona

Algunos recursos de la nube en este instructivo, incluidas las instancias de Compute Engine, requieren que declares de forma explícita la región o zona de ubicación pensada, o ambas. Para obtener más detalles, consulta Regiones y zonas de Google Cloud.

En este instructivo, se requiere una sola región. Verifica los valores de la tabla siguiente que reflejan los valores establecidos en los archivos del instructivo.

Nombre del campo Valores de Google Cloud
Nombre de la región

us-west1
Ubicación The Dalles, Oregón, EE.UU.
Zona

us-west1-b

Prepárate para AWS

En esta sección, elige tu región de AWS que necesitarás en otros instructivos de esta serie. Si quieres obtener detalles sobre las regiones de AWS, consulta Regiones y zonas de disponibilidad para AWS.

  1. Accede a la Consola de administración de AWS.
  2. Navega hacia el panel de VPC y selecciona la región Oregón.
  3. En el Panel de EC2 y en el Panel de VPC, revisa los recursos que usa este instructivo.

Prepara Deployment Manager

Deployment Manager está preinstalado en Cloud Shell junto con el SDK de Cloud. Para ver una descripción general de la sintaxis de ejecución, ejecuta el comando gcloud deployment-manager --help.

Prepara Terraform

En esta sección, descarga y, luego, instala Terraform.

  1. En Cloud Shell, ejecuta la siguiente secuencia de comandos:

    ./get_terraform.sh
    

    Con esta secuencia de comandos, se descarga y se descomprime el objeto binario ejecutable de la herramienta Terraform en el directorio ~/terraform. En el resultado de la secuencia de comandos, se muestra un comando de exportación para actualizar la PATH.

  2. Ejecuta el comando de exportación para actualizar tu PATH.

  3. Verifica que Terraform esté funcionando:

    terraform --help
    

    Resultado:

    Usage: terraform [--version] [--help] [command] [args]
    ...
    

Si necesitas ayuda, consulta los temas Descarga Terraform y, también, Instala Terraform.

Crea credenciales de acceso

En esta sección, harás lo siguiente:

  • Descargar las credenciales de acceso para Google Cloud y AWS
  • Apuntar tus plantillas a estas credenciales de acceso

Deployment Manager y Terraform requieren acceso a los proyectos y los entornos en Google Cloud y AWS. Para Terraform, puedes leer más sobre los proveedores compatibles en los documentos en línea. Aunque el proveedor de Google Cloud de Terraform ofrece varias formas de proporcionar credenciales, en este instructivo, descargarás archivos de credenciales de Google Cloud y AWS. La descarga de credenciales de Google Cloud es una forma de usar la autenticación de la cuenta de servicio, que es una práctica recomendada.

Descarga credenciales de cuenta de servicio predeterminada de Compute Engine

En Cloud Shell, que es un entorno de Linux, gcloud administra los archivos de credenciales en el directorio ~/.config/gcloud.

Para configurar tus credenciales de cuenta de servicio predeterminada de Compute Engine, sigue estos pasos:

  1. En Cloud Console, ve a la página Crear clave de la cuenta de servicio.

    Ir a la página Crear clave de la cuenta de servicio

  2. En el menú desplegable Cuenta de servicio, selecciona Cuenta de servicio predeterminada de Compute Engine y deja seleccionado JSON como tipo de clave.

  3. Haz clic en Crear para descargar tus credenciales como un archivo llamado [PROJECT_ID]-[UNIQUE_ID].json.

  4. Para obtener este archivo JSON de tu máquina local en el entorno de Cloud Shell, haz clic en Más y, luego, en Subir archivo.

  5. Navega hacia el archivo JSON descargado y haz clic en Abrir para subirlo. El archivo se ubica en el directorio de la página principal (~).

  6. Usa la secuencia de comandos ./gcp_set_credentials.shproporcionada para crear el archivo ~/.config/gcloud/credentials_autonetdeploy.json: Con esta secuencia de comandos, también se crea terraform/terraform.tfvars con una referencia a las credenciales nuevas.

    ./gcp_set_credentials.sh ~/[PROJECT_ID]-[UNIQUE_ID].json
    

    Resultado:

    Created ~/.config/gcloud/credentials_autonetdeploy.json from ~/[PROJECT_ID]-[UNIQUE_ID].json.
    Updated gcp_credentials_file_path in ~/autonetdeploy-startup/terraform/terraform.tfvars.
    
  7. En Deployment Manager, agrega las credenciales de la cuenta de servicio al conjunto existente de credenciales que administra gcloud. Esto no es necesario para Terraform porque su configuración lee el archivo desde esta ubicación de modo directo.

    gcloud auth activate-service-account --key-file ~/.config/gcloud/credentials_autonetdeploy.json
    
  8. A continuación, usa los comandos catgrep para recuperar la dirección de correo electrónico de la cuenta de servicio del archivo y mostrar la string de correo electrónico.

    cat ~/.config/gcloud/credentials_autonetdeploy.json | grep client_email
    
  9. Revisa la configuración de la autenticación de gcloud y verifica que la dirección de correo electrónico de tu cuenta de servicio esté en la lista y activa.

    gcloud auth list
    

    Resultado:

    ACTIVE  ACCOUNT
    *       ###-compute@developer.gserviceaccount.com
    

Descarga las credenciales de acceso de AWS

En Cloud Shell, AWS almacena los archivos de credenciales en ~/.aws.

  1. En la Consola de administración de AWS, haz clic en tu nombre y, luego, en Mis credenciales de seguridad.

  2. Haz clic en Usuarios.

  3. Haz clic en Nombre de usuario.

  4. Haz clic en Credenciales de seguridad.

  5. Haz clic en Crear clave de acceso.

  6. Haz clic en Descargar archivo .csv para crear un archivo accessKeys.csv en tu sistema local.

  7. Haga clic en Cerrar.

  8. En Cloud Shell, haz clic en Más  y, luego, en Subir archivo para subir el archivo de credenciales al directorio principal (~).

  9. Selecciona el archivo accessKeys.csv que descargaste y haz clic en Abrir para subirlo.

  10. Usa la secuencia de comandos proporcionada para crear el archivo ~/.aws/credentials_autonetdeploy:

    ./aws_set_credentials.sh ~/accessKeys.csv
    

    Resultado:

    Created ~/.aws/credentials_autonetdeploy.

Configura tu proyecto

En esta sección, debes apuntar tus plantillas de implementación a tu proyecto.

Google Cloud ofrece varias formas de designar el proyecto de Google Cloud que usarán las herramientas de automatización. Para simplificar, en lugar de extraer el ID del proyecto del entorno, el proyecto de Google Cloud se identifica de manera explícita con una variable de string en los archivos de plantillas.

  1. Configura el ID del proyecto de Google Cloud. Reemplaza [YOUR_PROJECT_ID] por el ID del proyecto de Google Cloud.

    gcloud config set project [YOUR_PROJECT_ID]

    Resultado:

    Updated property [core/project].
    
  2. Usa la secuencia de comandos proporcionada a fin de actualizar el valor del proyecto en tus archivos de configuración para Deployment Manager y Terraform.

    ./gcp_set_project.sh
    

    Resultado:

    Updated project_id: gcp-automated-networks in ~/autonetdeploy-startup/deploymentmanager/autonetdeploy_config.yaml.
    Updated gcp_project_id in ~/autonetdeploy-startup/terraform/terraform.tfvars.
    
  3. Revisa los dos archivos actualizados para verificar que el valor [PROJECT_ID] se insertó en deploymentmanager/autonetdeploy_config.yaml y terraform/terraform.tfvars.

  4. Ejecuta el comando terraform init único a fin de instalar el proveedor de Terraform para esta implementación.

    pushd ./terraform && terraform init && popd > /dev/null
    

    Resultado:

    Initializing provider plugins...
    - Checking for available provider plugins on https://releases.hashicorp.com...
    - Downloading plugin for provider "google" (0.1.3)...
    Terraform has been successfully initialized!
  5. Ejecuta el comando plan de Terraform para verificar tus credenciales. Si no ves ningún texto de error en rojo, tu autenticación funciona de forma adecuada.

    pushd ./terraform && terraform plan && popd > /dev/null
    

    Resultado:

    Refreshing Terraform state in-memory prior to plan...
    ...
    +google_compute_instance.gcp-vm
    ...
    Plan: 1 to add, 0 to change, 0 to destroy.
    

Usa llaves SSH para conectarte a instancias de VM

En Google Cloud, Cloud Console y la herramienta de gcloud trabajan en segundo plano para administrar las llaves SSH. Usa el comando ssh para comunicarte con las instancias de Compute Engine sin generar ni subir ningún archivo de claves.

Sin embargo, para tus ejercicios en múltiples nubes, necesitas un par de claves públicas o privadas a fin de conectarte con las instancias de VM en Amazon Elastic Compute Cloud (EC2).

Genera un par de claves

  1. En Cloud Shell, usa ssh-keygen para generar un par de claves nuevo. Reemplaza [USERNAME] por tu información de acceso de Google Cloud. Si no tienes claro cuál es tu nombre de usuario, usa el resultado del comando whoami en Cloud Shell como tu [USERNAME]. Para los instructivos, se puede usar una frase de contraseña vacía.

    ssh-keygen -t rsa -f ~/.ssh/vm-ssh-key -C [USERNAME]
    

    Resultado:

    Generating public/private rsa key pair.
    ...
    
  2. Restringe el acceso a tu clave privada. Esta es una práctica recomendada.

    chmod 400 ~/.ssh/vm-ssh-key
    

Importa la clave pública a Google Cloud

Importa tu clave pública con alguno de estos dos métodos:

  1. En Cloud Shell, registra tu clave pública con Google Cloud:

    gcloud compute config-ssh --ssh-key-file=~/.ssh/vm-ssh-key
    

    Resultado:

    Updating project ssh metadata...done.

    Puedes ignorar la advertencia No host aliases were added... porque el comando también intenta actualizar las instancias de VM de Compute Engine, pero aún no se crearon instancias.

  2. En Cloud Console, abre la página Metadatos del proyecto.

    Abrir la página Metadatos

  3. Haz clic en Llaves SSH. Tal vez tengas que hacer clic en Agregar claves SSH si no se creó ninguna clave o, sino, puedes hacer clic en Editar y Agregar elemento para modificar los metadatos.

  4. Copia la string de datos de la clave desde la página mediante los comandos a continuación. La string tiene el formato ssh-rsa [KEY_DATA] [USERNAME]. Google Cloud espera que ingreses la string completa. Si no incluyes la string completa, verás el siguiente texto de error: Invalid key.

    cat ~/.ssh/vm-ssh-key.pub
    

    Resultado:

    ssh-rsa [KEY_DATA] [USERNAME]
  5. Haga clic en Save.

    Ahora, puedes usar el comando ssh desde Cloud Shell para verificar el acceso a las instancias de VM creadas. Ten en cuenta que usas una clave para todo el proyecto con la que se puede acceder a todas las instancias de VM del proyecto.

    ssh -i ~/.ssh/vm-ssh-key [EXTERNAL_IP]

    Para depurar, agrega -v al comando ssh.

Importa la clave pública a AWS

Puedes volver a usar el archivo de claves públicas que se generó con Google Cloud.

  1. Para descargar el archivo de claves públicas desde Cloud Shell, haz clic en Más  y, luego, en Descargar archivo.
  2. Ingresa la ruta completamente calificada (como antes, reemplaza [USERNAME]):

    /home/[USERNAME]/.ssh/vm-ssh-key.pub
    
  3. Haz clic en Descargar.

  4. En la consola de administración de AWS, en el Panel de EC2 y en RED Y SEGURIDAD, haz clic en pares de clave.

  5. Haz clic en Importar par de claves.

  6. Haz clic en Elegir archivo.

  7. Selecciona vm-ssh-key.pub y haz clic en Abrir.

  8. Verifica que el contenido tenga el formato esperado: ssh-rsa [KEY_DATA] [USERNAME].

  9. Haga clic en Import.

Ahora puedes ver la entrada de AWS para el valor vm-ssh-key. Puedes hacer referencia a esta clave en la configuración, lo que te permite usar el comando ssh para acceder.

Cuando usas el comando ssh para conectarte a instancias de AWS, AWS se comporta de manera diferente a Google Cloud. Para AWS, debes proporcionar un nombre de usuario genérico admitido por el proveedor de AMI. En este instructivo, el proveedor de AMI espera que ubuntu sea el usuario.

ssh -i ~/.ssh/vm-ssh-key ubuntu@[AWS_INSTANCE_EXTERNAL_IP]

Ahora, tienes un entorno en el que puedes implementar recursos en la nube con facilidad mediante las herramientas automatizadas. Usa este entorno para completar cualquiera de los instructivos de implementación automatizada de redes de esta serie.

Limpieza

En este instructivo, no se generan recursos facturables, por lo tanto, no necesitas limpiar nada.

Pasos siguientes

  • Prueba los otros instructivos de esta serie

    Comienza con Implementación automatizada de redes: instructivo de inicio, que te guía en el uso de Deployment Manager y Terraform para implementar una instancia de VM en la red predeterminada en GCP.

  • Obtén más información sobre Deployment Manager y Terraform

  • Obtén más información sobre la configuración avanzada de gcloud.

    Si deseas usar varios conjuntos de credenciales de autenticación, gcloud es compatible mediante la configuración. Obtén más información sobre cómo crear distintos parámetros de configuración con nombre con distintas cuentas de autenticación y cambiar entre ellos mediante gcloud.

  • Prueba otras características de Google Cloud. Consulta nuestros instructivos.