使用Terraform(Schematics)批量生产ICOS存储桶

首先

在使用Terraform或其托管服务Schematics定义IBM Cloud环境时的提示,总结了如何批量创建ICOS存储桶的方法。

确认了环境

    • Terraform v1.5.0 (Mac)

ibm-cloud/ibm v1.56.1

Schematics (Terraform v1.4.6)

准备所需材料

首先,准备好provider.tf和versions.tf文件。

provider "ibm" {
    ibmcloud_api_key   = var.ibmcloud_api_key
    region             = var.region
}
terraform {
  required_version = ">= 1.0.0, < 2.0.0"
  required_providers {
    ibm = {
      source = "IBM-Cloud/ibm"
    }
  }
}

然后,我们将准备将用于创建ICOS存储桶时使用的参数作为变量。首先,我们将定义一个变量。我们将使用已部署的ICOS实例、Activity Tracker以及用于平台度量的IBM Cloud Monitoring with Sysdig实例来进行操作。

# API Key
variable "ibmcloud_api_key" {
  description = "APIキー"
  type        = string
}

# デプロイ先
variable "region" {
  description = "デプロイ先リージョン(ロケーション)"
  type        = string
}

# Activity Tracker
variable "activitytracker" {
  description = "Activity Trackerインスタンス名"
  type        = string
}

# IBM Cloud Monitoring with Sysdig (Platform metrics)
variable "monitoring_platform" {
  description = "プラットフォームメトリクス用 IBM Cloud Monitoring with Sysdigインスタンス名"
  type        = string
}

# ICOSインスタンス
variable "icos_instance" {
  description = "ICOSインスタンス"
  type        = string
}

# ICOSバケット
variable "icos_buckets" {
  description = "ICOSバケット"
  type        = map(any)
}

然后,定义变量的值。在”activitytracker”和”monitoring_platform”中,指定了Activity Tracker和启用IBM Cloud Monitoring实例的平台指标的位置,并指定了其实例名称。在”icos_buckets”中定义了创建ICOS桶的参数,并且以映射的方式进行定义,键名直接成为桶的名称。

# バケット作成先ロケーション
region = "jp-tok"

# Activity Tracker
activitytracker = "activitytracker-jp-tok"

# IBM Cloud Monitoring with Sysdig (Platform metrics)
monitoring_platform = "platformmetrics-jp-tok"

# ICOSインスタンス
icos_instance = "icos-instance"

# ICOSバケット
icos_buckets = {
  "hirokuda-test001" = {
    storage_class  = "standard"
    archive_enable = true
    archive_type   = "GLACIER"
    archive_days   = 3
    expire_enable  = true
    expire_days    = 7
  }
  "hirokuda-test002" = {
    storage_class  = "standard"
    archive_enable = true
    archive_type   = "GLACIER"
    archive_days   = 3
    expire_enable  = true
    expire_days    = 7
  }
}

在中文中重新表达如下内容,只需要一种选择的版本:
API密钥并没有故意写入文件中。在执行terraform plan/apply时,可以输入密钥,或在执行之前根据环境变量TF_VAR_ibmcloud_api_key进行定义。

最后是main.tf文件。通过使用 for_each 循环 ibm_cos_bucket,可以创建与变量定义一致数量的 ICOS 存储桶。

# Activity Tracker
data "ibm_resource_instance" "activitytracker" {
  name = var.activitytracker
}

# IBM Cloud Monitoring with Sysdig (Platform metrics)
data "ibm_resource_instance" "monitoring_platform" {
  name = var.monitoring_platform
}

# ICOSインスタンス
data "ibm_resource_instance" "icos_instance" {
  name = var.icos_instance
}

# ICOSバケット
resource "ibm_cos_bucket" "bucket" {
  for_each = var.icos_buckets

  bucket_name          = each.key
  resource_instance_id = data.ibm_resource_instance.icos_instance.id
  region_location      = var.region
  storage_class        = each.value.storage_class
  activity_tracking {
    read_data_events     = true
    write_data_events    = true
    activity_tracker_crn = data.ibm_resource_instance.activitytracker.id
  }
  metrics_monitoring {
    usage_metrics_enabled   = true
    request_metrics_enabled = true
    metrics_monitoring_crn  = data.ibm_resource_instance.monitoring_platform.id
  }
  archive_rule {
    rule_id = "arch-rule"
    enable  = each.value.archive_enable
    days    = each.value.archive_days
    type    = each.value.archive_type
  }
  expire_rule {
    rule_id = "expire-rule"
    enable  = each.value.expire_enable
    days    = each.value.expire_days
  }
}

请参考下方以了解其他可指定的参数: 在上述示例中,活动跟踪器和平台度量是强制启用的,存储类别、存档规则和有效期限是可自定义的。

如果在Schematics上运行,请注意以下事项。

如果要在Schematics中执行,请首先将除terraform.tfvars以外的资料上传到Git上,并创建工作区。然后,通过屏幕上定义terraform.tfvars中设置的值,或使用以下CLI定义这些值。但是,如果使用CLI执行,则会出现以下错误。

$ ibmcloud sch plan --id ${WORKSPACE_ID} --var-file terraform.tfvars
tfvars の形式が無効です。 これは key=value の形式でなければなりません

tfvars的格式检查太严格了,不接受包含换行符的map类型变量定义。另外,似乎也不允许注释,所以目前需要将其格式化成一行一个变量的形式,请注意。

region = "jp-tok"
activitytracker = "activitytracker-jp-tok"
monitoring_platform = "platformmetrics-jp-tok"
icos_instance = "icos-instance"
icos_buckets = { "hirokuda-test001" = { storage_class = "standard", archive_enable = true, archive_type = "GLACIER", archive_days = 3, expire_enable = true, expire_days = 7 }, "hirokuda-test002" = { storage_class = "standard", archive_enable = true, archive_type = "GLACIER", archive_days = 3, expire_enable = true, expire_days = 7 } }

我认为,根据环境和用途设置不同的控制台或CLI来创建ICOS存储桶,最终会导致数量相当大,很难确认每个设置是否按预期工作。

通过使用Terraform将这些内容编码,不仅可以使建设工作更加容易,而且可以通过定期执行计划来机械化地检查所设想的配置是否确切地反映在实际环境中,从而可以放心地进行运营。

广告
将在 10 秒后关闭
bannerAds