千家信息网

Azure自动化部署运维浅谈

发表于:2025-02-12 作者:千家信息网编辑
千家信息网最后更新 2025年02月12日,本次来谈一谈如何在Azure中实现一些简单的自动化运维的需求,一般来讲自动化运维我们通过很多第三方的工具平台实现,比较流行的目前有很多,比如老牌的chef, puppet,新兴的PowerShell
千家信息网最后更新 2025年02月12日Azure自动化部署运维浅谈

本次来谈一谈如何在Azure中实现一些简单的自动化运维的需求,一般来讲自动化运维我们通过很多第三方的工具平台实现,比较流行的目前有很多,比如老牌的chef, puppet,新兴的PowerShell DSC, ansible。这些应该都是耳熟能详的了。

那么在Azure平台,如何实现自动化部署和运维?

方法其实很多,第一种方法比较传统,即仍然使用Chef, Ansible等工具平台进行自动化运维,仍然可以保持以往的体验,无需学习任何新的技术

在Azure中也对这种方式提供了很多的技术支持,在应用市场中也可以找到这种镜像





在VM的extension里也可以找到很多相关的extension




这种方式对于已经很熟悉这些工具的人来说,应该是最容易的方式

当然,除此之后还有一些其他的方法也可以实现一些简单的自动化运维,部署的目的,如果是一些简单的需求,也可以考虑使用这类方法,比如说多台Windows VM想要加入同一个域里,或者是多台web服务器想要统一安装某些软件或者角色,这类较为简单的需求,则可以使用Azure自带的Custom Script Extension来实现

举例来说,想要实现多台VM加域,一般来讲加域可以通过批量推送脚本,或者是手动的方式来实现,在Azure中,实际上我们不需要登录到任何一台VM中,只需要在外部网络即可实现加域的效果,只要要加域的vm到DC之间的网络是联通的,并且DNS可以正常解析到域名即可。

比如,现在我们有一台DC,两位web服务器,web01及web02,现在有两个需求

1. 将两台服务器加入到域中

2. 对两台服务器安装IIS角色


第一个需求,我们可以通过Azure自带的JsonADDomainExtension实现,只需要提供一个加域的cred,以及域名,即可将服务器加入到域中,命令也非常简单


直接在PowerShell中运行以下命令,将<>里的内容替换为实际的内容即可

Set-AzureRmVMADDomainExtension -DomainName -Credential -Restart -ResourceGroupName -VMName -Name -TypeHandlerVersion "1.3" -JoinOption 3


这里又衍生出另一个问题,credential如果写在脚本中,很有可能是以明文的形式,这样肯定是不行的,如何能保证credential的安全呢?一种方法是可以通过Get-Credential实现,将账户密码直接以加密形式保存在变量里。但是这样的话加域过程中,还需要一些人为的参与。除此之外,其实还可以通过Azure的key vault服务,将账户密码保存在key vault中,通过powershell进行调取


Azure Key Vault 是一个用于安全地存储和访问机密的工具。 可以通过Azure Key Vault保存例如API 密钥、密码或证书等关键信息。举例来说,我们可以把有权限加域的域账户账户名和密码保存在key vault中,然后通过PowerShell获取这些信息,作为加域的credential进行加域操作

创建key vault的方法很简单,首先在Azure中选择好Key Vault服务,点击添加



这里输入一些基本信息,比如location, vault的名字等


创建完成后,因为我们是要保护一些明文信息,所以只需要选择secrets即可,如果是要保存证书,也可以选择certificates,选择generate secret

之后分别录入domain username以及domain password



可以看到这些信息在key vault里是以加密的形式存在的,之后可以通过PowerShell命令Get-AzureKeyVaultSecret获取这些值

运行Get-AzureKeyVaultSecret -VaultName mxytestvault -Name domainuser可以看到这个secret的相关信息


如果获取这个secret的secretvalue,会看到这是一个加密的字符串

如果想获取明文信息,可以获取SecretValueText属性


通过这种方式,即可实现无人参与的部署,同时又能保证信息的安全

下边来看下具体如何将key vault与vm extension结合在一起,实现自动化的部署操作


假设要加域的VM都在一个资源组中,则可以通过以下脚本,直接将资源组中的VM添加到域中

脚本内容如下:


param(    [parameter(Mandatory = $true)]    [string]$RGName,#资源组名    [parameter(Mandatory = $false)]    [string]$vaultname = "mxytestvault",#Azure key vault 名称    [parameter(Mandatory = $false)]    [string]$Domain = "mxyo365.com" #要加入的域名)function Join-Domain {    param (        [Parameter(Mandatory = $true)]        $RGName,        [Parameter(Mandatory = $true)]        $VMName,        [Parameter(Mandatory = $true)]        $Cred                            )            #filter dc vms     if ($VMName -notlike "*DC*") {        #Get Azure vm        $vm = Get-AzureRmVM -ResourceGroupName $RGName -Name $VMName -erroraction SilentlyContinue        if ($vm -ne $null) {            $ExtensionName = $VMName + (Get-Random -Minimum 1 -Maximum 100)                        try {                #join domain with Azure dommain extension                $Error.Clear()                Write-Output "Setting domain join extension for vm $VMName, extension name:$ExtensionName"                Set-AzureRmVMADDomainExtension -DomainName $Domain -Credential $Cred -Restart -ResourceGroupName $RGName -VMName $VMName -Name $ExtensionName -TypeHandlerVersion "1.3" -JoinOption 3                }            catch {                Write-Output $Error[0].Exception.Message            }        }        else {            Write-Output "VM $VMName does not exist."                    }    }    }#Get secret with PowerShell$domainuname = (Get-AzureKeyVaultSecret -VaultName $vaultname -Name domainuser).SecretValueTextWrite-Output "Get username from vault $vaultname"$domainfulluname = "$domainuname@$Domain"$domainpwd = (Get-AzureKeyVaultSecret -VaultName $vaultname -Name domainpassword).SecretValueWrite-Output "Get password from vault $vaultname"#Create credential with secret $DomainCred = New-Object System.Management.Automation.PSCredential($domainfulluname, $domainpwd)#Get VMs$VMS = Get-AzureRmVM -ResourceGroupName $RGNameforeach ($VM in $VMS) {    Join-Domain -RGName $RGName -VMName $VM.Name -Cred $DomainCred}


脚本运行时,只需要指定资源组名,vault名称,要加入的域名即可


.\RGJoinDomain.ps1 -RGNAME test -vaultname mxytestvault -Domain mxyo365.com

通过提示可以看到,Web01和web02已经成功安装extension


登录到VM后,可以看到WEB01和WEB02都已经加入到域中了





加域完成后,如果希望能安装一些IIS等功能角色,或者是软件,可通过Azure VM extension实现,方法很简单,以下是通过extension安装IIS角色的脚本

param(    [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]    [Alias('VMName')]    [string]$Name,    [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]    [string]$ResourceGroupName)begin {        Write-Output "Start to install IIS for vms"}process {    try {        $ExtensionName = $Name + "-IIS-" + (Get-Random -Minimum 1 -Maximum 100)        Write-Output "Trying to install iis for vm $Name, extension name:$ExtensionName"             $vm=Get-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $Name -ErrorAction Stop        Set-AzureRmVMExtension `            -ResourceGroupName $ResourceGroupName `            -ExtensionName $ExtensionName `            -VMName $Name `            -Publisher Microsoft.Compute `            -ExtensionType CustomScriptExtension `            -TypeHandlerVersion 1.4 `            -SettingString '{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)"}' `            -Location $vm.Location            }    catch {        Write-Warning $_    }}end { }


这个脚本是支持管道操作的,运行起来非常方便,比如想给包含web名称的服务器安装IIS,可以首先筛选出来这些服务器,然后通过管道将值传给install-iis脚本,即可通过extension进行安装


Get-AzureRMVM -ResourceGroupName test|?{$_.name -like *web*}|install-iis.ps1

安装完成IIS后,脚本会在default页添加计算机名,访问计算机公网IP时,可以看到已经可以显示计算机的名称




实际上VM extension在运行时,会将命令的内容下载到VM内部运行,可以在C:\Package\Plugins里看到这些extension的目录


可以直接在文件夹里看到extension运行的状态



也可以在C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension\1.9.3找到对应的log等信息


基本上就是这样,当然这只是抛砖引玉,Azure VM的extension还是很好用的,可以做多一些尝试

信息 脚本 服务 可以通过 方法 服务器 运行 自动化 方式 需求 内容 名称 命令 域名 密码 工具 角色 账户 资源 选择 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网安大队如何做好网络安全管理 铜梁区企业网络技术服务内容 人力资源数据库软件 linux怎么登陆数据库 标签打印机电脑要连服务器吗 网络安全大会主持稿 新北洋西安分公司软件开发怎么样 g7金融网络安全 要素评估 项目管理服务器配置 宁夏企业党建软件开发公司 高斯数据库认证含金量 服务器可以装win7 寻宝服务器 数据库原理中的树索引是什么意思 数据库管理系统学什么软件 成都市捷驾网络技术 软件开发过程的报告 启东软件开发有限公司 网络技术对教育影响 统信uos安装软件服务器无反应 众应互联网恒久科技 手机网络安全选项 廊坊易天下网络技术有限公司 湖北省中小教育和网络安全 如何设计图书管理系统数据库 漂浮的残骸六零数据库 网络安全在我身边三年级主题班会 专门存储文件的服务器 千牛云服务器怎么样 国服联盟哪个服务器好
0