IBM Cloud Docs
Terraform を使って Activity Tracker Event Routing を設定する

Terraform を使って Activity Tracker Event Routing を設定する

Terraform on IBM Cloud® により、IBM Cloud サービスの予測可能で一貫性のあるプロビジョニングが可能になり、Infrastructure as Code (IaC) の原則に従う複雑な多層クラウド環境を迅速にビルドできます。 IBM Cloud CLI や API、SDK を使用するのと同様に、 HashiCorp Configuration Language (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 をダウンロードします。

    IBM Cloud Provider plug-in for Terraform がサポートしているのは、現時点では Terraform バージョン 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 のインストールが完了したら、IBM Cloud でリソースとサービスの使用を開始できるように Terraform 用の IBM Cloud Provider プラグインをセットアップする必要があります。 サポートされているバージョンのリストについては、 IBM Cloud Provider プラグインのリリースを参照してください。

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

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

ステップ 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 が優先されます。

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

同じ 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 という変数ファイルを作成します。

以下のサンプルは、定義する変数をリストしています。

// 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 Configuration Language (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 を実行します。

次のステップ

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