使用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
相关产品推荐
相关产品推荐

