[英]Windows Azure Virtual Machine with Startup Task
是否可以通过API将(参数化的)启动任务添加到Windows Azure虚拟机? 启动计算机后,我需要执行一个cmdlet,并且代码取决于两个参数,这两个参数对于每台计算机而言都是不同的。 我知道对于Web / Worker角色来说很容易做到这一点,但是对于虚拟机也可以做到吗?
对于VM的首次运行,您可以通过CustomData注入启动任务。 这适用于Linux和Windows VM。 您只需要根据REST API文档对文件(无论是文本文件还是二进制文件)进行正确的64位基础编码。
CustomData放在特定位置的文件中,您可以使用查找该文件的代码,并根据需要采取某种启动操作:
%SYSTEMDRIVE%\\AzureData\\CustomData.bin
/var/lib/waagent/CustomData
注意:此请求也将添加到CLI(拉取请求已可用-不确定是否在最新版本中)。
编辑是的,自定义数据现在是Azure CLI的一部分,作为azure vm create
的参数,因此无需自己搞乱base-64编码:
否。当前没有开箱即用的功能。
但是,无论如何,您都将要处理VM,因此可以创建自己的映像。 您可以在RunOnce注册表项中注册“启动任务”。 然后使用此设置sysprep OS。
这样,您基本上将拥有一个启动任务,该任务将在您的计算机首次启动时执行,并且不会在随后的VM重新启动时执行。
对于Web / Worker角色,将参数纳入VM的代码并不容易。 对于您想要的任何内容,您都必须直接查询Azure管理API。 从运行在Azure VM上的代码中可以获得的唯一属性基本上是常规的OS属性-即主机名,主机IP地址。 您甚至都不知道您的云服务名称,也不知道您的虚拟IP地址(可以通过whatismyip.net或类似服务通过服务找到)。 因此,我的方法是将参数放入Azure表存储中,并使用计算机名称作为rowKey。 因此,我可以基于VM名称存储任何特定于VM的值。 然后,我的“启动”任务将查询表存储,并提供我的主机名作为rowKey(以及一些常见的分区键模式),以便它获取所有必需的设置。
使用IaaS Management Studio,您可以设置启动脚本,该启动脚本将在VM启动时运行。 总之,它会在检测到Powershell端口打开时激活远程Powershell并远程运行脚本。
我是该工具的开发人员,但我实际上并没有真正理解“参数化”的含义,换句话说,您希望脚本可以访问VM信息吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.