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

주의

이 문서에서는 EOL(수명 종료) 상태에 가까워진 Linux 배포판인 CentOS를 참조하세요. 이에 따라 사용 및 플랜을 고려하세요. 자세한 내용은 CentOS 수명 종료 지침을 참조하세요.

적용 대상: ✔️ 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 모델에서 사용자 지정 데이터를 업데이트할 수 없습니다. 그러나 Virtual Machine Scale Sets의 경우 사용자 지정 데이터를 업데이트할 수 있습니다. 자세한 내용은 확장 집합 수정을 참조하세요. 가상 머신 확장 집합의 모델에서 사용자 지정 데이터를 업데이트하는 경우:

  • 확장 집합의 기존 인스턴스는 최신 모델로 업데이트되고 이미지로 다시 설치될 때까지 업데이트된 사용자 지정 데이터를 가져오지 못합니다.
  • 새 인스턴스는 새 사용자 지정 데이터를 받게 됩니다.

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

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

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

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