Azure VM 扩展功能十分强大,对于 Windows 和 Linux 虚拟机,可以通过 CustomScript Extension 分别在其中执行 Powershell 脚本和 Shell 脚本。换个理解的角度,只要是 Powershell 脚本或者 Shell 脚本可以实现的功能,基本上都能够通过 CustomScript Extension 将脚本推送到虚拟机中实现。
下面举几个小例子说明 CustomScript Extension 的使用方法。
1.使用 CustomScript Extension 为 Windows 虚拟机添加一个新用户:
首先创建一个adduser.ps1脚本:
$computer="localhost"; $objOu = [ADSI]"WinNT://$computer"; $user = "danielTestUser01"; $password = "Passw0rd1"; $objUser = $objOU.Create("User", $user); $objUser.setpassword($password); $objUser.SetInfo(); $objGroup = [ADSI]"WinNT://$computer/Administrators,group"; $objUserAdded = [ADSI]"WinNT://$user"; $objGroup.Add($objUserAdded.PSBase.Path); |
将脚本上传到 Azure 存储账号下的一个公共容器中:
http://danieleaststorage.blob.core.chinacloudapi.cn/scripts/adduser.ps1
最后,使用 Azure Powershell 执行下面的命令:
Get-AzureVM -ServiceName DanEastCS -Name DanDemoVM | Set-AzureVMCustomScriptExtension -FileUri 'http://danieleaststorage.blob.core.chinacloudapi.cn/scripts/adduser.ps1' -Run 'adduser.ps1' | Update-AzureVM
执行成功后,可以登陆虚拟机验证是否添加成功。
上面的命令是针对 ASM 虚拟机,对 ARM 虚拟机,使用下面的命令:
Set-AzureRmVMCustomScriptExtension -Name "CustomScriptExtension" -ResourceGroupName "DanEastResourceGroup1" -VMName "DanServer2012" -Location "China East" -FileUri 'http://danieleaststorage.blob.core.chinacloudapi.cn/scripts/adduser.ps1' -Run 'adduser.ps1'
2.使用 CustomScriptForLinux Extension 为 Linux 虚拟机安装 nginx:
首先创建一个install_nginx.sh脚本:
#!/bin/sh touch /etc/yum.repos.d/nginx.repo echo '[nginx]' >> /etc/yum.repos.d/nginx.repo echo 'name=nginx repo' >> /etc/yum.repos.d/nginx.repo echo 'baseurl=http://nginx.org/packages/centos/$releasever/$basearch/' >> /etc/yum.repos.d/nginx.repo echo 'gpgcheck=0' >> /etc/yum.repos.d/nginx.repo echo 'enabled=1' >> /etc/yum.repos.d/nginx.repo yum -y install nginx service nginx start |
将脚本上传到 Azure 存储账号下的一个公共容器中:
http://danieleaststorage.blob.core.chinacloudapi.cn/scripts/install_nginx.sh
最后,使用 Azure Powershell 执行下面的命令:
$vm = Get-AzureVM -ServiceName "DanEastCS" -Name "DanCentOS65"
$PrivateConfiguration = '{"storageAccountName": "danieleaststorage","storageAccountKey":"H5LSQt3Eq........Tl95UtX33A=="}'
$PublicConfiguration = '{"fileUris":["http://danieleaststorage.blob.core.chinacloudapi.cn/scripts/install_nginx.sh"], "commandToExecute": "sh install_nginx.sh" }'
$ExtensionName = 'CustomScriptForLinux'
$Publisher = 'Microsoft.OSTCExtensions'
$Version = '1.*'
Set-AzureVMExtension -ExtensionName $ExtensionName -VM $vm -Publisher $Publisher -Version $Version -PrivateConfiguration $PrivateConfiguration -PublicConfiguration $PublicConfiguration | Update-AzureVM
执行成功后,可以查看是否已经成功在虚拟机中安装完成 nginx 服务。
对于 ARM 的 Linux 虚拟机,可以使用下面的命令:
$ExtensionName = 'CustomScriptForLinux'
$Publisher = 'Microsoft.OSTCExtensions'
$Version = '1.5'
$PublicConfiguration = '{"fileUris":["http://danieleaststorage.blob.core.chinacloudapi.cn/scripts/install_nginx.sh"], "commandToExecute": "sh install_nginx.sh" }'
$PrivateConfiguration = '{"storageAccountName": "danieleaststorage","storageAccountKey": "H5LSQt3Eqf........6OTl95UtX33A=="}'
Set-AzureRmVMExtension -ResourceGroupName "DanEastResourceGroup1" -VMName "DanCentOS67" -Location "China East" -Name $ExtensionName -Publisher $Publisher -ExtensionType $ExtensionName -TypeHandlerVersion $Version -Settingstring $PublicConfiguration -ProtectedSettingString $PrivateConfiguration
上面的两个例子中只是为单台虚拟机进行一些配置,结合 Powershell 的循环语句,我们可以为同一云服务,资源组,VMSS下的相同角色(用途)的虚拟机进行批量配置。例如对于同一云服务下的虚拟机,使用 CustomScriptExtension 批量安装和配置 IIS,为 Linux 虚拟机安装 Tomcat 等等。这里可以举的例子有很多,大家可以根据自己的实际情况用于生产中。