Terraform AzAPI 공급자 개요
AzAPI 공급자는 Azure ARM REST API 위에 있는 얇은 계층입니다. API 버전을 사용하여 모든 Azure 리소스 유형을 관리할 수 있으므로 Azure 내에서 최신 기능을 활용할 수 있습니다. AzAPI는 자체적으로 또는 AzureRM 공급자와 함께 사용하도록 설계된 일류 공급자입니다.
리소스
업데이트를 요구하지 않고 모든 Azure 리소스 및 기능을 관리할 수 있도록 AzAPI 공급자는 다음과 같은 일반 리소스를 포함합니다.
리소스 이름 | 설명 |
---|---|
azapi_resource | 전체 CRUD를 사용하여 Azure(컨트롤 플레인) 리소스(API)를 완전히 관리하는 데 사용됩니다. 예제 사용 사례: 새 미리 보기 서비스 기존 서비스에 추가된 새 기능 현재 다루지 않는 기존 기능/서비스 |
azapi_update_resource | 전체 CRUD가 없는 리소스 또는 리소스의 일부를 관리하는 데 사용됩니다. 예제 사용 사례: 기존 서비스의 새 속성 업데이트 DNS SOA 레코드와 같이 미리 만든 자식 리소스를 업데이트합니다. |
azapi_resource_action | 리소스의 수명 주기를 관리하지 않고 리소스에 대해 단일 작업을 수행하는 데 사용됩니다. 예제 사용 사례: Virtual Machine 종료 Key Vault에 비밀 추가 |
azapi_data_plane_resource | Azure 데이터 평면 리소스의 특정 하위 집합 을 관리하는 데 사용됩니다. 예제 사용 사례: KeyVault 인증서 연락처 Synapse 작업 영역 라이브러리 |
사용 계층 구조
전반적으로 사용량은 다음 단계를 따라야 합니다.
- 항상 내에서 가능한
azapi_resource
한 많은 작업을 수행하는 것이 좋습니다. - 리소스 종류가 존재하지
azapi_resource
않지만 지원되는azapi_data_plane_resource
형식 중 하나에 속하는 경우 대신 사용합니다. - 리소스가 이미 AzureRM에 있거나 내에서
azapi_resource
액세스할 수 없는 속성이 있는 경우 이러한 특정 속성에 액세스하는 데 사용합니다azapi_update_resource
. 지원하거나azapi_data_plane_resource
지원하지 않는 리소스는azapi_resource
이 리소스를 통해 업데이트할 수 없습니다. - Azure CRUD 친화적인 리소스
azapi_resource_action
를 기반으로 하지 않는 작업을 수행하려는 경우 덜azapi_update_resource
간단하지만 더 유연합니다.
리소스 구성 예제
다음 코드 조각은 AzureRM 공급자에 현재 존재하지 않는 리소스를 구성합니다.
resource "azapi_resource" "publicip" {
type = "Microsoft.Network/Customipprefixes@2021-03-01"
name = "exfullrange"
parent_id = azurerm_resource_group.example.id
location = "westus2"
body = {
properties = {
cidr = "10.0.0.0/24"
signedMessage = "Sample Message for WAN"
}
}
}
다음 코드 조각은 AzureRM의 기존 리소스에 대한 미리 보기 속성을 구성합니다.
resource "azapi_update_resource" "test" {
type = "Microsoft.ContainerRegistry/registries@2020-11-01-preview"
resource_id = azurerm_container_registry.acr.id
body = {
properties = {
anonymousPullEnabled = var.bool_anonymous_pull
}
}
}
다음 코드 조각은 기존 AzureRM 리소스에 대한 리소스 작업을 구성합니다.
resource "azapi_resource_action" "vm_shutdown" {
type = "Microsoft.Compute/virtualMachines@2023-07-01"
resource_id = azurerm_linux_virtual_machine.example.id
action = "powerOff”
}
다음 코드 조각은 데이터 평면에서 프로비전되어 AzureRM 공급자에 현재 존재하지 않는 리소스를 구성합니다.
resource "azapi_data_plane_resource" "dataset" {
type = "Microsoft.Synapse/workspaces/datasets@2020-12-01"
parent_id = trimprefix(data.azurerm_synapse_workspace.example.connectivity_endpoints.dev, "https://")
name = "example-dataset"
body = {
properties = {
type = "AzureBlob",
typeProperties = {
folderPath = {
value = "@dataset().MyFolderPath"
type = "Expression"
}
fileName = {
value = "@dataset().MyFileName"
type = "Expression"
}
format = {
type = "TextFormat"
}
}
parameters = {
MyFolderPath = {
type = "String"
}
MyFileName = {
type = "String"
}
}
}
}
}
AzAPI 공급자를 사용한 인증
AzAPI 공급자는 AzureRM 공급자와 동일한 인증 방법을 사용하도록 설정합니다. 인증 옵션에 대한 자세한 내용은 Azure에 Terraform 인증을 참조하세요.
AzAPI 공급자 사용의 이점
AzAPI 공급자는 다음과 같은 이점을 제공합니다.
- 모든 Azure 컨트롤 플레인 서비스를 지원합니다.
- 서비스 및 기능 미리 보기
- 모든 API 버전
- 전체 Terraform 상태 파일 충실도
- 속성 및 값이 상태에 저장됨
- Swagger에 대한 종속성 없음
- 일반적이고 일관된 Azure 인증
- 강력한 VS Code 확장
AzAPI 공급자의 환경 및 수명 주기
이 섹션에서는 AzAPI 공급자를 사용하는 데 도움이 되는 몇 가지 도구에 대해 설명합니다.
VS Code 확장 및 언어 서버
AzAPI VS Code 확장은 다음과 같은 이점을 통해 풍부한 제작 환경을 제공합니다.
- 사용 가능한 모든 리소스 종류 및 API 버전을 나열합니다.
- 모든 리소스에 대해 허용되는 속성 및 값의 자동 완성입니다.
- 속성을 마우스로 가리킬 때 힌트를 표시합니다.
- 구문 유효성 검사
- 코드 샘플을 사용하여 자동 완성
AzAPI2AzureRM 마이그레이션 도구
AzureRM 공급자는 Azure 리소스를 관리하기 위한 가장 통합된 Terraform 환경을 제공합니다. 따라서 AzAPI 및 AzureRM 공급자의 권장 사용은 다음과 같습니다.
- 서비스 또는 기능이 미리 보기 상태인 동안 AzAPI 공급자를 사용합니다.
- 서비스가 공식적으로 릴리스되면 AzureRM 공급자를 사용합니다.
AzAPI2AzureRM 도구는 AzAPI 공급자에서 AzureRM 공급자로 마이그레이션할 수 있도록 설계되었습니다.
AzAPI2AzureRM은 AzAPI 리소스를 AzureRM 리소스로 변환하는 프로세스를 자동화하는 오픈 소스 도구입니다.
AzAPI2AzureRM에는 계획 및 마이그레이션의 두 가지 모드가 있습니다.
- 계획은 마이그레이션할 수 있는 AzAPI 리소스를 표시합니다.
- AzAPI 리소스를 HCL 파일과 상태 모두에서 AzureRM 리소스로 마이그레이션합니다.
AzAPI2AzureRM은 마이그레이션 후에 Terraform 구성 및 상태가 실제 상태에 맞춰지도록 합니다. 마이그레이션을 완료한 후 실행 terraform plan
하여 상태 업데이트의 유효성을 검사하여 변경된 내용이 없는지 확인할 수 있습니다.
AzAPI 공급자 사용
Terraform 구성에 AzAPI 공급자를 추가합니다.
terraform { required_providers { azapi = { source = "Azure/azapi" } } } provider "azapi" { # More information on the authentication methods supported by # the AzureRM Provider can be found here: # https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs # subscription_id = "..." # client_id = "..." # client_secret = "..." # tenant_id = "..." }
다음 예제 코드와 같이 하나 이상의 AzAPI 리소스를 선언합니다.
resource "azapi_resource" "example" { name = "example" parent_id = data.azurerm_machine_learning_workspace.existing.id type = "Microsoft.MachineLearningServices/workspaces/computes@2021-07-01" location = "eastus" body = { properties = { computeType = "ComputeInstance" disableLocalAuth = true properties = { vmSize = "STANDARD_NC6" } } } }