사용자 지정 데이터와 Azure Virtual Machines에서의 cloud-init

적용 대상: ✔️ Linux VM ✔️ Windows VM ✔️ 유연한 확장 집합

프로비전 시 스크립트나 기타 메타데이터를 Microsoft Azure VM(가상 머신)에 삽입해야 할 수 있습니다. 다른 클라우드에서는 이 개념을 종종 사용자 데이터라고 합니다. Microsoft Azure에는 사용자 지정 데이터라는 유사한 기능이 있습니다.

사용자 지정 데이터는 프로비전이라고 하는 최초 시작이나 설정 중에 VM에서 사용 가능합니다. 프로비전은 VM 만들기 매개 변수(예: 호스트 이름, 사용자 이름, 암호, 인증서, 사용자 지정 데이터 및 키)를 VM에서 사용할 수 있게 하는 프로세스입니다. Linux 에이전트 또는 cloud-init와 같은 프로비전 에이전트는 해당 매개 변수를 처리합니다.

VM에 사용자 지정 데이터 전달

사용자 지정 데이터를 사용하려면 콘텐츠를 Base64로 인코딩한 다음, 데이터를 API에 전달해야 합니다. 단, Azure CLI와 같이 자동으로 변환하는 CLI 도구를 사용할 경우에는 예외입니다. 크기는 64KB를 초과할 수 없습니다.

CLI에서는 다음 예와 같이 사용자 지정 데이터를 파일로 전달할 수 있습니다. 파일이 Base64로 변환됩니다.

az vm create \
  --resource-group myResourceGroup \
  --name centos74 \
  --image OpenLogic:CentOS-CI:7-CI:latest \
  --custom-data cloud-init.txt \
  --generate-ssh-keys

Azure Resource Manager에는 base64 함수가 있습니다.

"name": "[parameters('virtualMachineName')]",
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2019-07-01",
"location": "[parameters('location')]",
"dependsOn": [
..],
"variables": {
        "customDataBase64": "[base64(parameters('stringData'))]"
    },
"properties": {
..
    "osProfile": {
        "computerName": "[parameters('virtualMachineName')]",
        "adminUsername": "[parameters('adminUsername')]",
        "adminPassword": "[parameters('adminPassword')]",
        "customData": "[variables('customDataBase64')]"
        },

사용자 지정 데이터 처리

VM에 설치된 프로비전 에이전트에서 플랫폼과의 통신을 처리하고 데이터를 파일 시스템에 배치합니다.

Windows

사용자 지정 데이터는 바이너리 파일로 %SYSTEMDRIVE%\AzureData\CustomData.bin에 배치되지만 처리되지 않습니다. 이 파일을 처리하려면 사용자 지정 이미지를 빌드하고 CustomData.bin을 처리하는 코드를 작성해야 합니다.

Linux

Linux 운영 체제에서 사용자 지정 데이터는 ovf-env.xml 파일을 통해 VM에 전달됩니다. 해당 파일은 프로비전 중에 /var/lib/waagent 디렉터리에 복사됩니다. Linux 에이전트 최신 버전도 편의를 위해 Base64로 인코딩된 데이터를 /var/lib/waagent/CustomData에 복사합니다.

현재 Azure는 두 가지 프로비저닝 에이전트를 지원합니다.

  • Linux 에이전트. 기본적으로 에이전트는 사용자 지정 데이터를 처리하지 않습니다. 데이터를 사용하도록 설정된 사용자 지정 이미지를 빌드해야 합니다. 관련 설정은 다음과 같습니다.

    • Provisioning.DecodeCustomData
    • Provisioning.ExecuteCustomData

    사용자 지정 데이터를 사용하고 스크립트를 실행하면 VM이 준비되었다는 보고나 프로비전이 성공했다는 보고를 스크립트가 완료될 때까지 지연시킵니다. 스크립트가 허용된 총 VM 프로비전 시간(40분)을 초과하면 VM이 생성되지 않습니다.

    스크립트를 실행하지 못하거나 실행 중에 오류가 발생하는 경우 이는 심각한 프로비전 실패가 아닙니다. 스크립트의 완료 상태를 경고하는 알림 경로를 만들어야 합니다.

    사용자 지정 데이터 실행 문제를 해결하려면 /var/log/waagent.log를 검토합니다.

  • cloud-init. 기본적으로 이 에이전트는 사용자 지정 데이터를 처리합니다. cloud-init 구성 및 스크립트와 같은 여러 형식의 사용자 지정 데이터를 허용합니다.

    Linux 에이전트와 마찬가지로 cloud-init에서 사용자 지정 데이터를 처리할 때 구성 처리나 스크립트를 실행하는 동안 오류가 발생하는 경우 이는 심각한 프로비전 실패가 아닙니다. 스크립트의 완료 상태를 경고하는 알림 경로를 만들어야 합니다.

    그러나 Linux 에이전트와 달리 cloud-init는 사용자가 사용자 지정 데이터 구성을 완료할 때까지 기다리지 않고 플랫폼에 VM이 준비되었다고 보고합니다. 문제 해결을 포함하여 Azure에서의 cloud-init에 대한 자세한 내용은 Azure의 가상 머신에 대한 cloud-init 지원을 참조하세요.

FAQ

VM이 생성된 후 사용자 지정 데이터를 업데이트할 수 있나요?

단일 VM의 경우 VM 모델에서 사용자 지정 데이터를 업데이트할 수 없습니다. 그러나 가상 머신 확장 집합의 경우 REST API, Azure CLI 또는 Azure PowerShell을 통해 사용자 지정 데이터를 업데이트할 수 있습니다. 가상 머신 확장 집합에 대한 모델에서 사용자 지정 데이터를 업데이트하는 경우:

  • 확장 집합의 기존 인스턴스는 이미지로 다시 설치될 때까지 업데이트된 사용자 지정 데이터를 가져올 수 없습니다.
  • 업그레이드된 확장 집합의 기존 인스턴스는 업데이트된 사용자 지정 데이터를 가져오지 않습니다.
  • 새 인스턴스는 새 사용자 지정 데이터를 받게 됩니다.

사용자 지정 데이터에 중요한 값을 저장할 수 있나요?

사용자 지정 데이터에는 중요한 데이터를 저장하지 않는 것이 좋습니다. 자세한 내용은 Azure 데이터 보안 및 암호화 모범 사례를 참조하세요.

사용자 지정 데이터가 IMDS에 제공되나요?

Azure IMDS(Instance Metadata Service)에서는 사용자 지정 데이터를 사용할 수 없습니다. 대신 IMDS에서는 사용자 데이터를 사용하는 것이 좋습니다. 자세한 내용은 Azure Instance Metadata Service를 통한 사용자 데이터를 참조하세요.