You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Amplify构建完成后获取最新状态并触发带附件的自定义邮件

解决AWS Amplify构建完成后发送带附件的自定义状态邮件通知问题

核心思路

Amplify构建阶段内的脚本无法获取最终构建状态,必须脱离构建流程,通过外部服务监听构建完成事件来实现需求。以下是两种可行方案:


方案1:CloudWatch Events + Lambda + SES(推荐)

利用Amplify自动推送的构建状态事件,结合Lambda处理逻辑、SES发送带附件的自定义邮件。

步骤1:创建CloudWatch Event规则

  • 触发源选择AWS Amplify,事件类型为Amplify Deployment Status Change
  • 添加过滤条件,只监听最终状态(避免触发中间的RUNNING状态):
    {
      "source": ["aws.amplify"],
      "detail-type": ["Amplify Deployment Status Change"],
      "detail": {
        "status": ["SUCCEEDED", "FAILED", "CANCELLED"]
      }
    }
    

步骤2:编写Lambda处理函数

用Node.js示例实现,核心逻辑是获取构建详情、生成附件、调用SES发邮件:

const AWS = require('aws-sdk');
const amplify = new AWS.Amplify();
const ses = new AWS.SES({ region: '你的区域' });

exports.handler = async (event) => {
  const { appId, branchName, jobId, status } = event.detail;

  // 获取完整构建详情
  const buildRes = await amplify.getJob({ appId, branchName, jobId }).promise();
  
  // 生成附件(以JSON格式的构建详情为例)
  const attachmentBuffer = Buffer.from(JSON.stringify(buildRes, null, 2));
  const base64Attachment = attachmentBuffer.toString('base64');

  // 构造邮件参数
  const emailParams = {
    Destination: { ToAddresses: ['收件邮箱'] },
    Message: {
      Subject: { Data: `Amplify构建通知:${branchName} - ${status}` },
      Body: { Text: { Data: `构建状态:${status}\n分支:${branchName}\n构建ID:${jobId}` } }
    },
    Source: '发件邮箱(需在SES中验证)',
    Attachments: [{
      Filename: `build-${jobId}-details.json`,
      Data: base64Attachment,
      ContentType: 'application/json'
    }]
  };

  // 发送邮件
  await ses.sendEmail(emailParams).promise();
  return { statusCode: 200, body: '通知邮件已发送' };
};

步骤3:配置Lambda权限

  • 添加amplify:GetJob权限,允许读取构建详情
  • 添加ses:SendEmail权限,允许调用SES发送邮件
  • 确保CloudWatch Events有触发该Lambda的权限

方案2:Amplify构建后触发外部Webhook

适合已有后端服务的场景,通过Webhook延迟查询构建状态:

  1. 在Amplify的postBuild阶段,传递构建标识到外部Webhook:
    curl -X POST https://你的Webhook地址/amplify-notify \
      -H "Content-Type: application/json" \
      -d '{"appId":"'"$AWS_AMPLIFY_APP_ID"'","branchName":"'"$AWS_BRANCH"'","jobId":"'"$AWS_JOB_ID"'"}'
    
  2. 外部Webhook服务接收请求后,设置10-15秒延迟(确保Amplify状态更新完成),调用Amplify API获取最终状态
  3. 生成附件后,通过SES或自有邮件服务发送自定义通知

为什么之前的方法无效?

  • Amplify的postDeploy属于构建流程环节,此时构建未完全结束,状态始终为RUNNING
  • node-cron和sleep脚本会阻塞构建进程,且构建环境无法获取外部已更新的状态
  • SNS本身不支持直接添加附件,必须结合Lambda/SES处理附件逻辑

内容的提问来源于stack exchange,提问作者anuj gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 06:59:55