Terraform을 사용하여 계정에서 Activity Tracker Event Routing 구성하기

IBM Cloud®의 Terraform은 IaC(Infrastructure as Code) 프린시펄을 준수하는 복잡한 멀티티어 클라우드 환경을 신속하게 빌드할 수 있도록 IBM Cloud 서비스의 예측 가능하고 일관성 있는 프로비저닝을 가능하게 해줍니다. IBM Cloud CLI 또는 API 및 SDK를 사용하는 것과 마찬가지로 HashiCorp 구성 언어(HCL)를 사용하여 Activity Tracker Event Routing 리소스의 생성, 업데이트 및 삭제를 자동화할 수 있습니다.

또는 사전 구축된 오픈 소스 및 엔터프라이즈용 테라폼 IBM 모듈(TIM)을 사용하여 다음을 수행할 수 있습니다. IBM Cloud 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 버전 0.12.x, 0.13.x 및 0.14.x만 지원합니다. 지원되는 Terraform 버전을 선택해야 합니다.

  3. Terraform zip 파일을 추출하고 파일을 terraform 디렉토리에 복사하십시오.

  4. 환경 PATH 변수를 Terraform 파일로 설정하십시오.

    export PATH=$PATH:<terraform-directory>/terraform
    
  5. Verify that the installation is successful by using a terraform command.

    ./terraform
    

2단계. IBM Cloud 제공자 플러그인 설정

Terraform CLI 설치가 완료된 후에는 IBM Cloud에서 리소스 및 서비스에 대한 작업을 시작할 수 있도록 Terraform용 IBM Cloud 제공자 플러그인을 설정해야 합니다. 지원되는 버전 목록은 IBM Cloud 공급자 플러그인 릴리스를 참조하세요.

IBM Cloud 제공자 플러그인의 설정은 사용할 Terraform CLI 버전에 따라 다릅니다. Terraform 버전 0.13.x 이상에서 Terraform 구성 파일을 실행하려면 Terraform용 IBM Cloud 제공자 플러그인이 필요하지 않습니다. 자세한 정보는 Terraform v0.13.x 이상을 참조하십시오.

예를 들어, Terraform 버전 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. Git 저장소 또는 Terraform이 설정된 폴더에 versions.tf 파일을 저장하십시오.

IBM Cloud 모듈에서 Terraform을 사용하는 경우 versions.tf 파일을 모든 모듈 폴더에 추가해야 합니다. 공급자 레지스트리에서 Terraform 공급자 블록을 참조할 수 있습니다. Activity Tracker Event Routing 구성의 경우, 일반적인 IBM Cloud Activity Tracker Event Routing 구성을 위해 사전 빌드되고 테스트된 모듈을 제공하는 IBM Cloud Activity Tracker Event Routing 용 Terraform IBM 모듈을 사용할 수 있습니다.

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 파일을 사용하십시오.

다음 단계를 완료하십시오.

  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 을 구성합니다. 자세한 내용은 테라폼 문서를 참조하세요.

IBM Cloud 공급자 리소스 직접 사용

다음의 코드는 계정 설정 구성을 정의하기 위한 샘플 구성 파일을 표시합니다.

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

Terraform IBM 모듈 사용

또는 IBM Cloud 모범 사례에 따라 사전 구축된 구성을 제공하는 IBM Cloud Activity Tracker Event Routing 용 Terraform IBM 모듈을 사용할 수 있습니다.

module "activity_tracker" {
  source  = "terraform-ibm-modules/activity-tracker/ibm"
  version = "X.Y.Z" # Replace with a specific release version

  cos_targets = [{
    bucket_name   = var.cos_bucket_name
    endpoint      = var.cos_endpoint
    instance_id   = var.cos_target_crn
    target_region = "us-south"
    target_name   = "<Target-Name>"
  }]

  activity_tracker_routes = [{
    route_name = "<Route-Name>"
    locations  = ["eu-de"]
    target_ids = [module.activity_tracker.activity_tracker_targets[var.cos_bucket_name].id]
  }]
}

7단계. 리소스 프로비저닝

다음 단계를 완료하십시오.

  1. Terraform CLI를 초기화하십시오.

    ./terraform init
    
  2. Terraform 실행 플랜을 작성하십시오. Terraform 실행 플랜은 계정에 Activity Tracker 인스턴스, 리소스 키 및 IAM 액세스 정책을 작성하기 위해 실행해야 하는 모든 조치를 요약한 것입니다.

    ./terraform plan
    
  3. 리소스를 작성하십시오.

    ./terraform apply
    

    리소스를 삭제하려면 ./terraform destroy를 실행하십시오.

다음에 수행할 작업

리소스가 작성되었는지 확인하십시오.

Terraform IBM 모듈(TIM)레지스트리에서 사용 가능한 모든 모듈을 살펴보세요.