Как отслеживать создание большого двоичного объекта в контейнере/подпапках хранилища Azure и запускать приложение логики для отправки электронной почты

#azure #azure-blob-storage #azure-logic-apps #azure-eventgrid

Вопрос:

У нас есть контейнер хранилища Azure с вложенными папками, создаваемыми динамически, мы хотим отслеживать создание больших двоичных объектов в этом контейнере/вложенных папках и раз в день отправлять электронное письмо со всеми большими двоичными объектами, добавленными за день в качестве вложения в электронное письмо.

Мы попытались создать приложение логики с триггером сетки событий (при возникновении события ресурса), как показано ниже.

введите описание изображения здесь

мы хотели бы знать, есть ли способ собрать все большие двоичные объекты, добавленные за день в контейнер, получить содержимое всех этих больших двоичных объектов, добавить их в качестве вложения и отправлять электронное письмо по расписанию один раз в день.

Любые предложения по

  1. как поместить все большие двоичные объекты в контейнер, подпапку и сохранить метаданные больших двоичных объектов, созданные в виде массива?
  2. И затем, как прикрепить все большие двоичные объекты, созданные в одном электронном письме?
  3. Как получить имя большого двоичного объекта после триггера «При возникновении события ресурса»?

Ответ №1:

Исходя из вышеуказанных требований, мы создали приложение логики с помощью таймера, чтобы перечислить и получить содержимое всех больших двоичных объектов, созданных в определенный день, и отправим электронное письмо с содержимым большого двоичного объекта в качестве вложения. используя приведенный ниже код рабочего потока, вы вносите изменения в соответствии со своими бизнес-требованиями.

 {
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "Attach": {
                "inputs": {
                    "variables": [
                        {
                            "name": "Arraytoattach",
                            "type": "array"
                        }
                    ]
                },
                "runAfter": {
                    "Lists_blobs_(V2)": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "Blob_Name": {
                "inputs": {
                    "variables": [
                        {
                            "name": "Count",
                            "type": "integer",
                            "value": "@length(variables('Arraytoattach'))"
                        }
                    ]
                },
                "runAfter": {
                    "For_each": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "For_each": {
                "actions": {
                    "Compose_2": {
                        "inputs": "@items('For_each')?['LastModified']",
                        "runAfter": {},
                        "type": "Compose"
                    },
                    "Compose_3": {
                        "inputs": "@formatDateTime(outputs('Compose_2'),'yyyy-MM-dd')",
                        "runAfter": {
                            "Compose_2": [
                                "Succeeded"
                            ]
                        },
                        "type": "Compose"
                    },
                    "Condition": {
                        "actions": {
                            "Append_to_array_variable": {
                                "inputs": {
                                    "name": "Arraytoattach",
                                    "value": {
                                        "ContentBytes": "@body('Get_blob_content_(V2)_2')?['$content']",
                                        "Name": "@items('For_each')?['Name']"
                                    }
                                },
                                "runAfter": {
                                    "Get_blob_content_(V2)_2": [
                                        "Succeeded"
                                    ]
                                },
                                "type": "AppendToArrayVariable"
                            },
                            "Get_blob_content_(V2)_2": {
                                "inputs": {
                                    "host": {
                                        "connection": {
                                            "name": "@parameters('$connections')['azureblob']['connectionId']"
                                        }
                                    },
                                    "method": "get",
                                    "path": "/v2/datasets/@{encodeURIComponent(encodeURIComponent('stacklogictest'))}/files/@{encodeURIComponent(encodeURIComponent(items('For_each')?['Path']))}/content",
                                    "queries": {
                                        "inferContentType": true
                                    }
                                },
                                "runAfter": {},
                                "type": "ApiConnection"
                            }
                        },
                        "expression": {
                            "and": [
                                {
                                    "equals": [
                                        "@outputs('Compose_3')",
                                        "@formatDateTime(utcNow(),'yyyy-MM-dd')"
                                    ]
                                }
                            ]
                        },
                        "runAfter": {
                            "Compose_3": [
                                "Succeeded"
                            ]
                        },
                        "type": "If"
                    }
                },
                "foreach": "@body('Lists_blobs_(V2)')?['value']",
                "runAfter": {
                    "Attach": [
                        "Succeeded"
                    ]
                },
                "type": "Foreach"
            },
            "Lists_blobs_(V2)": {
                "inputs": {
                    "host": {
                        "connection": {
                            "name": "@parameters('$connections')['azureblob']['connectionId']"
                        }
                    },
                    "method": "get",
                    "path": "/v2/datasets/@{encodeURIComponent(encodeURIComponent('stacklogictest'))}/foldersV2/@{encodeURIComponent(encodeURIComponent('JTJmdGVzdDEyMw=='))}",
                    "queries": {
                        "nextPageMarker": "",
                        "useFlatListing": false
                    }
                },
                "metadata": {
                    "JTJmdGVzdDEyMw==": "/test123"
                },
                "runAfter": {},
                "type": "ApiConnection"
            },
            "Send_an_email_(V2)": {
                "inputs": {
                    "body": {
                        "Attachments": "@variables('Arraytoattach')",
                        "Body": "<p>Total Number of blob created today : @{variables('Count')}</p>",
                        "Subject": "Blob created Today",
                        "To": "<**ReciepientMailAddress**>"
                    },
                    "host": {
                        "connection": {
                            "name": "@parameters('$connections')['office365']['connectionId']"
                        }
                    },
                    "method": "post",
                    "path": "/v2/Mail"
                },
                "runAfter": {
                    "Blob_Name": [
                        "Succeeded"
                    ]
                },
                "type": "ApiConnection"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {
            "$connections": {
                "defaultValue": {},
                "type": "Object"
            }
        },
        "triggers": {
            "Recurrence": {
                "recurrence": {
                    "frequency": "Day",
                    "interval": 1,
                    "startTime": "2021-07-15T04:00:00Z"
                },
                "type": "Recurrence"
            }
        }
    },
    "parameters": {
        "$connections": {
            "value": {
                "azureblob": {
                    "connectionId": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroups>/providers/Microsoft.Web/connections/azureblob",
                    "connectionName": "azureblob",
                    "id": "/subscriptions/<subscriptionId>/providers/Microsoft.Web/locations/southindia/managedApis/azureblob"
                },
                "office365": {
                    "connectionId": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroups>/providers/Microsoft.Web/connections/office365",
                    "connectionName": "office365",
                    "id": "/subscriptions/<subscriptionId>/providers/Microsoft.Web/locations/southindia/managedApis/office365"
                }
            }
        }
    }
}
 
  1. как поместить все большие двоичные объекты в контейнер, подпапку и сохранить метаданные больших двоичных объектов, созданные в виде массива?

Ответ: Используя сетку событий, вы можете добавить все большие двоичные объекты в определенном контейнере в один массив, потому что сетка событий запускает приложение логики при добавлении нового большого двоичного объекта.

  1. И затем, как прикрепить все большие двоичные объекты, созданные в одном электронном письме?

Ответ: Из-за ограничений Outlook мы не можем отправлять или присоединять данные, объем которых превышает 25 МБ.

3.Как получить имя большого двоичного объекта после триггера «Когда происходит событие ресурса»?

Ответ : Как показано на рисунке ниже, инициализируйте строковую переменную и добавьте ее в следующее событие сетки событий и добавьте приведенное ниже описание, чтобы сначала получить имя большого двоичного объекта из выходных данных сетки событий(split(last(split(string(triggerBody ()),’/blob/’)),'»,»событие»))

введите описание изображения здесь

Приведенное выше приложение логики завершится неудачно, если тип содержимого большого двоичного объекта-текст, в который необходимо внести соответствующие изменения в соответствии с требованиями.

Вот пример вывода приведенного выше приложения логики введите описание изображения здесь

Ответ №2:

Создал приложение логики для отправки электронной почты с вложением всех больших двоичных объектов внутри контейнера, которые были добавлены за день до текущего дня.

 {
"definition": {
    "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
    "actions": {
        "Current_time": {
            "inputs": {},
            "kind": "CurrentTime",
            "runAfter": {
                "Lists_blobs_(V2)": [
                    "Succeeded"
                ]
            },
            "type": "Expression"
        },
        "For_each": {
            "actions": {
                "For_each_2": {
                    "actions": {
                        "Condition": {
                            "actions": {
                                "Append_to_array_variable": {
                                    "inputs": {
                                        "name": "attachements",
                                        "value": "@outputs('Compose')"
                                    },
                                    "runAfter": {
                                        "Compose": [
                                            "Succeeded"
                                        ]
                                    },
                                    "type": "AppendToArrayVariable"
                                },
                                "Compose": {
                                    "inputs": {
                                        "ContentBytes": "@{base64(body('Get_Blob'))}",
                                        "Name": "@{last(split(items('For_each_2')?['Path'],'/'))}"
                                    },
                                    "runAfter": {
                                        "Get_Blob": [
                                            "Succeeded"
                                        ]
                                    },
                                    "type": "Compose"
                                },
                                "Get_Blob": {
                                    "inputs": {
                                        "host": {
                                            "connection": {
                                                "name": "@parameters('$connections')['azureblob']['connectionId']"
                                            }
                                        },
                                        "method": "get",
                                        "path": "/v2/datasets/@{encodeURIComponent(encodeURIComponent('<StorageAccountName/connection>'))}/files/@{encodeURIComponent(encodeURIComponent(items('For_each_2')?['Path']))}/content",
                                        "queries": {
                                            "inferContentType": true
                                        }
                                    },
                                    "runAfter": {},
                                    "type": "ApiConnection"
                                }
                            },
                            "expression": {
                                "and": [
                                    {
                                        "greater": [
                                            "@items('For_each_2')?['LastModified']",
                                            "@addDays(body('Current_time'),-1)"
                                        ]
                                    }
                                ]
                            },
                            "runAfter": {},
                            "type": "If"
                        }
                    },
                    "foreach": "@body('Lists_blobs_(V2)_3')?['value']",
                    "runAfter": {
                        "Lists_blobs_(V2)_3": [
                            "Succeeded"
                        ]
                    },
                    "type": "Foreach"
                },
                "Lists_blobs_(V2)_3": {
                    "inputs": {
                        "host": {
                            "connection": {
                                "name": "@parameters('$connections')['azureblob']['connectionId']"
                            }
                        },
                        "method": "get",
                        "path": "/v2/datasets/@{encodeURIComponent(encodeURIComponent('<storageaccount connection>'))}/foldersV2/@{encodeURIComponent(encodeURIComponent(items('For_each')?['Path']))}",
                        "queries": {
                            "nextPageMarker": "",
                            "useFlatListing": false
                        }
                    },
                    "runAfter": {},
                    "type": "ApiConnection"
                }
            },
            "foreach": "@body('Lists_blobs_(V2)')?['value']",
            "runAfter": {
                "Current_time": [
                    "Succeeded"
                ]
            },
            "type": "Foreach"
        },
        "Initialize_variable": {
            "inputs": {
                "variables": [
                    {
                        "name": "attachements",
                        "type": "array"
                    }
                ]
            },
            "runAfter": {},
            "type": "InitializeVariable"
        },
        "Lists_blobs_(V2)": {
            "inputs": {
                "host": {
                    "connection": {
                        "name": "@parameters('$connections')['azureblob']['connectionId']"
                    }
                },
                "method": "get",
                "path": "/v2/datasets/@{encodeURIComponent(encodeURIComponent('<storageaccount connection>'))}/foldersV2/@{encodeURIComponent(encodeURIComponent('JTJmY2FyYm9uYmxh='))}",
                "queries": {
                    "nextPageMarker": "",
                    "useFlatListing": false
                }
            },
            "metadata": {
                "JTJmY2FyYm9uYmxh=": "/<containerName>"
            },
            "runAfter": {
                "Initialize_variable": [
                    "Succeeded"
                ]
            },
            "type": "ApiConnection"
        },
        "Send_an_email_(V2)_3": {
            "inputs": {
                "body": {
                    "Attachments": "@variables('attachements')",
                    "Body": "<p>body</p>",
                    "Subject": "Subject",
                    "To": "Email"
                },
                "host": {
                    "connection": {
                        "name": "@parameters('$connections')['office365']['connectionId']"
                    }
                },
                "method": "post",
                "path": "/v2/Mail"
            },
            "runAfter": {
                "For_each": [
                    "Succeeded",
                    "Failed",
                    "Skipped",
                    "TimedOut"
                ]
            },
            "type": "ApiConnection"
        }
    },
    "contentVersion": "1.0.0.0",
    "outputs": {},
    "parameters": {
        "$connections": {
            "defaultValue": {},
            "type": "Object"
        }
    },
    "triggers": {
        "Recurrence": {
            "recurrence": {
                "frequency": "Day",
                "interval": 1,
                "schedule": {
                    "hours": [
                        "9"
                    ],
                    "minutes": [
                        0
                    ]
                },
                "timeZone": "Standard Time"
            },
            "type": "Recurrence"
        }
    }
},
"parameters": {
    "$connections": {
        "value": {
            "azureblob": {
                "connectionId": "/subscriptions/<subscriptionId>/resourceGroups/<ResourceGroup>/providers/Microsoft.Web/connections/azureblob",
                "connectionName": "azureblob",
                "id": "/subscriptions/<subscriptionId>/providers/Microsoft.Web/locations/<location>/managedApis/azureblob"
            },
            "office365": {
                "connectionId": "/subscriptions/<subscriptionId>/resourceGroups/<ResourceGroup>/providers/Microsoft.Web/connections/office365-1",
                "connectionName": "office365",
                "id": "/subscriptions/subscriptionId>/providers/Microsoft.Web/locations/<location>/managedApis/office365"
            }
        }
    }
}
 

}

введите описание изображения здесь