Configurer Activity Tracker Event Routing dans le compte en utilisant Terraform

Terraform sur IBM Cloud® permet une mise à disposition prévisible et cohérente des services IBM Cloud de sorte que vous puissiez générer rapidement des environnements de cloud complexes et multiniveaux qui suivent les principes de l'infrastructure en tant que code (IaC). Comme pour l'utilisation de la CLI ou de l'API et des SDK de IBM Cloud, vous pouvez automatiser la création, la mise à jour et la suppression de vos ressources Activity Tracker Event Routing en utilisant le langage de configuration HashiCorp (HCL).

Vous pouvez également utiliser des modules Terraform IBM (TIM) préconstruits, open-source et prêts pour l'entreprise pour IBM Cloud Activity Tracker Event Routing pour configurer les cibles, les itinéraires et les paramètres de compte. Ce module simplifie la création et la gestion des cibles et des routes en suivant les meilleures pratiques.

Vous recherchez un Terraform géré sur une solution IBM Cloud ? Essayez IBM Cloud® Schematics. Avec Schematics, vous pouvez utiliser le langage de script Terraform que vous connaissez, mais vous n'avez pas à vous inquiéter de la configuration et de la maintenance de la ligne de commande Terraform et du plug-in IBM Cloud Provider. Schematics fournit également des modèles Terraform prédéfinis que vous pouvez installer à partir du catalogue IBM Cloud.

Avant de commencer, assurez-vous de disposer de l'accès requis pour créer et utiliser des ressources Activity Tracker Event Routing. Vous avez également besoin de droits pour gérer les ressources cible.

Etape 1. Installation de l'interface de ligne de commande Terraform

Pour installer l'interface de ligne de commande Terraform, procédez comme suit :

  1. Créez un dossier terraform sur votre machine locale et accédez à votre dossier Terraform.

    mkdir terraform && cd terraform
    
  2. Téléchargez la version souhaitée de Terraform. Par exemple, vous pouvez télécharger terraform_0.15.5_darwin_amd64.zip pour Mac OS.

    Le plug-in IBM Cloud Provider pour Terraform ne prend actuellement en charge que les versions 0.12.x, 0.13.x et 0.14.x de Terraform. Veillez à sélectionner une version de Terraform prise en charge.

  3. Extrayez le fichier zip Terraform et copiez les fichiers dans votre répertoire Terraform.

  4. Réglez la variable d'environnement PATH sur vos fichiers Terraform.

    export PATH=$PATH:<terraform-directory>/terraform
    
  5. Vérifiez que l'installation a abouti en utilisant une commande terraform.

    ./terraform
    

Étape 2. Configurez le plug-inProvider IBM Cloud

Une fois l'installation de l'interface de ligne de commande Terraform terminée, vous devez installer le plug-in IBM Cloud Provider pour Terraform pour pouvoir commencer à utiliser les ressources et les services dans IBM Cloud. Pour une liste des versions prises en charge, voir les versions du plug-in IBM Cloud Provider.

L'installation du plug-in IBM Cloud Provider varie en fonction de la version de l'interface de ligne de commande Terraform que vous allez utiliser. Pour exécuter vos fichiers de configuration Terraform avec Terraform version 0.13.x ou ultérieure, il n'est pas nécessaire d'installer le plug-in IBM Cloud Provider pour Terraform. Pour plus d'informations, voir Terraform v0.13.x and higher.

Par exemple, pour exécuter vos fichiers de configuration Terraform avec Terraform version 0.13.x ou ultérieure, procédez comme suit :

  1. Créez un fichier versions.tf et indiquez la version du plug-in IBM Cloud Provider que vous souhaitez utiliser à l'aide du paramètre version.

    terraform {
        required_providers {
            ibm = {
                source = "IBM-Cloud/ibm"
                version = "<provider version>"
                }
        }
    }
    

    Exemple :

    terraform {
        required_version = ">= 0.15"
        required_providers {
            ibm = {
                source = "ibm-cloud/ibm"
                version = "1.48.0-beta0"
            }
        }
    }
    
  2. Stockez le fichier versions.tf dans votre référentiel Git ou dans le dossier d'installation de Terraform.

Si vous utilisez des modules Terraform on IBM Cloud, vous devez ajouter un fichier versions.tf à tous les dossiers de module. Vous pouvez référencer le bloc fournisseur Terraform à partir du registre des fournisseurs. Pour les configurations Activity Tracker Event Routing, vous pouvez utiliser les modules Terraform IBM pour IBM Cloud Activity Tracker Event Routing qui fournissent des modules pré-construits et testés pour les configurations IBM Cloud Activity Tracker Event Routing les plus courantes.

Étape 3. Configurez le plug-in Provider IBM Cloud

Une fois l'installation terminée, vous devez configurer le plug-in IBM Cloud Provider.

Avant de commencer à utiliser Terraform on IBM Cloud, vous devez extraire les données d'identification et les paramètres obligatoires pour une source de données ou une ressource Terraform et les spécifier dans la configuration du provider. Le plug-in IBM Cloud Provider utilise cette configuration pour s'authentifier auprès de la plateforme IBM Cloud et afficher, créer, mettre à jour ou supprimer des ressources et des services IBM Cloud.

Le tableau ci-dessous répertorie les paramètres d'entrée que vous pouvez définir dans le bloc provider de votre fichier de configuration Terraform on IBM Cloud :

Liste des paramètres d'entrée que vous pouvez définir dans le bloc fournisseur de votre Terraform
Paramètre d'entrée Obligatoire / Facultatif Description
ibmcloud_api_key Obligatoire Clé d'API IBM Cloud utilisée pour procéder à l'authentification auprès de la plateforme IBM Cloud. Pour plus d'informations sur la création d'une clé d'API, voir Création d'une clé d'API. Vous pouvez spécifier la clé d'API dans le bloc provider ou extraire la valeur des variables d'environnement IC_API_KEY ou IBMCLOUD_API_KEY. Si les deux variables d'environnement sont définies, IC_API_KEY prévaut.
ibmcloud_timeout Facultatif Nombre de secondes à attendre avant que l'API IBM Cloud ne soit considérée comme indisponible. La valeur par défaut est 60. Vous pouvez spécifier le délai d'attente dans le bloc provider ou extraire la valeur des variables d'environnement
IC_TIMEOUT ou IBMCLOUD_TIMEOUT. Si les deux variables sont définies, IC_TIMEOUT prévaut.
region Facultatif Région IBM Cloud où vous voulez créer vos ressources. Si cette valeur n'est pas indiquée, us-south est utilisé par défaut. Vous pouvez spécifier la région dans le bloc provider ou extraire la valeur des variables d'environnement IBMCLOUD_REGION ou IC_REGION. Si les deux variables d'environnement sont définies, IC_REGION prévaut.

Pour plus d'informations sur l'utilisation des variables d'environnement, voir Using environment variables.

Vous pouvez ajouter plusieurs configurations de fournisseur dans le même fichier de configuration Terraform on IBM Cloud pour créer vos ressources IBM Cloud avec différents paramètres de fournisseur. Par exemple, vous pouvez ajouter plusieurs fournisseurs afin d'utiliser des paramètres d'entrée différents, par exemple des régions, des zones, des générations d'infrastructure ou encore des comptes, et finalement créer les ressources IBM Cloud dans votre fichier de configuration Terraform on IBM Cloud. Pour plus d'informations, voir la référence du bloc fournisseur.

Option 1. Création d'un fichier provider.tf statique

Vous pouvez déclarer les paramètres d'entrée directement dans le bloc provider.

Le bloc provider comportant des informations sensibles, ne le placez pas dans un référentiel source public. Pour ajouter le contrôle des versions à votre configuration de provider, utilisez un fichier terraform.tfvars local.

Procédez comme suit :

  1. Créez un fichier provider.tf et spécifiez les paramètres d'entrée requis pour votre ressource ou votre source de données.

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

Option 2. Référencez des données d'identification à partir d'un fichier tfvars Terraform

Vous pouvez stocker des informations sensibles, telles que des données d'identification, dans un fichier terraform.tfvars local et faire référence à ces données d'identification dans votre bloc provider.

Ne placez pas le fichier terraform.tfvars dans un référentiel source public. Ce fichier est censé être stocké sur votre machine locale uniquement.

  1. Créez un fichier terraform.tfvars sur votre machine locale et ajoutez les paramètres d'entrée requis pour votre ressource ou votre source de données.

    ibmcloud_api_key = "<ibmcloud_api_key>"
    region = "region"
    
  2. Créez un fichier provider.tf et utilisez la syntaxe d'interpolation Terraform pour faire référence aux variables à partir de terraform.tfvars.

    variable "ibmcloud_api_key" {}
    variable "region" {}
    
    provider "ibm" {
        ibmcloud_api_key    = var.ibmcloud_api_key
        region = var.region
    }
    

Étape 4. Initialisez l'interface de ligne de commande de Terraform.

Initialisez ensuite l'interface de ligne de commande Terraform. Exécutez la commande suivante :

./terraform init

Le message suivant devrait s'afficher : Terraform has been successfully initialized!.

Étape 5. Créez un fichier de variables

Créez un fichier de variables nommé variables.tf afin d'inclure des valeurs codées en dur.

L'exemple suivant répertorie les variables que vous définissez :

// 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" } ]
}

Pour afficher la liste des régions valides, voir Emplacements.

Étape 6. Créez un fichier de configuration Terraform

Créez ensuite un fichier de configuration Terraform nommé main.tf. Dans ce fichier, vous configurez Activity Tracker Event Routing en utilisant le langage de configuration HashiCorp (HCL). Pour plus d'informations, voir la documentation de Terraform.

Utiliser directement les ressources du fournisseur IBM Cloud

Le code suivant présente un exemple de fichier de configuration pour définir la configuration des paramètres de compte:

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
  }
}

Le code suivant présente des exemples de configuration pour définir une cible :

# 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"
}

Le code suivant sont des exemples de configuration pour définir une route :

## 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"]
  }
}

Utilisation de Terraform IBM Modules

Vous pouvez également utiliser les modules Terraform IBM pour IBM Cloud Activity Tracker Event Routing, qui fournissent des configurations prédéfinies conformes aux meilleures pratiques 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]
  }]
}

Etape 7. Ressources d'approvisionnement

Procédez comme suit :

  1. Initialisez l'interface de ligne de commande de Terraform.

    ./terraform init
    
  2. Créez un plan d'exécution Terraform. Le plan d'exécution Terraform récapitule toutes les actions à exécuter pour créer l'instance Activity Tracker, la clé de ressource et la règle d'accès IAM dans votre compte.

    ./terraform plan
    
  3. Créez les ressources.

    ./terraform apply
    

    Pour supprimer des ressources, exécutez ./terraform destroy.

Étape suivante ?

Vérifiez que les ressources ont été créées.

Explorez tous les modules disponibles dans le registre Terraform IBM Modules(TIM).