martes, 9 de mayo de 2017

Uso de Terraform para administrar Google Cloud Platform


 

La gestión de infraestructura suele implicar una interfaz web o emitir comandos en el terminal. Estos funcionan bien para individuos y equipos pequeños, pero la gestión de la infraestructura de esta manera puede ser problemático para los equipos más grandes con requisitos complejos. A medida que más organizaciones migran a la nube, los CIO buscan soluciones híbridas y multi-nube. La infraestructura como código es una forma de gestionar esta complejidad.

La herramienta de código abierto Terraform,  puede ayudarle a crear, cambiar y actualizar la infraestructura de manera más segura y predecible a escala. Creado por HashiCorp, Terraform codifica APIs en archivos de configuración declarativa que pueden ser compartidos entre miembros del equipo, editados, revisados ​​y versionados de la misma manera que los desarrolladores de software pueden hacer con código de aplicación.

A continuación, se muestra un ejemplo de configuración de Terraform para crear una instancia en Google Cloud. [GCP]

resource "google_compute_instance" "blog" {
  name         = "default"
  machine_type = "n1-standard-1"
  zone         = "us-central1-a"

  disk {
    image = "debian-cloud/debian-8"
  }

  disk {
    type    = "local-ssd"
    scratch = true
  }

  network_interface {
    network = "default"
  }
}

Debido a que se trata de un archivo de texto, puede tratarse de la misma manera que el código de la aplicación y manipularse con las mismas técnicas que los desarrolladores han tenido durante años, incluyendo linting, pruebas, integración continua, despliegue continuo, colaboración, revisión de código, solicitudes de cambio y seguimiento de cambios. , Automatización y más. Esta es una gran mejora sobre la gestión de la infraestructura con wikis y shell scripts!

Terraform separa la fase de planificación de infraestructura de la fase de ejecución. El comando terraform plan realiza una ejecución en prueba que le muestra lo que sucederá. El comando terraform apply realiza los cambios en la infraestructura real.

$ terraform plan
+ google_compute_instance.default
    can_ip_forward:                    "false"
    create_timeout:                    "4"
    disk.#:                            "2"
    disk.0.auto_delete:                "true"
    disk.0.disk_encryption_key_sha256: ""
    disk.0.image:                      "debian-cloud/debian-8"
    disk.1.auto_delete:                "true"
    disk.1.disk_encryption_key_sha256: ""
    disk.1.scratch:                    "true"
    disk.1.type:                       "local-ssd"
    machine_type:                      "n1-standard-1"
    metadata_fingerprint:              ""
    name:                              "default"
    self_link:                         ""
    tags_fingerprint:                  ""
    zone:                              "us-central1-a"


$ terraform apply
google_compute_instance.default: Creating...
  can_ip_forward:                    "" => "false"
  create_timeout:                    "" => "4"
  disk.#:                            "" => "2"
  disk.0.auto_delete:                "" => "true"
  disk.0.disk_encryption_key_sha256: "" => ""
  disk.0.image:                      "" => "debian-cloud/debian-8"
  disk.1.auto_delete:                "" => "true"
  disk.1.disk_encryption_key_sha256: "" => ""
  disk.1.scratch:                    "" => "true"
  disk.1.type:                       "" => "local-ssd"
  machine_type:                      "" => "n1-standard-1"
  metadata_fingerprint:              "" => ""
  name:                              "" => "default"
  network_interface.#:               "" => "1"
  network_interface.0.address:       "" => ""
  network_interface.0.name:          "" => ""
  network_interface.0.network:       "" => "default"
  self_link:                         "" => ""
  tags_fingerprint:                  "" => ""
  zone:                              "" => "us-central1-a"
google_compute_instance.default: Still creating... (10s elapsed)
google_compute_instance.default: Still creating... (20s elapsed)
google_compute_instance.default: Creation complete (ID: default)

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Esta instancia se ejecuta ahora en Google Cloud:



Terraform puede administrar más que solo administrar instancias. En Google Cloud Next, se anuncio la compatibilidad con las API de GCP para gestionar proyectos y carpetas, así como la facturación

Con estas nuevas API, Terraform puede gestionar proyectos enteros y muchos de sus recursos.
Al agregar sólo unas pocas líneas de código a la configuración de ejemplo anterior, creamos un proyecto vinculado a nuestra organización y cuenta de facturación, habilitamos un número configurable de API y servicios en ese proyecto y lanzamos la instancia dentro de este proyecto recién creado.

resource "google_project" "blog" {
  name            = "blog-demo"
  project_id      = "blog-demo-491834"
  billing_account = "${var.billing_id}"
  org_id          = "${var.org_id}"
}

resource "google_project_services" "blog" {
  project = "${google_project.blog.project_id}"

  services = [
    "iam.googleapis.com",
    "cloudresourcemanager.googleapis.com",
    "cloudapis.googleapis.com",
    "compute-component.googleapis.com",
  ]
}

resource "google_compute_instance" "blog" {
  # ... 

  project = "${google_project.blog.project_id}" # <-- ...="" code="" new="" option="">


Terraform también detecta cambios en la configuración y sólo aplica la diferencia de los cambios.

$ terraform apply
google_compute_instance.default: Refreshing state... (ID: default)
google_project.my_project: Creating...
  name:        "" => "blog-demo"
  number:      "" => ""
  org_id:      "" => "1012963984278"
  policy_data: "" => ""
  policy_etag: "" => ""
  project_id:  "" => "blog-demo-491834"
  skip_delete: "" => ""
google_project.my_project: Still creating... (10s elapsed)
google_project.my_project: Creation complete (ID: blog-demo-491835)

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Podemos verificar que el proyecto se crea con las API apropiadas:


Y la instancia existe dentro de este proyecto.



Este proyecto + instancia puede ser eliminado varias veces. Terraform también puede crear y exportar credenciales de IAM y cuentas de servicio para estos proyectos.

Al combinar las nuevas API de gestión de recursos y facturación de GCP y Terraform, tiene más control sobre los recursos de su organización. Con la separación garantizado entre los proyectos y la reproducibilidad proporcionada por Terraform, es posible eliminar rápidamente entornos enteros. 

Terraform paraleliza tantas operaciones como sea posible, por lo que a menudo es posible lebantar un nuevo entorno en pocos minutos. Y en las organizaciones más grandes con facturación acumulada, los equipos de TI pueden utilizar Terraform para eliminar los entornos preconfigurados vinculados a una sola organización de facturación.

Casos de Uso

Hay muchos desafíos que pueden beneficiarse de una infraestructura como el enfoque de código para gestionar los recursos. Aquí hay algunos que vienen a la mente:

Entornos efímeros
Una vez que haya codificado una infraestructura en Terraform, es fácil eliminar los ambientes adicionales para el desarrollo, control de calidad, puesta en escena o pruebas. Muchas organizaciones pagan miles de dólares cada mes por un ambiente dedicado a la puesta en escena. Debido a que Terraform es paralelo a las operaciones, puede confeccionar una copia de la infraestructura de producción mientras te tomas un cafe. Terraform permite a los desarrolladores desplegar sus cambios en copias idénticas a las de producción, permitiéndoles detectar los errores.

Estampado rápido de proyectos
Las nuevas API de google_project de Terraform permiten el sellado rápido de proyectos. Las organizaciones pueden crear fácilmente proyectos idénticos para comprobación, demostraciones de entornos, nuevas contrataciones, pruebas de código o recuperación de desastres. En las organizaciones más grandes con facturación acumulada, los equipos de TI pueden utilizar Terraform para eliminar entornos preconfigurados vinculados a una única organización de facturación.

Integración continua bajo demanda
Puede usar Terraform para crear entornos de integración continua o crear ambientes siempre que estén creados de entornos terraform sin modificar. Estos entornos sólo se ejecutan cuando se necesitan, reduciendo costos y mejorando la paridad usando las mismas configuraciones cada vez.
Cualquiera que sea su caso de uso, la combinación de las nuevas API de gestión de recursos de Terraform y GCP representa una poderosa nueva forma de gestionar los entornos basados ​​en la nube. Para obtener más información, visite el sitio web de Terraform o revise el código en GitHub.