您可能已经从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存储中的脚本
1.用户编写脚本并将其上传至一个Azure Blob位置。
2.在虚拟机配置期间或配置后将扩展程序添加至虚拟机中。
3.输入脚本的Azure Blob 位置及其他可选参数。
4.扩展程序将脚本下载到虚拟机上。
5.扩展程序按照用户指定的参数启动脚本。
<span style="font-size:14px;"><span style="font-size:14px;"><span style="font-size:14px;">#指定虚拟机,输入 Azure 存储帐户名和密码$vm = Get-AzureVM -ServiceName ‘MyServiceName’ -Name ‘MyVMName’$PrivateConfiguration = '{"storageAccountName":"MyAccount","storageAccountKey":"Mykey"}' #指定脚本在 Azure Blob 中的位置,并指定要执行的命令$PublicConfiguration = '{"fileUris":["http://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</span></span></span>
运行存储在GitHub中的脚本
1.用户编写脚本,并将其上传至GitHub。
2.在虚拟机配置期间或配置之后将扩展程序添加至虚拟机中。
3.输入脚本的GitHub位置及其他可选参数。
4.扩展程序将脚本下载到虚拟机上。
5.扩展程序按照用户指定的参数启动脚本。
<span style="font-size:14px;"><span style="font-size:14px;"><span style="font-size:14px;">#指定虚拟机$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</span></span></span>
查询结果
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扩展程序,您可以通过变换不同的配置来运行。例如:
1.更改您的脚本的名称。
2.使用以下代码添加一个时间戳作为[PublicConfiguration]参数:
<span style="font-size:14px;"><span style="font-size:14px;"><span style="font-size:14px;">#生成当前时间戳,添加至配置中,这可确保每次运行 CustomScript 扩展程序时都采用不同的配置$TimeStamp = (Get-Date).Ticks$PublicConfiguration = '{"fileUris":[“MyAccount.blob.core.windows.net/vhds/MyShellScript.sh”], "commandToExecute":"sh MyShellScript.sh", “timestamp”:“' + $TimeStamp + '“}</span><span style="font-family:Times New Roman;font-size:14px;color:#000000;"></span></span></span>
更新到WALA2.0.8的方法
从Github下载WALA2.0.8的源代码
# wgethttps://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权限。
本文翻译自:http://azure.microsoft.com/blog/2014/08/20/automate-linux-vm-customization-tasks-using-customscript-extension/
一个人,一条路,人在途中,心随景动,