使用 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:
-
在本地机器上创建 Terraform 文件夹,然后浏览到 terraform 文件夹。
mkdir terraform && cd terraform
-
下载所需的 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 版本。
-
解压缩 Terraform zip 文件并将这些文件复制到 terraform 目录。
-
将环境 PATH 变量设置为 Terraform 文件。
export PATH=$PATH:<terraform-directory>/terraform
-
使用 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 配置文件,请完成以下步骤:
-
创建
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" } } }
-
将
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
块中设置的输入参数:
输入参数 | 必需/可选 | 描述 |
---|---|---|
ibmcloud_api_key |
必需 | 用于向 IBM Cloud 平台认证的 IBM Cloud API 密钥。 有关如何创建 API 密钥的更多信息,请参阅 创建 API 密钥。 您可以在 provider 块中指定 API 密钥,也可以从 IC_API_KEY 或 IBMCLOUD_API_KEY 环境变量中检索值。 如果定义了两个环境变量,那么 IC_API_KEY 优先。 |
ibmcloud_timeout |
可选 | 要等待到 IBM Cloud API 被视为不可用的秒数。 默认值为 60 。 您可以在 provider 块中指定超时,也可以从 IC_TIMEOUT 或 IBMCLOUD_TIMEOUT 环境变量中检索值。 如果同时指定了这两个变量,那么 IC_TIMEOUT 优先。 |
region |
可选 | 要在其中创建资源的 IBM Cloud 区域。 如果未指定此值,那么缺省情况下将使用 us-south 。 您可以在 provider 块中指定区域,也可以从 IBMCLOUD_REGION 或 IC_REGION 环境变量中检索值。 如果同时指定了两个环境变量,那么 IC_REGION 优先。 |
有关如何使用环境变量的更多信息,请参阅 使用环境变量。
您可以 在 IBM Cloud 配置文件 上的同一 Terraform 中添加多个提供程序配置,以创建具有不同提供程序参数的 IBM Cloud 资源。 例如,您可以使用多个提供程序,以便可以使用不同的输入参数 (例如,不同的区域,区域,基础架构生成或帐户) 在 IBM Cloud 配置文件的 Terraform 中创建 IBM Cloud 资源。 有关更多信息,请参阅 多个提供者实例。
选择 1. 创建静态 provider.tf
文件
您可以直接在 provider
块中声明输入参数。
由于 provider
块包含敏感信息,因此请勿将此文件落实到公共源存储库中。 要向提供程序配置添加版本控制,请使用本地 terraform.tfvars
文件。
完成以下步骤:
-
创建
provider.tf
文件并指定资源或数据源所需的输入参数。provider "ibm" { ibmcloud_api_key = "<api_key>" region = "<region>" }
选项 2。 引用 Terraform tfvars 文件中的凭证
您可以将敏感信息 (例如凭证) 存储在本地 terraform.tfvars
文件中,并在 provider
块中引用这些凭证。
请勿将 terraform.tfvars
落实到公共源存储库中。 此文件仅存储在本地机器中。
-
在本地机器上创建
terraform.tfvars
文件,并添加资源或数据源所需的输入参数。ibmcloud_api_key = "<ibmcloud_api_key>" region = "region"
-
创建
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. 供应资源
完成以下步骤:
-
初始化 Terraform CLI。
./terraform init
-
创建 Terraform 执行计划。 Terraform 执行计划总结了需要运行的所有操作,以在帐户中创建 Activity Tracker 实例,资源密钥和 IAM 访问策略。
./terraform plan
-
创建资源。
./terraform apply
要删除资源,请运行
./terraform destroy
。
后续步骤?
验证资源是否已创建。