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
参数。
它被称为:
- 一旦验证
- 部署初始化后
- 部署完所有其他资源后。
这是 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,尽管这也需要只能在资源组级别部署的资源。
我想在我的租户中加入订阅,一旦完成,我想调用一个 HTTP 端点,以在我这边处理一些其他逻辑。
由于我的 ARM 模板在订阅范围内执行,我不能使用 deployment script,因为它需要一个资源组。
我发现的另一个解决方法是使用 deployment that gets the template from a URL。但是,这也有一个问题。在我的例子中,端点被调用了三次,即使我设置了 dependsOn
参数。
它被称为:
- 一旦验证
- 部署初始化后
- 部署完所有其他资源后。
这是 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,尽管这也需要只能在资源组级别部署的资源。