Linux 가상 머신에서 Azure 사용자 지정 스크립트 확장 버전 2 사용

주의

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

사용자 지정 스크립트 확장 버전 2는 Azure VM(가상 머신)에서 스크립트를 다운로드하고 실행합니다. 이 확장은 배포 후 구성, 소프트웨어 설치 또는 기타 구성 또는 관리 작업에 사용합니다. 스크립트를 Azure Storage 또는 기타 액세스가 가능한 인터넷 위치에서 다운로드하거나 확장 런타임을 제공할 수 있습니다.

사용자 지정 스크립트 확장은 Azure Resource Manager 템플릿과 통합됩니다. Azure CLI, Azure PowerShell 또는 Azure Virtual Machines REST API를 사용하여 실행할 수도 있습니다.

이 문서에서는 Azure CLI에서 사용자 지정 스크립트 확장을 사용하는 방법 및 Azure Resource Manager 템플릿을 사용하여 확장을 실행하는 방법에 대해 자세히 설명합니다. 또한 Linux 시스템에 대한 문제 해결 단계도 제공합니다.

사용자 지정 스크립트 확장에는 두 가지 버전이 있습니다.

  • 버전 1: Microsoft.OSTCExtensions.CustomScriptForLinux
  • 버전 2: Microsoft.Azure.Extensions.CustomScript

새 배포 및 기존 배포에 버전 2를 사용합니다. 새 버전은 드롭인 대체입니다. 마이그레이션은 이름과 버전을 변경하는 것만큼 쉽습니다. 확장 구성을 변경할 필요가 없습니다.

필수 조건

지원되는 Linux 배포

배포 X64 ARM64
Alma Linux 9.x+ 9.x+
CentOS 7.x+, 8.x+ 7.x+
Debian 10개 이상 11.x+
Flatcar Linux 3374.2.x+ 3374.2.x+
Azure Linux 2.x 2.x
openSUSE 12.3+ 지원되지 않음
Oracle Linux 6.4+, 7.x+, 8.x+ 지원되지 않음
Red Hat Enterprise Linux 6.7+, 7.x+, 8.x+, 9.x+ 8.6 이상, 9.x 이상
Rocky Linux 9.x+ 9.x+
SLES 12.x+, 15.x+ 15.x SP4+
Ubuntu 18.04+, 20.04+, 22.04+ 20.04+, 22.04+

스크립트 위치

Azure Blob Storage 자격 증명을 사용하도록 확장을 설정하여 Azure Blob Storage에 액세스할 수 있습니다. VM에서 해당 엔드포인트(예: GitHub 또는 내부 파일 서버)로 라우팅할 수 있는 경우 스크립트 위치는 어디에나 있을 수 있습니다.

인터넷 연결

GitHub 또는 Azure Storage와 같이 외부에서 스크립트를 다운로드하려면 다른 방화벽 또는 NSG(네트워크 보안 그룹) 포트를 열어야 합니다. 예를 들어 스크립트가 Azure Storage에 있는 경우 Storage에 대한 Azure NSG 서비스 태그를 사용하여 액세스를 허용할 수 있습니다.

스크립트가 로컬 서버에 있는 경우 다른 방화벽 또는 NSG 포트를 열어야 할 수도 있습니다.

  • 이 확장 실패율이 매우 높은 이유는 스크립트의 구문 오류 때문입니다. 스크립트가 오류 없이 실행되는지 확인합니다. 오류를 더 쉽게 찾을 수 있도록 더 많은 로깅을 스크립트에 입력합니다.
  • 실수로 두 번 이상 실행해도 시스템이 변경되지 않도록 idempotent가 있는 스크립트를 작성합니다.
  • 스크립트를 실행하는 경우 사용자 입력이 필요하지 않은지 확인합니다.
  • 스크립트는 90분 동안 실행할 수 있습니다. 더 길면 확장 프로비전에 실패합니다.
  • 스크립트 안에 다시 부팅을 넣지 마세요. 다시 시작하면 설치 중인 다른 확장에 문제가 발생하고 다시 시작한 후에도 확장이 계속되지 않습니다.
  • 애플리케이션을 설치하고 스크립트를 실행하기 전에 다시 부팅이 수행되는 스크립트가 있는 경우 Cron 작업을 사용하거나 DSC, Chef 또는 Puppet 확장과 같은 도구를 사용하여 다시 부팅을 예약합니다.
  • Azure Linux 에이전트를 중지하거나 업데이트하는 스크립트를 실행하지 않습니다. 이러한 스크립트를 실행하는 경우 확장이 전환 상태로 유지되고 시간이 초과될 수 있습니다.
  • 확장은 스크립트를 한 번만 실행합니다. 시작할 때마다 스크립트를 실행하려면 cloud-init 이미지부팅 단위 스크립트 모듈을 사용할 수 있습니다. 또는 systemd 서비스 단위를 만드는 스크립트를 사용할 수 있습니다.
  • VM에는 하나의 확장 버전만 적용할 수 있습니다. 두 번째 사용자 지정 스크립트를 실행하기 위해 기존 확장을 새 구성으로 업데이트할 수 있습니다. 또는 사용자 지정 스크립트 확장을 제거하고 업데이트된 스크립트로 다시 적용할 수 있습니다.
  • 스크립트가 실행되는 시기를 예약하려면 확장을 사용하여 Cron 작업을 만듭니다.
  • 스크립트를 실행하면 Azure Portal 또는 CLI에서 전환 중 확장 상태만 표시됩니다. 실행 중인 스크립트의 상태를 더 자주 업데이트하려면 사용자 고유의 솔루션을 만듭니다.
  • 사용자 지정 스크립트 확장은 기본적으로 프록시 서버를 지원하지 않습니다. 그러나 Curl과 같이 스크립트 내에서 프록시 서버를 지원하는 파일 전송 도구를 사용할 수 있습니다.
  • 스크립트 또는 명령에서 사용할 수 있는 기본 디렉터리가 아닌 위치에 주의합니다. 이 상황을 처리할 논리가 있습니다.

확장 스키마

사용자 지정 스크립트 확장 구성은 스크립트 위치 및 실행할 명령 등을 지정합니다. 이 정보를 구성 파일에 저장하거나, 명령줄에서 지정하거나, Azure Resource Manager 템플릿에서 지정할 수 있습니다.

중요한 데이터는 암호화되고 대상 VM에서만 해독되는 보호된 구성에 저장할 수 있습니다. 보호된 구성은 실행 명령에 암호와 같은 기밀 정보가 포함될 때 유용합니다. 예를 들면 다음과 같습니다.

{
  "name": "config-app",
  "type": "Extensions",
  "location": "[resourceGroup().location]",
  "apiVersion": "2019-03-01",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
  ],
  "tags": {
    "displayName": "config-app"
  },
  "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.1",
    "autoUpgradeMinorVersion": true,
    "settings": {
      "skipDos2Unix":false,
      "timestamp":123456789
    },
    "protectedSettings": {
       "commandToExecute": "<command-to-execute>",
       "script": "<base64-script-to-execute>",
       "storageAccountName": "<storage-account-name>",
       "storageAccountKey": "<storage-account-key>",
       "fileUris": ["https://.."],
       "managedIdentity" : "<managed-identity-identifier>"
    }
  }
}

참고 항목

managedIdentity 속성은 storageAccountName 또는 storageAccountKey 속성과 함께 사용하면 안 됩니다.

속성 값

이름 값 또는 예 데이터 형식
apiVersion 2019-03-01 날짜
publisher Microsoft.Azure.Extensions string
type CustomScript string
typeHandlerVersion 2.1 int
fileUris https://github.com/MyProject/Archive/MyPythonScript.py array
commandToExecute python MyPythonScript.py \<my-param1> string
스크립트 IyEvYmluL3NoCmVjaG8gIlVwZGF0aW5nIHBhY2thZ2VzIC4uLiIKYXB0IHVwZGF0ZQphcHQgdXBncmFkZSAteQo= string
skipDos2Unix false 부울 값
timestamp 123456789 32비트 정수
storageAccountName examplestorageacct string
storageAccountKey TmJK/1N3AbAZ3q/+hOXoi/l73zOqsaxXDhqa9Y83/v5UpXQp2DQIBuv2Tifp60cE/OaHsJZmQZ7teQfczQj8hg== string
managedIdentity { } 또는 { "clientId": "31b403aa-c364-4240-a7ff-d85fb6cd7232" } 또는 { "objectId": "12dd289c-0583-46e5-b9b4-115d5c19ef4b" } JSON 개체

속성 값 세부 정보

속성 선택 또는 필수 세부 정보
apiVersion 해당 없음 최신 API 버전은 리소스 탐색기를 사용하거나 Azure CLI에서 az provider list -o json 명령을 사용하여 찾을 수 있습니다.
fileUris 선택 사항 다운로드할 파일의 URL입니다.
commandToExecute script가 설정되지 않은 경우 필수 실행할 진입점 스크립트입니다. 명령에 암호와 같은 비밀 정보가 포함되는 경우 script 대신 이 속성을 사용합니다.
스크립트 commandToExecute가 설정되지 않은 경우 필수 /bin/sh에서 실행하는 Base64로 인코딩된 및 선택적으로 gzip으로 압축된 스크립트입니다.
skipDos2Unix 선택 사항 스크립트 기반 파일 URL 또는 스크립트의 dos2unix 변환을 건너뛰려면 이 값을 false로 설정합니다.
timestamp 선택 사항 스크립트의 다시 실행을 트리거하는 경우에만 이 값을 변경합니다. 이전 값과 다른 모든 정수 값을 사용할 수 있습니다.
storageAccountName 선택 사항 스토리지 계정의 이름입니다. 스토리지 자격 증명을 지정하는 경우 모든 fileUris 값은 Azure Blob에 대한 URL이어야 합니다.
storageAccountKey 선택 사항 스토리지 계정의 액세스 키입니다.
managedIdentity 선택 사항 파일을 다운로드하기 위한 관리 ID입니다. 값은 관리 ID의 클라이언트 ID인 clientId(선택 사항, 문자열) 및 관리 ID의 개체 ID인 objectId(선택 사항, 문자열)입니다.

퍼블릭 설정은 스크립트가 실행되는 VM에 일반 텍스트로 보내집니다. 보호된 설정은 Azure 및 VM에만 알려진 키를 통해 암호화됩니다. 설정은 보내진 그대로 VM에 저장됩니다. 즉, 설정이 암호화된 경우 VM에도 암호화되어 저장됩니다. 암호화된 값을 해독하는 데 사용되는 인증서는 VM에 저장됩니다. 인증서는 런타임 시 설정의 암호를 해독하는 데도 사용됩니다(필요한 경우).

공용 설정을 사용하면 디버깅에 유용할 수 있지만 보호된 설정을 사용하는 것이 매우 좋습니다.

공용 또는 보호된 설정에서 설정할 수 있는 값은 다음과 같습니다. 확장은 이러한 값이 퍼블릭 설정과 보호된 설정 모두에 설정된 구성을 거부합니다.

  • commandToExecute
  • script
  • fileUris

속성: skipDos2Unix

이전 버전의 사용자 지정 스크립트 확장인 Microsoft.OSTCExtensions.CustomScriptForLinux\r\n\n으로 변환하여 DOS 파일을 UNIX 파일로 자동 변환합니다. 이 변환은 여전히 존재하며 기본적으로 설정됩니다. 이 변환은 fileUris에서 다운로드한 모든 파일 또는 다음 조건 중 하나에 기반한 스크립트 설정에 적용됩니다.

  • 확장명이 .sh, .txt, .py, .pl입니다. 스크립트 설정은 /bin/sh를 사용하여 실행되는 스크립트로 간주되므로 항상 이 기준과 일치합니다. 스크립트 설정은 VM에 script.sh로 저장됩니다.
  • 파일이 #!로 시작합니다.

기본값은 false이며, dos2unix 변환이 실행됨을 의미합니다. dos2unix 변환은 다음과 같이 skipDos2Unixtrue로 설정하여 건너뛸 수 있습니다.

{
  "fileUris": ["<url>"],
  "commandToExecute": "<command-to-execute>",
  "skipDos2Unix": true
}

속성: 스크립트

사용자 지정 스크립트 확장은 사용자 지정 스크립트의 실행을 지원합니다. 스크립트 설정은 commandToExecutefileUris를 단일 설정으로 결합합니다. Azure Storage 또는 GitHub gist에서 다운로드할 파일을 설정하는 대신 스크립트를 설정으로 인코딩하면 됩니다. 스크립트를 사용하여 commandToExecutefileUris를 바꿀 수 있습니다.

몇 가지 요구 사항은 다음과 같습니다.

  • 스크립트는 반드시 Base64로 인코딩해야 합니다.
  • 스크립트는 선택적으로 gzip 압축할 수 있습니다.
  • 스크립트 설정은 공용 또는 보호된 설정에서 사용할 수 있습니다.
  • 스크립트 매개 변수의 최대 데이터 크기는 256KB입니다. 스크립트가 이 크기를 초과하면 실행되지 않습니다.

예를 들어 다음 스크립트는 /script.sh/ 파일에 저장됩니다.

#!/bin/sh
echo "Creating directories ..."
mkdir /data
chown user:user /data
mkdir /appdata
chown user:user /appdata

다음 명령의 출력을 사용하여 올바른 사용자 지정 스크립트 확장 스크립트 설정을 생성합니다.

cat script.sh | base64 -w0
{
  "script": "IyEvYmluL3NoCmVjaG8gIlVwZGF0aW5nIHBhY2thZ2VzIC4uLiIKYXB0IHVwZGF0ZQphcHQgdXBncmFkZSAteQo="
}

대부분의 경우 스크립트는 필요에 따라 gzip으로 압축하여 크기를 더 줄일 수 있습니다. 사용자 지정 스크립트 확장은 gzip 압축 사용을 자동으로 검색합니다.

cat script | gzip -9 | base64 -w 0

사용자 지정 스크립트 확장은 다음 알고리즘을 사용하여 스크립트를 실행합니다.

  1. 스크립트 값의 길이가 256KB를 초과하지 않도록 어설션합니다.
  2. 스크립트의 값을 Base64로 디코딩합니다.
  3. Base64로 디코딩된 값을 gzip으로 압축하려고 시도합니다.
  4. 디코딩되고 선택적으로 압축을 푼 값을 디스크에 기록합니다(/var/lib/waagent/custom-script/#/script.sh).
  5. _/bin/sh -c /var/lib/waagent/custom-script/#/script.sh를 사용하여 스크립트를 실행합니다.

속성: managedIdentity

참고 항목

이 속성은 보호 설정에서만 지정해야 합니다.

사용자 지정 스크립트 확장(버전 2.1 이상)은 fileUris 설정에 제공된 URL에서 파일을 다운로드하기 위한 관리 ID를 지원합니다. 이 접근 방식을 사용하면 사용자가 SAS(공유 액세스 서명) 토큰 또는 스토리지 계정 키와 같은 비밀을 전달할 필요 없이 사용자 지정 스크립트 확장에서 Azure Storage 프라이빗 Blob 또는 컨테이너에 액세스할 수 있습니다.

이 기능을 사용하려면 사용자 지정 스크립트 확장이 실행될 것으로 예상되는 VM 또는 가상 머신 확장 집합에 시스템 할당 또는 사용자 할당 ID를 추가합니다. 그런 다음 Azure Storage 컨테이너 또는 Blob에 대한 관리 ID 액세스 권한을 부여합니다.

대상 VM 또는 가상 머신 확장 집합에서 시스템 할당 ID를 사용하려면 managedidentity를 빈 JSON 개체로 설정합니다.

{
  "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
  "commandToExecute": "sh script1.sh",
  "managedIdentity" : {}
}

대상 VM 또는 가상 머신 확장 집합에서 사용자 할당 ID를 사용하려면 managedidentity를 관리 ID의 클라이언트 ID 또는 개체 ID로 구성합니다.

{
  "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
  "commandToExecute": "sh script1.sh",
  "managedIdentity" : { "clientId": "31b403aa-c364-4240-a7ff-d85fb6cd7232" }
}
{
  "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
  "commandToExecute": "sh script1.sh",
  "managedIdentity" : { "objectId": "12dd289c-0583-46e5-b9b4-115d5c19ef4b" }
}

참고 항목

managedIdentity 속성은 storageAccountName 또는 storageAccountKey 속성과 함께 사용하면 안 됩니다.

템플릿 배포

Azure VM 확장은 Azure Resource Manager 템플릿을 사용하여 배포할 수 있습니다. 이전 섹션에서 자세히 설명한 JSON 스키마를 Azure Resource Manager 템플릿에서 사용하여 템플릿 배포 중에 사용자 지정 스크립트 확장을 실행할 수 있습니다. 사용자 지정 스크립트 확장이 포함된 샘플 템플릿은 GitHub에서 찾을 수 있습니다.

{
  "name": "config-app",
  "type": "extensions",
  "location": "[resourceGroup().location]",
  "apiVersion": "2019-03-01",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
  ],
  "tags": {
    "displayName": "config-app"
  },
  "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.1",
    "autoUpgradeMinorVersion": true,
    "settings": {
      },
    "protectedSettings": {
      "commandToExecute": "sh hello.sh <param2>",
      "fileUris": ["https://github.com/MyProject/Archive/hello.sh"
      ]
    }
  }
}

참고 항목

이러한 속성 이름은 대/소문자를 구분합니다. 배포 문제를 방지하려면 다음과 같이 이름을 사용합니다.

Azure CLI

Azure CLI를 사용하여 사용자 지정 스크립트 확장을 실행할 때 구성 파일을 만듭니다. 최소한 구성 파일에는 commandToExecute가 포함되어야 합니다. az vm extension set 명령은 구성 파일을 참조합니다.

az vm extension set \
  --resource-group myResourceGroup \
  --vm-name myVM --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --protected-settings ./script-config.json

또는 명령에서 설정을 JSON 형식 문자열로 지정할 수 있습니다. 이 접근 방식을 사용하여 실행 중에 별도 구성 파일 없이 구성을 지정할 수 있습니다.

az vm extension set \
  --resource-group exttest \
  --vm-name exttest \
  --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --protected-settings '{"fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"],"commandToExecute": "./config-music.sh"}'

예제: 스크립트 파일을 사용하는 공용 구성

이 예제에서는 script-config.json이라는 다음 스크립트 파일을 사용합니다.

{
  "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"],
  "commandToExecute": "./config-music.sh"
}
  1. 선택한 텍스트 편집기를 사용하거나 다음 CLI 명령을 사용하여 스크립트 파일을 만듭니다.

    cat <<EOF > script-config.json
    {
      "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"],
      "commandToExecute": "./config-music.sh"
    }
    EOF
    
  2. 다음 명령을 실행합니다.

    az vm extension set \
      --resource-group myResourceGroup \
      --vm-name myVM --name customScript \
      --publisher Microsoft.Azure.Extensions \
      --settings ./script-config.json
    

예제: 스크립트 파일을 사용하지 않는 공용 구성

이 예제에서는 다음과 같은 JSON 형식의 콘텐츠를 사용합니다.

{
  "commandToExecute": "apt-get -y update && apt-get install -y apache2"
}

다음 명령을 실행합니다.

az vm extension set \
  --resource-group tim0329vmRG \
  --vm-name tim0329vm --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --settings '{"commandToExecute": "apt-get -y update && apt-get install -y apache2"}'

예제: 공용 및 보호된 구성 파일

퍼블릭 구성 파일을 사용하여 스크립트 파일 URI를 지정합니다.

{
  "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"]
}

보호된 구성 파일을 사용하여 실행할 명령을 지정합니다.

{
  "commandToExecute": "./config-music.sh"
}
  1. 선택한 텍스트 편집기를 사용하거나 다음 CLI 명령을 사용하여 퍼블릭 구성 파일을 만듭니다.

    cat <<EOF > script-config.json
    {
      "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"]
    }
    EOF
    
  2. 선택한 텍스트 편집기를 사용하거나 다음 CLI 명령을 사용하여 보호된 구성 파일을 만듭니다.

    cat <<EOF > protected-config.json
    {
      "commandToExecute": "./config-music.sh"
    }
    EOF
    
  3. 다음 명령을 실행합니다.

    az vm extension set \
      --resource-group myResourceGroup \
      --vm-name myVM \
      --name customScript \
      --publisher Microsoft.Azure.Extensions \
      --settings ./script-config.json \
      --protected-settings ./protected-config.json
    

Virtual Machine Scale Sets

Azure Portal에서 사용자 지정 스크립트 확장을 배포하는 경우 스토리지 계정의 스크립트에 액세스하기 위한 SAS 토큰의 만료를 제어할 수 없습니다. 이에 따라 초기 배포가 작동하지만 스토리지 계정의 SAS 토큰이 만료되면 사용자 지정 스크립트 확장에서 더 이상 스토리지 계정에 액세스할 수 없으므로 이후의 모든 크기 조정 작업이 실패합니다.

가상 머신 확장 집합에 사용자 지정 스크립트 확장을 배포하는 경우 PowerShell, Azure CLI 또는 Azure Resource Manager 템플릿을 사용하는 것이 좋습니다. 이렇게 하면 관리 ID를 사용하도록 선택하거나 필요한 기간 동안 스토리지 계정의 스크립트에 액세스하기 위해 SAS 토큰 만료를 직접 제어할 수 있습니다.

문제 해결

사용자 지정 스크립트 확장이 실행되면 스크립트 생성되거나 다음 예제와 비슷한 디렉터리에 다운로드됩니다. 또한 명령 출력은 이 디렉터리의 stdoutstderr 파일에 저장됩니다.

sudo ls -l /var/lib/waagent/custom-script/download/0/

문제를 해결하려면 먼저 Linux 에이전트 로그를 확인하고 확장이 실행되었는지 확인합니다.

sudo cat /var/log/waagent.log

확장 실행을 찾습니다. 다음과 같이 표시됩니다.

2018/04/26 17:47:22.110231 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] [Enable] current handler state is: notinstalled
2018/04/26 17:47:22.306407 INFO Event: name=Microsoft.Azure.Extensions.customScript, op=Download, message=Download succeeded, duration=167
2018/04/26 17:47:22.339958 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Initialize extension directory
2018/04/26 17:47:22.368293 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Update settings file: 0.settings
2018/04/26 17:47:22.394482 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Install extension [bin/custom-script-shim install]
2018/04/26 17:47:23.432774 INFO Event: name=Microsoft.Azure.Extensions.customScript, op=Install, message=Launch command succeeded: bin/custom-script-shim install, duration=1007
2018/04/26 17:47:23.476151 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Enable extension [bin/custom-script-shim enable]
2018/04/26 17:47:24.516444 INFO Event: name=Microsoft.Azure.Extensions.customScript, op=Enable, message=Launch command succeeded: bin/custom-sc

앞의 출력에서

  • Enable은 명령의 실행이 시작되는 경우입니다.
  • DownloadfileUris에 지정된 스크립트 파일이 아니라 Azure에서 사용자 지정 스크립트 확장 패키지 다운로드와 관련됩니다.

Azure 스크립트 확장은 여기에서 찾을 수 있는 로그를 생성합니다.

sudo cat /var/log/azure/custom-script/handler.log

개별 실행을 찾습니다. 다음과 같이 표시됩니다.

time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=start
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=pre-check
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="comparing seqnum" path=mrseq
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="seqnum saved" path=mrseq
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="reading configuration"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="read configuration"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="validating json schema"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="json schema valid"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="parsing configuration json"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="parsed configuration json"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="validating configuration logically"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="validated configuration"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="creating output directory" path=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="created output directory"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 files=1
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 file=0 event="download start"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 file=0 event="download complete" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="executing command" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="executing protected commandToExecute" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="executed command" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=enabled
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=end

여기서는 다음을 확인할 수 있습니다.

  • 이 로그를 시작하는 enable 명령
  • 확장에 전달된 설정
  • 파일을 다운로드하는 확장명 및 해당 작업의 결과입니다.
  • 실행되는 명령 및 결과.

또한 Azure CLI를 사용하여 commandToExecute로 전달된 실제 인수를 포함하여 사용자 지정 스크립트 확장의 실행 상태를 검색할 수 있습니다.

az vm extension list -g myResourceGroup --vm-name myVM

출력은 다음 텍스트와 비슷합니다.

[
  {
    "autoUpgradeMinorVersion": true,
    "forceUpdateTag": null,
    "id": "/subscriptions/subscriptionid/resourceGroups/rgname/providers/Microsoft.Compute/virtualMachines/vmname/extensions/customscript",
    "resourceGroup": "rgname",
    "settings": {
      "commandToExecute": "sh script.sh > ",
      "fileUris": [
        "https://catalogartifact.azureedge.net/publicartifacts/scripts/script.sh",
        "https://catalogartifact.azureedge.net/publicartifacts/scripts/script.sh"
      ]
    },
    "tags": null,
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "typeHandlerVersion": "2.0",
    "virtualMachineExtensionType": "CustomScript"
  },
  {
    "autoUpgradeMinorVersion": true,
    "forceUpdateTag": null,
    "id": "/subscriptions/subscriptionid/resourceGroups/rgname/providers/Microsoft.Compute/virtualMachines/vmname/extensions/OmsAgentForLinux",
    "instanceView": null,
    "location": "eastus",
    "name": "OmsAgentForLinux",
    "protectedSettings": null,
    "provisioningState": "Succeeded",
    "publisher": "Microsoft.EnterpriseCloud.Monitoring",
    "resourceGroup": "rgname",
    "settings": {
      "workspaceId": "workspaceid"
    },
    "tags": null,
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "typeHandlerVersion": "1.0",
    "virtualMachineExtensionType": "OmsAgentForLinux"
  }
]

Azure CLI 구문 문제

Azure CLI는 여러 셸 환경에서 실행할 수 있지만 약간의 형식 변형이 있습니다. Azure CLI 명령으로 예기치 않은 결과가 발생하는 경우 Azure CLI를 성공적으로 사용하는 방법을 참조하세요.

다음 단계

코드, 현재 문제, 버전을 보려면 custom-script-extension-linux를 참조하세요.