Bereitstellung einer IBM Cloud Logs-Instanz mithilfe von Terraform
Terraform on IBM Cloud® ermöglicht die vorhersehbare und konsistente Bereitstellung von IBM Cloud-Services, damit Sie schnell komplexe, mehrschichtige Cloudumgebungen erstellen können, die den IaC-Prinzipien (Infrastructure as Code-Code) folgen. Ähnlich wie bei der Verwendung von IBM Cloud CLI oder API und SDKs können Sie die Bereitstellung, Aktualisierung und Löschung Ihrer IBM Cloud Logs Instanzen mithilfe von HashiCorp Configuration Language (HCL) automatisieren.
Für den produktiven Einsatz sollten Sie Terraform IBM Module(TIM) für IBM Cloud Logs zu verwenden, die vorgefertigte, quelloffene und unternehmenstaugliche Konfigurationen gemäß den Best Practices von IBM Cloud bereitstellen.
TIM-Module vereinfachen komplexe Implementierungen, gewährleisten Konsistenz in verschiedenen Umgebungen und reduzieren Konfigurationsfehler. Durchsuchen Sie die Terraform IBM Modules(TIM)-Registry nach verfügbaren Modulen.
Sie suchen eine verwaltete Terraform on IBM Cloud-Lösung? Probieren Sie IBM Cloud® Schematics aus. Mit Schematics können Sie die Terraform-Skriptsprache verwenden, mit der Sie vertraut sind, müssen sich jedoch nicht um die Einrichtung und Verwaltung der Terraform-Befehlszeile und des IBM Cloud-Provider-Plug-ins kümmern. Schematics stellt auch vordefinierte Terraform-Vorlagen bereit, die Sie über den IBM Cloud-Katalog installieren können.
Voraussetzungen
- Bevor Sie beginnen, stellen Sie sicher, dass Sie über den erforderlichen Zugang verfügen, um IBM Cloud Logs Ressourcen zu erstellen und mit ihnen zu arbeiten.
- Installieren Sie die Terraform CLI.
Terraform-CLI (Befehlszeilenschnittstelle installieren
Führen Sie die folgenden Schritte aus, um die Terraform-CLI zu installieren:
-
Erstellen Sie auf Ihrer lokalen Maschine einen Ordner names Terraform und navigieren Sie zu Ihrem Ordner terraform.
mkdir terraform && cd terraform -
Laden Sie die von Ihnen gewünschte Terraformversion herunter. Sie können zum Beispiel
terraform_1.12.2_darwin_amd64.zipfür eine MacOS herunterladen. Siehe Terraform installieren. -
Extrahieren Sie die komprimierte Terraform-Datei und kopieren Sie die Dateien in das Verzeichnis terraform. Führen Sie die folgenden Befehle aus:
chmod +x terraformsudo mv terraform /usr/local/bin/ -
Überprüfen Sie, ob die Installation erfolgreich war, indem Sie einen terraform-Befehl verwenden, um die Version zu bestätigen.
terraform --version
Einrichten des Terraform-Arbeitsverzeichnisses
Erstellen Sie einen Ordner und navigieren Sie zu diesem Ordner. In diesem Ordner werden alle Konfigurationsdateien und Variablendefinitionen gespeichert, die für die Erstellung der Instanz IBM Cloud Logs erforderlich sind.
Legen Sie zum Beispiel in Ihrem Terraform-Arbeitsverzeichnis <terraform-working-directory>/terraform das Verzeichnis myproject an.
mkdir myproject && cd myproject
IBM Cloud Provider-Plug-in einrichten
Nachdem die Installation der Terraform-CLI abgeschlossen ist, müssen Sie das IBM Cloud Provider-Plug-in für Terraform so konfigurieren, dass Sie mit der Arbeit mit Ressourcen und Services in IBM Cloud beginnen können.
Eine Liste der unterstützten Versionen finden Sie unter IBM Cloud Provider plug-in releases.
Stellen Sie sicher, dass Sie die neueste Version des IBM Cloud Provider Plug-ins verwenden.
Erstellen Sie eine Datei namens versions.tf und geben Sie die IBM Cloud Provider-Plug-in-Version an, die Sie mit dem Parameter version verwenden möchten.
terraform {
required_providers {
ibm = {
source = "IBM-Cloud/ibm"
version = "<provider version>"
}
}
}
Zum Beispiel:
terraform {
required_providers {
ibm = {
source = "IBM-Cloud/ibm"
version = ">=1.80.0"
}
}
}
IBM Cloud-Provider-Plug-in konfigurieren
Nachdem Sie die Konfiguration abgeschlossen haben, müssen Sie das IBM Cloud-Provider-Plug-in konfigurieren.
Bevor Sie mit der Arbeit mit Terraform unter IBM Cloud beginnen können, müssen Sie die Berechtigungsnachweise und Parameter abrufen, die für eine Terraform-Ressource oder Datenquelle erforderlich sind und sie in der Konfiguration des provider angeben. Diese Konfiguration wird vom IBM Cloud-Provider-Plug-in für die Authentifizierung mit der IBM Cloud-Plattform und zum Anzeigen, Erstellen, Aktualisieren oder Löschen von IBM Cloud-Ressourcen und Services verwendet.
In der folgenden Tabelle werden Eingabeparameter aufgelistet, die Sie im Block provider Ihres Terraforms in der IBM Cloud-Konfigurationsdatei festlegen können:
| Eingabeparameter | Erforderlich/Optional | Beschreibung |
|---|---|---|
ibmcloud_api_key |
Erforderlich | Der IBM Cloud-API-Schlüssel für die Authentifizierung mit der IBM Cloud-Plattform. Weitere Informationen zum Erstellen eines API-Schlüssels finden Sie unter API-Schlüssel erstellen.
Sie können den API-Schlüssel im Block provider angeben oder den Wert aus den Umgebungsvariablen IC_API_KEY oder IBMCLOUD_API_KEY abrufen. Wenn beide Umgebungsvariablen definiert sind, hat IC_API_KEY Vorrang. |
ibmcloud_timeout |
Optionale | Die Anzahl der Sekunden, die gewartet werden soll, bis die IBM Cloud-API als nicht verfügbar angesehen wird. Der Standardwert ist 60. Sie können das Zeitlimit im Block provider angeben oder den Wert aus den Umgebungsvariablen
IC_TIMEOUT oder IBMCLOUD_TIMEOUT abrufen. Wenn beide Variablen angegeben werden, hat IC_TIMEOUT Vorrang. |
region |
Optionale | Die IBM Cloud-Region, in der Sie Ihre Ressourcen erstellen möchten. Wenn dieser Wert nicht angegeben ist, wird standardmäßig us-south verwendet. Sie können die Region im Block provider angeben oder den Wert aus
den Umgebungsvariablen IBMCLOUD_REGION oder IC_REGION abrufen. Wenn beide Umgebungsvariablen angegeben werden, hat IC_REGION Vorrang. |
resource_group |
Optionale | Die ID der Ressourcengruppe, die für Ihre IBM Cloud-Ressourcen verwendet werden soll. Um die ID abzurufen, führen Sie ibmcloud resource groups aus. Sie können die Ressourcengruppe im Block provider angeben oder
den Wert aus den Umgebungsvariablen IC_RESOURCE_GROUP oder IBMCLOUD_RESOURCE_GROUP abrufen. Wenn beide Umgebungsvariablen definiert sind, hat IC_RESOURCE_GROUP Vorrang. |
Weitere Informationen über die Verwendung von Umgebungsvariablen finden Sie unter Verwendung von Umgebungsvariablen.
Konfigurieren Sie die Eingabevariablen in der Datei terraform.tfvars
Sie können Informationen in einer lokalen terraform.tfvars Datei speichern und diese Daten in Ihrem provider Block referenzieren.
Binden Sie die Datei terraform.tfvars nicht in ein öffentliches Quellenrepository ein. Diese Datei sollte nur auf Ihrem lokalen Rechner gespeichert werden.
Erstellen Sie in Ihrem Projektverzeichnis <terraform-directory>/terraform/myproject eine Datei terraform.tfvars auf Ihrem lokalen Rechner und fügen Sie die Eingabeparameter hinzu, die für Ihre Ressource oder
Datenquelle erforderlich sind.
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"
Deklarieren von Variablen in der Datei variables.tf
Erstellen Sie in Ihrem Projektverzeichnis <terraform-directory>/terraform/myproject eine Variablendatei mit dem Namen variables.tf, die Standardwerte enthält.
Im folgenden Beispiel werden Variablen aufgeführt, die Sie bei der Bereitstellung einer IBM Cloud Logs-Instanz verwenden können:
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"
}
Referenzvariablen in der Datei provider.tf
Erstellen Sie in Ihrem Projektverzeichnis <terraform-directory>/terraform/myproject eine Datei provider.tf und verwenden Sie die Terraform Interpolationssyntax, um die Variablen aus terraform.tfvars zu referenzieren.
variable "ibmcloud_api_key" {}
variable "region" {}
provider "ibm" {
ibmcloud_api_key = var.ibmcloud_api_key
region = var.region
}
Erstellen Sie die Terraform-Konfigurationsdateien zur Bereitstellung einer Instanz von IBM Cloud Logs
Erstellen Sie dann die folgenden Dateien:
-
data-bucket.tf: Enthält die Terraform-Ressourcendefinition zur Erstellung eines Buckets zum Speichern von Protokolldaten.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: Enthält die Terraform-Ressourcendefinition zur Erstellung eines Buckets zur Speicherung von Metriken, die aus Protokolldaten gesammelt werden.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: Enthält die Terraform-Ressourcendefinition, um die Instanz IBM Cloud Logs zu erstellen und den Data Bucket und den Metrics Bucket anzuhängen.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: Enthält die Terraform-Ressourcendefinition zur Erstellung der Service-to-Service-Autorisierungen zwischen der Instanz IBM Cloud Logs und den 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: Enthält die Terraform-Ressourcendefinition zur Erstellung einer ausgehenden Integration zwischen der Instanz IBM Cloud Logs und der Instanz IBM Cloud Event Notifications, über die Sie Benachrichtigungen an Ihre Ziele wie Slack oder E-Mail senden.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: Enthält die Terraform-Ressourcendefinition, um die Autorisierung zwischen der Instanz IBM Cloud Logs und der Instanz IBM Cloud Event Notifications zu erstellen.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" }
Weitere Informationen über die Verwendung von Terraform für IBM Cloud Ressourcen finden Sie unter ibm_resource_instance
Bereitstellung der IBM Cloud Logs Instanz mit Hilfe von Terraform IBM Modulen
Als Alternative zu Schritt 4 können Sie IBM Cloud Logs mit Terraform IBM Modules (TIM) bereitstellen. Wenn Sie diesen modulbasierten Ansatz wählen, überspringen Sie Schritt 4 und fahren Sie direkt mit der Bereitstellung von Ressourcen fort.
-
Erstellen Sie eine Datei
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 } -
Optional: Wenn Sie die Konfiguration parametrisieren wollen, definieren Sie Eingabevariablen. Erstellen Sie zum Beispiel eine Datei
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" }
Eine vollständige Dokumentation des Moduls und erweiterte Konfigurationsoptionen finden Sie unter IBM Cloud Logs.
Sie können auch diese Dokumentation für die Bereitstellung von Terraform IBM Modulen mit Terraform CLI lesen.
Ressourcen bereitstellen
Führen Sie die folgenden Schritte aus:
-
Terraform-Befehlszeilenschnittstelle initialisieren.
../terraform initDie folgende Nachricht sollte angezeigt werden:
Terraform has been successfully initialized!. -
Erstellen Sie einen Terraform-Ausführungsplan. Der Terraform-Ausführungsplan fasst alle Aktionen zusammen, die ausgeführt werden müssen, um den IBM Cloud Logs-Namespace und die IAM-Zugriffsrichtlinie in Ihrem Konto zu erstellen.
../terraform plan -
Erstellen Sie die Ressourcen.
../terraform applyUm Ressourcen zu löschen, führen Sie
./terraform destroyaus.
Weitere Schritte
Stellen Sie sicher, dass die Ressourcen erstellt werden. Starten Sie die Observability-Benutzeroberfläche und überprüfen Sie, ob die Instanz erstellt worden ist.
Sie können alle Module für produktionsreife Konfigurationen untersuchen: