다음을 통해 공유


고급 시나리오에서 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 문제를 엽니다.

쿼리 추가 사용자 지정

아래에는 몇 가지 추가 고급 플래그를 활용하는 방법에 대해 설명합니다.

클라우드 환경 선택

퍼블릭 클라우드 이외의 다른 환경을 지정하려면 플래그를 --env 사용합니다. 예를 들어 미국 정부의 경우:

aztfexport [command] --env="usgovernment" [further options] <scope>

Terraform 공급자 버전 변경

기본 AzureRM 설정 또는 AzAPI 버전에 더 간단하게 액세스하려면 플래그를 --provider-version 사용합니다. 예를 들어 버전1.10.0AzAPI 있는 경우:

aztfexport [command] --provider-name=azapi --provider-version=1.10.0 [further options] <scope>

인증

인증 구성을 관리하기 위한 다양한 플래그가 있습니다. 일부 플래그는 다음과 같이 v0.15늦게 추가되었습니다.

  • --env
  • --tenant-id
  • --auxiliary-tenant-ids
  • --client-id
  • --client-id-file-path
  • --client-certificate
  • --client-certificate-path
  • --client-certificate-password
  • --client-secret
  • --client-secret-file-path
  • --oidc-request-token
  • --oidc-request-url
  • --oidc-token
  • --oidc-token-file-path
  • --use-managed-identity-cred (기본값은 false)입니다.
  • --use-azure-cli-cred (기본값: true)
  • --use-oidc-cred (기본값은 false)입니다.

위의 플래그는 공급자의 azurerm 명명 규칙을 따릅니다. 모든 플래그는 공급자에 정의된 azurerm 동일한 환경 변수를 포함하는 환경 변수를 통해 구성할 수 있습니다.

aztfexport 는 각 자격 증명 형식을 사용하여 다음 순서로 인증을 시도하여 토큰이 제공될 때 중지합니다.

  1. 클라이언트 암호
  2. 클라이언트 인증서
  3. OIDC
  4. 관리 ID
  5. Azure CLI

하나 이상의 use-xxx-cred true가 아닌 경우 해당 자격 증명 형식은 건너뜁히게 됩니다. 이 동작은 공급자와 동일합니다.

공급자 구성은 .에서 aztfexport모든 인증 구성을 재정의할 수 있습니다. 이렇게 하면 사용자가 공급자 간에 aztfexport 서로 다른 자격 증명 형식을 사용할 수 있습니다.

역할 할당 포함

리소스 범위를 내보낼 때 역할 할당을 포함하려면 다음 --include-role-assignment 명령을 사용합니다.

aztfexport [command] --include-role-assignment [further options] <scope>

다음 단계