Los desarrolladores y los equipos DevOps suelen utilizar Infraestructura como código (IaC) para gestionar sus despliegues de software e infraestructuras de forma repetible y coherente. Con las herramientas IaC, los usuarios pueden automatizar el ciclo de vida de las implantaciones, incluido el aprovisionamiento, la configuración, la implantación y la destrucción de recursos. Hashicorp Terraform es una herramienta IaC muy popular.
Nos complace anunciar la disponibilidad general de la versión 1.0 de la aplicación Proveedor Terraform Couchbase Capellaque permitirá a los usuarios gestionar mediante programación los despliegues de Couchbase Capella. Esta versión sustituye a la v0.2 del proveedor Capella que ahora está obsoleto y dejará de ser compatible en breve.
En este post, le ofrecemos un rápido ejemplo de recorrido por el proveedor Capella Terraform.
Fondo
A principios de este año, anunciamos el lanzamiento de nuestra nueva versión de API de gestión de Capella - una versión renovada de la API pública de Capella que permite a los usuarios controlar mediante programación los recursos de Couchbase Capella a través de una interfaz RESTful.
El proveedor de Couchbase Capella Terraform v1.0 aprovecha la API de gestión de Capella. Como tal, el conjunto de recursos de Capella que pueden gestionarse a través del proveedor depende de la API subyacente. A medida que la API evolucione para admitir nuevos puntos finales. El proveedor Terraform se ampliará en consecuencia con el fin de apoyar la gestión de los recursos correspondientes expuestos a través de los puntos finales.

Paseo del proveedor
En este ejemplo, demostraremos el uso del proveedor Capella Terraform para desplegar un proyecto Capella, un cluster y aprovisionar un bucket.
En Repo de GitHub tiene un amplio conjunto de ejemplos para gestionar cada uno de los recursos soportados, incluyendo usuarios, proyectos, clusters, buckets, credenciales de bases de datos, CIDRs permitidos, App Services, backup/restore y más.
Requisitos previos
-
- Terraform >= 1.5.2
- Ir >= 1,20
- Una cuenta de pago Capella.
Nota que la versión actual del proveedor no es compatible con las pruebas gratuitas de Capella. La compatibilidad con las pruebas estará disponible cuando la API de gestión subyacente de Capella admita la orquestación de despliegues de pruebas.
Autenticación y autorización
Todas las operaciones del proveedor Capella Terraform se autentican y autorizan mediante la clave API de Capella Management. En un entorno de producción, utilizará algo como Bóveda de HashiCorp o un gestor de secretos ofrecido por un proveedor de servicios en nube como Administrador de secretos de AWS para gestionar sus claves API. La referencia al gestor de secretos se especificaría como entrada al proveedor Terraform.
A efectos de esta demostración, estableceremos las credenciales en un archivo de variables de entorno local:
- Cree un archivo llamado variables.tf y añada las siguientes definiciones de variables. Vamos a utilizar estas variables dentro de nuestro archivo de configuración.
|
1 2 3 4 5 6 7 |
variable "organization_id" { description = "Capella Organization ID" } variable "auth_token" { description = "Authentication API Key" } |
2. Cree un archivo llamado terraform.template.tfvars y añadir las siguientes líneas. Aquí, especificamos los valores de las variables clave asociadas con el despliegue
|
1 2 |
auth_token = "<replace-with-v4-api-key-secret>" organization_id = "<replace-with-the-oid-of-your-tenant>" |
-
- auth_token: Puede crear la clave API a través de Capella UI o a través del API de gestión. En función del alcance de los recursos gestionados por el proveedor, debe crear una clave API de nivel de organización o de nivel de proyecto con el conjunto de funciones adecuado.
- organización_id: Puede obtenerlo de la API de gestión de la organización o de la URL del navegador de Capella UI (busque el parámetro "oid").
https://cloud.couchbase.com/databases?oid=0783f698-ac58–4018–84a3-xxxxxxxxxxxxx
Configuración de la implantación de ejemplo
Como ya se ha mencionado, el Repo de GitHub del Proveedor tiene un amplio conjunto de plantillas de configuración. En este post, voy a utilizar un ejemplo sencillo para demostrar el uso del proveedor para crear un perfil, desplegar un clúster y un bucket dentro del clúster.
-
- Cree un archivo llamado capella.tf y añada la siguiente configuración. La configuración hace lo siguiente
- Crea un proyecto dentro de la Organización especificada
- Crea un cluster dentro del proyecto
- Crea un cubo dentro del clúster
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
terraform { required_providers { couchbase-capella = { source = "registry.terraform.io/couchbasecloud/couchbase-capella" } } } # Configure the Couchbase Capella Provider using predefined variables provider "couchbase-capella" { authentication_token = var.auth_token } # Create example project resource resource "couchbase-capella_project" "new_project" { organization_id = var.organization_id name = "Terraform Demo Project" description = "A Capella Project that will host a Capella cluster" } # Stores the project name in an output variable. # Can be viewed using `terraform output project` command output "project" { value = couchbase-capella_project.new_project.name } # Create cluster resource resource "couchbase-capella_cluster" "new_cluster" { organization_id = var.organization_id project_id = couchbase-capella_project.new_project.id name = "Terraform Demo Cluster" description = "Test cluster created with Terraform" cloud_provider = { type = "aws" region = "us-east-1" cidr = "192.168.10.0/23" } couchbase_server = { version = "7.2" } service_groups = [ { node = { compute = { cpu = 4 ram = 16 } disk = { storage = 50 type = "io2" iops = 5000 } } num_of_nodes = 3 services = ["data", "index", "query"] } ] availability = { "type" : "multi" } support = { plan = "developer pro" timezone = "PT" } } # Stores the cluster details in an output variable. # Can be viewed using `terraform output cluster` command output "cluster" { value = couchbase-capella_cluster.new_cluster } # Create bucket in cluster resource "couchbase-capella_bucket" "new_bucket" { name = "terraform_bucket" organization_id = var.organization_id project_id = couchbase-capella_project.new_project.id cluster_id = couchbase-capella_cluster.new_cluster.id type = "couchbase" storage_backend = "couchstore" memory_allocation_in_mb = 100 bucket_conflict_resolution = "seqno" durability_level = "none" replicas = 1 flush = false time_to_live_in_seconds = 0 eviction_policy = "fullEviction" } # Stores the bucket name in an output variable. # Can be viewed using `terraform output bucket` command output "bucket" { value = couchbase-capella_bucket.new_bucket.name } |
Despliegue y gestión de recursos
Utilizar la norma Comandos de Terraform para inicializar y desplegar los recursos
1. Inicializar el proveedor Terraform
Terraform debe inicializarse la primera vez que se utiliza el proveedor:
|
1 |
terraform init |
2. Revisar el plan Terraform
Utilice el siguiente comando para revisar los recursos que se desplegarán:
|
1 |
terraform plan -var-file terraform.template.tfvars |
3. Ejecutar el plan Terraform
Despliegue los recursos Couchbase Capella utilizando el siguiente comando:
|
1 |
terraform apply -var-file terraform.template.tfvars |
Debería ver una salida similar a la siguiente. El despliegue de los recursos tardará unos minutos:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
capella_project.new_project: Creating... capella_project.new_project: Creation complete after 0s [id=c9151819-2f75-41dd-b944-7e33d12163ea] capella_cluster.new_cluster: Creating... capella_cluster.new_cluster: Still creating... [10s elapsed] capella_cluster.new_cluster: Still creating... [30s elapsed] ....... capella_cluster.new_cluster: Still creating... [2m50s elapsed] capella_cluster.new_cluster: Still creating... [3m0s elapsed] capella_cluster.new_cluster: Creation complete after 3m1s [id=29ebb043-xxxx-xxxx-xxxx-xxxxxxxxxxxx] capella_bucket.new_bucket: Creating... capella_bucket.new_bucket: Creation complete after 0s [id=dGVycmFmb3JtXXXXXXXXXX=] Apply complete! Resources: 3 added, 0 changed, 0 destroyed. |
4. Obtener el estado actual de los recursos
|
1 |
terraform state list |
Debería ver una salida similar a la siguiente, que muestra los tres recursos creados:
|
1 2 3 |
couchbase-capella_bucket.new_bucket couchbase-capella_cluster.new_cluster couchbase-capella_project.new_project |
5. Obtener el estado detallado de cualquier recurso desplegado
|
1 |
terraform state show couchbase-capella_project.new_project |
Debería ver una salida similar a la siguiente, que muestra los tres recursos creados:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# capella_project.new_project: resource "couchbase-capella_project" "new_project" { audit = { created_at = "2023-11-19 22:59:59.695367442 +0000 UTC" created_by = "WFXyD6xRlAyCwKcpLGs6pKVScBGK299c" modified_at = "2023-11-19 22:59:59.695380869 +0000 UTC" modified_by = "WFXyD6xRlAyCwKcpLGs6pKVScBGK299c" version = 1 } description = "A Capella Project that will host a Capella cluster" etag = "Version: 1" id = "5ab4f4b5-756c-4f12-97ec-xxxxxyyyyyzzzz" name = "Terraform Demo Project" organization_id = "8b05f96d-45ba-zzzz-xxxx-fa55555555" } |
6. Destruir los recursos
Ejecute el siguiente comando para destruir los recursos:
|
1 |
terraform destroy -var-file terraform.template.tfvars |
Debería ver una salida similar a la siguiente. Tardará unos minutos en destruir los recursos.
|
1 2 3 4 5 6 7 8 9 10 11 |
capella_bucket.new_bucket: Destroying... [id=dGVycmFmb3JtX2J1Y2tldA==] capella_bucket.new_bucket: Destruction complete after 1s capella_cluster.new_cluster: Destroying... [id=e64b8ba9-46a1-46f1-9fc3-7a412508ce4b] capella_cluster.new_cluster: Still destroying... [id=e64b8ba9-46a1-46f1-9fc3-7a412508ce4b, 10s elapsed] ..... capella_cluster.new_cluster: Still destroying... [id=e64b8ba9-46a1-46f1-9fc3-7a412508ce4b, 50s elapsed] .... [id=e64b8ba9-46a1-46f1-9fc3-7a412508ce4b, 3m20s elapsed] capella_cluster.new_cluster: Destruction complete after 3m26s capella_project.new_project: Destroying... [id=5ab4f4b5-756c-4f12-97ec-8e2427c7c1ab] capella_project.new_project: Destruction complete after 1s |
Recursos y próximos pasos
La versión 1.0 del proveedor sustituye a la v0.0.2 del proveedor Capella, que está obsoleta y se eliminará en breve. Por lo tanto, si está utilizando el antiguo proveedor, debe planificar la migración al nuevo.
Aquí tiene enlaces directos a algunos recursos útiles:
Si tiene alguna pregunta o comentario, déjelo a continuación. En Foros de Couchbase o Couchbase discord son otro buen lugar para plantear preguntas.
¿Es posible crear un endpoint app-service a través de TF junto con una función de validación para la colección deseada?
Hola Jan- Actualmente disponemos de APIs de gestión que le permitirán desplegar y gestionar de forma programática App Endpoints - https://docs.couchbase.com/cloud/management-api-reference/index.html#tag/App-Endpoints. Terraform está en nuestro radar. Permanezca atento.