Linux Virtual Machines에서 Azure 사용자 지정 스크립트 확장Using the Azure Custom Script Extension with Linux Virtual Machines

사용자 지정 스크립트 확장은 Azure 가상 머신에서 스크립트를 다운로드하고 실행합니다.The Custom Script Extension downloads and executes scripts on Azure virtual machines. 이 확장은 배포 후 구성, 소프트웨어 설치 또는 기타 구성/관리 작업에 유용합니다.This extension is useful for post deployment configuration, software installation, or any other configuration / management task. 스크립트를 Azure 저장소 또는 기타 액세스가 가능한 인터넷 위치에서 다운로드하거나 확장 런타임으로 제공할 수 있습니다.Scripts can be downloaded from Azure storage or other accessible internet location, or provided to the extension run time. 사용자 지정 스크립트 확장은 Azure Resource Manager 템플릿과 통합되고, Azure CLI, PowerShell, Azure Portal 또는 Azure Virtual Machine REST API를 사용하여 실행할 수도 있습니다.The Custom Script extension integrates with Azure Resource Manager templates, and can also be run using the Azure CLI, PowerShell, Azure portal, or the Azure Virtual Machine REST API.

이 문서에서는 Azure CLI 및 Azure Resource Manager 템플릿에서 사용자 지정 스크립트 확장을 사용하는 방법을 자세히 설명하고 Linux 시스템에서의 문제 해결 단계도 제공합니다.This document details how to use the Custom Script Extension from the Azure CLI, and an Azure Resource Manager template, and also details troubleshooting steps on Linux systems.

확장 구성Extension Configuration

사용자 지정 스크립트 확장 구성은 스크립트 위치 및 실행할 명령 등을 지정합니다.The Custom Script Extension configuration specifies things like script location and the command to be run. 이 구성은 명령줄 또는 Azure Resource Manager 템플릿에 지정된 구성 파일에 저장될 수 있습니다.This configuration can be stored in configuration files, specified on the command line, or in an Azure Resource Manager template. 중요한 데이터는 보호된 구성에 저장되고 암호화된 후 가상 머신 내에서만 해독됩니다.Sensitive data can be stored in a protected configuration, which is encrypted and only decrypted inside the virtual machine. 보호된 구성은 실행 명령에 암호와 같은 기밀 정보가 포함될 때 유용합니다.The protected configuration is useful when the execution command includes secrets such as a password.

공용 구성Public Configuration

스키마:Schema:

참고 - 이러한 속성 이름은 대/소문자를 구분합니다.Note - these property names are case sensitive. 배포 문제를 방지하려면 아래와 같이 이름을 사용합니다.Use the names as seen below to avoid deployment issues.

  • commandToExecute: (필수, 문자열) 실행할 진입점 스크립트commandToExecute: (required, string) the entry point script to execute
  • fileUris: (옵션, 문자열 배열) 파일을 다운로드할 URLfileUris: (optional, string array) the URLs for files to be downloaded.
  • timestamp : (옵션, 정수) 이 필드는 이 필드의 값을 변경하여 스크립트의 다시 실행을 트리거하는 데만 사용합니다.timestamp (optional, integer) use this field only to trigger a rerun of the script by changing value of this field.
{
  "fileUris": ["<url>"],
  "commandToExecute": "<command-to-execute>"
}

보호된 구성Protected Configuration

스키마:Schema:

참고 - 이러한 속성 이름은 대/소문자를 구분합니다.Note - these property names are case sensitive. 배포 문제를 방지하려면 아래와 같이 이름을 사용합니다.Use the names as seen below to avoid deployment issues.

  • commandToExecute: (옵션, 문자열) 실행할 진입점 스크립트.commandToExecute: (optional, string) the entry point script to execute. 명령에 암호와 같은 기밀 정보가 포함되는 경우 이 필드를 대신 사용합니다.Use this field instead if your command contains secrets such as passwords.
  • storageAccountName: (옵션, 문자열) 저장소 계정의 이름.storageAccountName: (optional, string) the name of storage account. 저장소 자격 증명을 지정하는 경우 모든 fileUris는 Azure Blob에 대한 URL이어야 합니다.If you specify storage credentials, all fileUris must be URLs for Azure Blobs.
  • storageAccountName: (옵션, 문자열) 저장소 계정의 액세스 키storageAccountKey: (optional, string) the access key of storage account.
{
  "commandToExecute": "<command-to-execute>",
  "storageAccountName": "<storage-account-name>",
  "storageAccountKey": "<storage-account-key>"
}

Azure CLIAzure CLI

Azure CLI를 사용하여 사용자 지정 스크립트 확장을 실행할 때 최소한 파일 URI 및 스크립트 실행 명령을 포함하는 구성 파일을 만듭니다.When using the Azure CLI to run the Custom Script Extension, create a configuration file or files containing at minimum the file uri, and the script execution command.

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

필요에 따라 설정을 JSON 형식 문자열로 명령에 지정할 수 있습니다.Optionally the settings can be specified in the command as a JSON formatted string. 이렇게 하면 실행 중에 별도 구성 파일 없이 구성을 지정할 수 있습니다.This allows the configuration to be specified during execution and without a separate configuration file.

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

Azure CLI 예제Azure CLI Examples

예제 1 - 스크립트 파일이 있는 공용 구성.Example 1 - Public configuration with script file.

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

Azure CLI 명령:Azure CLI command:

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

예제 2 - 스크립트 파일이 없는 공용 구성.Example 2 - Public configuration with no script file.

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

Azure CLI 명령:Azure CLI command:

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

예제 3 - 공용 구성 파일은 스크립트 파일 URI를 지정하는 데 사용되고, 보호된 구성 파일은 실행할 명령을 지정하는 데 사용됩니다.Example 3 - A public configuration file is used to specify the script file URI, and a protected configuration file is used to specify the command to be executed.

공용 구성 파일:Public configuration file:

{
  "fileUris": ["https://gist.github.com/ahmetalpbalkan/b5d4a856fe15464015ae87d5587a4439/raw/466f5c30507c990a4d5a2f5c79f901fa89a80841/hello.sh"]
}

보호된 구성 파일:Protected configuration file:

{
  "commandToExecute": "./hello.sh <password>"
}

Azure CLI 명령:Azure CLI command:

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

Resource Manager 템플릿Resource Manager Template

Azure 사용자 지정 스크립트 확장은 Resource Manager 템플릿을 사용하여 Virtual Machine 배포 시에 실행할 수 있습니다.The Azure Custom Script Extension can be run at Virtual Machine deployment time using a Resource Manager template. 이렇게 하려면 올바른 형식의 JSON을 배포 템플릿에 추가합니다.To do so, add properly formatted JSON to the deployment template.

Resource Manager 예제Resource Manager Examples

예제 1 - 공용 구성Example 1 - public configuration.

{
    "name": "scriptextensiondemo",
    "type": "extensions",
    "location": "[resourceGroup().location]",
    "apiVersion": "2015-06-15",
    "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/', parameters('scriptextensiondemoName'))]"
    ],
    "tags": {
        "displayName": "scriptextensiondemo"
    },
    "properties": {
        "publisher": "Microsoft.Azure.Extensions",
        "type": "CustomScript",
        "typeHandlerVersion": "2.0",
        "autoUpgradeMinorVersion": true,
      "settings": {
        "fileUris": [
          "https://gist.github.com/ahmetalpbalkan/b5d4a856fe15464015ae87d5587a4439/raw/466f5c30507c990a4d5a2f5c79f901fa89a80841/hello.sh"
        ],
        "commandToExecute": "sh hello.sh"
      }
    }
}

예제 2 - 보호된 구성의 실행 명령.Example 2 - execution command in protected configuration.

{
  "name": "config-app",
  "type": "extensions",
  "location": "[resourceGroup().location]",
  "apiVersion": "2015-06-15",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
  ],
  "tags": {
    "displayName": "config-app"
  },
  "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.0",
    "autoUpgradeMinorVersion": true,
    "settings": {
      "fileUris": [
        "https://gist.github.com/ahmetalpbalkan/b5d4a856fe15464015ae87d5587a4439/raw/466f5c30507c990a4d5a2f5c79f901fa89a80841/hello.sh"
      ]              
    },
    "protectedSettings": {
      "commandToExecute": "sh hello.sh <password>"
    }
  }
}

전체 예제에 대해서는 .NET Core Music Store 데모 참조 Music Store 데모를 참조하세요.See the .Net Core Music Store Demo for a complete example - Music Store Demo.

문제 해결Troubleshooting

사용자 지정 스크립트 확장이 실행되면 스크립트 생성되거나 다음 예제와 비슷한 디렉터리에 다운로드됩니다.When the Custom Script Extension runs, the script is created or downloaded into a directory similar to the following example. 또한 명령 출력은 이 디렉터리의 stdoutstderr 파일에 저장됩니다.The command output is also saved into this directory in stdout and stderr file.

/var/lib/waagent/custom-script/download/0/

Azure 스크립트 확장은 여기에서 찾을 수 있는 로그를 생성합니다.The Azure Script Extension produces a log, which can be found here.

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

사용자 지정 스크립트 확장의 실행 상태를 Azure CLI를 사용하여 검색할 수도 있습니다.The execution state of the Custom Script Extension can also be retrieved with the Azure CLI.

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

출력은 다음 텍스트와 비슷합니다.The output looks like the following text:

info:    Executing command vm extension get
+ Looking up the VM "scripttst001"
data:    Publisher                   Name                                      Version  State
data:    --------------------------  ----------------------------------------  -------  ---------
data:    Microsoft.Azure.Extensions  CustomScript                              2.0      Succeeded
data:    Microsoft.OSTCExtensions    Microsoft.Insights.VMDiagnosticsSettings  2.3      Succeeded
info:    vm extension get command OK

다음 단계Next Steps

다른 VM 스크립트 확장에 대한 자세한 내용은 Linux용 Azure 스크립트 확장 개요를 참조하세요.For information on other VM Script Extensions, see Azure Script Extension overview for Linux.