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

使用AWS Amplify自定义资源构建CloudWatch告警遇版本兼容报错

AWS Amplify自定义资源构建CloudWatch告警时的TypeScript版本不匹配问题

问题概述

在使用AWS Amplify自定义资源构建CloudWatch告警时触发TypeScript类型错误,原因是@aws-cdk/aws-cloudwatch-actions库版本(1.202.0)与其他CDK核心库版本(1.159.0)不匹配,导致类型定义兼容性冲突。

代码示例

import * as cdk from '@aws-cdk/core';
import * as sns from '@aws-cdk/aws-sns';
import * as subs from '@aws-cdk/aws-sns-subscriptions';
import * as cw from '@aws-cdk/aws-cloudwatch';
import * as cwa from '@aws-cdk/aws-cloudwatch-actions';

export class cdkStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // 创建SNS主题
    const topic = new sns.Topic(this, 'Topic', {
      displayName: 'Alarm topic',
    });

    // 为SNS主题添加邮件订阅
    topic.addSubscription(new subs.EmailSubscription("email@example.org"));

    // 定义Lambda函数的错误指标
    const functionErrorMetric = new cw.Metric({
      namespace: 'AWS/Lambda',
      metricName: 'Errors',
      dimensions: { FunctionName: 'functionNameExample' },
      statistic: 'Sum',
    });

    // 创建CloudWatch告警
    const alarm = new cw.Alarm(this, 'Alarm', {
      metric: functionErrorMetric,
      threshold: 1,
      evaluationPeriods: 1,
      datapointsToAlarm: 1,
      comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
    });

    // 添加SNS主题作为告警触发动作
    alarm.addAlarmAction(new cwa.SnsAction(topic));
  }
}

Package.json配置

{
  "name": "custom-resource",
  "version": "1.0.0",
  "description": "",
  "scripts": {
    "build": "tsc",
    "watch": "tsc -w",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "dependencies": {
    "@aws-amplify/cli-extensibility-helper": "^2.0.0",
    "@aws-cdk/aws-cloudwatch-actions": "^1.202.0",
    "@aws-cdk/aws-iam": "^1.159.0",
    "@aws-cdk/aws-sns": "^1.159.0",
    "@aws-cdk/aws-sns-subscriptions": "^1.159.0",
    "@aws-cdk/aws-sqs": "^1.159.0",
    "@aws-cdk/core": "^1.159.0"
  },
  "devDependencies": {
    "typescript": "^4.2.4"
  }
}

报错信息

代码行alarm.addAlarmAction(new cwa.SnsAction(topic));出现红色波浪线,具体错误:

Argument of type 'SnsAction' is not assignable to parameter of type 'IAlarmAction'.
  Types of property 'bind' are incompatible.
    Type '(_scope: Construct, _alarm: IAlarm) => AlarmActionConfig' is not assignable to type '(scope: Construct, alarm: IAlarm) => AlarmActionConfig'.
      Types of parameters '_scope' and 'scope' are incompatible.

解决方案

CDK所有相关依赖必须保持版本完全一致,否则会出现类型定义不兼容问题,可通过以下两种方式修复:

方式一:降级CloudWatch Actions库版本

修改package.json中@aws-cdk/aws-cloudwatch-actions的版本为^1.159.0,与其他CDK库版本统一:

"@aws-cdk/aws-cloudwatch-actions": "^1.159.0"

方式二:升级所有CDK库版本

将所有@aws-cdk/xxx开头的依赖版本统一升级到^1.202.0,确保版本完全匹配。

完成版本修改后,执行以下命令重新安装依赖:

npm install

或使用yarn:

yarn install

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:12:54