Функция MSDeploy и условие гонки подписки на сетку событий в шаблоне ARM - PullRequest
0 голосов
/ 17 апреля 2020

Я развертываю функцию с использованием расширений MSDeploy, а затем развертываю подписку на сетку событий с этой функцией в качестве конечной точки. Развертывание сетки событий завершается неудачно с сообщением -

"details": [
      {
        "code": "Endpoint validation",
        "message": "The attempt to validate the provided azure endpoint resource:/subscriptions/XXXXX/resourceGroups/ResourceGroupName/providers/Microsoft.Web/sites/FunctionAppName/functions/EndpointName failed."
      }
    ]

Я полагаю, это потому, что подписка сетки событий пыталась создать до того, как конечная точка функции, развернутая с MSDeploy, будет запущена и запущена. Как я могу избежать этого состояния гонки? Примечание. Повторное развертывание того же шаблона создает штраф в сетке событий.

Используемый шаблон -

 //function app
        {
            "apiVersion": "2018-11-01",
            "type": "Microsoft.Web/sites",
            "name": "[parameters('functionAppName')]",
            "location": "[resourceGroup().location]",
            "kind": "functionapp",
            "dependsOn": [
                "[variables('azureFunction_serverFarmResourceId')]"
            ],
            "properties": {
                "serverFarmId": "[variables('azureFunction_serverFarmResourceId')]",
                "siteConfig": {
                    "appSettings": [
                        {
                        "name": "AzureWebJobsStorage",
                        "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', parameters('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountResourceId'),variables('storageAccountApiVersion')).keys[0].value)]"
                        },
                        {
                        "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
                        "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', parameters('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountResourceId'),variables('storageAccountApiVersion')).keys[0].value)]"//"[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2015-05-01-preview').key1)]"
                        },
                        {
                        "name": "WEBSITE_CONTENTSHARE",
                        "value": "[toLower(parameters('functionAppName'))]"
                        },
                        {
                        "name": "FUNCTIONS_EXTENSION_VERSION",
                        "value": "~3"
                        },
                        {
                        "name": "WEBSITE_NODE_DEFAULT_VERSION",
                        "value": "~10"
                        },
                        {
                        "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
                        "value": "[reference(resourceId('microsoft.insights/components/', parameters('functionApp_applicationInsightsName')), '2015-05-01').InstrumentationKey]"
                        },
                        {
                        "name": "FUNCTIONS_WORKER_RUNTIME",
                        "value": "dotnet"
                        }
                    ]
                }
            },
            "resources": [
                {
                    "apiVersion": "2018-11-01",
                    "name": "MSDeploy",
                    "dependsOn": [
                        "[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]"

                    ],
                    "properties": {
                        "packageUri": "[parameters('functionAppDeployPackageUri')]"
                    },
                    "type": "extensions"
                }
            ]
        },

        //event grid
        {
            "type": "Microsoft.Storage/storageAccounts/providers/eventSubscriptions",
            "name": "[concat(parameters('storageAccountName'), '/Microsoft.EventGrid/', parameters('blobcreate_eventsubscription_name'))]",
            "apiVersion": "2020-04-01-preview",
            "dependsOn": [
                "[concat('Microsoft.Web/sites/', parameters('functionAppName'), '/extensions/MSDeploy')]",
                "[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]",
                "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
            ],
            "properties": {
                "destination": {
                    "endpointType": "AzureFunction",
                    "properties": {
                        "resourceId": "[concat(resourceId('Microsoft.Web/sites', parameters('functionAppName')), '/functions/', variables('egressDataProcessorFunctionName'))]"
                    }
                },
                "filter": {
                    "subjectBeginsWith": "[concat('/blobServices/default/containers/', parameters('storageAccounts_mainblob_name'))]",  
                    "subjectEndsWith": ".xml",
                    "includedEventTypes": [
                        "Microsoft.Storage.BlobCreated"
                    ],
                    "advancedFilters": []
                },
                "retryPolicy": {
                    "maxDeliveryAttempts": "[parameters('eventgrid_maxDeliveryAttemps')]",
                    "eventTimeToLiveInMinutes": "[parameters('eventgrid_eventTimeToLiveInMinutes')]"
                },
                "deadLetterDestination": {
                    "endpointType": "StorageBlob",
                    "properties": {
                        "resourceId": "[variables('storageAccountResourceId')]",
                        "blobContainerName": "[parameters('storageAccounts_deadletterblob_name')]"
                    }
                }
            }
        }

1 Ответ

1 голос
/ 26 апреля 2020

Один из способов - развернуть приложение функции в виде связанного шаблона , а затем получить шаблон root:

  1. Развернуть шаблон приложения функции с помощью URL-адреса функции как вывод.
  2. Развертывание подписки Event Grid, которая зависит от развертывания приложения функции и ссылается на его вывод.

Другая возможность состоит в том, чтобы плюнуть appsettings в дочерний ресурс , и зависят от вашего ресурса MSDeploy, тогда Сетка событий зависит от appsettings.

...