IBM Cloud Docs
IBM Cloud Monitoring 用の Terraform のセットアップ

IBM Cloud Monitoring 用の Terraform のセットアップ

Terraform on IBM Cloud® により、IBM Cloud サービスの予測可能で一貫性のあるプロビジョニングが可能になり、Infrastructure as Code (IaC) の原則に従う複雑な多層クラウド環境を迅速にビルドできます。 IBM Cloud CLI または API および SDK を使用する場合と同様に、HashiCorp 構成言語 (HCL) を使用して、IBM Cloud Monitoring インスタンスのプロビジョニング、更新、および削除を自動化できます。 オプションで、 IBM Cloud Security and Compliance Center Workload Protection インスタンスを IBM Cloud Monitoring インスタンスに接続できます。

IBM Cloud ソリューションでマネージド型 Terraform をお探しですか。 IBM Cloud® Schematics をお試しください。 Schematics では、よく知られている Terraform スクリプト言語が使用できますが、Terraform コマンド・ラインおよび IBM Cloud プロバイダー・プラグインのセットアップやメンテナンスについてはご心配にはおよびません。Schematics では IBM Cloud カタログからインストールできる事前定義 Terraform テンプレートも提供されます。

開始する前に、Monitoring リソースを作成および操作するために必要なアクセス権限があることを確認してください。

ステップ 1. Terraform CLI のインストール

Terraform CLI をインストールするには、以下のステップを実行します。

  1. ローカル・マシンに terraform フォルダーを作成し、terraform フォルダーにナビゲートします。

    mkdir terraform && cd terraform
    
  2. 希望する Terraform バージョンをダウンロードします。

    Terraform 用 IBM Cloud Provider プラグインのサポート対象バージョンについて詳しくは、「Terraform CLI のインストール」を参照してください。

    例えば、MacOS の場合は terraform_0.15.5_darwin_amd64.zip をダウンロードします。

  3. Terraform zip ファイルを解凍し、使用している terraform ディレクトリーにファイルをコピーします。

  4. PATH 環境変数にご使用の Terraform ファイルを設定します。

    export PATH=$PATH:<terraform-directory>/terraform
    
  5. terraform コマンドを使用して、正常にインストールされたことを確認します。

    ./terraform
    

詳しくは、『Terraform CLI のインストール』を参照してください。

ステップ 2 IBM Cloud プロバイダー・プラグインのセットアップ

Terraform CLI のインストールが完了したら、IBM Cloud でリソースとサービスの使用を開始できるように Terraform 用の IBM Cloud Provider プラグインをセットアップする必要があります。 サポート対象のバージョンについては 、 IBM Cloud プロバイダープラグインのリリース情報をご覧ください。

IBM Cloud Provider プラグインのセットアップは、使用する Terraform CLI のバージョンによって異なります。 Terraform バージョン 0.13.x 以上を使用して Terraform 構成ファイルを実行する場合は、Terraform 用の IBM Cloud Provider プラグインのインストールは必要ありません。 詳しくは、Terraform v0.13.x 以上を参照してください。

例えば、Terraform バージョン 0.13.x 以上を使用して Terraform 構成ファイルを実行するには、以下のステップを実行します。

  1. versions.tf ファイルを作成し、使用する IBM Cloud Provider プラグインのバージョンを version パラメーターで指定します。

    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.33.0"
            }
        }
    }
    
  2. versions.tf ファイルを Git リポジトリーまたは Terraform がセットアップされたフォルダーに保管します。

Terraform on IBM Cloud モジュールを使用している場合は、すべてのモジュール・フォルダーに versions.tf ファイルを追加する必要があります。 Terraformプロバイダーブロックは プロバイダーレジストリから参照できます。 IBM Cloud Observability - Terraform Module モジュールを使用してインスタンスを構成できます。

ステップ 3。 IBM Cloud プロバイダー・プラグインの構成

セットアップを完了したら、IBM Cloud Provider プラグインを構成する必要があります。

Terraform on IBM Cloud を使用して作業を始める前に、Terraform リソースまたはデータ・ソースに必要な資格情報やパラメーターを取得し、provider 構成でそれらを指定する必要があります。 この構成は、IBM Cloud プラットフォームで認証を行うとき、および IBM Cloud のリソースとサービスを表示、作成、更新、または削除するときに IBM Cloud Provider プラグインによって使用されます。

次の表は、Terraform on IBM Cloud 構成ファイルの provider ブロックで設定できる入力パラメーターをリストしたものです。

Terraformのプロバイダブロックで設定できる入力パラメータの一覧
入力パラメーター 必須 / オプション 説明
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 が優先されます。
resource_group オプション IBM Cloud リソースに使用するリソース・グループの ID。 ID を取得するには、ibmcloud resource groups を実行します。 provider ブロックでリソース・グループを指定するか、IC_RESOURCE_GROUP 環境変数または IBMCLOUD_RESOURCE_GROUP 環境変数から値を取得することができます。 両方の環境変数が定義されている場合は、IC_RESOURCE_GROUP が優先されます。
workload_protection_connected_instance オプション 既存の IBM Cloud Security and Compliance Center Workload Protection インスタンスを、作成中の IBM Cloud Monitoring インスタンスに接続します。 接続する IBM Cloud Security and Compliance Center Workload Protection インスタンスの CRN を指定します。 インスタンスの接続について詳しくは、 IBM Cloud Monitoring と IBM Cloud Security and Compliance Center Workload Protection を一緒に使用できますか? を参照してください。

環境変数の使用方法について詳しくは、環境変数の使用を参照してください。

同じ Terraform on IBM Cloud 構成ファイル内に複数のプロバイダー構成を追加して、異なるプロバイダー・パラメーターで IBM Cloud リソースを作成することができます。 例えば、Terraform on IBM Cloud 構成ファイル内に複数のプロバイダーを追加することで、さまざまな入力パラメーター (異なるリージョン、ゾーン、インフラストラクチャー世代、アカウントなど) を使用して 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 という変数ファイルを作成します。

以下のサンプルは、インスタンスをプロビジョンするときに使用できる変数をリストしたものです。

variable "service_type" {
  description = "Type of resource instance"
  type = string
  default = "sysdig-monitor"
}

variable "plan" {
  description = "Type of service plan."
  type = string
  default = "graduated-tier"
}

variable "default_receiver" {
  description = "Flag to select the instance to collect platform metrics"
  type = bool
  default = false
}

variable "location" {
  description = "Location where the resource is provisioned"
  type = string
  default = "us-south"
}

variable "name" {
  description = "Name of the resource instance"
  type = string
  default = "demo-monitoring-tf-instance"
}

variable "resource_group_name" {
  description = "Name of the resource group associated with the instance"
  type = string
  default = "observability-demo"
}

variable "key_name" {
  description = "Name of the resource key associated with the instance"
  type = string
  default = "demo-monitoring-tf-instance-key"
}

variable "wp_crn" {
  description = "CRN of rhe IBM Cloud Security and Compliance Center Workload Protection instance to be connected"
  type = string
  default = "crn:v1:bluemix:public:sysdig-secure:us-south:a/11111111111111111111111111111111:11111111-1111-1111-1111-111111111111"
}

有効な plan 値のリストについては、プランを参照してください。

有効なリージョンのリストについては、リージョンとエンドポイントを参照してください。

ステップ 6. Terraform 構成ファイルの作成

次に、main.tf という名前の Terraform 構成ファイルを作成します。 このファイルでは、HashiCorp 構成言語 (HCL) を使用することにより、Monitoring インスタンスを作成し、Identity and Access Management (IAM) でユーザーにアクセス・ポリシーを割り当てるための構成を追加します。 詳細については 、Terraformのドキュメントを参照してください。

以下のコードは、インスタンスをプロビジョンするための構成ファイルのサンプルです。 デフォルトのリソース・グループの ID を取得するには、ibm_resource_group データ・ソースを使用します。 リージョンは、手順 1 で作成した terraform.tfvars ファイルから取得されます。 次に、ユーザー user@ibm.com には、特定のリージョンの名前空間の IAM アクセス・ポリシーでマネージャーの役割が割り当てられます。 Monitoring インスタンスは、既存の Workload Protection インスタンスにも接続されています。

Monitoring インスタンスを既存の Workload Protection インスタンスに接続することはオプションです。

data "ibm_resource_group" "group" {
    name = var.resource_group_name
  }

  locals {
    instance_name = "${var.name}-${var.location}"
  }

  // Create a monitoring instance

  resource "ibm_resource_instance" "resource_instance" {
    name = local.instance_name
    service = var.service_type
    plan = var.plan
    location = var.location
    resource_group_id = data.ibm_resource_group.group.id
    tags = ["monitoring", "public"]
    parameters = {
      default_receiver= var.default_receiver,
      workload_protection_connected_instance = var.wp_crn
    }
  }

  // Create the resource key that is associated with the Monitoring instance

  resource "ibm_resource_key" "resourceKey" {
    name = var.key_name
    role = "Manager"
    resource_instance_id = ibm_resource_instance.instance.id
  }

  // Add a user policy for using the resource instance

  resource "ibm_iam_user_policy" "policy" {
    ibm_id = "user@ibm.com"
    roles  = ["Manager", "Viewer"]

    resources {
      service = "sysdig-monitor"
      resource_instance_id = element(split(":", ibm_resource_instance.instance.id), 7)
    }
  }

IBM Cloud リソースに Terraform を使用する方法の追加情報については、以下を参照してください。

手順 7. リソースのプロビジョン

以下のステップを実行します。

  1. Terraform CLI を初期設定します。

    ./terraform init
    
  2. Terraform 実行プランを作成します。 Terraform 実行プランとは、アカウントに Monitoring インスタンス、リソース・キー、および IAM アクセス・ポリシーを作成するために実行する必要のあるすべてのアクションをまとめたものです。

    ./terraform plan
    
  3. リソースを作成します。

    ./terraform apply
    

    リソースを削除するには、./terraform destroy を実行します。

次のステップ

リソースが作成されたことを確認します。