【问题标题】:How to start or stop appservices in Azure如何在 Azure 中启动或停止应用服务
【发布时间】:2020-06-11 10:48:10
【问题描述】:

我想在午夜停止我的 appservices 并想在早上启动它们。所以我遇到了两件事,runbooks 和 webjobs。所以首先我在资源组中包含了一个启动/停止服务的 runbook。但是当我测试时出来了,我遇到了一个错误 -

当我尝试使用 webjob 时,我使用了这个 code from here,但我无法看到结果。webjob 作为脚本工作,但它实际上是在启动/停止我不知道的服务吗?我我是powershell脚本的新手,所以我不知道在哪里对代码进行必要的更改。我不知道我做对了还是错了,请帮助我。谢谢。

【问题讨论】:

    标签: azure azure-web-app-service azure-webjobs azure-powershell azure-runbook


    【解决方案1】:

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

    例如

    1. 创建Run As accounts

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

      b.在“自动化帐户”页面上,从列表中选择您的自动化帐户。

      c。在左侧窗格中,选择帐户设置部分中的Run As Accounts。

      d。根据您需要的帐户,选择 Azure 运行方式帐户 或 Azure 经典运行方式帐户。

      e。根据感兴趣的帐户,使用添加 Azure Run As 或添加 Azure Classic Run As Account 窗格。查看概览信息后,单击创建。

    2. Create a PowerShell Workflow runbook

    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" 
                    } 
                }  
            } 
    }
    

    【讨论】:

    • 对于脚本,我需要对代码进行任何更改吗?谢谢您的回复
    • @BhaveshDamorb 做完第1步后,就可以直接运行我的脚本了。
    • 所以我几乎没有疑问 - 1) 如果我正在创建一个自动化帐户,那将花费我额外的费用,对吗? 2)我可以直接在webjobs中上传这个代码吗,因为webjobs没有额外的费用。 3)我如何安排他们,比如在午夜停止并在早上开始?
    • @BhaveshDamor 你能告诉我你是如何停止或重启 Azure 应用服务的吗?
    • 我的主要目标是在特定时间停止应用服务并在几个小时后重新启动它们以降低成本。截至目前,我只知道手动停止/启动应用服务。我想自动执行此任务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多