Terraform용 Azure 내보내기 작동 방식
이 문서에서는 Terraform 용 Azure 내보내기 워크플로를 소개합니다. 이 문서에서는 도구의 모범 사례 지침, 현재 제한 사항 및 이러한 제한을 완화하는 방법에 대해 알아봅니다.
대화형 모드
기본적으로 Terraform용 Azure Export는 대화형 모드에서 실행됩니다. 대화형 모드에서 실행하면 사용 가능한 바로 가기 키가 디스플레이 아래쪽에 나열됩니다.
작업 | 바로 가기 키 |
---|---|
탐색 | |
리소스 목록에서 이전 항목을 선택합니다. | 별 - 또는- k |
리소스 목록에서 다음 항목을 선택합니다. | · -또는- j |
리소스 목록의 이전 페이지로 이동합니다. | ← -또는- h -또는- Page Up |
리소스 목록에서 다음 페이지로 이동합니다. | → -또는- l -또는- 페이지 아래로 |
리소스 목록의 시작 화면으로 이동합니다. | g -or- Home |
리소스 목록의 끝으로 이동합니다. | G -또는- End |
건너뛸 리소스 선택 | |
리소스 건너뛰기(또는 "건너뛰기"로 표시된 경우 건너뛰기 해제) | Delete |
필터 작업 | |
리소스 목록에서 텍스트로 필터를 정의합니다. | / |
현재 필터 지우기 | Esc |
작업 저장 | |
리소스 목록의 매핑 파일을 저장합니다. 출력 파일은 건너뛰기(필터링은 아님)의 영향을 받습니다. | s |
리소스를 상태로 내보내고(지정되지 않은 경우 --hcl-only ) 구성을 생성합니다. |
w |
사용자 환경 | |
현재 리소스에 대한 권장 사항을 표시합니다. | r |
리소스 내보내기 오류(있는 경우)를 표시합니다. | e |
도움말을 표시합니다. | ? |
종료 | |
대화형 모드를 종료합니다. | Q |
각 리소스에 대해 Terraform용 Azure Export는 해당 Terraform 리소스 유형을 인식하려고 시도합니다. 일치 항목을 찾으면 줄에 다음 표시 💡기가 표시됩니다.
리소스를 확인할 수 없는 경우 Terraform 리소스 주소를 다음 형식 <resource type>.<resource name>
으로 입력해야 합니다. 예를 들어 azurerm_linux_virtual_machine.test
구성 파일에 사용되는 가상 머신의 이름을 참조하는 동안 test
azurerm_linux_virtual_machine Terraform 리소스 유형을 참조합니다.
선택한 리소스에 사용 가능한 리소스 종류를 보려면 r 키를 누릅니다.
경우에 따라 해당 Terraform 리소스가 없는 Azure 리소스가 있습니다(예: 리소스에 Terraform 지원이 없는 경우). 일부 리소스는 가상 머신을 프로비전할 때 생성되는 OS 디스크 리소스와 같은 다른 리소스를 프로비전하는 부작용으로 생성될 수도 있습니다. 이러한 경우 아무 것도 할당하지 않고 리소스를 건너뛸 수 있습니다.
가져올 모든 리소스를 통과한 후 w 키를 눌러 Terraform 구성 생성을 시작하고(선택되지 않은 경우--hcl-only
) Terraform 상태로 가져오기를 시작합니다.
비대화형 모드
기본적으로 Terraform용 Azure Export는 대화형 모드에서 실행됩니다. 도구가 비대화형 모드에서 실행되도록 지정하려면 플래그를 지정합니다 --non-interactive
.
aztfexport [command] --non-interactive <scope>
Important
Terraform용 Azure Export를 실행하는 디렉터리가 비어 있지 않으면 플래그를 --overwrite
사용하여 플래그를 --hcl-only
추가해야 합니다.
핵심 워크플로에 대한 모범 사례
기본 수준에서 Azure Export의 모든 사용자는 다음 두 옵션 간의 결정에 직면합니다.
다음 하위 섹션에서는 시나리오에 따라 취할 옵션에 대한 지침을 제공합니다.
인프라 관리
구성된 리소스가 원하는 방식으로 환경 내에서 동작하는지 확인하지 않은 경우 상태를 내보내지 않아도 될 수 있습니다.
워크플로를 사용하여 Terraform terraform init plan apply
의 리소스 집합을 관리하려는 경우 상태로 내보내는 것이 중요합니다.
리소스를 아직 관리하지 않으려면 플래그를 --hcl-only
전달하는 것이 좋습니다.
기존 인프라
기존 Terraform 환경으로 내보내는 시나리오에서는 특히 기존 환경에 추가하기 전에 같은 terraform 계획으로 생각하는 --hcl-only
것이 유용할 수 있습니다.
이 terraform apply
명령은 해당 구성이 기존 상태로 연결되는 동안 리소스를 내보내는 것과 같습니다. 이 시나리오에서 매핑 파일을 사용하면 런타임을 절약하여 리소스를 나열하고 매핑할 수 있습니다.
인프라 검색
환경 내에 어떤 리소스가 있는지 잘 모르는 경우 플래그를 지정하여 --generate-mapping-file
확인할 수 있습니다. 이 주제에 대한 자세한 내용은 Terraform용 Azure Export를 사용하여 사용자 지정된 리소스 선택 및 이름 지정 탐색을 참조 하세요.
제한 사항
Terraform용 Azure Export는 Azure 인프라를 Terraform 코드 및 상태로 변환하려는 복잡한 도구입니다. 현재 알려진 제한 사항은 다음 하위 섹션에서 설명합니다.
쓰기 전용 속성
AzureRM 내의 특정 속성은 쓰기 전용이며 Azure Export for Terraform이 만드는 생성된 코드에 포함되지 않습니다. 이 문제는 HCL 코드로 내보낸 후 속성을 정의하여 해결됩니다.
속성 간 제약 조건
AzureRM 공급자는 서로 충돌하는 두 개의 속성을 설정할 수 있습니다. Terraform용 Azure Export에서 충돌하는 속성을 읽을 때 사용자가 하나만 구성했음에도 불구하고 두 속성을 동일한 값으로 설정할 수 있습니다. 여러 속성 간 제약 조건이 동일한 생성된 구성 내에 있을 때 추가적인 복잡성이 발생합니다. 이 문제를 완화하려면 구성 내에서 속성 간 충돌이 있는 위치를 알고 있어야 합니다.
리소스 범위를 벗어난 인프라
Azure Export for Terraform을 사용하여 리소스 범위를 대상으로 지정하는 경우 구성에 필요한 리소스가 지정된 범위 외부에 있을 수 있습니다. 한 가지 예는 역할 할당입니다. 사용자는 범위를 벗어난 리소스를 식별해야 합니다.
쓰기 전용 속성
Azure Export는 구성 내에서 쓰기 전용 속성(예: 암호)을 생성할 수 없습니다. 새 리소스 집합을 만들려면 쓰기 전용 속성에 대해 알고 구성에서 정의해야 합니다.
코딩 표준과 일치하도록 코드 수정
사용자가 코딩 표준을 준수하도록 코드를 수정하려는 경우 몇 가지 필요한 작업이 있습니다. 이러한 단계는 사용자가 비샌드박스 환경에서 코드를 사용하려는 경우에만 필요합니다.
속성 정의 리소스
Azure의 특정 리소스는 부모 Terraform 리소스의 속성 또는 개별 Terraform 리소스로 정의할 수 있습니다. 한 가지 예는 서브넷입니다. Terraform용 Azure Export는 리소스를 개별 리소스로 정의하지만 기존 코딩 구성과 일치시키는 것이 가장 좋습니다.
명시적 종속성
Terraform용 Azure Export는 현재 명시적 종속성만 선언할 수 있습니다. 필요한 암시적 종속성을 포함하도록 코드를 리팩터링하려면 리소스 간의 관계 매핑을 알고 있어야 합니다.
하드 코딩된 값
Terraform용 Azure Export는 현재 하드 코딩된 문자열을 생성합니다. 모범 사례로 이러한 값을 변수로 리팩터링해야 합니다. 또한 플래그를 --full-properties
사용하여 모든 속성을 노출하는 경우 생성된 구성에서 일부 중요한 정보(예: 비밀)를 볼 수 있습니다. 권장 사례를 사용하여 이 코드의 가시성을 보호합니다.