首页 > 解决方案 > 如何在 Azure 中启动或停止应用服务

问题描述

我想在午夜停止我的应用服务,并想在早上启动它们。所以我遇到了两件事,运行手册和网络作业。所以首先我在资源组中包含了一个启动/停止服务的运行手册。但是当我测试它时,我遇到了一个错误-

在此处输入图像描述

而且当我尝试使用网络作业时,我从这里使用了这段代码,但我看不到结果。网络作业作为脚本工作,但它实际上是在启动/停止我不知道的服务。我是新手powershell 脚本,所以我不知道在哪里对代码进行必要的更改。我不知道我这样做是对还是错,请帮助我。谢谢。

标签: azureazure-web-app-serviceazure-webjobsazure-powershellazure-runbook

解决方案


如果要使用 Azure Runbook 管理 Azure ARM 资源,可以Run As accounts在 Azure 自动化帐户中创建。当我们创建它时,它将在 Azure Active Directory (AD) 中创建一个新的服务主体用户,并在订阅级别为该用户分配 Contributor 角色。更多详细信息,请参阅文档文档

例如

  1. 创造Run As accounts

    一个。搜索并选择自动化帐户

    湾。在自动化帐户页面上,从列表中选择您的自动化帐户。

    C。在左侧窗格中,选择帐户设置部分中的帐户运行方式。

    d。根据您需要的帐户,选择Azure Run As AccountAzure Classic Run As Account

    e. 根据感兴趣的帐户,使用“添加Azure 运行方式”或“添加Azure 经典运行方式帐户”窗格。查看概览信息后,单击创建在此处输入图像描述

  2. 创建 PowerShell 工作流运行手册

  3. 脚本

workflow START_STOP_APP_SERVICE_BY_RESOURCE
{
    Param( 
        [Parameter (Mandatory= $true)] 
        [bool]$Stop, 


       [Parameter (Mandatory= $true)] 
        [string]$ResourcegroupName 
    )

    try
    {
        # use Azure As Account to log in Azure
        $servicePrincipalConnection=Get-AutomationConnection -Name "AzureRunAsConnection"      

        Add-AzureRmAccount `
            -ServicePrincipal `
            -TenantId $servicePrincipalConnection.TenantId `
            -ApplicationId $servicePrincipalConnection.ApplicationId `
            -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint 
    }
    catch {
        if (!$servicePrincipalConnection)
        {
            $ErrorMessage = "Connection $connectionName not found."
            throw $ErrorMessage
        } else{
            Write-Error -Message $_.Exception
            throw $_.Exception
        }
    }
        $status = 'Stopped' 
        if ($Stop) 
        { 
            $status = 'Running' 
        } 

        # Get Running WebApps (website_Processings_Running) 
        $website_Processings_Running = Get-AzureRMWebAPP -ResourceGroupName $ResourcegroupName | where-object -FilterScript{$_.state -eq $status } 

        foreach -parallel ($website_Processing In $website_Processings_Running) 
        { 
            if ($Stop) 
            { 
                $result = Stop-AzureRmWebApp -ResourceGroupName $ResourcegroupName -Name $website_Processing.Name 
                if($result) 
                { 
                    Write-Output "- $($website_Processing.Name) shutdown successfully" 
                } 
                else 
                { 
                    Write-Output "+ $($website_Processing.Name) did not shutdown successfully" 
                } 
            } 
            else 
            { 
                $result = Start-AzureRmWebApp -ResourceGroupName $ResourcegroupName -Name $website_Processing.Name 
                if($result) 
                { 
                    Write-Output "- $($website_Processing.Name) start successfully" 
                } 
                else 
                { 
                    Write-Output "+ $($website_Processing.Name) did not started successfully" 
                } 
            }  
        } 
}

在此处输入图像描述


推荐阅读