주:

Terraform 테스트 프레임워크 및 Oracle Cloud Infrastructure DevOps를 사용하여 Terraform 검증 파이프라인 구축

소개

조직은 Terraform 모듈을 사용하여 복잡한 리소스 프로비저닝을 관리하고 개발자가 원하는 인프라 배포에 필요한 매개변수를 입력하는 간단한 인터페이스를 제공합니다. 모듈은 코드 재사용을 용이하게 하며 조직에게 3계층 웹 애플리케이션, 클라우드 네트워킹 환경 또는 데이터 분석 파이프라인과 같은 일반적인 워크로드의 배포를 표준화하는 방법을 제공합니다. Terraform 모듈을 개발할 때 작성자는 일반적으로 수동 테스트로 시작합니다. 여기에는 구문 검증을 위한 terraform validate, 실행 계획을 미리 보기 위한 terraform plan, terraform apply와 같은 명령을 사용한 후 OCI(Oracle Cloud Infrastructure) 콘솔에서 리소스 구성을 수동으로 검사하는 과정이 포함됩니다. 그러나 수동 테스트는 인적 오류가 발생하기 쉽고 확장이 불가능하며 의도하지 않은 문제가 발생할 수 있습니다. 모듈은 조직 내 여러 팀에서 사용되므로 릴리스 전에 변경사항을 철저히 테스트하는 것이 중요합니다.

Terraform 테스트는 모듈 작성자가 Terraform 모듈에 대한 단위 및 통합 테스트를 수행하도록 설계된 새로운 테스트 프레임워크입니다. 모듈에 정의된 대로 기반 구조를 생성하고, 기반 구조에 대한 검증 검사를 수행하고, 테스트 통과 또는 실패 여부에 관계없이 테스트 리소스를 삭제할 수 있습니다. 또한 Terraform 테스트는 리소스를 삭제할 수 없는 경우 경고를 제공합니다. Terraform 모듈과 동일한 HashiCorp HCL(구성 언어) 구문을 사용하면 작성자가 다른 도구나 프로그래밍 언어를 배울 필요가 최소화됩니다.

각 Terraform 테스트는 테스트 파일에 있습니다. Terraform은 .tftest.hcl 또는 .tftest.json 파일 확장자를 기준으로 테스트 파일을 검색합니다. 모든 테스트 파일은 다음과 같이 루트 레벨 속성 및 블록으로 구성됩니다.

Terraform은 run 블록을 순차적으로 수행하여 구성 디렉토리에서 실행 중인 일련의 Terraform 명령을 모방합니다. Terraform은 테스트 프로세스 시작 시 이러한 블록 내의 모든 값을 평가하므로 variablesprovider 블록이 배열되는 순서는 중요하지 않습니다. 명확성을 위해 테스트 파일 시작 부분에 variablesprovider 블록을 배치하는 것이 좋습니다.

목표

필요 조건

작업 1: 리소스 생성을 검증하는 Terraform 테스트 작성

  1. Terraform 테스트 파일의 기본 구조를 다룹니다. 다음과 같은 Terraform 구성의 기능을 확인하기 위한 몇 가지 기본 테스트를 작성해 보겠습니다. 다음 Terraform 구성은 표준 계층의 OCI 오브젝트 스토리지 버킷을 생성합니다.

    #main.tf
    
    resource "oci_objectstorage_bucket" "test_bucket" {
    
        compartment_id = var.compartment_id
        name = var.bucket_name
        namespace = var.bucket_namespace
        storage_tier = var.bucket_storage_tier
        versioning = var.bucket_versioning
    }
    
  2. 필수 변수를 사용하여 var.tf 파일을 생성합니다.

    variable compartment_id { default = "<compartment-ocid>" }
    variable region { default = "<region>" }
    variable bucket_name { default = "<bucket-name>"}
    variable bucket_namespace { default = "<object-storage-namespace>"}
    variable bucket_access_type { default = "ObjectRead"}
    variable bucket_storage_tier { default = "Standard"}
    variable bucket_versioning {default = "Enabled"}
    
  3. 리소스 주체 권한 부여로 OCI Terraform 제공자를 구성하면 제공자가 제공자 정의 내에서 인증서를 제공하지 않고도 API 호출을 수행할 수 있습니다. OCI 제공자에 대한 리소스 주체 권한 부여를 설정하려면 리소스 주체 권한 부여를 참조하십시오.

  4. tests 디렉토리에 Terraform 테스트 파일을 생성합니다. 다음은 디렉토리 구조의 예입니다.

    ├── main.tf 
    └── tests 
    └── test.tftest.hcl
    
  5. 생성된 버킷의 계층이 표준인지 여부를 확인하는 test.tftest.hcl 파일을 업데이트합니다.

    # test.tftest.hcl
    
    run "valid_bucket_tier" {
    
      command = plan
    
      assert {
        condition     = oci_objectstorage_bucket.test_bucket.storage_tier == "Standard"
        error_message = "bucket tier is not standard"
      }
    
    }
    

    주: 버킷의 스토리지 계층이 표준이 아닌 경우 테스트가 실패합니다.

  6. 위의 Terraform 파일을 OCI 코드 저장소로 푸시합니다. 이 코드 저장소는 CI/CD 파이프라인과 함께 사용합니다.

작업 2: Terraform 구성 검증을 위한 OCI DevOps 빌드 파이프라인

build_spec.yaml 파일에서 terraform initterraform validate 명령은 Terraform을 초기화하고 구성이 적합한지 확인하는 데 사용됩니다. 그런 다음 terraform test 명령은 구성된 테스트를 실행합니다. 테라폼 테스트가 실패하면 파이프라인도 실패합니다.

version: 0.1
component: build
timeoutInSeconds: 10000
shell: bash      
failImmediatelyOnError: true

steps:
  - type: Command
    name: "Initialize Terraform"
    command: |
      terraform init
      terraform validate
  - type: Command
    name: "Test Terraform"
    command: |
      terraform test 

다음 단계

Terraform 구성에서 간단한 검증 테스트를 수행했습니다. 통합 테스트, 단위 테스트, 엔드 투 엔드 테스트 등과 같은 다양한 유형의 테스트를 수행할 수 있습니다. 자세한 내용은 Terraform Tests를 참조하십시오.

이 Terraform 검증 파이프라인은 애플리케이션 CI/CD 파이프라인과 통합할 수 있습니다. Terraform 검증 파이프라인은 이전 단계에서 아티팩트를 가져와서 변경사항을 구현하기 전에 구성을 테스트합니다.

확인

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 살펴보거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하십시오. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.