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

如何在CDK中为CodeBuildStep配置CloudWatch告警监控CI/CD流水线?

如何为CDK Pipelines中的CodeBuildStep配置CloudWatch监控与告警

CodeBuildStep本身没有像NodejsFunction那样直接暴露metric方法,但它底层对应一个AWS CodeBuild项目,我们可以通过CodeBuildStep的project属性获取该项目实例,进而创建CloudWatch指标和告警。

实现步骤与代码示例

  1. 将CodeBuildStep实例单独存储:先把流水线中的CodeBuildStep存为变量,方便后续引用其底层CodeBuild项目。
  2. 通过CodeBuild项目实例创建指标与告警:利用project属性提供的封装方法(如metricFailedBuilds)或通用metric方法自定义监控指标,再创建CloudWatch告警。

修改后的完整代码示例:

// 定义CodeBuildStep并存储为变量
const synthStep = new CodeBuildStep("Deployment", {
  input: CodePipelineSource.codeCommit(this.codeRepository, environment),
  env: { environment },
  installCommands: ["npm uninstall -g aws-cdk", "npm i -g npm@latest", "npm install -g aws-cdk"],
  commands: [
    "cd backend",
    "npm ci",
    "npm run build",
    "npx cdk synth",
  ],
  primaryOutputDirectory: "backend/cdk.out",
  buildEnvironment: {
    computeType: ComputeType.SMALL,
  },
});

// 创建CDK流水线
this.codePipeline = new CodePipeline(this, `${environment}-${appName}-`, {
  pipelineName: `${environment}-${appName}-`,
  selfMutation: true,
  crossAccountKeys: false,
  role: this.codePipelineRole,
  cliVersion: "21.0.0",
  synth: synthStep
});

// 示例1:监控FailedBuilds指标并创建告警
new Alarm(this, "CodeBuildFailedBuildsAlarm", {
  alarmName: `${environment}-${appName}-codeBuild-FailedBuilds`,
  comparisonOperator: ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
  threshold: 1,
  evaluationPeriods: 1,
  metric: synthStep.project.metricFailedBuilds({
    period: Duration.minutes(5),
    statistic: "Sum",
  }),
});

// 示例2:监控Duration指标(构建总时长)
new Alarm(this, "CodeBuildDurationAlarm", {
  alarmName: `${environment}-${appName}-codeBuild-Duration`,
  comparisonOperator: ComparisonOperator.GREATER_THAN_THRESHOLD,
  threshold: 300, // 阈值设为5分钟(单位:秒)
  evaluationPeriods: 1,
  metric: synthStep.project.metricDuration({
    period: Duration.minutes(5),
    statistic: "Average",
  }),
});

// 示例3:自定义监控InstallDuration指标(安装阶段时长)
new Alarm(this, "CodeBuildInstallDurationAlarm", {
  alarmName: `${environment}-${appName}-codeBuild-InstallDuration`,
  comparisonOperator: ComparisonOperator.GREATER_THAN_THRESHOLD,
  threshold: 120, // 阈值设为2分钟(单位:秒)
  evaluationPeriods: 1,
  metric: synthStep.project.metric("InstallDuration", {
    period: Duration.minutes(5),
    statistic: "Average",
    unit: Unit.SECONDS,
  }),
});

关键说明

  • synthStep.project是CodeBuildStep对应的底层CodeBuild项目实例,该对象提供了多种封装好的指标方法(如metricFailedBuilds、metricDuration),覆盖AWS控制台提供的大部分CodeBuild指标。
  • 对于控制台中的其他指标(如FinalizingDuration),可以使用通用的metric方法,传入指标名称即可自定义监控。
  • 告警的阈值、统计周期、统计方式(如Sum、Average)可根据业务需求调整。
  • 如果需要将告警通知发送到指定渠道(如邮件、Slack),可以为Alarm添加SNS主题作为告警动作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 00:01:07