Provisionamento de uma instância do IBM Cloud Logs usando o Terraform
O Terraform no IBM Cloud® possibilita o provisionamento previsível e consistente dos serviços IBM Cloud para que você possa construir rapidamente ambientes de nuvem complexos e de multicamadas, que seguem os princípios de Infraestrutura como Código (IaC). Semelhante ao uso da CLI ou API e SDKs do IBM Cloud, é possível automatizar o fornecimento, a atualização e a exclusão de suas instâncias do IBM Cloud Logs usando o HashiCorp Configuration Language (HCL).
Para implantações de produção, considere o uso do Terraform IBM Modules(TIM) para IBM Cloud Logs que fornecem configurações pré-construídas, de código aberto e prontas para a empresa, seguindo as práticas recomendadas do site IBM Cloud.
Os módulos TIM simplificam implementações complexas, garantem a consistência entre ambientes e reduzem os erros de configuração. Explore o registro do Terraform IBM Modules(TIM) para obter os módulos disponíveis.
Procurando por um Terraform gerenciado na solução do IBM Cloud? Experimente o IBM Cloud® Schematics. Com o Schematics, é possível usar a linguagem de script do Terraform com a qual você está familiarizado, mas não é necessário se preocupar em configurar e manter a linha de comandos do Terraform e o plug-in do Provedor IBM Cloud. O Schematics também fornece modelos do Terraform pré-definidos que podem ser instalados a partir do catálogo do IBM Cloud.
Pré-requisitos
- Antes de começar, certifique-se de que você tenha o acesso necessário para criar e trabalhar com recursos do IBM Cloud Logs.
- Instale a CLI do Terraform.
Instalar a CLI do Terraform
Conclua as etapas a seguir para instalar a CLI do Terraform:
-
Crie uma pasta do Terraform em sua máquina local e navegue até essa pasta.
mkdir terraform && cd terraform -
Faça download da versão do Terraform desejada. Por exemplo, você pode fazer o download de
terraform_1.12.2_darwin_amd64.zippara um MacOS. Consulte Instalar o Terraform. -
Extraia o arquivo zip do Terraform e copie os arquivos para o seu diretório terraform. Execute os seguintes comandos:
chmod +x terraformsudo mv terraform /usr/local/bin/ -
Verifique se a instalação foi bem-sucedida usando um comando terraform para confirmar a versão.
terraform --version
Configurar o diretório de trabalho do Terraform
Crie uma pasta e navegue até ela. Essa pasta é usada para armazenar todos os arquivos de configuração e definições de variáveis necessários para criar a instância do IBM Cloud Logs.
Por exemplo, em seu diretório de trabalho do Terraform <terraform-working-directory>/terraform, crie o diretório myproject.
mkdir myproject && cd myproject
Configurar o plug-in do Provedor IBM Cloud
Após a conclusão da instalação da CLI do Terraform, deve-se configurar o plug-in IBM Cloud Provider para Terraform para que você possa começar a trabalhar com recursos e serviços na IBM Cloud.
Para obter uma lista das versões compatíveis, consulte as versões do plug-in do provedor IBM Cloud.
Certifique-se de usar a versão mais recente do plug-in do provedor IBM Cloud.
Crie um arquivo versions.tf e especifique a versão do plug-in IBM Cloud Provider que deseja usar com o parâmetro version.
terraform {
required_providers {
ibm = {
source = "IBM-Cloud/ibm"
version = "<provider version>"
}
}
}
Por exemplo:
terraform {
required_providers {
ibm = {
source = "IBM-Cloud/ibm"
version = ">=1.80.0"
}
}
}
Configure o plug-in do Provedor da IBM Cloud
Depois de concluir a configuração, deve-se configurar o plug-in IBM Cloud Provider .
Antes de começar a trabalhar com o Terraform no IBM Cloud, deve-se recuperar as credenciais e os parâmetros necessários para um recurso ou origem de dados do Terraform e especificá-los na configuração do provider. Essa configuração
é usada pelo plug-in do IBM Cloud Provider para autenticar com a plataforma IBM Cloud e visualizar, criar, atualizar ou excluir recursos e serviços do IBM Cloud.
A tabela a seguir lista os parâmetros de entrada que podem ser configurados no bloco provider do arquivo de configuração Terraform no IBM Cloud:
| Parâmetro de entrada | Obrigatório / opcional | Descrição |
|---|---|---|
ibmcloud_api_key |
Obrigatório | A chave de API IBM Cloud para autenticação na plataforma IBM Cloud. Para obter mais informações sobre como criar uma chave de API, consulte Criando uma chave de API.
É possível especificar a chave de API no bloco provider ou recuperar o valor das variáveis de ambiente IC_API_KEY ou IBMCLOUD_API_KEY. Se ambas as variáveis de ambiente forem definidas, IC_API_KEY terá precedência. |
ibmcloud_timeout |
Opcional | O número de segundos que você deseja esperar até que a API IBM Cloud seja considerada indisponível. O valor padrão é 60. É possível especificar o tempo limite no bloco provider ou recuperar o valor das variáveis
de ambiente IC_TIMEOUT ou IBMCLOUD_TIMEOUT. Se ambas as variáveis forem especificadas, IC_TIMEOUT terá precedência. |
region |
Opcional | A região do IBM Cloud em que você deseja criar seus recursos. Se este valor não for especificado, us-south será usado por padrão. É possível especificar a região no bloco provider ou recuperar o valor das variáveis
de ambiente IBMCLOUD_REGION or IC_REGION. Se ambas as variáveis de ambiente forem especificadas, IC_REGION terá precedência. |
resource_group |
Opcional | O ID do grupo de recursos que você deseja usar para seus recursos IBM Cloud. Para recuperar o ID, execute ibmcloud resource groups. É possível especificar o grupo de recursos no bloco provider ou recuperar o valor
a partir das variáveis de ambiente IC_RESOURCE_GROUP ou IBMCLOUD_RESOURCE_GROUP. Se ambas as variáveis de ambiente forem definidas, IC_RESOURCE_GROUP terá precedência. |
Para obter mais informações sobre como usar variáveis de ambiente, consulte Uso de variáveis de ambiente.
Configure as variáveis de entrada no arquivo terraform.tfvars
Você pode armazenar informações em um arquivo local terraform.tfvars e fazer referência a esses dados em seu bloco provider.
Não confirme o terraform.tfvars em um repositório de origem pública. Esse arquivo deve ser armazenado apenas em seu computador local.
No diretório do projeto <terraform-directory>/terraform/myproject, crie um arquivo terraform.tfvars em seu computador local e adicione os parâmetros de entrada necessários para o seu recurso ou fonte de dados.
ibmcloud_api_key = "<ibmcloud_api_key>"
region = "region"
account_id = "<Account ID>"
rg_id = "d7c0e937c529461f90a19e1421f9746d"
plan = "standard"
cos_instance_crn = "crn:v1:bluemix:public:cloud-object-storage:global:a/<Account ID>:<COS instance ID>::"
cos_storage_class = "standard"
cos_bucket_data_name = "cloud-logs-tf-data"
cos_bucket_metrics_name = "cloud-logs-tf-metrics"
event_notifications_crn = "crn:v1:bluemix:public:event-notifications:eu-gb:a/<Account ID>:<Event Notifications instance ID>::"
event_notifications_instance_id = "<Event Notifications instance ID>"
event_notifications_region = "eu-gb"
Declare variáveis no arquivo variables.tf
No diretório do projeto <terraform-directory>/terraform/myproject, crie um arquivo de variáveis denominado variables.tf para incluir valores padrão.
O exemplo a seguir lista as variáveis que você pode usar ao provisionar uma instância do IBM Cloud Logs:
variable "ibm_region" {
description = "Region to create resources. To see the list of valid regions, see https://cloud.ibm.com/docs/cloud-logs?topic=cloud-logs-regions."
type = string
default = "eu-gb"
}
variable "resource_group_name" {
type = string
description = "Resource group where resources are created"
default = "Default"
}
variable "rg_id" {
type = string
description = "Resource group ID where resources are created"
default = "b302120431c4456097f8970d80b93dfb"
}
variable "plan" {
type = string
description = "Service plan for Cloud Logs instances"
default = "standard"
}
variable "cos_instance_crn" {
type = string
description = "COS instance CRN where buckets are created"
default = "crn:v1:bluemix:public:cloud-object-storage:global:a/<Account ID>:<COS instance ID>::"
}
variable "cos_storage_class" {
type = string
description = "COS instance storage class"
default = "standard"
}
variable "account_id" {
type = string
description = "Account where resources are created"
default = "<Account ID>"
}
variable "cos_bucket_data_name" {
type = string
description = "Cloud Object Storage bucket data name"
default = "cloud-logs-tf-data"
}
variable "cos_bucket_metrics_name" {
type = string
description = "Cloud Object Storage bucket data name"
default = "cloud-logs-tf-metrics"
}
variable "event_notifications_crn" {
type = string
description = "Event Notifications CRN"
default = "crn:v1:bluemix:public:event-notifications:eu-gb:a/<Account ID>:<Event Notifications Instance ID>::"
}
variable "event_notifications_instance_id" {
type = string
description = "Event Notifications instance ID"
default = "<Event Notifications Instance ID>"
}
variable "event_notifications_region" {
type = string
description = "Event notifications region"
default = "eu-gb"
}
Variáveis de referência no arquivo provider.tf
No diretório do seu projeto <terraform-directory>/terraform/myproject, crie um arquivo provider.tf e use a sintaxe de interpolação do Terraform para fazer referência às variáveis do terraform.tfvars.
variable "ibmcloud_api_key" {}
variable "region" {}
provider "ibm" {
ibmcloud_api_key = var.ibmcloud_api_key
region = var.region
}
Crie os arquivos de configuração do Terraform para provisionar uma instância do IBM Cloud Logs
Em seguida, crie os seguintes arquivos:
-
data-bucket.tf: Contém a definição de recurso do Terraform para criar um bucket para armazenar dados de registro.resource "ibm_cos_bucket" "data_bucket" { bucket_name = var.cos_bucket_data_name resource_instance_id = var.cos_instance_crn region_location = var.region storage_class = var.cos_storage_class } -
metrics-bucket.tf: Contém a definição de recurso do Terraform para criar um bucket para armazenar métricas coletadas de dados de registro.resource "ibm_cos_bucket" "metrics_bucket" { bucket_name = var.cos_bucket_metrics_name resource_instance_id = var.cos_instance_crn region_location = var.region storage_class = var.cos_storage_class } -
main.tf: Contém a definição de recurso do Terraform para criar a instância do IBM Cloud Logs e anexar o bucket de dados e o bucket de métricas.data "ibm_resource_group" "group" { name = "marisa" } resource "ibm_resource_instance" "cloud_logs_instance" { name = "cloud-logs-via-tf" service = "logs" plan = var.plan location = var.region resource_group_id = data.ibm_resource_group.group.id parameters = { retention_period = "7" } } resource "null_resource" "update_instance_parameters" { triggers = { instance_id = ibm_resource_instance.cloud_logs_instance.id } provisioner "local-exec" { command = <<EOT ibmcloud login --apikey=$IC_API_KEY ibmcloud resource service-instance-update ${ibm_resource_instance.cloud_logs_instance.guid} -p '{"logs_bucket_crn": "${ibm_cos_bucket.data_bucket.crn}", "logs_bucket_endpoint": "${ibm_cos_bucket.data_bucket.s3_endpoint_direct}", "metrics_bucket_crn": "${ibm_cos_bucket.metrics_bucket.crn}","metrics_bucket_endpoint": "${ibm_cos_bucket.metrics_bucket.s3_endpoint_direct}"}' EOT } depends_on = [ibm_iam_authorization_policy.policy-cl-data-bucket,ibm_iam_authorization_policy.policy-cl-metrics-bucket] } -
en_s2s.tf: Contém a definição de recurso do Terraform para criar o serviço para autorizações de serviço entre a instância IBM Cloud Logs e os buckets.locals { cos_instance_id = split(":", ibm_cos_bucket.data_bucket.resource_instance_id)[7] } resource "ibm_iam_authorization_policy" "policy-cl-data-bucket" { source_service_name = "logs" source_resource_instance_id = ibm_resource_instance.cloud_logs_instance.guid roles = ["Writer"] resource_attributes { name = "serviceName" value = "cloud-object-storage" } resource_attributes { name = "serviceInstance" value = local.cos_instance_id operator = "stringEquals" } resource_attributes { name = "resourceType" value = "bucket" operator = "stringEquals" } resource_attributes { name = "resource" value = ibm_cos_bucket.data_bucket.bucket_name operator = "stringEquals" } resource_attributes { name = "accountId" value = var.account_id } } resource "ibm_iam_authorization_policy" "policy-cl-metrics-bucket" { source_service_name = "logs" source_resource_instance_id = ibm_resource_instance.cloud_logs_instance.guid roles = ["Writer"] resource_attributes { name = "serviceName" value = "cloud-object-storage" } resource_attributes { name = "serviceInstance" value = local.cos_instance_id operator = "stringEquals" } resource_attributes { name = "resourceType" value = "bucket" operator = "stringEquals" } resource_attributes { name = "resource" value = ibm_cos_bucket.metrics_bucket.bucket_name operator = "stringEquals" } resource_attributes { name = "accountId" value = var.account_id } } -
event-notification-extension.tf: Contém a definição de recurso do Terraform para criar uma integração de saída entre a instância IBM Cloud Logs e a instância IBM Cloud Event Notifications por meio da qual você envia notificações para seus destinos, como Slack ou e-mail.resource "ibm_logs_outgoing_webhook" "logs_outgoing_webhook_instance" { instance_id = ibm_resource_instance.cloud_logs_instance.guid region = ibm_resource_instance.cloud_logs_instance.location name = "Event-notification-cloud-logs-instance" type = "ibm_event_notifications" ibm_event_notifications { event_notifications_instance_id = var.event_notifications_instance_id region_id = var.event_notifications_region } depends_on = [ibm_iam_authorization_policy.policy-event-notifications] } -
s2s.tf: Contém a definição de recurso do Terraform para criar a autorização entre a instância IBM Cloud Logs e a instância IBM Cloud Event Notifications.resource "ibm_iam_authorization_policy" "policy-event-notifications" { source_service_name = "logs" source_resource_instance_id = ibm_resource_instance.cloud_logs_instance.guid roles = ["Reader","Event Source Manager","Viewer"] description = "" target_service_name = "event-notifications" }
Para obter mais informações sobre como usar o Terraform para os recursos do IBM Cloud, consulte ibm_resource_instance
Provisionamento da instância IBM Cloud Logs usando os módulos do Terraform IBM
Como alternativa à Etapa 4, você pode provisionar IBM Cloud Logs usando o Terraform IBM Modules (TIM). Se você escolher essa abordagem baseada em módulos, pule a Etapa 4 e vá diretamente para Recursos de provisionamento.
-
Crie um arquivo
main.tf:module "cloud_logs" { source = "terraform-ibm-modules/cloud-logs/ibm" version = "latest" # Replace "latest" with a release version to lock into a specific release resource_group_id = var.resource_group_id region = var.region instance_name = "my-cloud-logs-instance" plan = "standard" resource_tags = ["env:production", "team:devops"] } output "cloud_logs_instance_guid" { value = module.cloud_logs.guid } -
Opcional: se você quiser parametrizar a configuração, defina as variáveis de entrada. Por exemplo, crie um arquivo
variables.tf:variable "resource_group_id" { description = "Resource group ID for the Cloud Logs instance" type = string } variable "region" { description = "Region where the Cloud Logs instance will be created" type = string default = "us-south" }
Para obter a documentação completa do módulo e opções avançadas de configuração, consulte o módulo IBM Cloud Logs.
Você também pode consultar esta documentação para a implantação de módulos do Terraform IBM usando o Terraform CLI.
Provisionar recursos
Conclua as etapas a seguir:
-
Inicialize a CLI do Terraform.
../terraform initVocê verá a seguinte mensagem:
Terraform has been successfully initialized!. -
Crie um plano de execução do Terraform. O plano de execução do Terraform resume todas as ações que precisam ser executadas para criar a instância IBM Cloud Logs, a chave de recursos e a política de acesso do IAM em sua conta.
../terraform plan -
Crie os recursos.
../terraform applyPara excluir recursos, execute
./terraform destroy.
O que vem a seguir?
Verifique se os recursos foram criados. Inicie a interface do usuário do Observability e verifique se a instância foi criada.
Você pode explorar todos os módulos para configurações prontas para produção: