Azure Lighthouse - 部署所有内容后调用 HTTP 端点

Azure Lighthouse - Call HTTP endpoint once everything is deployed

我想在我的租户中加入订阅,一旦完成,我想调用一个 HTTP 端点,以在我这边处理一些其他逻辑。

由于我的 ARM 模板在订阅范围内执行,我不能使用 deployment script,因为它需要一个资源组。 我发现的另一个解决方法是使用 deployment that gets the template from a URL。但是,这也有一个问题。在我的例子中,端点被调用了三次,即使我设置了 dependsOn 参数。 它被称为:

  1. 一旦验证
  2. 部署初始化后
  3. 部署完所有其他资源后。

这是 ARM 模板的一部分:

{
    "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    // Other properties
    "resources": [
        {
            "type": "Microsoft.ManagedServices/registrationDefinitions",
            "apiVersion": "2019-09-01",
            "name": "[variables('mspRegistrationName')]",
            "properties": {
                "registrationDefinitionName": "[parameters('mspOfferName')]",
                "description": "[parameters('mspOfferDescription')]",
                "managedByTenantId": "[variables('managedByTenantId')]",
                "authorizations": "[variables('authorizations')]"
            }
        },
        {
            "type": "Microsoft.ManagedServices/registrationAssignments",
            "apiVersion": "2019-09-01",
            "name": "[variables('mspAssignmentName')]",
            "dependsOn": [
                "[resourceId('Microsoft.ManagedServices/registrationDefinitions/', variables('mspRegistrationName'))]"
            ],
            "properties": {
                "registrationDefinitionId": "[resourceId('Microsoft.ManagedServices/registrationDefinitions/', variables('mspRegistrationName'))]"
            }
        },
        {
            "name": "Callback",
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2020-10-01",
            "location": "westus",
            "dependsOn": [
                "[resourceId('Microsoft.ManagedServices/registrationDefinitions/', variables('mspRegistrationName'))]",
                "[resourceId('Microsoft.ManagedServices/registrationAssignments/', variables('mspRegistrationName'))]"
            ],
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[variables('TemplateUri')]"
                },
                "parameters":  {}
            }
        }
    ],

当然,我可以硬编码第三次调用是有效的,但这不是一个好方法。 是否有任何“更安全”的方式从 ARM 模板调用端点?

您可以使用 ARM 模板创建资源组,然后将包含部署脚本的嵌套模板部署到其中。 RG 和 RG-level 部署都可以在 subscription-level 模板中创建为资源。

另一种方法是创建一个带有事件网格触发器的 Azure 函数,监听 ARM events,尽管这也需要只能在资源组级别部署的资源。