简体   繁体   中英

How to add AzureFunction as Event Subscription Endpoint in ARM Template?

I have written an ARM template to create an event subscription on an existing storage account, where I need to listen to a particular blob container's blob.created and blob.deleted events, and send them to an Azure eventgrid trigger function app.

The functionapp is already deployed in Azure https://myfunctionapp.azurewebsites.net , and I am having a hard time trying to create the event subscription through the ARM template. Please note that I have used API version 2020-01-01-preview in order to have AzureFunction as the endpoint. The template is as follows:

{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
    "appName": {
        "type": "string",
        "metadata": {
            "description": "Name of the function app"
        }
    },
    "functionName": {
        "type": "string",
        "defaultValue": "MyFunction",
        "metadata": {
            "description": "Name of the function"
        }
    },
    "eventSubName": {
        "type": "string",
        "defaultValue": "myfunctionappsub",
        "metadata": {
            "description": "The name of the event subscription to create."
        }
    },
    "storageName": {
        "type": "string",
        "metadata": {
            "description": "Storage account name"
        }
    },
    "location": {
        "type": "string",
        "defaultValue": "[resourceGroup().location]",
        "metadata": {
            "description": "Storage account location"
        }
    },
    "containerNamefilter": {
        "type": "string",
        "defaultValue": "-inputblob",
        "metadata": {
            "description": "Container name filter"
        }
    }
},
"variables": {
    "functionAppName": "[resourceId('Microsoft.Web/sites/functions/', parameters('appName'), parameters('functionName'))]"
},
"resources": [
    {
        "type": "Microsoft.Storage/storageAccounts/providers/eventSubscriptions",
        "name": "[concat(parameters('storageName'), '/Microsoft.EventGrid/', parameters('eventSubName'))]",
        "apiVersion": "2020-01-01-preview",
        "dependsOn": [
            "[parameters('storageName')]"
        ],
        "properties": {
            "destination": {
                "endpointType": "AzureFunction",
                "properties": {
                    "resourceId": "[variables('functionAppName')]"
                }
            },
            "filter": {
                "subjectBeginsWith": "",
                "subjectEndsWith": "",
                "isSubjectCaseSensitive": false,
                "includedEventTypes": [
                    "Microsoft.Storage.BlobCreated",
                    "Microsoft.Storage.BlobDeleted"
                ],
                "advancedFilters": [
                    {
                        "key": "subject",
                        "operatorType": "StringContains",
                        "value": "[parameters('containerfilter')]"
                    }
                ]
            }
        }
    }
]
}

This is the error I get when I try to run it on the pipeline:

2020-04-15T11:09:11.5347864Z Starting template validation.
2020-04-15T11:09:11.5368215Z Deployment name is azuredeploy-xxxxxxx-xxxxxx-xxxx
2020-04-15T11:09:13.1700166Z Template deployment validation was completed successfully.
2020-04-15T11:09:13.1700897Z Starting Deployment.
2020-04-15T11:09:13.1703528Z Deployment name is azuredeploy-xxxxxxx-xxxxxx-xxxx
2020-04-15T11:10:02.5842880Z There were errors in your deployment. Error code: DeploymentFailed.
2020-04-15T11:10:02.5893091Z ##[error]At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details.
2020-04-15T11:10:02.5910677Z ##[error]Details:
2020-04-15T11:10:02.5915877Z ##[error]Conflict: {
  "status": "Failed",
  "error": {
    "code": "ResourceDeploymentFailure",
    "message": "The resource operation completed with terminal provisioning state 'Failed'.",
    "details": [
      {
        "code": "Internal error",
        "message": "The operation failed due to an internal server error. The initial state of the impacted resources (if any) are restored. Please try again in few minutes. If error still persists, report 72c636d4-6d09-4c50-8886-7153ddf2a4ee:4/15/2020 11:09:50 AM (UTC) to our forums for assistance or raise a support ticket ."
      }
    ]
  }
}
2020-04-15T11:10:02.5918976Z ##[error]Task failed while creating or updating the template deployment.
2020-04-15T11:10:02.5953000Z ##[section]Finishing: Create or update eventsubscription in RG

Am I doing anything wrong here? I'm very new to ARM templates.

If you want to create event grid subscription for the existing storage account, please refer to the following template

{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {

    "functionGroup": {
        "type": "string",
        "defaultValue" : "jimtest",
        "metadata": {
            "description": "he group name of  function app"
        }
    },
    "appName": {
        "type": "string",
        "defaultValue" : "testfunjs",
        "metadata": {
            "description": "Name of the function app"
        }
    },
    "functionName": {
        "type": "string",
        "defaultValue": "EventGridTrigger1",
        "metadata": {
            "description": "Name of the function"
        }
    },
    "eventSubName": {
        "type": "string",
        "defaultValue": "myfunctionappsub",
        "metadata": {
            "description": "The name of the event subscription to create."
        }
    },
    "storageName": {
        "type": "string",
        "defaultValue" : "andyprivate",
        "metadata": {
            "description": "Storage account name"
        }
    },
    "location": {
        "type": "string",
        "defaultValue": "[resourceGroup().location]",
        "metadata": {
            "description": "Storage account location"
        }
    },
    "containerNamefilter": {
        "type": "string",
        "defaultValue": "test",
        "metadata": {
            "description": "Container name filter"
        }
    }
},
"variables": {
    "functionId" :"[resourceId(parameters('functionGroup'),'Microsoft.Web/sites/functions/', parameters('appName'), parameters('functionName'))]",  
},
"resources": [
{
        "type": "Microsoft.Storage/storageAccounts/providers/eventSubscriptions",
        "name": "[concat(parameters('storageName'), '/Microsoft.EventGrid/', parameters('eventSubName'))]",
        "apiVersion": "2020-01-01-preview",
        "properties": {
            "destination": {
                "endpointType": "AzureFunction",
                "properties": {
                    "resourceId": "[variables('functionId')]"
                }
            },
            "filter": {
                "subjectBeginsWith": "",
                "subjectEndsWith": "",
                "isSubjectCaseSensitive": false,
                "includedEventTypes": [
                    "Microsoft.Storage.BlobCreated",
                    "Microsoft.Storage.BlobDeleted"
                ],
                "advancedFilters": [
                    {
                        "key": "subject",
                        "operatorType": "StringContains",
                        "value": "[parameters('containerNamefilter')]"
                    }
                ]
            }
        }
    }

]
}

在此处输入图像描述 在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM