Azure Virtual Machine에 대한 사용자 데이터
사용자 데이터를 사용하면 사용자 고유의 스크립트 또는 메타데이터를 가상 머신에 전달할 수 있습니다.
"사용자 데이터"란?
사용자 데이터는 프로비저닝 시 Azure Virtual Machine에 삽입되는 스크립트 또는 기타 메타데이터 세트입니다. 가상 머신의 모든 애플리케이션은 프로비저닝 후 IMDS(Azure Instance Metadata Service)에서 사용자 데이터에 액세스할 수 있습니다.
사용자 데이터는 새 버전의 사용자 지정 데이터이며 다음과 같은 추가적인 이점을 제공합니다.
프로비저닝 후 Azure IMDS(Instance Metadata Service)에서 사용자 데이터를 검색할 수 있습니다.
사용자 데이터는 영구적입니다. VM의 수명 동안 사용할 수 있습니다.
VM을 중지하거나 다시 부팅하지 않고 VM 외부에서 사용자 데이터를 업데이트할 수 있습니다.
$expand 옵션이 있는 GET VM/VMSS API를 통해 사용자 데이터를 쿼리할 수 있습니다.
또한 프로비저닝 시 사용자 데이터가 추가되지 않은 경우 프로비저닝 후에 추가할 수 있습니다.
보안 경고
Warning
사용자 데이터는 암호화되지 않으며 VM의 모든 프로세스에서 이 데이터를 쿼리할 수 있습니다. 사용자 데이터에 기밀 정보를 저장하면 안 됩니다.
새 사용자 데이터 기능을 사용하기 위한 최신 Azure Resource Manager API가 있는지 확인합니다. 콘텐츠는 API에 전달되기 전에 base64로 인코딩되어야 합니다. 크기는 64KB를 초과할 수 없습니다.
Azure VM/VMSS에 대한 사용자 데이터 만들기
새 VM을 만들 때 사용자 데이터 추가
이 Azure Resource Manager 템플릿을 사용하여 사용자 데이터로 새 VM을 만듭니다. Rest API를 사용하는 경우, 단일 VM의 경우 PUT 요청을 사용하여 '속성' 섹션에 'UserData'를 추가하여 VM을 만듭니다.
{
"name": "testVM",
"location": "West US",
"properties": {
"hardwareProfile": {
"vmSize": "Standard_A1"
},
"storageProfile": {
"osDisk": {
"osType": "Windows",
"name": "osDisk",
"createOption": "Attach",
"vhd": {
"uri": "http://myaccount.blob.core.windows.net/container/directory/blob.vhd"
}
}
},
"userData": "c2FtcGxlIHVzZXJEYXRh",
"networkProfile": { "networkInterfaces" : [ { "name" : "nic1" } ] },
}
}
새 Virtual Machine Scale Set을 만들 때 사용자 데이터 추가
Rest API를 사용하면 Virtual Machine Scale Set을 만들 때 PUT 요청을 사용하여 "virtualMachineProfile" 섹션에 'UserData'를 추가합니다.
{
"location": "West US",
"sku": {
"name": "Standard_A1",
"capacity": 1
},
"properties": {
"upgradePolicy": {
"mode": "Automatic"
},
"virtualMachineProfile": {
"userData": "VXNlckRhdGE=",
"osProfile": {
"computerNamePrefix": "TestVM",
"adminUsername": "TestUserName",
"windowsConfiguration": {
"provisionVMAgent": true,
"timeZone": "Dateline Standard Time"
}
},
"storageProfile": {
"osDisk": {
"createOption": "FromImage",
"caching": "ReadOnly"
},
"imageReference": {
"publisher": "publisher",
"offer": "offer",
"sku": "sku",
"version": "1.2.3"
}
},
"networkProfile": {"networkInterfaceConfigurations":[{"name":"nicconfig1","properties":{"ipConfigurations":[{"name":"ip1","properties":{"subnet":{"id":"vmssSubnet0"}}}]}}]},
"diagnosticsProfile": {
"bootDiagnostics": {
"enabled": true,
"storageUri": "https://crputest.blob.core.windows.net"
}
}
},
"provisioningState": 0,
"overprovision": false,
"uniqueId": "00000000-0000-0000-0000-000000000000"
}
}
사용자 데이터 검색
VM 내에서 실행 중인 애플리케이션은 IMDS 엔드포인트에서 사용자 데이터를 검색할 수 있습니다. 자세한 내용은 여기에서 IMDS 샘플 코드를 참조하세요.
고객은 $expand=userData 엔드포인트를 사용하여 REST API를 통해 사용자 데이터의 기존 값을 검색할 수 있습니다(요청 본문은 비워 둘 수 있음).
단일 VM
GET "/subscriptions/{guid}/resourceGroups/{RGName}/providers/Microsoft.Compute/virtualMachines/{VMName}?$expand=userData"
Virtual Machine Scale Set:
GET "/subscriptions/{guid}/resourceGroups/{RGName}/providers/Microsoft.Compute/virtualMachineScaleSets/{VMSSName}?$expand=userData"
Virtual Machine Scale Set VM:
GET "/subscriptions/{guid}/resourceGroups/{RGName}/providers/Microsoft.Compute/virtualMachineScaleSets/{VMSSName}/virtualmachines/{vmss instance id}?$expand=userData"
사용자 흐름 업데이트
REST API를 사용하면 일반 PUT 또는 PATCH 요청을 사용하여 사용자 데이터를 업데이트할 수 있습니다. VM을 중지 하거나 다시 부팅할 필요 없이 사용자 데이터가 업데이트됩니다.
PUT "/subscriptions/{guid}/resourceGroups/{RGName}/providers/Microsoft.Compute/ virtualMachines/{VMName}
PATCH "/subscriptions/{guid}/resourceGroups/{RGName}/providers/Microsoft.Compute/ virtualMachines/{VMName}
이러한 요청의 VM.Properties는 다음과 같이 원하는 UserData 필드를 포함해야 합니다.
"properties": {
"hardwareProfile": {
"vmSize": "Standard_D1_v2"
},
"storageProfile": {
"imageReference": {
"sku": "2016-Datacenter",
"publisher": "MicrosoftWindowsServer",
"version": "latest",
"offer": "WindowsServer"
},
"osDisk": {
"caching": "ReadWrite",
"managedDisk": {
"storageAccountType": "StandardSSD_LRS"
},
"name": "vmOSdisk",
"createOption": "FromImage"
}
},
"networkProfile": {
"networkInterfaces": [
{
"id": "/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/{existing-nic-name}",
"properties": {
"primary": true
}
}
]
},
"osProfile": {
"adminUsername": "{your-username}",
"computerName": "{vm-name}",
"adminPassword": "{your-password}"
},
"diagnosticsProfile": {
"bootDiagnostics": {
"storageUri": "http://{existing-storage-account-name}.blob.core.windows.net",
"enabled": true
}
},
"userData": "U29tZSBDdXN0b20gRGF0YQ=="
}
참고 항목
이 경우 "userData"에 대해 빈 문자열을 전달하면 사용자 데이터가 삭제됩니다.
사용자 데이터 및 사용자 지정 데이터
사용자 지정 데이터는 현재와 같은 방식으로 계속 작동합니다. IMDS에서 사용자 지정 데이터를 검색할 수 없습니다.
기존 VM에 사용자 데이터 추가
사용자 데이터가 없는 기존 VM/VMSS가 있는 경우 “사용자 데이터 업데이트” 섹션에 설명된 대로 업데이트 명령을 사용하여 이 VM에 사용자 데이터를 추가할 수 있습니다. 최신 버전의 Azure Resource Manger API로 업그레이드해야 합니다.
다음 단계
Azure Instance Metadata Service를 사용해 보고 엔드포인트에서 VM 인스턴스 메타데이터 및 사용자 데이터를 얻는 방법을 알아봅니다.