使用 CustomScript 扩展程序自动执行 Linux 虚拟机自定义任务
Ning KuangWSSC WS ARD 高级项目经理
您可能已经从 Windows 扩展程序博客中了解了针对 Windows 虚拟机的 CustomScript 扩展程序,现在的好消息是,这一扩展程序也已面向 Linux 虚拟机提供。
在上一篇博客中还介绍了 cloud-init,通过 cloud-init 可以在 Azure Linux 虚拟机配置期间向虚拟机插入脚本或元数据。CustomScript 扩展程序则提供了更多功能,它可在虚拟机配置期间或配置之后运行您的脚本;而且还可以在 Azure 支持的任何 Linux 虚拟机上运行。
CustomScript 能为您做什么?
在 Azure 上创建 Linux 虚拟机后,您可能需要在虚拟机上部署您的工作负荷(Web 服务器、数据库等),理想情况下这可以通过一系列脚本来完成。
- CustomScript 扩展程序可自动从您指定的位置下载这些脚本,并使用您输入的参数执行脚本。
- 只要在您的虚拟机上安装相应的脚本解译器,CustomScript 扩展程序便可支持以 Linux 系统下任何脚本语言(Python、Linux Shell 脚本语言等)编写的脚本。
- 您可以在虚拟机配置期间安装并配置 CustomScript 扩展程序,也可以选择在配置之后的任何时间进行。
- 您可以使用 Azure PowerShell Cmdlet 部署 CustomScript 扩展程序。通过 xPlat 脚本和 Azure 门户网站进行部署的功能也有望在未来几周内实现。敬请关注更多详情。
先决条件
- 微软 Azure Linux 代理 2.0.5 或更高版本。建议更新到最新版本。请注意,大多数 Azure 虚拟机 Linux 镜像库都包含 2.0.5 版本。您可以通过运行 waagent -version 来确认此版本已安装在虚拟机中。为保证扩展程序最佳用户体验,建议按照本文结尾“其他注意事项”中的步骤更新到最新版本。
- Azure PowerShell。请注意,针对扩展程序的跨平台 CLI 支持有望在未来几周内推出。
- 您希望运行的脚本。确保脚本已上传至 Azure Blob存储或 Github 位置。
部署 CustomScript 扩展程序
您可以通过 Azure PowerShell、xPlat 脚本或 Azure 门户网站来部署扩展程序。在本文中,我们将重点介绍通过 Azure PowerShell 部署扩展程序的过程。有关脚本中 API 的参考信息,请单击此处查看。
首先,确保您已经安装 Azure PowerShell。根据您的脚本的存储位置,有两个选项来部署扩展程序并运行您的脚本。
运行存储在 Azure Blob存储中的脚本
- 用户编写脚本并将其上传至一个 Azure Blob 位置。
- 在虚拟机配置期间或配置后将扩展程序添加至虚拟机中。
- 输入脚本的 Azure Blob 位置及其他可选参数。
- 扩展程序将脚本下载到虚拟机上。
- 扩展程序按照用户指定的参数启动脚本。
#指定虚拟机,输入 Azure 存储帐户名和密码
$vm = Get-AzureVM -ServiceName ‘MyServiceName’ -Name ‘MyVMName’
$PrivateConfiguration = '{"storageAccountName":"MyAccount","storageAccountKey":"Mykey"}'
#指定脚本在 Azure Blob 中的位置,并指定要执行的命令
$PublicConfiguration = '{"fileUris":[https://MyAccount.blob.core.windows.net/vhds/MyShellScript.sh], "commandToExecute":"sh MyShellScript.sh" }'
#将扩展程序部署到虚拟机上,选择扩展程序的最新版本
$ExtensionName = 'CustomScriptForLinux'
$Publisher = 'Microsoft.OSTCExtensions'
$Version = '1.1'
Set-AzureVMExtension -ExtensionName $ExtensionName -VM $vm -Publisher $Publisher -Version $Version -PrivateConfiguration $PrivateConfiguration -PublicConfiguration $PublicConfiguration | Update-AzureVM
运行存储在 GitHub 中的脚本
- 用户编写脚本,并将其上传至 GitHub。
- 在虚拟机配置期间或配置之后将扩展程序添加至虚拟机中。
- 输入脚本的 GitHub 位置及其他可选参数。
- 扩展程序将脚本下载到虚拟机上。
- 扩展程序按照用户指定的参数启动脚本。
#指定虚拟机
$vm = Get-AzureVM -ServiceName ‘MyServiceName’ -Name ‘MyVMName’
#指定脚本的位置,并指定要执行的命令
$PublicConfiguration = '{"fileUris":[https://github.com/MyProject/Archive/MyPythonScript.py], "commandToExecute":"python MyPythonScript.py" }'
#将扩展程序部署到虚拟机上,选择扩展程序的最新版本
$ExtensionName = 'CustomScriptForLinux'
$Publisher = 'Microsoft.OSTCExtensions'
$Version = '1.1'
Set-AzureVMExtension -ExtensionName $ExtensionName -VM $vm -Publisher $Publisher -Version $Version -PublicConfiguration $PublicConfiguration | Update-AzureVM
查询结果
- CustomScript 扩展程序部署完毕即开始执行用户脚本。
- 执行结果可通过 Azure PowerShell Cmdlet “Get-AzureVM” 或 “Get-Deployment” 进行检索。您也可以通过 xPlat 脚本和 Azure 门户网站(即将推出)查看状态。
- 您可以在 /var/log/azure/Microsoft.OSTCExtensions. CustomScriptForLinux/1.0/extension.log 中找到 CustomScript 扩展程序的日志文件。请注意,用户脚本的标准输出也将体现在该日志文件中。
其他注意事项
- 如果您有多个脚本,您可以编写一个可调用相关脚本的入口点脚本,然后将该入口点脚本、相关脚本和任何其他相关二进制文件上传至存放脚本的位置(Azure Blob存储 或 GitHub)。
- 扩展程序设计用于在虚拟机创建之后处理一次性任务。如果使用相同的配置第二次调用该扩展程序,则该扩展程序将不会执行您所指定的脚本。不过,如果您确实需要多次运行 CustomScript 扩展程序,您可以通过变换不同的配置来运行。例如:
- 更改您的脚本的名称。
- 使用以下代码添加一个时间戳作为 [PublicConfiguration] 参数:
#生成当前时间戳,添加至配置中,这可确保每次运行 CustomScript 扩展程序时都采用不同的配置
$TimeStamp = (Get-Date).Ticks
$PublicConfiguration = '{"fileUris":[“MyAccount.blob.core.windows.net/vhds/MyShellScript.sh”], "commandToExecute":"sh MyShellScript.sh", “timestamp”:“' + $TimeStamp + '“}'
- 更新到WALA 2.0.8的方法
- 从Github下载 WALA 2.0.8 的源代码 # wget https://raw.githubusercontent.com/Azure/WALinuxAgent/WALinuxAgent-2.0.8/waagent
- 为waagent文件添加“可执行”的权限 # chmod +x waagent
- 替换 /usr/sbin/目录下的waagent文件 # cp waagent /usr/sbin
- 重启waagent服务 # service waagent restart
(如果你使用的是Ubuntu,需要将上述命令中的“waagent” 替换为“walinuxagent”)
注意:1. 如需要更新到其他版本,请参看GitHub说明。2. 运行以上命令需要Root权限。