다음을 통해 공유


Terraform용 Azure Export를 사용하여 사용자 지정된 리소스 선택 및 이름 지정

Terraform용 Azure Export는 내보내는 리소스를 사용자 지정하는 다양한 옵션을 제공합니다.

이 문서에서는 각 옵션에 대한 장단점을 알아봅니다.

  • UI 사용
  • 쿼리 모드 사용
  • 매핑 파일 사용

사용자 인터페이스 사용

대화형 모드에서 Terraform용 Azure Export를 실행하면 지정된 리소스(실행할 때 지정한 매개 변수를 통해)가 표시됩니다. 기본적으로 모든 리소스가 내보내집니다.

삭제리소스를 건너뛰거나 포함할 때 토글 역할을 합니다. 리소스를 내보내지 않도록 제거하려면 화살표 키를 사용하여 원하는 리소스를 선택하고 Delete 키를 누릅니다. 리소스가 "Skip"을 표시하도록 업데이트됩니다.

건너뛰기 작업을 실행 취소하려면 건너뛴 리소스가 선택되어 있는지 확인하고 Delete 키를 다시 누릅니다.

장점:

  • 단일 토글 키를 사용해야 합니다.
  • 명령을 실행하기 전에 원하는 리소스를 알 필요가 없습니다.

단점:

  • 스크롤하고 건너뛸 리소스가 많은 경우 작업이 시간이 오래 걸릴 수 있습니다.

쿼리 모드 사용

Azure Resource Graph 쿼리 구문을 사용하여 필터를 적용하는 것은 필요한 필터를 정확히 아는 강력한 기술입니다.

aztfexport query [option] <ARG_where_predicate>

예를 들어 네트워크 리소스를 포함하여 많은 리소스가 있는 리소스 그룹이 있다고 myResourceGroup 가정해 보겠습니다. 네트워크 리소스만 내보내려면 다음 구문을 사용할 수 있습니다.

aztfexport query -n "resourceGroup =~ 'myResourceGroup' and type contains 'Microsoft.Network'"

장점:

  • 수동 편집이 필요하지 않은 단일 명령입니다.
  • 무제한 필터를 지원합니다.
  • 많은 양의 리소스를 효율적으로 처리합니다.

단점:

  • 내보내야 하는 리소스를 쉽게 제외할 수 있습니다.
  • Azure Resource Graph 구문에 대한 지식이 필요합니다.

매핑 파일 사용

다음 구문에서는 리소스 매핑 파일에 정의된 리소스 집합을 내보내는 기본 사항을 보여 줍니다.

aztfexport mapping-file [option] <resource_mapping_file>

대화형 또는 비대화형 모드에서 매핑 파일을 사용할 수 있습니다.

  • 대화형 모드: 리소스 목록 보기에서 대화형으로 실행할 때 s 키를 누릅니다.
  • 비대화형 모드: 플래그를 추가하여 모든 내보내기 명령(resource, resource-group, query, mapping file)에서 매핑 파일을 생성할 --generate-mapping-file 수 있습니다.

사용 사례에 내보내기 전 수정이 필요한 경우 매핑 파일을 수동으로 구성하거나 편집할 수 있습니다. 다음은 사용자 고유의 매핑 파일을 수동으로 편집하려는 경우의 몇 가지 예입니다.

사용 사례 단계
리소스 그룹에 많은 리소스가 있지만 선택한 몇 개만 내보내면 됩니다. 선택한 편집기에서 JSON 개체를 삭제하고 내보내기 전에 파일을 저장합니다.
모든 리소스의 이름을 일관된 방식으로 변경하려고 합니다. resource-name 회사 규정 준수 표준과 일치하는 이름으로 속성을 변경합니다.
네트워킹 또는 컴퓨팅과 같은 리소스 종류별로 리소스 집합을 리팩터링해야 합니다. 편집기를 사용하여 모든 Microsoft.Network 리소스 또는 Microsoft.Compute 리소스를 찾습니다.

예를 들어 가상 머신이 포함된 리소스 그룹에 대해 다음 명령을 실행한다고 가정해 보겠습니다.

aztfexport rg --generate-mapping-file --non-interactive myResourceGroup

결과는 다음 JSON 파일과 유사합니다.

{
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-MyResourceGroup/extensions/OmsAgentForLinux": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-MyResourceGroup/extensions/OmsAgentForLinux",
		"resource_type": "azurerm_virtual_machine_extension",
		"resource_name": "res-0"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup",
		"resource_type": "azurerm_resource_group",
		"resource_name": "res-1"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/sshPublicKeys/vm-MyResourceGroup_key": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/sshPublicKeys/vm-MyResourceGroup_key",
		"resource_type": "azurerm_ssh_public_key",
		"resource_name": "res-2"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-MyResourceGroup": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-MyResourceGroup",
		"resource_type": "azurerm_linux_virtual_machine",
		"resource_name": "res-3"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-myResourceGroup-vm-d146": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-myResourceGroup-vm-d146",
		"resource_type": "azurerm_network_interface",
		"resource_name": "res-4"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-myResourceGroup-vm-d146/networkSecurityGroups/L3N1YnNjcmlwdGlvbnMvZGJmM2I2Y2ItYzFkMC00ZDA0LTk0YjktNTE1MDliOGQzM2ZkL3Jlc291cmNlR3JvdXBzL2hhc2hpY29uZi12bS1kZW1vL3Byb3ZpZGVycy9NaWNyb3NvZnQuTmV0d29yay9uZXR3b3JrU2VjdXJpdHlHcm91cHMvdm0taGFzaGljb25mLXZtLWRlbW8tbnNn": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-myResourceGroup-vm-d146|/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkSecurityGroups/vm-MyResourceGroup-nsg",
		"resource_type": "azurerm_network_interface_security_group_association",
		"resource_name": "res-5"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkSecurityGroups/vm-MyResourceGroup-nsg": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkSecurityGroups/vm-MyResourceGroup-nsg",
		"resource_type": "azurerm_network_security_group",
		"resource_name": "res-6"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/publicIPAddresses/vm-MyResourceGroup-ip": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/publicIPAddresses/vm-MyResourceGroup-ip",
		"resource_type": "azurerm_public_ip",
		"resource_name": "res-7"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyResourceGroup-vnet": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyResourceGroup-vnet",
		"resource_type": "azurerm_virtual_network",
		"resource_name": "res-8"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyResourceGroup-vnet/subnets/default": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyResourceGroup-vnet/subnets/default",
		"resource_type": "azurerm_subnet",
		"resource_name": "res-9"
	}
}

매핑 파일의 개체 값만 중요합니다. 키(기본값: Azure resource_id)는 이 모드의 식별자일 뿐입니다.

이제 리소스 그룹 및 컴퓨팅 관련 리소스를 유지하고 값을 수정 resource_name 하려고 합니다.

다음과 같이 매핑 파일을 업데이트할 수 있습니다.

{
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup",
		"resource_type": "azurerm_resource_group",
		"resource_name": "myResourceGroup"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
		"resource_type": "azurerm_linux_virtual_machine",
		"resource_name": "myVM"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/sshPublicKeys/myKey": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/sshPublicKeys/myKey",
		"resource_type": "azurerm_ssh_public_key",
		"resource_name": "myKey"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-myResourceGroup/extensions/OmsAgentForLinux": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-myResourceGroup/extensions/OmsAgentForLinux",
		"resource_type": "azurerm_virtual_machine_extension",
		"resource_name": "myVMExtension"
	}
}

매핑 파일을 편집한 후 다음 명령을 사용하여 매핑 파일을 내보냅니다.

aztfexport map -n "aztfexportResourceMapping.json"

장점:

  • 파일을 편집하고 있으므로 편집기를 사용하여 제거하거나 편집해야 하는 항목을 찾아서 바꿀 수 있습니다.
  • JSON 출력을 사용하면 필터링할 스크립팅과 같은 고유한 기능을 사용할 수 있습니다.
  • 명명 표준에 맞게 리소스 이름을 바꿀 수 있습니다.
  • JSON을 여러 매핑 파일로 리팩터링할 수 있습니다.
  • 많은 양의 리소스를 잘 처리합니다.

단점:

  • 간단한 시나리오의 경우 이 기술은 과잉 사용일 수 있습니다.
  • 수동으로 수정해야 합니다.

Terraform 가져오기 블록 사용

Terraform v1.5 이상과 함께 실행 v0.13 aztfexport 하거나 --generate-import-block 더 큰 경우 명령은 파일과 import.tf 함께 매핑 파일을 생성합니다. 파일에는 import.tf 매핑할 수 있었던 각 리소스에 대한 가져오기 블록이 포함됩니다 aztfexport . 이 시점부터 구성의 동작은 기존 가져오기 블록 워크플로와 동일합니다. 완료하려면 다음을 실행합니다 terraform plan.

그런 다음 결과 내보내기에서 리소스를 삭제하거나 필터링하려면 리소스의 ID 및 기타 정보가 포함된 블록을 삭제할 수 있습니다.

가져오기 블록 및 Azure 내보내기 비교

일반적인 질문은 Terraform용 Azure Export와 가져오기 블록의 차이점입니다. 알아차렸던 두 도구 간의 이점은 다음과 같습니다.

  • Azure Export for Terraform은 리소스 검색을 지원합니다. 원하는 리소스를 검색하고 내보내는 데 사용할 수 있는 다양한 방법이 있습니다.
  • Terraform용 Azure Export는 수동 및 자동화된 수단을 통해서도 리소스 필터링을 제공합니다.
  • Terraform용 Azure Export는 출력을 사용하여 가져오기 블록을 자동으로 생성하여 제작 프로세스에 시간과 노력을 절약합니다.
  • Terraform 가져오기 블록은 Terraform에서 기본적으로 지원되기 때문에 사용하기 쉽습니다. 함께 결합, 우리는 둘 다의 사용은 당신에게 엄청난 혜택을 제공한다고 생각합니다.

장점:

  • 네이티브 Terraform 지원 워크플로. JSON이 필요하지 않습니다.
  • 파일을 편집하고 있으므로 편집기를 사용하여 제거하거나 편집해야 하는 항목을 찾아서 바꿀 수 있습니다.
  • 명명 표준에 맞게 리소스 이름을 바꿀 수 있습니다.
  • 많은 양의 리소스를 잘 처리합니다.

단점:

  • 간단한 시나리오의 경우 이 기술은 과잉 사용일 수 있습니다.
  • 필터링하려면 수동으로 수정해야 합니다.
  • 이전 버전의 Terraform에서는 작동하지 않습니다.

요약

이 문서에서는 Terraform용 Azure Export를 사용하여 내보낼 때 리소스를 필터링하는 다양한 옵션에 대해 알아보았습니다.

다음 단계