Share via


고급 시나리오에서 Terraform용 Azure 내보내기 사용

이 문서에서는 Terraform용 Azure Export를 사용하여 몇 가지 고급 작업을 수행하는 방법을 설명합니다.

  • 기존 Terraform 환경에 리소스를 추가합니다.
  • 원격 백 엔드 상태를 사용하여 기존 Terraform 환경으로 리소스 내보내기

기존 리소스에 추가

기본적으로 Terraform용 Azure Export는 기존 사용자 파일과의 충돌을 방지하기 위해 출력 디렉터리가 비어 있는지 확인합니다. 리소스를 기존 상태 파일로 가져와야 하는 경우 플래그를 추가합니다 --append .

aztfexport [command] --append <scope>

플래그가 --append 지정되면 Terraform용 Azure Export는 현재 디렉터리의 파일에 기존 provider 또는 terraform 블록이 있는지 확인합니다. 그렇지 않은 경우 도구는 각 블록에 대한 파일을 만든 다음 내보내기를 진행합니다. 출력 디렉터리에 상태 파일이 있는 경우 내보낸 모든 리소스를 상태 파일로 가져옵니다.

또한 생성된 파일에는 .aztfexport 잠재적인 파일 이름 충돌을 방지하기 위해 확장명 앞에 접미사가 있습니다(예: main.aztfexport.tf ).

여러 번 실행하면 명령이 실행 aztfexport --append 될 때마다 내보내기 결과가 파일에 추가된 단일 main.aztfexport.tf 항목이 만들어집니다.

사용자 고유의 Terraform 구성 가져오기

기본적으로 Terraform용 Azure Export는 로컬 백 엔드를 사용하여 상태 파일을 저장합니다. 그러나 원격 백 엔드를 사용할 수도 있습니다. Terraform용 Azure Export를 사용하면 직접 정의하거나 provider 전달할 블록을 정의할 수 있습니다terraform.

대상 디렉터리 내의 파일에서 .tf 이러한 블록을 정의하고, 플래그를 사용하여 --append 내보내고, 구성이 지정된 백 엔드 및 공급자 버전(제공된 경우)으로 내보냅니다.

Important

내보낼 때 지정된 버전의 AzureRM이 설치된 버전과 일치하지 않으면 명령이 실패합니다.

Azure Storage 예제

이 예제는 Azure Storage의 Store Terraform 상태 문서를 기반으로 합니다.

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~>3.0"
    }
  }
    backend "azurerm" {
        resource_group_name  = "tfstate"
        storage_account_name = "storageacc"
        container_name       = "tfstate"
        key                  = "terraform.tfstate"
    }

}

provider "azurerm" {
  features {}
}

Terraform Cloud 예제

terraform {
  cloud {
    organization = "aztfexport-test"
    workspaces {
      name = "aztfexport-playground"
    }
  }
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "~>3.0"
    }
  }
}
provider "azurerm" {
  features {
  }
}

인라인 환경

백 엔드 인라인으로 내보내려면 해당 옵션과 --backend-config 옵션을 사용합니다--backend-type. Terraform 백 엔드 구성에 대한 자세한 내용은 Terraform 백 엔드 구성을 참조하세요.

Azure Storage 계정 예제를 사용하려면 AzureRM 백 엔드 설명서정의된 대로 다음이 필요합니다.

  • 리소스 그룹 이름
  • 스토리지 계정 이름
  • 스토리지 컨테이너 이름

다음 매개 변수를 백 엔드 형식과 함께 명령에 전달합니다.

aztfexport [subcommand] --backend-type=azurerm \
                        --backend-config=resource_group_name=<resource group name> \
                        --backend-config=storage_account_name=<account name> \
                        --backend-config=container_name=<container name> \
                        --backend-config=key=terraform.tfstate 

주요 정보:

  • 이전 예제에서는 코드가 브라우저에 잘 표시되도록 Unix 줄 연속 문자를 사용합니다. PowerShell과 같은 명령줄 환경과 일치하도록 이러한 문자를 변경하거나 명령을 한 줄로 결합해야 할 수 있습니다.
  • 백 엔드 상태가 이미 있는 경우 Terraform용 Azure Export는 새 리소스를 기존 상태와 자동으로 병합합니다. 옵션을 인라인으로 --append 지정할 필요가 없습니다.

기존 Terraform 환경으로 Azure 리소스 내보내기

이제 모든 것을 합시다! Terraform 관리로 이동해야 하는 Terraform 외부에서 새 리소스가 생성되었다고 상상해 보십시오. 섹션을 완료하려면 백 엔드가 구성되어 있는지 확인합니다. 이 자습서에서는 Azure Storage 원격 상태 자습서에 지정된 것과 동일한 구성을 사용합니다.

  1. 임시 디렉터리를 만들려는 상위 디렉터리에서 다음 명령을 실행합니다.

    aztfexport resource -o tempdir --hcl-only <resource_id>
    

    주요 정보:

    • 이 플래그는 -o 디렉터리가 없는 경우 디렉터리를 만들도록 지정합니다.
    • --hcl-only 구성된 리소스를 HCL로 내보내도록 지정하는 플래그
  2. 리소스를 추가할 수 있는지 검사한 후 생성된 매핑 파일과 --append 플래그를 활용하여 Azure Export가 기존 환경 내의 기존 원격 상태 및 공급자 버전을 준수하는지 확인합니다.

    aztfexport map --append `./tempdir/aztfexportResourceMapping.json`
    
  3. terraform init를 실행 합니다.

    terraform init --upgrade
    
  4. terraform 계획을 실행합니다.

  5. Terraform용 Azure Export는 변경이 필요하지 않음을 표시해야 합니다.

축하합니다! 인프라 및 해당 상태가 Terraform 환경에 성공적으로 추가되었습니다.

계획이 문제가 발생하는 경우 Terraform용 Azure Export 개념을 참조하여 생성된 --hcl-only코드 배포와 관련된 제한 사항을 이해합니다. 해당 문서가 도움이 되지 않는 경우 GitHub 문제를 엽니다.

다음 단계