Os desenvolvedores e as equipes de DevOps geralmente utilizam Infraestrutura como código (IaC) ferramentas e scripts para gerenciar suas implementações de software e infraestrutura de forma repetitiva e consistente. Com as ferramentas de IaC, os usuários podem automatizar o ciclo de vida das implementações, incluindo provisionamento, configuração, implementação e destruição de recursos. Hashicorp Terraform é uma ferramenta de IaC muito popular.
Temos o prazer de anunciar a disponibilidade geral da versão 1.0 do Provedor do Couchbase Capella Terraformque permitirá que os usuários gerenciem programaticamente as implementações do Couchbase Capella. Essa versão substitui a versão v0.2 do provedor Capella que agora está obsoleto e não terá mais suporte em breve.
Nesta postagem, apresentamos um exemplo rápido do provedor Capella Terraform.
Histórico
No início deste ano, anunciamos o lançamento de nossa nova versão do API de gerenciamento da Capella - uma versão renovada da API pública do Capella que permite aos usuários controlar programaticamente os recursos do Couchbase Capella por meio da interface RESTful.
O provedor do Couchbase Capella Terraform v1.0 utiliza a API de gerenciamento do Capella. Dessa forma, o conjunto de recursos do Capella que pode ser gerenciado por meio do provedor depende da API subjacente. À medida que a API evolui para oferecer suporte a novos pontos de extremidade. O provedor Terraform será estendido de forma correspondente para dar suporte ao gerenciamento dos recursos correspondentes expostos por meio dos pontos de extremidade.

Passo a passo do provedor
Neste exemplo, demonstraremos o uso do provedor do Capella Terraform para implantar um projeto do Capella, um cluster e provisionar um bucket.
O Repositório do GitHub tem um conjunto extenso de exemplos para gerenciar cada um dos recursos suportados, incluindo usuários, projetos, clusters, buckets, credenciais de banco de dados, CIDRs permitidos, App Services, backup/restauração e muito mais.
Pré-requisitos
-
- Terraform >= 1.5.2
- Ir >= 1,20
- Uma conta paga da Capella.
Observação que a versão atual do provedor não é compatível com as avaliações gratuitas da Capella. O suporte para avaliações estará disponível quando a API de gerenciamento subjacente da Capella suportar a orquestração de implantações de avaliação.
Autenticação e autorização
Todas as operações do provedor do Capella Terraform são autenticadas e autorizadas por meio da chave da API do Capella Management. Em um ambiente de produção, você usará algo como Cofre da HashiCorp ou um gerenciador de segredos oferecido por um provedor de serviços em nuvem, como Gerenciador de segredos da AWS para gerenciar suas chaves de API. A referência ao gerenciador de segredos seria especificada como entrada para o provedor Terraform.
Para fins desta demonstração, definiremos as credenciais em um arquivo de variáveis de ambiente local:
- Crie um arquivo chamado variables.tf e adicione as seguintes definições de variáveis. Usaremos essas variáveis em nosso arquivo de configuração.
|
1 2 3 4 5 6 7 |
variable "organization_id" { description = "Capella Organization ID" } variable "auth_token" { description = "Authentication API Key" } |
2. Crie um arquivo chamado terraform.template.tfvars e adicione as seguintes linhas. Aqui, especificamos os valores das principais variáveis associadas à implantação
|
1 2 |
auth_token = "<replace-with-v4-api-key-secret>" organization_id = "<replace-with-the-oid-of-your-tenant>" |
-
- auth_token: Você pode criar a chave da API por meio de IU da Capella ou por meio do API de gerenciamento. Dependendo do escopo dos recursos gerenciados pelo provedor, você deve criar uma chave de API no nível da organização ou do projeto com o conjunto correto de funções.
- organization_id: Você pode obter isso na API de gerenciamento da organização ou no URL do navegador da interface do usuário do Capella (procure o parâmetro "oid")
https://cloud.couchbase.com/databases?oid=0783f698-ac58–4018–84a3-xxxxxxxxxxxxx
Configuração para implantação de amostra
Conforme mencionado anteriormente, o Repositório do GitHub do provedor tem um conjunto extenso de modelos de configuração. Nesta postagem, estou usando um exemplo simples para demonstrar o uso do provedor para criar um perfil, implantar um cluster e um bucket dentro do cluster.
-
- Crie um arquivo chamado capella.tf e adicione a seguinte configuração. A configuração faz o seguinte
- Cria um projeto dentro da organização especificada
- Cria um cluster dentro do projeto
- Cria um bucket dentro do cluster
|
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 } |
Implantar e gerenciar recursos
Use o padrão Comandos do Terraform para inicializar e implantar os recursos
1. Inicialize o provedor do Terraform
O Terraform deve ser inicializado na primeira vez que você usar o provedor:
|
1 |
terraform init |
2. Revise o plano do Terraform
Use o seguinte comando para revisar os recursos que serão implantados:
|
1 |
terraform plan -var-file terraform.template.tfvars |
3. Executar o plano do Terraform
Implante os recursos do Couchbase Capella usando o seguinte comando:
|
1 |
terraform apply -var-file terraform.template.tfvars |
Você deverá ver uma saída semelhante à seguinte. A implantação dos recursos levará alguns 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. Obter o estado atual dos recursos
|
1 |
terraform state list |
Você deverá ver uma saída semelhante à seguinte, que mostra os três recursos que foram criados:
|
1 2 3 |
couchbase-capella_bucket.new_bucket couchbase-capella_cluster.new_cluster couchbase-capella_project.new_project |
5. Obter o estado detalhado de qualquer recurso implantado
|
1 |
terraform state show couchbase-capella_project.new_project |
Você deverá ver uma saída semelhante à seguinte, que mostra os três recursos que foram criados:
|
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 os recursos
Execute o seguinte comando para destruir os recursos:
|
1 |
terraform destroy -var-file terraform.template.tfvars |
Você deverá ver uma saída semelhante à seguinte. Levará alguns minutos para destruir os 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 e próximas etapas
A versão 1.0 do provedor substitui a v0.0.2 do provedor Capella, que está obsoleta e será removida em breve. Portanto, se você estiver usando o provedor antigo, deve planejar a migração para o novo provedor.
Aqui estão os links diretos para alguns recursos úteis:
Se você tiver dúvidas ou comentários, deixe um comentário abaixo. Os Fóruns do Couchbase ou Discórdia do Couchbase Os canais são outro bom lugar para entrar em contato com perguntas.
É possível criar um endpoint de serviço de aplicativo por meio do TF junto com a função de validação para a coleção desejada?
Olá, Jan. Hoje, temos APIs de gerenciamento que permitirão que você implemente e gerencie pontos de extremidade de aplicativos de forma programática. https://docs.couchbase.com/cloud/management-api-reference/index.html#tag/App-Endpoints. Terraform está em nosso radar. Fique ligado!