代码之家  ›  专栏  ›  技术社区  ›  Gregory

Azure Automation和Logic应用程序,用于功能应用程序的计划自动扩展

  •  0
  • Gregory  · 技术社区  · 2 年前

    我正在尝试创建一个Azure自动化系统,以更改功能应用程序的随时可用实例的数量(应用程序服务计划是Elastic Premium One EP1):

    Always Ready Instances of my Function App

    创建自动化系统是为了在工作日将“始终准备就绪实例”的数量设置为3,在周末将其设置为1。

    该系统由以下两个在服务Azure Automation Accounts下创建的Runbook组成:

    1. “runbook工作日”

    $resourceGroupName = "xxxxxxxxxxxx"
    $functionApp = "xxxxxxxxxx-func"
    
    $Resource = Get-AzResource -ResourceGroupName $resourceGroupName -ResourceName $functionApp/config/web -ResourceType Microsoft.Web/sites
    $Resource.Properties.minimumElasticInstanceCount = 3
    $Resource | Set-AzResource -Force
    1. “runbook周末天数”

    $resourceGroupName = "xxxxxxxxxxxx"
    $functionApp = "xxxxxxxxxxxx-func"
    
    $Resource = Get-AzResource -ResourceGroupName $resourceGroupName -ResourceName $functionApp/config/web -ResourceType Microsoft.Web/sites
    $Resource.Properties.minimumElasticInstanceCount = 1
    $Resource | Set-AzResource -Force

    请注意,我在自动化帐户中使用“系统分配”标识。

    当使用Azure logic应用程序实现自动化逻辑时:

    Logic App Design part 1

    其中“条件”框下的表达式为: formatDateTime(utcNow(),'dddd') ,从上图中可以看出,它仅为周设置。

    下图是逻辑应用程序的第二部分:

    Logic App Design part 2

    请注意,在Logic Apps中创建自动化作业时,我选择了“OAuth default”作为身份验证方法,然后我只需粘贴订阅的tenantID。

    现在,如果我从逻辑应用程序服务测试逻辑应用程序,它可以工作:

    Logic App Design triggered

    我希望总是准备好的实例的数量等于3,但如果我检查总是准备好实例的数量,则没有任何变化:

    Always ready instances

    此外,转到runbook页面的错误页面:

    Runbook error

    我看到以下两个错误:

    Get-AzResource : Run Connect-AzAccount to login. At line:4 char:13 + $Resource = Get-AzResource -ResourceGroupName $resourceGroupName -Res ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : CloseError: (:) [Get-AzResource], PSInvalidOperationException + FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.GetAzureResourceCmdlet

    The property 'minimumElasticInstanceCount' cannot be found on this object. Verify that the property exists and can be set. At line:5 char:1 + $Resource.Properties.minimumElasticInstanceCount = 3 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound

    你知道问题出在哪里吗?

    2 回复  |  直到 2 年前
        1
  •  1
  •   Gregory    2 年前

    您是否已在runbook中登录?

    第一个错误告诉您使用 Connect-AzAccount 第二个错误是该属性不存在的一般错误,因为 $Resource 对象没有该属性。

    1. 第一个错误:

    在自动化帐户控制台中,在“帐户设置”下->身份,请确保将系统分配的身份设置为:

    System Assigned Identity

    然后,单击“Azure角色分配”按钮,检查您的功能应用程序的资源组中是否有“参与者”角色并分配给Azure自动化帐户:

    Contributor role

    最后在脚本中添加以下代码:

    # Ensures you do not inherit an AzContext in your runbook
    Disable-AzContextAutosave -Scope Process
    
    # Connect to Azure with system-assigned managed identity
    $AzureContext = (Connect-AzAccount -Identity).context
    
    # Set and store context
    $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext
    
    1. 第二个错误:

    转到Function App控制台,然后在“设置”下单击“配置”,并验证您是否具有属性“minimumElasticInstanceCount”:

    Azure Function property

    如果您没有此属性,只需单击“新建应用程序设置”按钮即可创建它。

    这是一个有用的Azure文档:

    https://learn.microsoft.com/en-us/azure/automation/enable-managed-identity-for-automation#authenticate-access-with-system-assigned-managed-identity

        2
  •  0
  •   Shiraz Bhaiji    2 年前

    错误“Run Connect AzAccount to login”表示运行命令的调用不是在允许进行调用的安全上下文中进行的。

    在您的情况下,是逻辑应用程序在打电话。所以首先要检查的是您的逻辑应用程序的安全上下文。