[Azure]使用CustomScriptExtension在Azure虚拟机中执行自定义脚本

60 篇文章 0 订阅
59 篇文章 0 订阅

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 等等。这里可以举的例子有很多,大家可以根据自己的实际情况用于生产中。

  • 20
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值