-
2025-05-03
이 빠른 시작에서는 Azure Portal, Azure CLI, PowerShell, Bicep, ARM 템플릿 및 Terraform을 사용하여 NAT 게이트웨이를 만드는 방법을 알아봅니다. NAT 게이트웨이 서비스는 Azure의 가상 머신에 확장 가능한 아웃바운드 연결을 제공합니다.
필수 조건
- 활성 구독이 있는 Azure 계정. 무료로 계정을 만듭니다.
활성 구독이 있는 Azure 계정. 무료로 계정을 만듭니다.
Azure Cloud Shell 또는 Azure PowerShell.
이 빠른 시작의 단계에서는 Azure Cloud Shell에서 대화형으로 Azure PowerShell cmdlet을 실행합니다. Cloud Shell에서 명령을 실행하려면 코드 블록의 오른쪽 위 모서리에서 Cloudshell 열기를 선택합니다. 복사를 선택하여 코드를 복사한 다음, 복사한 코드를 Cloud Shell에 붙여넣어 실행합니다. Cloud Shell은 Azure Portal 내에서도 실행할 수 있습니다.
Azure PowerShell을 로컬로 설치하여 cmdlet을 실행할 수도 있습니다. 이 문서에서 설명할 단계를 실행하기 위해서는 Azure PowerShell 모듈 버전 5.4.1 또는 그 이후 버전이 필요합니다. 설치되어 있는 버전을 확인하려면
Get-Module -ListAvailable Az
을 실행합니다. 업그레이드가 필요한 경우 Azure PowerShell 모듈 업데이트를 참조하세요.
Azure 계정이 없는 경우 시작하기 전에 체험 계정을 만듭니다.
Bash 환경을 Azure Cloud Shell에서 사용합니다. 자세한 내용은 Azure Cloud Shell 시작을 참조하세요.
CLI 참조 명령을 로컬에서 실행하려면 Azure CLI를 설치하십시오. Windows 또는 macOS에서 실행하는 경우 Docker 컨테이너에서 Azure CLI를 실행하는 것이 좋습니다. 자세한 내용은 Docker 컨테이너에서 Azure CLI를 실행하는 방법을 참조하세요.
로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 Azure에 인증을 참조하세요.
메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI로 확장 사용 및 관리를 참조하세요.
az version을 실행하여 설치된 버전과 관련 종속 라이브러리를 확인합니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.
- Azure 구독이 없는 경우, 시작하기 전에 무료 계정을 만드십시오.
Azure 구독이 없는 경우, 시작하기 전에 무료 계정을 만드십시오.
활성 구독이 있는 Azure 계정. 무료로 계정을 만들 수 있습니다.
NAT 게이트웨이 만들기
NAT 게이트웨이 리소스와 기타 리소스를 배포하기 전에, 배포된 리소스를 포함하려면 리소스 그룹이 필요합니다. 다음 단계에서는 리소스 그룹, NAT 게이트웨이 리소스, 공용 IP 주소를 만듭니다. 하나 이상의 공용 IP 주소 리소스, 공용 IP 접두사 또는 둘 다를 사용할 수 있습니다.
공용 IP 접두사와 NAT 게이트웨이에 대한 자세한 내용은 NAT 게이트웨이 관리를 참조하세요.
포털 맨 위에 있는 검색 상자에 NAT 게이트웨이를 입력합니다. 검색 결과에서 NAT 게이트웨이를 선택합니다.
+ 만들기를 선택합니다.
NAT(Network Address Translation) 게이트웨이 만들기의 기본 사항 탭에서 다음 정보를 입력하거나 선택합니다.
설정 값 프로젝트 세부 정보 구독 Azure 구독을 선택합니다. 리소스 그룹 새로 만들기를 선택합니다.
test-rg를 입력합니다.
확인을 선택합니다.인스턴스 세부 정보 NAT Gateway 이름 nat-gateway를 입력합니다. 지역 미국 동부 2 선택 가용성 영역 영역 없음을 선택합니다. TCP 유휴 시간 제한(분) 4(기본값)를 그대로 둡니다. 가용성 영역과 NAT 게이트웨이에 대한 자세한 내용은 NAT 게이트웨이 및 가용성 영역을 참조하세요.
아웃바운드 IP 탭을 선택하거나 페이지 하단에 있는 다음: 아웃바운드 IP 단추를 선택합니다.
아웃바운드 IP 탭에서 다음 정보를 입력하거나 선택합니다.
설정 값 공용 IP 주소 새 공용 IP 주소 만들기를 선택합니다.
이름에 public-ip-nat를 입력합니다.
확인을 선택합니다.검토 + 만들기 탭을 선택하거나, 페이지 아래쪽에서 파란색 검토 + 만들기 단추를 선택합니다.
선택하고생성합니다.
가상 네트워크 및 베스천 호스트 만들기
다음 절차에서는 리소스 서브넷, Azure Bastion 서브넷 및 Azure Bastion 호스트를 사용하여 가상 네트워크를 만듭니다.
포털에서 가상 네트워크를 검색하여 선택합니다.
가상 네트워크 페이지에서 + 만들기를 선택합니다.
가상 네트워크 만들기의 기본 사항 탭에서 다음 정보를 입력하거나 선택합니다.
설정 가치 프로젝트 세부 정보 구독 구독을 선택합니다. 리소스 그룹 test-rg를 선택합니다. 인스턴스 세부 정보 이름 vnet-1을 입력합니다. 지역 (미국) 미국 동부 2를 선택합니다. 다음을 선택하여 보안 탭으로 이동합니다.
보안 탭의 Azure Bastion 섹션에서 Azure Bastion 사용을 선택합니다.
Azure Bastion은 브라우저를 사용하여 개인 IP 주소를 사용하여 SSH(보안 셸) 또는 RDP(원격 데스크톱 프로토콜)를 통해 가상 네트워크의 VM에 연결합니다. VM에는 공용 IP 주소, 클라이언트 소프트웨어 또는 특수 구성이 필요하지 않습니다. Azure Bastion에 대한 자세한 내용은 Azure Bastion을 참조하세요.
Azure Bastion에서 다음 정보를 입력하거나 선택합니다.
설정 가치 Azure Bastion 호스트 이름 bastion을 입력합니다. Azure Bastion 공용 IP 주소 공용 IP 주소 만들기를 선택합니다.
이름에 public-ip-bastion을 입력합니다.
확인을 선택합니다.다음을 선택하여 IP 주소 탭으로 이동합니다.
서브넷의 주소 공간 입력란에서 기본 서브넷을 선택합니다.
서브넷 편집에서 다음 정보를 입력하거나 선택합니다.
설정 가치 서브넷 목적 기본값으로 둡니다. 이름 subnet-1을 입력합니다. IPv4 IPv4 주소 범위 기본값인 10.0.0.0/16은 그대로 둡니다. 시작 주소 기본값인 10.0.0.0을 그대로 둡니다. 크기 기본값인 /24(256개 주소)를 그대로 둡니다. 보안 NAT 게이트웨이 nat-gateway를 선택합니다. 저장을 선택합니다.
화면 아래쪽에서 검토 + 만들기를 선택하고 유효성 검사를 통과하면 만들기를 선택합니다.
테스트 가상 머신 만들기
다음 절차에서는 가상 네트워크에 vm-1이라는 테스트 VM(가상 머신)을 만듭니다.
포털에서 가상 머신을 검색하여 선택합니다.
가상 머신에서 + 만들기를 선택한 다음, +Azure 가상 머신을 선택합니다.
가상 머신 만들기의 기본 탭에서 다음 정보를 입력하거나 선택합니다.
설정 가치 프로젝트 세부 정보 구독 구독을 선택합니다. 리소스 그룹 test-rg를 선택합니다. 인스턴스 세부 정보 가상 머신 이름 vm-1을 입력합니다. 지역 미국 동부 2를 선택합니다. 가용성 옵션 인프라 중복이 필요하지 않습니다.를 선택합니다. 보안 유형 기본값인 표준을 그대로 둡니다. 이미지 Ubuntu Server 22.04 LTS - x64 Gen2를 선택합니다. VM 아키텍처 x64(기본값)를 그대로 둡니다. 크기 크기를 선택합니다. 관리자 계정 인증 유형 암호를 선택합니다. 사용자 이름 azureuser를 입력합니다. 암호 암호를 입력합니다. 암호 확인 암호를 다시 입력합니다. 인바운드 포트 규칙 공용 인바운드 포트 없음을 선택합니다. 페이지 위쪽에 있는 네트워킹 탭을 선택합니다.
네트워킹 탭에서 다음 정보를 입력하거나 선택합니다.
설정 가치 네트워크 인터페이스 가상 네트워크 vnet-1을 선택합니다. 서브넷 subnet-1(10.0.0.0/24)을 선택합니다. 공용 IP 없음을 선택합니다. NIC 네트워크 보안 그룹 고급을 선택합니다. 네트워크 보안 그룹 구성 새로 만들기를 선택합니다.
이름으로 nsg-1을 입력합니다.
나머지는 기본값으로 두고 확인을 선택합니다.나머지 설정은 기본값으로 두고 검토 + 만들기를 선택합니다.
설정을 검토하고 생성를 선택합니다.
비고
베스천 호스트가 있는 가상 네트워크의 가상 머신에는 공용 IP 주소가 필요하지 않습니다. Bastion은 공용 IP를 제공하고 VM은 개인 IP를 사용하여 네트워크 내에서 통신합니다. 베스천 호스트된 가상 네트워크의 모든 VM에서 공용 IP를 제거할 수 있습니다. 자세한 내용은 Azure VM에서 공용 IP 주소 연결 해제를 참조하세요.
비고
Azure는 공용 IP 주소가 할당되지 않았거나 내부 기본 Azure Load Balancer의 백 엔드 풀에 있는 VM에 대한 기본 아웃바운드 액세스 IP를 제공합니다. 기본 아웃바운드 액세스 IP 메커니즘은 구성할 수 없는 아웃바운드 IP 주소를 제공합니다.
다음 이벤트 중 하나가 발생하면 기본 아웃바운드 액세스 IP가 사용하지 않도록 설정됩니다.
- 공용 IP 주소가 VM에 할당됩니다.
- VM은 아웃바운드 규칙 유무에 관계없이 표준 Load Balancer의 백 엔드 풀에 배치됩니다.
- Azure NAT Gateway 리소스는 VM의 서브넷에 할당됩니다.
유연한 오케스트레이션 모드에서 가상 머신 확장 집합을 사용하여 만드는 VM에는 기본 아웃바운드 액세스 권한이 없습니다.
Azure의 아웃바운드 연결에 대한 자세한 내용은 Azure의 기본 아웃바운드 액세스 및 아웃바운드 연결에 SNAT(원본 네트워크 주소 변환) 사용을 참조하세요.
리소스 그룹 만들기
New-AzResourceGroup을 사용하여 리소스 그룹을 만듭니다. Azure 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다.
다음 예제에서는 eastus2 위치에 test-rg라는 리소스 그룹을 만듭니다.
$rsg = @{
Name = 'test-rg'
Location = 'eastus2'
}
New-AzResourceGroup @rsg
NAT 게이트웨이 만들기
이 섹션에서는 NAT 게이트웨이와 지원 리소스를 만듭니다.
## Create public IP address for NAT gateway ##
$ip = @{
Name = 'public-ip-nat'
ResourceGroupName = 'test-rg'
Location = 'eastus2'
Sku = 'Standard'
AllocationMethod = 'Static'
Zone = 1,2,3
}
$publicIP = New-AzPublicIpAddress @ip
## Create NAT gateway resource ##
$nat = @{
ResourceGroupName = 'test-rg'
Name = 'nat-gateway'
IdleTimeoutInMinutes = '10'
Sku = 'Standard'
Location = 'eastus2'
PublicIpAddress = $publicIP
}
$natGateway = New-AzNatGateway @nat
## Create subnet config and associate NAT gateway to subnet##
$subnet = @{
Name = 'subnet-1'
AddressPrefix = '10.0.0.0/24'
NatGateway = $natGateway
}
$subnetConfig = New-AzVirtualNetworkSubnetConfig @subnet
## Create Azure Bastion subnet ##
$bastsubnet = @{
Name = 'AzureBastionSubnet'
AddressPrefix = '10.0.1.0/26'
}
$bastsubnetConfig = New-AzVirtualNetworkSubnetConfig @bastsubnet
## Create the virtual network ##
$net = @{
Name = 'vnet-1'
ResourceGroupName = 'test-rg'
Location = 'eastus2'
AddressPrefix = '10.0.0.0/16'
Subnet = $subnetConfig,$bastsubnetConfig
}
$vnet = New-AzVirtualNetwork @net
## Create public IP address for bastion host ##
$ip = @{
Name = 'public-ip'
ResourceGroupName = 'test-rg'
Location = 'eastus2'
Sku = 'Standard'
AllocationMethod = 'Static'
Zone = 1,2,3
}
$publicip = New-AzPublicIpAddress @ip
## Create bastion host ##
$bastion = @{
Name = 'bastion'
ResourceGroupName = 'test-rg'
PublicIpAddressRgName = 'test-rg'
PublicIpAddressName = 'public-ip'
VirtualNetworkRgName = 'test-rg'
VirtualNetworkName = 'vnet-1'
Sku = 'Basic'
}
New-AzBastion @bastion
배스천 호스트는 배포하는 데 몇 분 정도 걸릴 수 있습니다. 배스천 호스트가 배포된 이후에 다음 섹션으로 이동하기 전에 기다리세요.
가상 머신 만들기
이 섹션에서는 NAT 게이트웨이를 테스트하고 아웃바운드 연결의 공용 IP 주소를 확인하는 가상 머신을 만듭니다.
# Set the administrator and password for the VM ##
$cred = Get-Credential
## Place the virtual network into a variable ##
$vnet = Get-AzVirtualNetwork -Name 'vnet-1' -ResourceGroupName 'test-rg'
## Create network interface for virtual machine ##
$nic = @{
Name = "nic-1"
ResourceGroupName = 'test-rg'
Location = 'eastus2'
Subnet = $vnet.Subnets[0]
}
$nicVM = New-AzNetworkInterface @nic
## Create a virtual machine configuration ##
$vmsz = @{
VMName = 'vm-1'
VMSize = 'Standard_DS1_v2'
}
$vmos = @{
ComputerName = 'vm-1'
Credential = $cred
}
$vmimage = @{
PublisherName = 'Canonical'
Offer = '0001-com-ubuntu-server-jammy'
Skus = '22_04-lts-gen2'
Version = 'latest'
}
$vmConfig = New-AzVMConfig @vmsz `
| Set-AzVMOperatingSystem @vmos -Linux `
| Set-AzVMSourceImage @vmimage `
| Add-AzVMNetworkInterface -Id $nicVM.Id
## Create the virtual machine ##
$vm = @{
ResourceGroupName = 'test-rg'
Location = 'eastus2'
VM = $vmConfig
}
New-AzVM @vm
다음 섹션으로 이동하기 전에 가상 머신 만들기가 완료될 때까지 기다립니다.
리소스 그룹 만들기
az group create를 사용하여 리소스 그룹을 만듭니다. Azure 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다.
az group create \
--name test-rg \
--___location eastus2
NAT 게이트웨이 만들기
이 섹션에서는 NAT 게이트웨이와 지원 리소스를 만듭니다.
공용 IP 주소 만들기
인터넷에 액세스하려면 NAT 게이트웨이에 대한 하나 이상의 공용 IP 주소가 필요합니다. az network public-ip create를 사용하여 공용 IP 주소 리소스를 만듭니다.
az network public-ip create \
--resource-group test-rg \
--name public-ip-nat \
--sku Standard \
--allocation-method Static \
--___location eastus2 \
--zone 1 2 3
NAT 게이트웨이 리소스 만들기
az network nat gateway create를 사용하여 NAT 게이트웨이 리소스를 만듭니다. NAT 게이트웨이는 이전 단계에서 만든 공용 IP 주소를 사용합니다. 유휴 시간 제한은 10분으로 설정됩니다.
az network nat gateway create \
--resource-group test-rg \
--name nat-gateway \
--public-ip-addresses public-ip-nat \
--idle-timeout 10
가상 네트워크 및 서브넷 만들기
az network vnet create를 사용하여 서브넷-1이라는 서브넷을 사용하여 vnet-1이라는 가상 네트워크를 만듭니다. 가상 네트워크의 IP 주소 공간은 10.0.0.0/16입니다. 가상 네트워크 내의 서브넷은 10.0.0.0/24입니다.
az network vnet create \
--resource-group test-rg \
--name vnet-1 \
--address-prefix 10.0.0.0/16 \
--subnet-name subnet-1 \
--subnet-prefixes 10.0.0.0/24
Azure Bastion 서브넷 만들기
az network vnet subnet create를 사용하여 AzureBastionSubnet이라는 Azure Bastion 서브넷을 만듭니다.
az network vnet subnet create \
--name AzureBastionSubnet \
--resource-group test-rg \
--vnet-name vnet-1 \
--address-prefix 10.0.1.0/26
NAT 게이트웨이를 서브넷에 연결
az network vnet subnet update를 사용하여 NAT 게이트웨이를 서브넷에 연결합니다.
az network vnet subnet update \
--resource-group test-rg \
--vnet-name vnet-1 \
--name subnet-1 \
--nat-gateway nat-gateway
Bastion 호스트에 대한 공용 IP 주소 만들기
az network public-ip create를 사용하여 Bastion 호스트에 대한 공용 IP 주소를 만듭니다.
az network public-ip create \
--resource-group test-rg \
--name public-ip \
--sku Standard \
--___location eastus2 \
--zone 1 2 3
Bastion 호스트 만들기
az network bastion create를 사용하여 Azure Bastion 호스트를 만듭니다.
az network bastion create \
--name bastion \
--public-ip-address public-ip \
--resource-group test-rg \
--vnet-name vnet-1 \
--___location eastus2
Bastion 호스트를 배포하는 데 몇 분 정도 걸릴 수 있습니다. 다음 섹션으로 이동하기 전에 Bastion 호스트가 배포되기를 기다립니다.
가상 머신 만들기
vm-1이라는 가상 머신을 만들어 NAT 게이트웨이를 테스트하고 아웃바운드 연결의 공용 IP 주소를 확인합니다. az vm create 사용:
az vm create \
--resource-group test-rg \
--name vm-1 \
--image Ubuntu2204 \
--admin-username azureuser \
--authentication-type password \
--public-ip-address "" \
--subnet subnet-1 \
--vnet-name vnet-1
다음 섹션으로 이동하기 전에 가상 머신 만들기가 완료될 때까지 기다립니다.
Azure Resource Manager 템플릿은 프로젝트에 대한 인프라 및 구성을 정의하는 JSON(JavaScript Object Notation) 파일입니다. 템플릿은 선언적 구문을 사용합니다. 배포를 만들기 위한 프로그래밍 명령의 시퀀스를 작성하지 않고 의도하는 배포를 설명합니다.
환경이 필수 조건을 충족하고 ARM 템플릿 사용에 익숙한 경우 Azure에 배포 단추를 선택합니다. 그러면 Azure Portal에서 템플릿이 열립니다.
템플릿 검토
이 빠른 시작에서 사용되는 템플릿은 Azure 빠른 시작 템플릿에서 나온 것입니다.
이 템플릿은 다음을 만들도록 구성되어 있습니다.
가상 네트워크
NAT 게이트웨이 리소스
Ubuntu 가상 머신
Ubuntu 가상 머신은 NAT 게이트웨이 리소스와 연결된 서브넷에 배포됩니다.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.25.53.49325",
"templateHash": "15583664434476061565"
}
},
"parameters": {
"vmname": {
"type": "string",
"defaultValue": "vm-1",
"metadata": {
"description": "Name of the virtual machine"
}
},
"vmsize": {
"type": "string",
"defaultValue": "Standard_D2s_v3",
"metadata": {
"description": "Size of the virtual machine"
}
},
"vnetname": {
"type": "string",
"defaultValue": "vnet-1",
"metadata": {
"description": "Name of the virtual network"
}
},
"subnetname": {
"type": "string",
"defaultValue": "subnet-1",
"metadata": {
"description": "Name of the subnet for virtual network"
}
},
"vnetaddressspace": {
"type": "string",
"defaultValue": "10.0.0.0/16",
"metadata": {
"description": "Address space for virtual network"
}
},
"vnetsubnetprefix": {
"type": "string",
"defaultValue": "10.0.0.0/24",
"metadata": {
"description": "Subnet prefix for virtual network"
}
},
"natgatewayname": {
"type": "string",
"defaultValue": "nat-gateway",
"metadata": {
"description": "Name of the NAT gateway"
}
},
"networkinterfacename": {
"type": "string",
"defaultValue": "nic-1",
"metadata": {
"description": "Name of the virtual machine nic"
}
},
"publicipname": {
"type": "string",
"defaultValue": "public-ip-nat",
"metadata": {
"description": "Name of the NAT gateway public IP"
}
},
"nsgname": {
"type": "string",
"defaultValue": "nsg-1",
"metadata": {
"description": "Name of the virtual machine NSG"
}
},
"adminusername": {
"type": "string",
"metadata": {
"description": "Administrator username for virtual machine"
}
},
"adminpassword": {
"type": "securestring",
"metadata": {
"description": "Administrator password for virtual machine"
}
},
"___location": {
"type": "string",
"defaultValue": "[resourceGroup().___location]",
"metadata": {
"description": "Name of resource group"
}
}
},
"resources": [
{
"type": "Microsoft.Network/networkSecurityGroups",
"apiVersion": "2021-05-01",
"name": "[parameters('nsgname')]",
"___location": "[parameters('___location')]",
"properties": {
"securityRules": [
{
"name": "SSH",
"properties": {
"protocol": "Tcp",
"sourcePortRange": "*",
"destinationPortRange": "22",
"sourceAddressPrefix": "*",
"destinationAddressPrefix": "*",
"access": "Allow",
"priority": 300,
"direction": "Inbound"
}
}
]
}
},
{
"type": "Microsoft.Network/publicIPAddresses",
"apiVersion": "2021-05-01",
"name": "[parameters('publicipname')]",
"___location": "[parameters('___location')]",
"sku": {
"name": "Standard"
},
"properties": {
"publicIPAddressVersion": "IPv4",
"publicIPAllocationMethod": "Static",
"idleTimeoutInMinutes": 4
}
},
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2021-11-01",
"name": "[parameters('vmname')]",
"___location": "[parameters('___location')]",
"properties": {
"hardwareProfile": {
"vmSize": "[parameters('vmsize')]"
},
"storageProfile": {
"imageReference": {
"publisher": "Canonical",
"offer": "0001-com-ubuntu-server-jammy",
"sku": "22_04-lts-gen2",
"version": "latest"
},
"osDisk": {
"osType": "Linux",
"name": "[format('{0}_disk1', parameters('vmname'))]",
"createOption": "FromImage",
"caching": "ReadWrite",
"managedDisk": {
"storageAccountType": "Premium_LRS"
},
"diskSizeGB": 30
}
},
"osProfile": {
"computerName": "[parameters('vmname')]",
"adminUsername": "[parameters('adminusername')]",
"adminPassword": "[parameters('adminpassword')]",
"linuxConfiguration": {
"disablePasswordAuthentication": false,
"provisionVMAgent": true
},
"allowExtensionOperations": true
},
"networkProfile": {
"networkInterfaces": [
{
"id": "[resourceId('Microsoft.Network/networkInterfaces', parameters('networkinterfacename'))]"
}
]
}
},
"dependsOn": [
"[resourceId('Microsoft.Network/networkInterfaces', parameters('networkinterfacename'))]"
]
},
{
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2021-05-01",
"name": "[parameters('vnetname')]",
"___location": "[parameters('___location')]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[parameters('vnetaddressspace')]"
]
},
"subnets": [
{
"name": "[parameters('subnetname')]",
"properties": {
"addressPrefix": "[parameters('vnetsubnetprefix')]",
"natGateway": {
"id": "[resourceId('Microsoft.Network/natGateways', parameters('natgatewayname'))]"
},
"privateEndpointNetworkPolicies": "Enabled",
"privateLinkServiceNetworkPolicies": "Enabled"
}
}
],
"enableDdosProtection": false,
"enableVmProtection": false
},
"dependsOn": [
"[resourceId('Microsoft.Network/natGateways', parameters('natgatewayname'))]"
]
},
{
"type": "Microsoft.Network/natGateways",
"apiVersion": "2021-05-01",
"name": "[parameters('natgatewayname')]",
"___location": "[parameters('___location')]",
"sku": {
"name": "Standard"
},
"properties": {
"idleTimeoutInMinutes": 4,
"publicIpAddresses": [
{
"id": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicipname'))]"
}
]
},
"dependsOn": [
"[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicipname'))]"
]
},
{
"type": "Microsoft.Network/virtualNetworks/subnets",
"apiVersion": "2021-05-01",
"name": "[format('{0}/{1}', parameters('vnetname'), 'subnet-1')]",
"properties": {
"addressPrefix": "[parameters('vnetsubnetprefix')]",
"natGateway": {
"id": "[resourceId('Microsoft.Network/natGateways', parameters('natgatewayname'))]"
},
"privateEndpointNetworkPolicies": "Enabled",
"privateLinkServiceNetworkPolicies": "Enabled"
},
"dependsOn": [
"[resourceId('Microsoft.Network/natGateways', parameters('natgatewayname'))]",
"[resourceId('Microsoft.Network/virtualNetworks', parameters('vnetname'))]"
]
},
{
"type": "Microsoft.Network/networkInterfaces",
"apiVersion": "2021-05-01",
"name": "[parameters('networkinterfacename')]",
"___location": "[parameters('___location')]",
"properties": {
"ipConfigurations": [
{
"name": "ipconfig-1",
"properties": {
"privateIPAddress": "10.0.0.4",
"privateIPAllocationMethod": "Dynamic",
"subnet": {
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('vnetname'), 'subnet-1')]"
},
"primary": true,
"privateIPAddressVersion": "IPv4"
}
}
],
"enableAcceleratedNetworking": false,
"enableIPForwarding": false,
"networkSecurityGroup": {
"id": "[resourceId('Microsoft.Network/networkSecurityGroups', parameters('nsgname'))]"
}
},
"dependsOn": [
"[resourceId('Microsoft.Network/networkSecurityGroups', parameters('nsgname'))]",
"[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('vnetname'), 'subnet-1')]"
]
}
],
"outputs": {
"___location": {
"type": "string",
"value": "[parameters('___location')]"
},
"name": {
"type": "string",
"value": "[parameters('natgatewayname')]"
},
"resourceGroupName": {
"type": "string",
"value": "[resourceGroup().name]"
},
"resourceId": {
"type": "string",
"value": "[resourceId('Microsoft.Network/natGateways', parameters('natgatewayname'))]"
}
}
}
템플릿에는 아홉 개의 Azure 리소스가 정의되어 있습니다.
Microsoft.Network/networkSecurityGroups: 네트워크 보안 그룹을 만듭니다.
Microsoft.Network/networkSecurityGroups/securityRules: 보안 규칙을 만듭니다.
Microsoft.Network/publicIPAddresses: 공용 IP 주소를 만듭니다.
Microsoft.Network/publicIPPrefixes: 공용 IP 접두사를 만듭니다.
Microsoft.Compute/virtualMachines: 가상 머신을 만듭니다.
Microsoft.Network/virtualNetworks: 가상 네트워크를 만듭니다.
Microsoft.Network/natGateways: NAT 게이트웨이 리소스를 만듭니다.
Microsoft.Network/virtualNetworks/subnets: 가상 네트워크 서브넷을 만듭니다.
Microsoft.Network/networkinterfaces: 네트워크 인터페이스를 만듭니다.
템플릿 배포
입구
배포된 리소스 검토
Azure Portal에 로그인합니다.
왼쪽 패널에서 리소스 그룹 을 선택합니다.
이전 섹션에서 만든 리소스 그룹을 선택합니다. 기본 리소스 그룹 이름은 myResourceGroupNAT입니다.
다음 리소스가 리소스 그룹에서 만들어졌는지 확인합니다.
PowerShell
$___location = Read-Host -Prompt "Enter the ___location (i.e. westcentralus)"
$templateUri = "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.network/nat-gateway-1-vm/azuredeploy.json"
$resourceGroupName = "myResourceGroupNAT"
New-AzResourceGroup -Name $resourceGroupName -Location $___location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri $templateUri
Azure 커맨드 라인 인터페이스 (CLI)
read -p "Enter the ___location (i.e. westcentralus): " ___location
resourceGroupName="myResourceGroupNAT"
templateUri="https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.network/nat-gateway-1-vm/azuredeploy.json"
az group create \
--name $resourceGroupName \
--___location $___location
az deployment group create \
--resource-group $resourceGroupName \
--template-uri $templateUri
Bicep 파일을 검토하십시오
이 빠른 시작에서 사용되는 Bicep 파일은 Azure 빠른 시작 템플릿에서 나온 것입니다.
이 Bicep 파일은 다음을 만들도록 구성됩니다.
가상 네트워크
NAT 게이트웨이 리소스
Ubuntu 가상 머신
Ubuntu VM은 NAT 게이트웨이 리소스와 연결된 서브넷에 배포됩니다.
@description('Name of the virtual machine')
param vmname string = 'vm-1'
@description('Size of the virtual machine')
param vmsize string = 'Standard_D2s_v3'
@description('Name of the virtual network')
param vnetname string = 'vnet-1'
@description('Name of the subnet for virtual network')
param subnetname string = 'subnet-1'
@description('Address space for virtual network')
param vnetaddressspace string = '10.0.0.0/16'
@description('Subnet prefix for virtual network')
param vnetsubnetprefix string = '10.0.0.0/24'
@description('Name of the NAT gateway')
param natgatewayname string = 'nat-gateway'
@description('Name of the virtual machine nic')
param networkinterfacename string = 'nic-1'
@description('Name of the NAT gateway public IP')
param publicipname string = 'public-ip-nat'
@description('Name of the virtual machine NSG')
param nsgname string = 'nsg-1'
@description('Administrator username for virtual machine')
param adminusername string
@description('Administrator password for virtual machine')
@secure()
param adminpassword string
@description('Name of resource group')
param ___location string = resourceGroup().___location
resource nsg 'Microsoft.Network/networkSecurityGroups@2021-05-01' = {
name: nsgname
___location: ___location
properties: {
securityRules: [
{
name: 'SSH'
properties: {
protocol: 'Tcp'
sourcePortRange: '*'
destinationPortRange: '22'
sourceAddressPrefix: '*'
destinationAddressPrefix: '*'
access: 'Allow'
priority: 300
direction: 'Inbound'
}
}
]
}
}
resource publicip 'Microsoft.Network/publicIPAddresses@2021-05-01' = {
name: publicipname
___location: ___location
sku: {
name: 'Standard'
}
properties: {
publicIPAddressVersion: 'IPv4'
publicIPAllocationMethod: 'Static'
idleTimeoutInMinutes: 4
}
}
resource vm 'Microsoft.Compute/virtualMachines@2021-11-01' = {
name: vmname
___location: ___location
properties: {
hardwareProfile: {
vmSize: vmsize
}
storageProfile: {
imageReference: {
publisher: 'Canonical'
offer: '0001-com-ubuntu-server-jammy'
sku: '22_04-lts-gen2'
version: 'latest'
}
osDisk: {
osType: 'Linux'
name: '${vmname}_disk1'
createOption: 'FromImage'
caching: 'ReadWrite'
managedDisk: {
storageAccountType: 'Premium_LRS'
}
diskSizeGB: 30
}
}
osProfile: {
computerName: vmname
adminUsername: adminusername
adminPassword: adminpassword
linuxConfiguration: {
disablePasswordAuthentication: false
provisionVMAgent: true
}
allowExtensionOperations: true
}
networkProfile: {
networkInterfaces: [
{
id: networkinterface.id
}
]
}
}
}
resource vnet 'Microsoft.Network/virtualNetworks@2021-05-01' = {
name: vnetname
___location: ___location
properties: {
addressSpace: {
addressPrefixes: [
vnetaddressspace
]
}
subnets: [
{
name: subnetname
properties: {
addressPrefix: vnetsubnetprefix
natGateway: {
id: natgateway.id
}
privateEndpointNetworkPolicies: 'Enabled'
privateLinkServiceNetworkPolicies: 'Enabled'
}
}
]
enableDdosProtection: false
enableVmProtection: false
}
}
resource natgateway 'Microsoft.Network/natGateways@2021-05-01' = {
name: natgatewayname
___location: ___location
sku: {
name: 'Standard'
}
properties: {
idleTimeoutInMinutes: 4
publicIpAddresses: [
{
id: publicip.id
}
]
}
}
resource subnet 'Microsoft.Network/virtualNetworks/subnets@2021-05-01' = {
parent: vnet
name: 'subnet-1'
properties: {
addressPrefix: vnetsubnetprefix
natGateway: {
id: natgateway.id
}
privateEndpointNetworkPolicies: 'Enabled'
privateLinkServiceNetworkPolicies: 'Enabled'
}
}
resource networkinterface 'Microsoft.Network/networkInterfaces@2021-05-01' = {
name: networkinterfacename
___location: ___location
properties: {
ipConfigurations: [
{
name: 'ipconfig-1'
properties: {
privateIPAddress: '10.0.0.4'
privateIPAllocationMethod: 'Dynamic'
subnet: {
id: subnet.id
}
primary: true
privateIPAddressVersion: 'IPv4'
}
}
]
enableAcceleratedNetworking: false
enableIPForwarding: false
networkSecurityGroup: {
id: nsg.id
}
}
}
output ___location string = ___location
output name string = natgateway.name
output resourceGroupName string = resourceGroup().name
output resourceId string = natgateway.id
Bicep 파일에는 아홉 개의 Azure 리소스가 정의되어 있습니다.
Microsoft.Network/networkSecurityGroups: 네트워크 보안 그룹을 만듭니다.
Microsoft.Network/networkSecurityGroups/securityRules: 보안 규칙을 만듭니다.
Microsoft.Network/publicIPAddresses: 공용 IP 주소를 만듭니다.
Microsoft.Network/publicIPPrefixes: 공용 IP 접두사를 만듭니다.
Microsoft.Compute/virtualMachines: 가상 머신을 만듭니다.
Microsoft.Network/virtualNetworks: 가상 네트워크를 만듭니다.
Microsoft.Network/natGateways: NAT 게이트웨이 리소스를 만듭니다.
Microsoft.Network/virtualNetworks/subnets: 가상 네트워크 서브넷을 만듭니다.
Microsoft.Network/networkinterfaces: 네트워크 인터페이스를 만듭니다.
Bicep 파일을 배포하십시오.
Bicep 파일을 main.bicep으로 로컬 컴퓨터에 저장합니다.
Azure CLI 또는 Azure PowerShell을 사용하여 Bicep 파일을 배포합니다.
Azure 커맨드 라인 인터페이스 (CLI)
az group create --name exampleRG --___location eastus az deployment group create --resource-group exampleRG --template-file main.bicep --parameters adminusername=<admin-name>
PowerShell
New-AzResourceGroup -Name exampleRG -Location eastus New-AzResourceGroupDeployment -ResourceGroupName exampleRG -TemplateFile ./main.bicep -adminusername "<admin-name>"
비고
<관리자 이름>을 가상 머신의 관리자 사용자 이름으로 바꿉니다. 또한 adminpassword를 입력하라는 메시지가 표시됩니다.
배포가 완료되면 배포가 성공했음을 나타내는 메시지가 표시됩니다.
배포된 리소스 검토
Azure Portal, Azure CLI 또는 Azure PowerShell을 사용하여 리소스 그룹에 배포된 리소스를 나열합니다.
Azure 커맨드 라인 인터페이스 (CLI)
az resource list --resource-group exampleRG
PowerShell
Get-AzResource -ResourceGroupName exampleRG
이 Terraform 파일은 가상 네트워크, NAT 게이트웨이 리소스 및 Ubuntu 가상 머신을 배포합니다. Ubuntu 가상 머신은 NAT 게이트웨이 리소스와 연결된 서브넷에 배포됩니다.
또한 스크립트는 임의의 SSH 공개 키를 생성하고 보안 액세스를 위해 가상 머신과 연결합니다. 공개 키는 스크립트 실행이 끝날 때 출력됩니다.
스크립트는 AzureRM 공급자 외에도 Random 및 AzAPI 공급자를 사용합니다. 임의 공급자는 리소스 그룹 및 SSH 키에 대한 고유한 이름을 생성하는 데 사용됩니다. AzAPI 공급자는 SSH 공개 키를 생성하는 데 사용됩니다.
공개 키와 마찬가지로 스크립트를 실행할 때 생성된 리소스 그룹, 가상 네트워크, 서브넷 및 NAT 게이트웨이의 이름이 인쇄됩니다.
Terraform 을 사용하면 클라우드 인프라의 정의, 미리 보기 및 배포가 가능합니다. Terraform을 사용하는 경우 HCL 구문를 사용하여 구성 파일을 만듭니다. HCL 구문을 사용하면 클라우드 공급자(예: Azure)와 클라우드 인프라를 구성하는 요소를 지정할 수 있습니다. 구성 파일을 만든 후 배포되기 전에 인프라 변경을 미리 볼 수 있는 실행 계획를 만듭니다. 변경 내용을 확인하면 실행 계획을 적용하여 인프라를 배포합니다.
Terraform 코드 구현
비고
이 문서의 샘플 코드는 Azure Terraform GitHub 리포지토리에 있습니다.
Terraform을 사용하여 Azure 리소스를 관리하는 방법을 보여 주는 추가 문서 및 샘플 코드를 참조하세요.
샘플 Terraform 코드를 테스트하고 실행할 디렉터리를 생성한 후, 그것을 현재 디렉터리로 만드세요.
main.tf
라는 파일을 만들고 다음 코드를 삽입합니다.# Resource Group resource "azurerm_resource_group" "rg" { ___location = var.resource_group_location name = "${random_pet.prefix.id}-rg" } # Virtual Network resource "azurerm_virtual_network" "my_terraform_network" { name = "${random_pet.prefix.id}-vnet" address_space = ["10.0.0.0/16"] ___location = azurerm_resource_group.rg.___location resource_group_name = azurerm_resource_group.rg.name } # Subnet 1 resource "azurerm_subnet" "my_terraform_subnet_1" { name = "subnet-1" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.my_terraform_network.name address_prefixes = ["10.0.0.0/24"] } # Public IP address for NAT gateway resource "azurerm_public_ip" "my_public_ip" { name = "public-ip-nat" ___location = azurerm_resource_group.rg.___location resource_group_name = azurerm_resource_group.rg.name allocation_method = "Static" sku = "Standard" } # NAT Gateway resource "azurerm_nat_gateway" "my_nat_gateway" { name = "nat-gateway" ___location = azurerm_resource_group.rg.___location resource_group_name = azurerm_resource_group.rg.name } # Associate NAT Gateway with Public IP resource "azurerm_nat_gateway_public_ip_association" "example" { nat_gateway_id = azurerm_nat_gateway.my_nat_gateway.id public_ip_address_id = azurerm_public_ip.my_public_ip.id } # Associate NAT Gateway with Subnet resource "azurerm_subnet_nat_gateway_association" "example" { subnet_id = azurerm_subnet.my_terraform_subnet_1.id nat_gateway_id = azurerm_nat_gateway.my_nat_gateway.id } # Create public IP for virtual machine resource "azurerm_public_ip" "my_public_ip_vm" { name = "public-ip-vm" ___location = azurerm_resource_group.rg.___location resource_group_name = azurerm_resource_group.rg.name allocation_method = "Static" sku = "Standard" } # Create Network Security Group and rule resource "azurerm_network_security_group" "my_terraform_nsg" { name = "nsg-1" ___location = azurerm_resource_group.rg.___location resource_group_name = azurerm_resource_group.rg.name security_rule { name = "SSH" priority = 1001 direction = "Inbound" access = "Allow" protocol = "Tcp" source_port_range = "*" destination_port_range = "22" source_address_prefix = "*" destination_address_prefix = "*" } } # Create network interface resource "azurerm_network_interface" "my_terraform_nic" { name = "nic-1" ___location = azurerm_resource_group.rg.___location resource_group_name = azurerm_resource_group.rg.name ip_configuration { name = "my_nic_configuration" subnet_id = azurerm_subnet.my_terraform_subnet_1.id private_ip_address_allocation = "Dynamic" public_ip_address_id = azurerm_public_ip.my_public_ip_vm.id } } # Connect the security group to the network interface resource "azurerm_network_interface_security_group_association" "example" { network_interface_id = azurerm_network_interface.my_terraform_nic.id network_security_group_id = azurerm_network_security_group.my_terraform_nsg.id } # Generate random text for a unique storage account name resource "random_id" "random_id" { keepers = { # Generate a new ID only when a new resource group is defined resource_group = azurerm_resource_group.rg.name } byte_length = 8 } # Create storage account for boot diagnostics resource "azurerm_storage_account" "my_storage_account" { name = "diag${random_id.random_id.hex}" ___location = azurerm_resource_group.rg.___location resource_group_name = azurerm_resource_group.rg.name account_tier = "Standard" account_replication_type = "LRS" } # Create virtual machine resource "azurerm_linux_virtual_machine" "my_terraform_vm" { name = "vm-1" ___location = azurerm_resource_group.rg.___location resource_group_name = azurerm_resource_group.rg.name network_interface_ids = [azurerm_network_interface.my_terraform_nic.id] size = "Standard_DS1_v2" os_disk { name = "myOsDisk" caching = "ReadWrite" storage_account_type = "Premium_LRS" } source_image_reference { publisher = "Canonical" offer = "0001-com-ubuntu-server-jammy" sku = "22_04-lts-gen2" version = "latest" } computer_name = "hostname" admin_username = var.username admin_ssh_key { username = var.username public_key = azapi_resource_action.ssh_public_key_gen.output.publicKey } boot_diagnostics { storage_account_uri = azurerm_storage_account.my_storage_account.primary_blob_endpoint } } resource "random_pet" "prefix" { prefix = var.resource_group_name_prefix length = 1 }
outputs.tf
라는 파일을 만들고 다음 코드를 삽입합니다.output "resource_group_name" { description = "The name of the created resource group." value = azurerm_resource_group.rg.name } output "virtual_network_name" { description = "The name of the created virtual network." value = azurerm_virtual_network.my_terraform_network.name } output "subnet_name_1" { description = "The name of the created subnet 1." value = azurerm_subnet.my_terraform_subnet_1.name } output "nat_gateway"{ description = "The name of the created NAT gateway." value = azurerm_nat_gateway.my_nat_gateway.id }
providers.tf
라는 파일을 만들고 다음 코드를 삽입합니다.terraform { required_providers { azapi = { source = "azure/azapi" version = "~>1.5" } azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
ssh.tf
라는 파일을 만들고 다음 코드를 삽입합니다.resource "random_pet" "ssh_key_name" { prefix = "ssh" separator = "" } resource "azapi_resource_action" "ssh_public_key_gen" { type = "Microsoft.Compute/sshPublicKeys@2022-11-01" resource_id = azapi_resource.ssh_public_key.id action = "generateKeyPair" method = "POST" response_export_values = ["publicKey", "privateKey"] } resource "azapi_resource" "ssh_public_key" { type = "Microsoft.Compute/sshPublicKeys@2022-11-01" name = random_pet.ssh_key_name.id ___location = azurerm_resource_group.rg.___location parent_id = azurerm_resource_group.rg.id } output "key_data" { value = azapi_resource_action.ssh_public_key_gen.output.publicKey }
variables.tf
라는 파일을 만들고 다음 코드를 삽입합니다.variable "resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } variable "resource_group_name_prefix" { type = string default = "rg" description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." } variable "username" { type = string description = "The username for the local account that will be created on the new VM." default = "azureuser" }
Terraform 초기화
terraform init를 실행하여 Terraform 배포를 초기화합니다. 이 명령은 Azure 리소스를 관리하는 데 필요한 Azure 공급자를 다운로드합니다.
terraform init -upgrade
주요 정보:
-upgrade
매개 변수는 필요한 공급자 플러그 인을 구성의 버전 제약 조건을 준수하는 최신 버전으로 업그레이드합니다.
Terraform 실행 계획 만들기
terraform plan을 실행하여 실행 계획을 만듭니다.
terraform plan -out main.tfplan
주요 정보:
terraform plan
명령은 실행 계획을 만들지만 실행하지는 않습니다. 대신 구성 파일에 지정된 구성을 만드는 데 필요한 작업을 결정합니다. 이 패턴을 사용하면 실제 리소스를 변경하기 전에 실행 계획이 예상과 일치하는지 확인할 수 있습니다.- 선택 사항인
-out
매개 변수를 사용하여 계획의 출력 파일을 지정할 수 있습니다.-out
매개 변수를 사용하면 검토한 계획이 정확하게 적용됩니다.
Terraform 실행 계획 적용
terraform apply 명령어를 실행하여 실행 계획을 클라우드 인프라에 적용합니다.
terraform apply main.tfplan
주요 정보:
- 예시
terraform apply
명령은 이전에terraform plan -out main.tfplan
를 실행했다고 가정합니다. -out
매개 변수에 다른 파일 이름을 지정한 경우terraform apply
에 대한 호출에서 동일한 파일 이름을 사용합니다.-out
매개 변수를 사용하지 않은 경우 매개 변수 없이terraform apply
를 호출합니다.
결과 확인
Azure 커맨드 라인 인터페이스 (CLI)
Azure 리소스 그룹 이름을 가져옵니다.
resource_group_name=$(terraform output -raw resource_group_name)
NAT 게이트웨이 ID를 가져옵니다.
nat_gateway=$(terraform output -raw nat_gateway)
az network nat gateway show를 실행하여 NAT 게이트웨이에 대한 세부 정보를 표시합니다.
az network nat gateway show \ --resource-group $resource_group_name \ --ids $nat_gateway
PowerShell
Azure 리소스 그룹 이름을 가져옵니다.
$resource_group_name=$(terraform output -raw resource_group_name)
NAT 게이트웨이 ID를 가져옵니다.
$nat_gateway=$(terraform output -raw nat_gateway)
Get-AzNatGateway를 실행하여 NAT 게이트웨이에 대한 세부 정보를 표시합니다.
$nat = @{ Name = $nat_gateway ResourceGroupName = $resource_group_name } Get-AzNatGateway @nat
NAT 게이트웨이 테스트
이 섹션에서는 NAT 게이트웨이를 테스트합니다. 먼저 NAT 게이트웨이의 공용 IP를 검색합니다. 그런 다음 테스트 가상 머신에 연결하고 NAT 게이트웨이 공용 IP를 통해 아웃바운드 연결을 확인합니다.
포털 맨 위에 있는 검색 상자에 공용 IP를 입력합니다. 검색 결과에서 공용 IP 주소를 선택합니다.
public-ip-nat를 선택합니다.
공용 IP 주소를 기록해 둡니다.
포털 맨 위에 있는 검색 상자에 가상 머신을 입력합니다. 검색 결과에서 가상 머신을 선택합니다.
vm-1을 선택합니다.
개요 페이지에서 연결을 선택한 다음 Bastion 탭을 선택합니다.
Bastion 사용을 선택합니다.
가상 머신을 만드는 중에 입력한 사용자 이름과 암호를 입력합니다. 연결을 선택합니다.
Bash 프롬프트에 다음 명령을 입력합니다.
curl ifconfig.me
명령으로 반환된 IP 주소가 NAT 게이트웨이의 공용 IP 주소와 일치하는지 확인합니다.
azureuser@vm-1:~$ curl ifconfig.me 203.0.113.0.25
자원을 정리하세요
만든 리소스 사용을 마치면 리소스 그룹과 해당 리소스를 모두 삭제할 수 있습니다.
Azure Portal에서 리소스 그룹을 검색하고 선택합니다.
리소스 그룹 페이지에서 test-rg 리소스 그룹을 선택합니다.
test-rg 페이지에서 리소스 그룹 삭제를 선택합니다.
삭제 확인을 위한 리소스 그룹 이름 입력에 test-rg를 입력한 다음 삭제를 선택합니다.
이 애플리케이션을 계속 사용하지 않려면 다음 명령을 사용하여 가상 네트워크, 가상 머신 및 NAT 게이트웨이를 삭제합니다.
Remove-AzResourceGroup -Name 'test-rg' -Force
이 애플리케이션을 계속 사용하지 않려면 다음 명령을 사용하여 가상 네트워크, 가상 머신 및 NAT 게이트웨이를 삭제합니다.
az group delete \
--name test-rg \
--yes
더 이상 필요하지 않은 경우 Remove-AzResourceGroup 명령을 사용하여 리소스 그룹 및 포함된 모든 리소스를 제거할 수 있습니다.
Remove-AzResourceGroup -Name myResourceGroupNAT
Terraform을 통해 만든 리소스가 더 이상 필요하지 않은 경우 다음 단계를 수행합니다.
terraform 플랜을 실행하고
destroy
플래그를 지정합니다.terraform plan -destroy -out main.destroy.tfplan
주요 정보:
terraform plan
명령은 실행 계획을 만들지만 실행하지는 않습니다. 대신 구성 파일에 지정된 구성을 만드는 데 필요한 작업을 결정합니다. 이 패턴을 사용하면 실제 리소스를 변경하기 전에 실행 계획이 예상과 일치하는지 확인할 수 있습니다.- 선택 사항인
-out
매개 변수를 사용하여 계획의 출력 파일을 지정할 수 있습니다.-out
매개 변수를 사용하면 검토한 계획이 정확하게 적용됩니다.
terraform apply를 실행하여 실행 계획을 적용합니다.
terraform apply main.destroy.tfplan
다음 단계
Azure NAT Gateway에 대한 자세한 내용은 다음을 참조하세요.
피드백
이 페이지가 도움이 되었나요?