리소스 프로비전

Terraform 또는 Terragrunt를 사용하여 리소스를 프로비전할 수 있습니다. Terraform를 사용하는 경우 규정된 순서로 각 디렉토리의 구성을 적용해야 합니다. Terragrunt를 사용하면 단일 명령으로 모든 리소스를 프로비전할 수 있습니다.

Terraform 상태 파일 정보

Terraform는 관리 기반 구조 리소스를 추적하고, 배치된 리소스를 구성에 매핑하고, 메타 데이터를 추적하고, 대형 기반 구조 배치의 성능을 향상시키기 위한 상태 정보를 저장합니다.

기본적으로 terraform.tfstate 파일은 로컬 호스트에 저장됩니다. 이 기본 동작은 여러 사용자가 제공된 구성에 정의된 리소스를 만들고 삭제해야 하는 IT 환경에서 최적화되지 않습니다. 다중 사용자 환경에서 리소스 배치 및 관리를 제어하려면 Terraform 상태 파일을 Oracle Cloud Infrastructure Object Storage에 저장하고 모든 사용자 간에 상태 파일과 잠금 파일을 공유합니다. Using the Object Store for Terraform State Files을 참조하십시오.

Terragrunt를 사용하여 리소스 프로비전

Terragrunt를 사용하여 단일 명령을 사용하여 토폴로지의 모든 리소스를 프로비전할 수 있습니다. 내부적으로 Terragrunt은 Terraform 명령을 호출하고 구성에 정의된 모든 리소스 간 종속성을 처리합니다.

  1. examples/full-deployment 디렉토리로 이동합니다.
  2. 다음 명령을 실행하여 Terraform 모듈을 초기화합니다.
    make init
    명령은 각 디렉토리에서 terraform init를 실행하여 구성의 모든 Terraform 모듈을 초기화합니다.
  3. 다음 명령을 실행하여 리소스를 프로비전합니다.
    terragrunt apply-all
    Terragrunt는 정의된 시퀀스에서 구성의 모든 Terraform 모듈에 대해 terraform apply 명령을 호출합니다. 모든 리소스가 배치됩니다.

Terraform를 사용하여 리소스 프로비전

Terraform를 사용하여 리소스를 프로비전하도록 선택한 경우, 규정된 순서로 각 디렉토리에 개별적으로 Terraform 구성을 적용해야 합니다.

  1. examples/full-deployment 아래의 다음 각 하위 디렉토리에 examples/full-deployment/terraform.tfvars를 복사합니다.
    common/compartments
    common/configuration
    management/access
    management/network
    management/server_attachment
    management/servers
    peering/network
    peering/routing
    tenant/network
    tenant/servers

    examples/full-deployment 디렉토리로 이동하고 다음 명령을 입력하여 terraform.tfvars를 필요한 모든 하위 디렉토리에 복사합니다. 가독성을 위해 각 행의 끝에 백슬래시(\) 가 있는 여러 행에 명령이 표시됩니다. 백슬래시 문자를 포함한 모든 행을 복사하고 단일 명령으로 붙여 넣습니다.

    xargs -n 1 cp -v terraform.tfvars<<<"common/compartments/ \
    common/configuration/ management/access/ management/network/ \
    management/server_attachment/ management/servers/ peering/network/ \
    peering/routing/ tenant/network/ tenant/servers/"
  2. examples/full-deployment/common/configuration 디렉토리로 이동합니다.
  3. 다음 명령을 실행합니다.
    1. 구성을 초기화합니다.
      terraform init
    2. 구성에 정의된 리소스를 검토합니다.
      terraform plan
    3. 구성을 적용합니다.
      terraform apply
    common/configuration 디렉토리의 구성은 테넌트 vcn과 필요한 피어링 vcn 수, 각 VCN의 CIDR 크기 및 테넌트 vcn과 피어링 vcn 간의 매핑을 계산합니다. 이 구성을 적용할 때 리소스가 생성되지 않습니다. 계산 결과는 Vcn 및 기타 네트워킹 리소스가 생성될 때 사용됩니다.
  4. 규정된 실행 순서에 따라 examples/full-deployment 아래의 다음 디렉토리에서 terraform init, terraform planterraform apply 명령을 실행합니다.
    common/compartments
    peering/network
    management/network
    tenant/network
    management/access
    peering/routing
    management/servers
    management/server_attachment
    tenant/servers

    규정된 순서대로 모든 구성 디렉토리에서 terraform apply를 실행하면 토폴로지가 완전히 배치됩니다.

토폴로지 수정

토폴로지를 수정하려면 해당 Terraform 구성에서 리소스 정의를 업데이트한 다음 수정된 구성을 적용해야 합니다. 수정해야 하는 리소스 정의를 식별하려면 예제 코드, 특히 각 디렉토리에서 참조되는 Terraform 모듈 및 모듈 간 종속성을 철저히 이해해야 합니다.

토폴로지 수정 지침이 이 솔루션의 범위를 벗어납니다.

모든 리소스 제거

Terraform 또는 Terragrunt를 사용하여 배치된 모든 리소스를 쉽게 제거할 수 있습니다.

  1. examples/full-deployment 디렉토리로 이동합니다.
  2. 다음 중 하나를 수행합니다.
    • Terragrunt이 설치되어 있는 경우 다음 명령을 실행합니다.

      terragrunt destroy-all

      Terragrunt는 정의된 시퀀스에서 구성의 리소스에 대해 terraform destroy 명령을 호출합니다.

      실패한 배포나 부분 배포를 정리하기 위해 terragrunt destroy-all를 사용하려는 경우 다음 오류가 발생할 수 있습니다.

      Error: Unsupported attribute
        on management_rte_attachment.tf line 8, in module "management_rte_attachement":
         8:     data.terraform_remote_state.peering_servers.outputs.routing_instance_1_ip_id,
          |----------------
          | data.terraform_remote_state.peering_servers.outputs is object with 3 attributes
      This object does not have an attribute named "routing_instance_1_ip_id".

      이 오류가 발생할 경우 다음에 설명된 대로 각 구성 디렉토리에서 terraform destroy를 실행하여 리소스를 제거합니다.

    • Terraform CLI를 사용하여 리소스를 제거하려면 examples/full-deployment 아래의 각 구성 디렉토리에서 다음 순서로 terraform destroy를 실행하십시오.

      주:

      다음 디렉토리로 진행하기 전에 각 디렉토리에서 명령 실행이 완료될 때까지 기다립니다.
      tenant/servers
      management/server_attachment
      management/servers
      peering/routing
      management/access
      tenant/network
      management/network
      peering/network
      common/compartments
      common/configuration