使用 CustomScript 扩展程序自动执行 Linux 虚拟机自定义任务

您可能已经从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/

一个人,一条路,人在途中,心随景动,

使用 CustomScript 扩展程序自动执行 Linux 虚拟机自定义任务

相关文章:

你感兴趣的文章:

标签云: