如何在Logic App触发跳过或Blob存储上传失败时触发邮件?
Logic App 两种场景触发邮件的实现方案(含IAC部署指导)
完全可以实现这两种场景的邮件触发,以下是具体实现步骤和IAC部署的新手友好指导:
一、两种场景的邮件触发逻辑
1. 触发器「跳过」状态(未找到SFTP文件)
每日定时触发器会准时运行,你需要在触发器后添加条件判断:
- 先调用SFTP连接器的「列出文件」动作,获取目标路径下的文件列表。
- 添加「如果」条件,判断文件列表是否为空(表达式:
@empty(body('列出文件')))。 - 若条件成立(无文件),直接调用邮件发送动作(如Office 365 Outlook),告知本次运行未检测到文件。
2. 上传Blob存储失败
针对上传失败的场景,利用Logic App的错误分支处理:
- 在「上传至Blob存储」动作右侧,点击「添加分支」选择「失败时」。
- 在该分支中添加邮件发送动作,标题设为错误告警,内容里通过表达式
@{actions('上传至Blob存储').error.message}抓取具体错误信息,方便排查问题。 - 进阶优化:可以把「上传Blob」和「删除SFTP文件」动作放进一个「范围」容器中,给范围设置错误处理,这样整个流程环节出错都会触发告警,更严谨。
二、IAC方式部署(以Bicep为例,新手友好)
对于IAC新手,Bicep比ARM模板更简洁易读,以下是核心代码和部署步骤:
核心Bicep代码片段
resource logicApp 'Microsoft.Logic/workflows@2019-05-01' = { name: 'daily-sftp-to-blob-workflow' location: resourceGroup().location properties: { definition: { '$schema': 'https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#' contentVersion: '1.0.0.0' triggers: { Daily_Recurrence: { type: 'Recurrence' recurrence: { frequency: 'Day' interval: 1 // 可添加具体触发时间,比如每天凌晨2点:startTime: '02:00:00' } } } actions: { List_SFTP_Files: { type: 'ApiConnection' inputs: { host: { connection: { name: '@parameters(\'$connections\')[\'sftp\'][\'connectionId\']' } } method: 'get' path: '/datasets/default/foldersV2/@{encodeURIComponent(\'/your-target-sftp-path\')}/files' } } Check_File_Existence: { type: 'If' expression: '@empty(body(\'List_SFTP_Files\'))' actions: { Send_No_File_Alert: { type: 'ApiConnection' inputs: { host: { connection: { name: '@parameters(\'$connections\')[\'office365\'][\'connectionId\']' } } method: 'post' path: '/v2/Mail/Send' body: { Subject: 'Logic App运行通知:未检测到SFTP文件' Body: '<p>今日定时运行未在SFTP路径 <strong>/your-target-sftp-path</strong> 下找到任何文件。</p>' To: 'your-alert-email@example.com' } } } } else: { actions: { Upload_To_Blob: { type: 'ApiConnection' inputs: { host: { connection: { name: '@parameters(\'$connections\')[\'azureblob\'][\'connectionId\']' } } method: 'post' path: '/datasets/default/files' body: '@body(\'List_SFTP_Files\')[0].content' queryParameters: { folderPath: '/your-blob-container-path' name: '@body(\'List_SFTP_Files\')[0].name' } } } Send_Upload_Failure_Alert: { type: 'ApiConnection' inputs: { host: { connection: { name: '@parameters(\'$connections\')[\'office365\'][\'connectionId\']' } } method: 'post' path: '/v2/Mail/Send' body: { Subject: 'Logic App错误告警:Blob上传失败' Body: '<p>今日SFTP文件上传至Blob失败,错误详情:<br><strong>@{actions(\'Upload_To_Blob\').error.message}</strong></p>' To: 'your-alert-email@example.com' } } runAfter: { Upload_To_Blob: [ 'Failed' ] } } Delete_SFTP_File: { type: 'ApiConnection' inputs: { host: { connection: { name: '@parameters(\'$connections\')[\'sftp\'][\'connectionId\']' } } method: 'delete' path: '/datasets/default/files/@{encodeURIComponent(body(\'List_SFTP_Files\')[0].id)}' } runAfter: { Upload_To_Blob: [ 'Succeeded' ] } } } } } } outputs: {} } parameters: { '$connections': { value: { sftp: { connectionId: resourceId('Microsoft.Web/connections', 'sftp-connection') connectionName: 'sftp-connection' id: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Web/locations/${resourceGroup().location}/managedApis/sftp' } office365: { connectionId: resourceId('Microsoft.Web/connections', 'office365-outlook-connection') connectionName: 'office365-outlook-connection' id: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Web/locations/${resourceGroup().location}/managedApis/office365' } azureblob: { connectionId: resourceId('Microsoft.Web/connections', 'azure-blob-connection') connectionName: 'azure-blob-connection' id: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Web/locations/${resourceGroup().location}/managedApis/azureblob' } } } } } }
新手部署步骤
- 前置准备:在Azure门户手动创建SFTP、Office 365 Outlook、Azure Blob的连接器,并记录它们的名称(对应代码中的
sftp-connection、office365-outlook-connection等)。 - 参数替换:将代码中的SFTP路径、Blob容器路径、告警邮箱等参数替换为你实际的信息。
- 部署执行:
- 安装Azure CLI并登录Azure账号。
- 创建资源组(若已有则跳过):
az group create --name your-resource-group-name --location eastus - 运行部署命令:
az deployment group create --resource-group your-resource-group-name --template-file logic-app.bicep
内容的提问来源于stack exchange,提问作者user2948533
相关产品推荐
相关产品推荐

