IBM Cloud Docs
使用 Terraform 在账户中配置 Activity Tracker Event Routing

使用 Terraform 在账户中配置 Activity Tracker Event Routing

IBM Cloud® 上的 Terraform 支持对 IBM Cloud 服务进行可预测且一致的供应,以便您可以快速构建遵循“基础架构即代码”(IaC) 原则的复杂多层云环境。 与使用 IBM Cloud CLI 或 API 和 SDK 类似,您可以使用 HashiCorp 配置语言 (HCL) 自动创建,更新和删除 Activity Tracker Event Routing 资源。

在 IBM Cloud 解决方案上查找受管 Terraform? 试用 IBM Cloud® Schematics。 通过 Schematics,可以使用您熟悉的 Terraform 脚本语言,但您无需担心设置和维护 Terraform 命令行和 IBM Cloud 提供程序插件。Schematics 还提供可从 IBM Cloud 目录安装的预定义 Terraform 模板。

开始之前,请确保您具有创建和使用 Activity Tracker Event Routing 资源所需的 访问权。 您还需要许可权来管理目标资源。

步骤 1. 安装 Terraform CLI

完成以下步骤安装 Terraform CLI:

  1. 在本地机器上创建 Terraform 文件夹,然后浏览到 terraform 文件夹。

    mkdir terraform && cd terraform
    
  2. 下载所需的 Terraform 版本。 例如,可以下载 MacOS的 terraform_0.15.5_darwin_amd64.zip

    用于 Terraform 的 IBM Cloud Provider 插件当前仅支持 Terraform V 0.12.x,0.13.x和 0.14.x。 确保选择受支持的 Terraform 版本。

  3. 解压缩 Terraform zip 文件并将这些文件复制到 terraform 目录。

  4. 将环境 PATH 变量设置为 Terraform 文件。

    export PATH=$PATH:<terraform-directory>/terraform
    
  5. 使用 terraform 命令验证安装是否成功。

    ./terraform
    

步骤 2. 设置 IBM Cloud 提供者插件

在 Terraform CLI 安装完成后,必须为 Terraform 设置 IBM Cloud 提供者插件,以便您可以开始使用 IBM Cloud中的资源和服务。 有关受支持版本的列表,请参阅 IBM Cloud 提供程序插件发行版

IBM Cloud 提供程序插件的设置因要使用的 Terraform CLI 版本而异。 要运行 Terraform 版本为 0.13.x 或更高版本的 Terraform 配置文件,不需要安装 Terraform 的 IBM Cloud 提供程序插件。 有关更多信息,请参阅 Terraform v0.13.x 和更高版本

例如,要使用 Terraform V 0.13.x 或更高版本运行 Terraform 配置文件,请完成以下步骤:

  1. 创建 versions.tf 文件并指定要与 version 参数配合使用的 IBM Cloud 提供程序插件版本。

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

    例如:

    terraform {
        required_version = ">= 0.15"
        required_providers {
            ibm = {
                source = "ibm-cloud/ibm"
                version = "1.48.0-beta0"
            }
        }
    }
    
  2. versions.tf 文件存储在 Git 存储库或设置 Terraform 的文件夹中。

如果在 IBM Cloud 模块上使用 Terraform,则必须在所有模块文件夹中添加 versions.tf 文件。 您可以从 提供程序注册表中引用 Terraform 提供程序块。

步骤 3. 配置 IBM Cloud 提供者插件

完成设置后,必须 配置 IBM Cloud 提供程序插件

在 IBM Cloud上开始使用 Terraform 之前,必须检索 Terraform 资源或数据源所需的凭证和参数,并在 provider 配置中指定这些凭证和参数。 此配置由 IBM Cloud 提供者插件用于向 IBM Cloud 平台进行认证,以及用于查看,创建,更新或删除 IBM Cloud 资源和服务。

下表列出了可以在 IBM Cloud 配置文件的 Terraform 的 provider 块中设置的输入参数:

可在 Terraform 提供程序块中设置的输入参数列表
输入参数 必需/可选 描述
ibmcloud_api_key 必需 用于向 IBM Cloud 平台认证的 IBM Cloud API 密钥。 有关如何创建 API 密钥的更多信息,请参阅 创建 API 密钥。 您可以在 provider 块中指定 API 密钥,也可以从 IC_API_KEYIBMCLOUD_API_KEY 环境变量中检索值。 如果定义了两个环境变量,那么 IC_API_KEY 优先。
ibmcloud_timeout 可选 要等待到 IBM Cloud API 被视为不可用的秒数。 默认值为 60。 您可以在 provider 块中指定超时,也可以从 IC_TIMEOUTIBMCLOUD_TIMEOUT 环境变量中检索值。 如果同时指定了这两个变量,那么 IC_TIMEOUT 优先。
region 可选 要在其中创建资源的 IBM Cloud 区域。 如果未指定此值,那么缺省情况下将使用 us-south。 您可以在 provider 块中指定区域,也可以从 IBMCLOUD_REGIONIC_REGION 环境变量中检索值。 如果同时指定了两个环境变量,那么 IC_REGION 优先。

有关如何使用环境变量的更多信息,请参阅 使用环境变量

您可以 在 IBM Cloud 配置文件 上的同一 Terraform 中添加多个提供程序配置,以创建具有不同提供程序参数的 IBM Cloud 资源。 例如,您可以使用多个提供程序,以便可以使用不同的输入参数 (例如,不同的区域,区域,基础架构生成或帐户) 在 IBM Cloud 配置文件的 Terraform 中创建 IBM Cloud 资源。 有关更多信息,请参阅 多个提供者实例

选择 1. 创建静态 provider.tf 文件

您可以直接在 provider 块中声明输入参数。

由于 provider 块包含敏感信息,因此请勿将此文件落实到公共源存储库中。 要向提供程序配置添加版本控制,请使用本地 terraform.tfvars 文件

完成以下步骤:

  1. 创建 provider.tf 文件并指定资源或数据源所需的输入参数。

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

选项 2。 引用 Terraform tfvars 文件中的凭证

您可以将敏感信息 (例如凭证) 存储在本地 terraform.tfvars 文件中,并在 provider 块中引用这些凭证。

请勿将 terraform.tfvars 落实到公共源存储库中。 此文件仅存储在本地机器中。

  1. 在本地机器上创建 terraform.tfvars 文件,并添加资源或数据源所需的输入参数。

    ibmcloud_api_key = "<ibmcloud_api_key>"
    region = "region"
    
  2. 创建 provider.tf 文件并使用 Terraform 插值语法来引用 terraform.tfvars 中的变量。

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

步骤 4. 初始化 Terraform CLI。

接下来,初始化 Terraform CLI。 运行以下命令:

./terraform init

您应该会看到以下消息: Terraform has been successfully initialized!

步骤 5. 创建变量文件

创建名为 variables.tf 的变量文件以包含硬编码值。

以下样本列出了您定义的变量:

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

要查看有效区域的列表,请参阅 位置

步骤 6。 创建 Terraform 配置文件

接下来,创建名为 main.tf 的 Terraform 配置文件。 在此文件中,使用 HashiCorp 配置语言 (HCL) 配置 Activity Tracker Event Routing。 有关更多信息,请参阅 Terraform 文档

以下代码显示用于定义帐户设置配置的样本配置文件:

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

以下代码显示用于定义目标的样本配置:

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

以下代码显示用于定义路径的样本配置:

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

步骤 7. 供应资源

完成以下步骤:

  1. 初始化 Terraform CLI。

    ./terraform init
    
  2. 创建 Terraform 执行计划。 Terraform 执行计划总结了需要运行的所有操作,以在帐户中创建 Activity Tracker 实例,资源密钥和 IAM 访问策略。

    ./terraform plan
    
  3. 创建资源。

    ./terraform apply
    

    要删除资源,请运行 ./terraform destroy

后续步骤?

验证资源是否已创建。