Configuración de Activity Tracker Event Routing en la cuenta 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 al uso de la CLI o la API y los SDK de IBM Cloud, puede automatizar la creación, actualización y eliminación de sus recursos de Activity Tracker Event Routing utilizando HashiCorp Configuration Language (HCL).

Como alternativa, puede utilizar módulos Terraform IBM (TIM) preconstruidos, de código abierto y listos para la empresa para IBM Cloud Activity Tracker Event Routing para configurar objetivos, rutas y cuentas. Este módulo simplifica la creación y gestión de objetivos y rutas siguiendo las mejores prácticas.

¿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.

Antes de empezar, asegúrese de que tiene el acceso necesario para crear y trabajar con recursos de Activity Tracker Event Routing. También necesita permisos para gestionar los recursos de destino.

Paso 1. Instalar la CLI de Terraform

Siga estos pasos para instalar la CLI de Terraform:

  1. Cree una carpeta terraform en la máquina local y vaya a la carpeta terraform.

    mkdir terraform && cd terraform
    
  2. Descargue la versión de Terraform que desee. Por ejemplo, puede descargar terraform_0.15.5_darwin_amd64.zip para un MacOS.

    El plugin de IBM Cloud Provider para Terraform solo da soporte actualmente a las versiones 0.12.x, 0.13.x y 0.14.x de Terraform. Asegúrese de seleccionar una versión de Terraform soportada.

  3. Extraiga el archivo zip de Terraform y copie los archivos en el directorio terraform.

  4. Establezca la variable de entorno PATH en los archivos de Terraform.

    export PATH=$PATH:<terraform-directory>/terraform
    
  5. Verifique que la instalación se haya llevado a cabo correctamente utilizando un mandato terraform.

    ./terraform
    

Paso 2. 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.

La configuración del plugin de IBM Cloud Provider varía en función de la versión de la CLI de Terraform que desee utilizar. Para ejecutar los archivos de configuración de Terraform con Terraform versión 0.13.x o posterior, no es necesaria la instalación del plug-in de IBM Cloud Provider para Terraform. Para obtener más información, consulte Terraform v0.13.x y posteriores.

Por ejemplo, para ejecutar los archivos de configuración de Terraform con Terraform versión 0.13.x o posterior, siga estos pasos:

  1. 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_version = ">= 0.15"
        required_providers {
            ibm = {
                source = "ibm-cloud/ibm"
                version = "1.48.0-beta0"
            }
        }
    }
    
  2. Almacene el archivo versions.tf en el repositorio Git o en la carpeta donde se ha configurado Terraform.

Si utiliza Terraform en módulos de IBM Cloud , debe añadir un archivo versions.tf a todas las carpetas de módulo. Puede consultar el bloque de proveedores de Terraform desde el registro de proveedores. Para las configuraciones de Activity Tracker Event Routing, puede utilizar los módulos de Terraform IBM para IBM Cloud Activity Tracker Event Routing, que proporciona módulos precompilados y probados para configuraciones comunes de IBM Cloud Activity Tracker Event Routing.

Paso 3. 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:

Lista de parámetros de entrada que puede establecer en el bloque del proveedor de Terraform
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.

Para obtener más información sobre cómo utilizar las variables de entorno, consulte Utilización de variables de entorno.

Puede añadir varias configuraciones de proveedor dentro del mismo Terraform en el IBM Cloud archivo de configuración para crear los recursos de IBM Cloud con parámetros de proveedor diferentes. Por ejemplo, puede añadir varios proveedores a fin de utilizar distintos parámetros de entrada, como por ejemplo regiones, zonas, generaciones de infraestructura o cuentas diferentes para crear los recursos de IBM Cloud en el archivo de configuración de Terraform en IBM Cloud. Para más información, consulte la referencia del bloque de proveedores.

Opción 1. Creación de un archivo provider.tf estático

Puede declarar los parámetros de entrada directamente en el bloque provider.

Dado que el bloque provider incluye información confidencial, no almacene este archivo en un repositorio de origen público. Para añadir control de versiones a la configuración del proveedor, utilice un archivo terraform.tfvars local.

Complete los pasossiguientes:

  1. Cree un archivo provider.tf y especifique los parámetros de entrada necesarios para el recurso o el origen de datos.

    provider "ibm" {
        ibmcloud_api_key = "<api_key>"
        region = "<region>"
    }
    

Opción 2. Cómo hacer referencia a las credenciales en un archivo tfvars de Terraform

Puede almacenar información confidencial, por ejemplo credenciales, en un archivo terraform.tfvars local y hacer referencia a estas credenciales en el bloque provider.

No almacene el archivo terraform.tfvars en un repositorio de origen público. Este archivo solo debe almacenarse en su máquina local.

  1. Cree un archivo terraform.tfvars en la máquina local y añada los parámetros de entrada necesarios para el recurso o el origen de datos.

    ibmcloud_api_key = "<ibmcloud_api_key>"
    region = "region"
    
  2. 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
    }
    

Paso 4. Inicialice la CLI de Terraform.

A continuación, inicialice la CLI de Terraform. Ejecute el mandato siguiente:

./terraform init

Debe ver el mensaje siguiente: Terraform has been successfully initialized!.

Paso 5. Crear un archivo de variables

Cree un archivo de variables denominado variables.tf para incluir valores codificados.

El ejemplo siguiente lista las variables que define:

// Data source arguments for atracker settings

variable "atracker_metadata_region_primary" {
  description = "Location where the metadata configuration is stored"
  type = string
  default = "Enter a supported location"
}

variable "atracker_metadata_region_backup" {
  description = "Location where the metadata configuration is stored"
  type = string
  default = "Enter a supported location"
}

// Data source arguments for atracker_targets
variable "target_type" {
  description = "Type of resource that can be defined as a target. Valid values are cloud_object_storage, cloud_logs and event_streams"
  type        = string
}

variable "atracker_target_name" {
  description = "The name of the target. Must be 256 characters or less."
  type        = string
  default     = "Enter a default target name"
}

// Data source arguments for target of type cloud_object_storage
variable "cos_bucket_name" {
  description = "Name of the Cloud Object Storage bucket"
  type        = string
}

variable "cos_target_crn" {
  description = "CRN of the Cloud Object Storage bucket"
  type        = string
}

variable "cos_endpoint" {
  description = "Private endpoint of the Cloud Object Storage bucket"
  type        = string
}


// Resource arguments for atracker_route
variable "atracker_route_name" {
  description = "The name of the route. Must be 180 characters or less and cannot include any special characters other than `(space) - . _ :`."
  type        = string
  default     = "Enter a default target name"
}
variable "atracker_route_receive_global_events" {
  description = "Whether or not all global events should be forwarded to this region."
  type        = bool
  default     = false
}
variable "atracker_route_rules" {
  description = "Routing rules that will be evaluated in their order of the array."
  type        = list(object({ example=string }))
  default     = [ { example: "object" } ]
}

Para ver la lista de regiones válidas, consulte Ubicaciones.

Paso 6. Crear un archivo de configuración de Terraform

A continuación, cree un archivo de configuración de Terraform denominado main.tf. En este archivo, se configura Activity Tracker Event Routing utilizando HashiCorp Configuration Language (HCL). Para más información, consulte la documentación de Terraform.

Utilización directa de los recursos del proveedor IBM Cloud

El código siguiente muestra un archivo de configuración de ejemplo para definir la configuración de valores de la cuenta:

resource "ibm_atracker_settings" "atracker_settings" {
  metadata_region_primary = var.atracker_metadata_region_primary
  metadata_region_backup = var.atracker_metadata_region_backup
  default_targets = ["comma-separated-list-of-target-ids"]
  permitted_target_regions  = ["comma-separated-list-of-locations"]
  private_api_endpoint_only = false

  # Optional but recommended lifecycle flag
  lifecycle {
    create_before_destroy = true
  }
}

El código siguiente muestra configuraciones de ejemplo para definir un destino:

# Target type: cloud-object-storage
# Using service to service authorization
resource "ibm_atracker_target" "atracker_target" {
  cos_endpoint {
     endpoint = var.cos_endpoint
     target_crn = var.cos_target_crn
     bucket = var.cos_bucket_name
     service_to_service_enabled = true
  }
  name = "<Target-Name>"
  target_type = "cloud_object_storage"
  region = "us-south"
}

# Target type: cloud-object-storage
# Using a service ID Api key
resource "ibm_atracker_target" "atracker_target" {
  cos_endpoint {
     endpoint = var.cos_endpoint
     target_crn = var.cos_target_crn
     bucket = var.cos_bucket_name
     api_key = "api_key"
  }
  name = "<Target-Name>"
  target_type = "cloud_object_storage"
  region = "us-south"
}

# Target type: cloud_logs
# Using a service ID API key
resource "ibm_atracker_target" "atracker_cloudlogs_target" {
  cloudlogs_endpoint {
    target_crn = "crn:v1:bluemix:public:logs:eu-es:a/11111111111111111111111111111111:22222222-2222-2222-2222-222222222222::"
  }
  name = "<Target-Name>"
  target_type = "cloud_logs"
  region = "us-south"
}

# Target type: event-streams
# Using a service ID API key
resource "ibm_atracker_target" "atracker_eventstreams_target" {
  eventstreams_endpoint {
    target_crn = "crn:v1:bluemix:public:logs:us-south:a/11111111111111111111111111111111:22222222-2222-2222-2222-222222222222::"
    brokers = ["xxxxx.cloud.ibm.com:9093","yyyyy.cloud.ibm.com:9093"]
    topic = "my-topic"
    api_key = "api-key"
  }
  name = "<Target-Name>"
  target_type = "event_streams"
  region = "us-south"
}

El código siguiente muestra configuraciones de ejemplo para definir una ruta:

## Create a route to route auditing events from Frankfurt

resource "ibm_atracker_route" "atracker_route_instance" {
  lifecycle {
    create_before_destroy = true
  }
  name = "<Route-Name>"
  rules {
    target_ids = [ibm_atracker_target.atracker_target.id]
    locations = ["eu-de"]
  }
}

## Create a route to route auditing events from 2 regions and also global events.

resource "ibm_atracker_route" "atracker_route_instance-global" {
  name = var.route_name-global

  rules {
    target_ids = [ibm_atracker_target.atracker_target-global.id]
    locations = ["global", "us-south", "eu-de"]
  }
}

## Create a route that includes multiple rules.

resource "ibm_atracker_route" "atracker_route_instance-global" {
  name = var.route_name-global

  rules {
    target_ids = [ibm_atracker_target.atracker_target-global.id]
    locations = ["eu-gb", "eu-de"]
  }
  rules {
    target_ids = [ibm_atracker_target.atracker_eventstreams_target.id]
    locations = ["us-south", "global"]
  }
}

Uso de los módulos de Terraform IBM

Como alternativa, puede utilizar los módulos de Terraform IBM para IBM Cloud Activity Tracker Event Routing, que proporcionan configuraciones predefinidas siguiendo las mejores prácticas de IBM Cloud.

module "activity_tracker" {
  source  = "terraform-ibm-modules/activity-tracker/ibm"
  version = "X.Y.Z" # Replace with a specific release version

  cos_targets = [{
    bucket_name   = var.cos_bucket_name
    endpoint      = var.cos_endpoint
    instance_id   = var.cos_target_crn
    target_region = "us-south"
    target_name   = "<Target-Name>"
  }]

  activity_tracker_routes = [{
    route_name = "<Route-Name>"
    locations  = ["eu-de"]
    target_ids = [module.activity_tracker.activity_tracker_targets[var.cos_bucket_name].id]
  }]
}

Paso 7. Suministrar recursos

Complete los pasossiguientes:

  1. Inicialice la CLI de Terraform.

    ./terraform init
    
  2. 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 Activity Tracker, la clave de recurso y la política de acceso de IAM de su cuenta.

    ./terraform plan
    
  3. Cree los recursos.

    ./terraform apply
    

    Para suprimir recursos, ejecute ./terraform destroy.

¿Qué hacer a continuación?

Compruebe que se hayan creado los recursos.

Explore todos los módulos disponibles en el registro de Terraform IBM Modules(TIM).