Linux 가상 머신에서 Azure 사용자 지정 스크립트 확장 사용Use the Azure Custom Script Extension with Linux virtual machines

사용자 지정 스크립트 확장은 Azure 가상 머신에서 스크립트를 다운로드하고 실행합니다.The Custom Script Extension downloads and runs scripts on Azure virtual machines. 이 확장은 배포 후 구성, 소프트웨어 설치 또는 기타 구성/관리 작업에 유용합니다.This extension is useful for post-deployment configuration, software installation, or any other configuration/management task. 스크립트를 Azure Storage 또는 기타 액세스가 가능한 인터넷 위치에서 다운로드하거나 확장 런타임을 제공할 수 있습니다.You can download scripts from Azure Storage or another accessible internet location, or you can provide them to the extension runtime.

사용자 지정 스크립트 확장은 Azure Resource Manager 템플릿과 통합됩니다.The Custom Script Extension integrates with Azure Resource Manager templates. Azure CLI, PowerShell, Azure Portal 또는 Azure Virtual Machines REST API를 사용하여 실행할 수 있습니다.You can also run it by using Azure CLI, PowerShell, the Azure portal, or the Azure Virtual Machines REST API.

이 문서에서는 Azure CLI에서 사용자 지정 스크립트 확장을 사용하는 방법 및 Azure Resource Manager 템플릿을 사용하여 확장을 실행하는 방법을 자세히 설명합니다.This article details how to use the Custom Script Extension from Azure CLI, and how to run the extension by using an Azure Resource Manager template. 또한 Linux 시스템에 대한 문제 해결 단계도 제공합니다.This article also provides troubleshooting steps for Linux systems.

확장 구성Extension configuration

사용자 지정 스크립트 확장 구성은 스크립트 위치 및 실행할 명령 등을 지정합니다.The Custom Script Extension configuration specifies things like script location and the command to be run. 이 구성을 구성 파일에 저장하거나, 명령줄에 지정하거나, Azure Resource Manager 템플릿에 지정할 수 있습니다.You can store this configuration in configuration files, specify it on the command line, or specify it in an Azure Resource Manager template.

중요한 데이터는 보호된 구성에 저장하면 암호화된 후 가상 머신 내에서만 해독됩니다.You can store sensitive data 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

공용 구성에 대한 스키마는 다음과 같습니다.The schema for the public configuration is as follows.

참고

이러한 속성 이름은 대/소문자를 구분합니다.These property names are case-sensitive. 배포 문제를 방지하려면 다음과 같이 이름을 사용합니다.To avoid deployment problems, use the names as shown here.

  • commandToExecute: (필수, 문자열) 실행할 진입점 스크립트입니다.commandToExecute (required, string): The entry point script to run.
  • fileUris: (옵션, 문자열 배열) 다운로드할 파일의 URL입니다.fileUris (optional, string array): The URLs for files to be downloaded.
  • timestamp (옵션, 정수): 스크립트의 타임스탬프입니다.timestamp (optional, integer): The time stamp of the script. 스크립트의 다시 실행을 트리거하려는 경우에만 이 필드의 값을 변경합니다.Change the value of this field only if you want to trigger a rerun of the script.
{
  "fileUris": ["<url>"],
  "commandToExecute": "<command-to-execute>"
}

보호된 구성Protected configuration

보호된 구성에 대한 스키마는 다음과 같습니다.The schema for the protected configuration is as follows.

참고

이러한 속성 이름은 대/소문자를 구분합니다.These property names are case-sensitive. 배포 문제를 방지하려면 다음과 같이 이름을 사용합니다.To avoid deployment problems, use the names as shown here.

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

Azure CLIAzure CLI

Azure CLI를 사용하여 사용자 지정 스크립트 확장을 실행하는 경우 구성 파일 또는 파일을 만듭니다.When you're using Azure CLI to run the Custom Script Extension, create a configuration file or files. 최소한, 구성 파일에는 파일 URI 및 스크립트 실행 명령이 포함됩니다.At a minimum, configuration files contain 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, you can specify the settings 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

스크립트 파일이 있는 공용 구성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

스크립트 파일이 없는 공용 구성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

공용 및 보호된 구성 파일Public and protected configuration files

공용 구성 파일을 사용하여 스크립트 파일 URI를 지정합니다.You use a public configuration file to specify the script file URI. 보호된 구성 파일을 사용하여 실행할 명령을 지정합니다.You use a protected configuration file to specify the command to be run.

공용 구성 파일: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 템플릿을 사용하여 가상 머신 배포 시에 실행할 수 있습니다.You can run the Azure Custom Script Extension at virtual machine deployment time by using a Resource Manager template. 이렇게 하려면 올바른 형식의 JSON을 배포 템플릿에 추가합니다.To do so, add properly formatted JSON to the deployment template.

Resource Manager 예제Resource Manager examples

공용 구성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"
      }
    }
}

보호된 구성의 실행 명령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 Music Store 데모를 참조하세요.For a complete example, see the .NET Music Store demo.

문제 해결Troubleshooting

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

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

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

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

Azure CLI를 사용하여 사용자 지정 스크립트 확장의 실행 상태를 검색할 수도 있습니다.You can also retrieve the execution state of the Custom Script Extension by using 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.