有没有办法通过API将(参数化)启动任务添加到Windows Azure虚拟机?我需要在机器启动后执行cmdlet,代码依赖于每个机器不同的两个参数。我知道这可以很容易地实现Web / Worker角色,但也可以为虚拟机完成吗?
答案 0 :(得分:1)
对于VM的首次运行,您可以通过CustomData注入启动任务。这适用于Linux和Windows VM。您只需要根据REST API文档正确地对文件进行64位编码(无论是文本还是二进制)。
将CustomData放入特定位置的文件中,您可以使用代码查找此文件,并根据需要采取某种类型的启动操作:
%SYSTEMDRIVE%\AzureData\CustomData.bin
/var/lib/waagent/CustomData
注意:这也将添加到CLI中(拉取请求已经可用 - 不确定它是否在最新版本中。
编辑是的,customdata现在是Azure CLI的一部分,作为azure vm create
的参数,因此无需自行处理base-64编码:
答案 1 :(得分:0)
没有。目前没有开箱即用的此类功能。
但是,鉴于您无论如何都要处理VM,您可以创建自己的图像。您可以在RunOnce registry key中注册“启动任务”。并使用此设置对操作系统进行sysprep。
这样你基本上会有一个启动任务,它将在你的机器第一次启动时执行,并且不会在随后的VM重启时执行。
将参数纳入VM的代码并不像Web / Worker角色那么容易。对于您想要的任何内容,您必须直接查询Azure Management API。您可以从Azure VM上运行的代码中获得的唯一属性基本上是正常的OS属性 - 即主机名,主机IP地址。您甚至不知道您的云服务名称,也不知道您的虚拟IP地址(可以通过whatismyip.net或类似的服务发现)。所以我的方法是将参数放入Azure表存储并使用Machine Name作为rowKey。因此,我可以根据VM名称存储任何特定于VM的值。我的“启动”任务将查询表存储,提供我的主机名作为rowKey(以及分区键的一些常见模式),因此它获得所有必需的设置。
答案 2 :(得分:0)
使用IaaS Management Studio,您可以设置在VM启动时运行的启动脚本。 总之,它会激活远程PowerShell并在检测到PowerShell端口打开时远程运行脚本。
我是这个工具的开发人员,但我并没有真正理解你的意思和#34;参数化#34;,换句话说,你希望你的脚本能够访问VM信息吗?