Aprovisionamiento de una instancia IBM Cloud Logs mediante Terraform
Terraform en IBM Cloud® permite un suministro predecible y coherente de servicios de IBM Cloud para que pueda crear rápidamente entornos cloud complejos multinivel que sigan los principios de infraestructura como código (IaC). De forma similar a cómo se utiliza la CLI de IBM Cloud o la API y los SDK, puede automatizar el suministro, la actualización y la supresión de sus instancias de IBM Cloud Logs utilizando el lenguaje de configuración de HashiCorp (HCL).
¿Busca un Terraform gestionado en la solución IBM Cloud? Pruebe IBM Cloud® Schematics. Con Schematics, puede utilizar el lenguaje de scripts Terraform con el que está familiarizado, pero no necesita preocuparse por configurar y mantener la línea de mandatos de Terraform y el plug-in de IBM Cloud Provider. Schematics también proporciona plantillas Terraform predefinidas que puede instalar desde el catálogo de IBM Cloud.
Requisitos previos
- Antes de comenzar, asegúrese de que tiene el acceso necesario para crear y trabajar con recursos de IBM Cloud Logs.
- Instale Terraform CLI.
Instalar la CLI de Terraform
Siga estos pasos para instalar la CLI de Terraform:
-
Cree una carpeta terraform en la máquina local y vaya a la carpeta terraform.
mkdir terraform && cd terraform -
Descargue la versión de Terraform que desee. Por ejemplo, puede descargar
terraform_1.12.2_darwin_amd64.zippara un MacOS. Consulte Instalar Terraform. -
Extraiga el archivo zip de Terraform y copie los archivos en el directorio terraform. Ejecute los mandatos siguientes:
chmod +x terraformsudo mv terraform /usr/local/bin/ -
Compruebe que la instalación se ha realizado correctamente utilizando un comando terraform para confirmar la versión.
terraform --version
Configurar el directorio de trabajo de Terraform
Cree una carpeta y navegue hasta ella. Esta carpeta se utiliza para almacenar todos los archivos de configuración y definiciones de variables necesarios para crear la instancia IBM Cloud Logs.
Por ejemplo, en su directorio de trabajo de Terraform <terraform-working-directory>/terraform, cree el directorio myproject.
mkdir myproject && cd myproject
Configurar el plugin de IBM Cloud Provider
Una vez completada la instalación de la CLI de Terraform, debe configurar el plug-in de IBM Cloud Provider para Terraform para poder empezar a trabajar con recursos y servicios en IBM Cloud.
Para obtener una lista de las versiones compatibles, consulte las versiones del complemento IBM Cloud Provider.
Asegúrese de que utiliza la última versión del complemento IBM Cloud Provider.
Cree un archivo versions.tf y especifique la versión del plug-in de IBM Cloud Provider que desea utilizar con el parámetro version.
terraform {
required_providers {
ibm = {
source = "IBM-Cloud/ibm"
version = "<provider version>"
}
}
}
Por ejemplo:
terraform {
required_providers {
ibm = {
source = "IBM-Cloud/ibm"
version = ">=1.80.0"
}
}
}
Configurar el plugin de IBM Cloud Provider
Después de completar la configuración, debe configurar el plug-in de IBM Cloud Provider.
Antes de empezar a trabajar con Terraform en IBM Cloud, debe recuperar las credenciales y los parámetros necesarios para un recurso Terraform o un origen de datos, y especificarlos en la configuración del provider. El plug-in de
IBM Cloud Provider utiliza esta configuración para autenticarse en la plataforma IBM Cloud y para ver, crear, actualizar o suprimir recursos y servicios de IBM Cloud.
La tabla siguiente lista los parámetros de entrada que puede establecer en el bloque provider del archivo de configuración de Terraform en IBM Cloud:
| Parámetro de entrada | Necesario / opcional | Descripción |
|---|---|---|
ibmcloud_api_key |
Obligatorio | La clave de API de IBM Cloud para autenticarse en la plataforma IBM Cloud. Para obtener más información sobre cómo crear una clave de API, consulte Creación de una clave de API.
Puede especificar la clave de API en el bloque provider o recuperar el valor de las variables de entorno IC_API_KEY o IBMCLOUD_API_KEY. Si se definen ambas variables de entorno, IC_API_KEY tiene prioridad. |
ibmcloud_timeout |
Opcional | El número de segundos que desea esperar hasta que la API de IBM Cloud se considere no disponible. El valor predeterminado es 60. Puede especificar el tiempo de espera en el bloque provider o recuperar el valor
de las variables de entorno IC_TIMEOUT o IBMCLOUD_TIMEOUT. Si se especifican ambas variables, IC_TIMEOUT tiene prioridad. |
region |
Opcional | La región de IBM Cloud en la que desea crear los recursos. Si no se especifica este valor, se utiliza us-south de forma predeterminada. Puede especificar la región en el bloque provider o recuperar el valor de
las variables de entorno IBMCLOUD_REGION o IC_REGION. Si se especifican ambas variables de entorno, IC_REGION tiene prioridad. |
resource_group |
Opcional | El ID del grupo de recursos que desea utilizar para los recursos de IBM Cloud. Para recuperar el ID, ejecute ibmcloud resource groups. Puede especificar el grupo de recursos en el bloque provider o recuperar el
valor de las variables de entorno IC_RESOURCE_GROUP o IBMCLOUD_RESOURCE_GROUP. Si se definen ambas variables de entorno, IC_RESOURCE_GROUP tiene prioridad. |
Para obtener más información sobre cómo utilizar variables de entorno, consulte Utilización de variables de entorno.
Configure las variables de entrada en el archivo terraform.tfvars
Puede almacenar información en un archivo local terraform.tfvars y hacer referencia a estos datos en su bloque provider.
No almacene el archivo terraform.tfvars en un repositorio de origen público. Este archivo sólo debe almacenarse en su máquina local.
En el directorio de su proyecto <terraform-directory>/terraform/myproject, cree un archivo terraform.tfvars en su máquina local y añada los parámetros de entrada necesarios para su recurso o fuente de datos.
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"
Declarar variables en el archivo variables.tf
En el directorio de su proyecto <terraform-directory>/terraform/myproject, cree un archivo de variables que se llame variables.tf para incluir los valores por defecto.
El siguiente ejemplo enumera las variables que puede utilizar al aprovisionar una instancia de 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"
}
Variables de referencia en el archivo provider.tf
En el directorio de su proyecto <terraform-directory>/terraform/myproject, cree un archivo provider.tf y utilice la sintaxis de interpolación de Terraform para hacer referencia a las variables de terraform.tfvars.
variable "ibmcloud_api_key" {}
variable "region" {}
provider "ibm" {
ibmcloud_api_key = var.ibmcloud_api_key
region = var.region
}
Cree los archivos de configuración de Terraform para aprovisionar una instancia de IBM Cloud Logs
A continuación, cree los siguientes archivos:
-
data-bucket.tf: Contiene la definición del recurso Terraform para crear un cubo para almacenar datos 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: Contiene la definición del recurso Terraform para crear un bucket para almacenar las métricas recopiladas de los datos 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: Contiene la definición del recurso Terraform para crear la instancia IBM Cloud Logs y adjuntar el bucket de datos y el 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: Contiene la definición del recurso Terraform para crear las autorizaciones de servicio a servicio entre la instancia IBM Cloud Logs y los 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: Contiene la definición del recurso Terraform para crear una integración saliente entre la instancia IBM Cloud Logs y la instancia IBM Cloud Event Notifications a través de la cual envía notificaciones a sus destinos como Slack o correo electrónico.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: Contiene la definición del recurso Terraform para crear la autorización entre la instancia IBM Cloud Logs y la instancia 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 obtener información adicional sobre cómo utilizar Terraform para los recursos de IBM Cloud, consulte ibm_resource_instance
Suministrar recursos
Complete los pasossiguientes:
-
Inicialice la CLI de Terraform.
../terraform initDebe ver el mensaje siguiente:
Terraform has been successfully initialized!. -
Cree un plan de ejecución de Terraform. El plan de ejecución de Terraform resume todas las acciones que deben ejecutarse para crear la instancia de IBM Cloud Logs, la clave de recurso y la política de acceso de IAM de su cuenta.
../terraform plan -
Cree los recursos.
../terraform applyPara suprimir recursos, ejecute
./terraform destroy.
¿Qué hacer a continuación?
Compruebe que se hayan creado los recursos. Inicie la interfaz de usuario de Observability y compruebe que se ha creado la instancia.