如何使用AWS CDK(TypeScript)配置SNS SMS属性?
使用AWS CDK(TypeScript)配置SNS SMS全局偏好设置
AWS CDK中没有直接封装SNS SMS全局偏好的L2构造,需要用**L1构造CfnSMSPreferences**来实现你的全部需求,以下是对应四个目标的完整代码实现:
前提准备
确保你的CDK项目已配置AWS凭证,且安装了aws-cdk-lib和constructs依赖。
完整代码示例
import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import { CfnSMSPreferences } from 'aws-cdk-lib/aws-sns'; import { Role, ServicePrincipal, ManagedPolicy } from 'aws-cdk-lib/aws-iam'; export class SnsSmsConfigStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // 创建SNS投递状态日志所需的IAM角色 const snsCloudLogsRole = new Role(this, 'SnsCloudLogsRole', { assumedBy: new ServicePrincipal('sns.amazonaws.com'), managedPolicies: [ ManagedPolicy.fromAwsManagedPolicyName('AmazonSNSRoleForCloudLogs') ] }); // 配置SNS SMS全局偏好 new CfnSMSPreferences(this, 'SmsPreferences', { // 设置每月SMS消费限额(单位:美元,默认1美元,提工单可调整上限) monthlySpendLimit: 50.0, // 设置默认发件人ID(1-11个字符,仅字母、数字、下划线,部分国家/地区不支持) defaultSenderId: 'MyBizSender', // 启用投递状态日志:设置成功日志采样率(100表示全部捕获) deliveryStatusSuccessSamplingRate: '100', // 指定日志投递的IAM角色ARN deliveryStatusIamRoleArn: snsCloudLogsRole.roleArn, // 启用CloudWatch使用报告(开启后SNS自动推送SMS使用指标到CloudWatch) enableSubscriptionLevelMetrics: true }); } }
各需求对应说明
- 设置SMS消费限额:通过
monthlySpendLimit属性定义每月可消费金额(美元),默认限额为1美元,如需更高额度需联系AWS支持提工单调整。 - 定义默认发件人ID:
defaultSenderId属性指定全局默认发件人标识,注意部分国家/地区(如美国)不支持自定义发件人ID,会自动替换为短码。 - 启用投递状态日志:配合
deliveryStatusSuccessSamplingRate(设置成功日志采样比例)和deliveryStatusIamRoleArn(授予SNS写入CloudWatch日志权限),失败日志会默认全部捕获。 - CloudWatch存储使用报告:
enableSubscriptionLevelMetrics开启后,SNS会自动将SMS发送量、成功/失败率等指标推送至CloudWatch,可在CloudWatch控制台的AWS/SNS命名空间下查看相关指标。
验证配置
部署完成后,可通过AWS CLI验证配置:
aws sns get-sms-preferences
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

