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

AWS CDK配置嵌套SNS订阅过滤策略报错求助

解决AWS CDK配置SNS订阅过滤策略的类型错误

问题背景

我在测试账户中手动配置了SNS订阅过滤策略,仅将S3特定子文件夹(test/test1)下的ObjectCreated类事件发送至SQS队列,策略运行完全符合预期,手动配置的JSON如下:

{
  "Records": {
    "s3": {
      "object": {
        "key": [
          {
            "prefix": "test/test1"
          }
        ]
      }
    },
    "eventName": [
      {
        "prefix": "ObjectCreated:"
      }
    ]
  }
}

但尝试用AWS CDK代码实现相同策略时触发类型错误,CDK代码:

topic.addSubscription(new subs.SqsSubscription(queue, {
  filterPolicyWithMessageBody: {
    "Records": {
      "s3": {
        "object": {
          "key": [
            {
              "prefix": "test/test1"
            }
          ]
        }
      },
      "eventName": [
        {
          "prefix": "ObjectCreated:"
        }
      ]
    }
  }
}))

错误信息:

Type '{ s3: { object: { key: { prefix: string; }[]; }; }; eventName: { prefix: string; }[]; }' is not assignable to type 'FilterOrPolicy'.
  Object literal may only specify known properties, and 's3' does not exist in type 'FilterOrPolicy'.

解决方案

CDK的filterPolicyWithMessageBody要求使用AWS CDK提供的FilterCondition类构建过滤条件,不能直接传入原始JSON结构的字面量(TypeScript类型系统会拦截非预期结构)。修正后的代码如下:

import { FilterCondition } from 'aws-cdk-lib/aws-sns';

// ... 其他业务代码

topic.addSubscription(new subs.SqsSubscription(queue, {
  filterPolicyWithMessageBody: {
    "Records": FilterCondition.all(
      FilterCondition.isObject({
        "s3": FilterCondition.isObject({
          "object": FilterCondition.isObject({
            "key": FilterCondition.prefix("test/test1")
          })
        }),
        "eventName": FilterCondition.prefix("ObjectCreated:")
      })
    )
  }
}));

关键说明

  • 用FilterCondition.isObject()定义嵌套对象结构,对应手动策略中的层级关系
  • 用FilterCondition.prefix()创建前缀匹配条件,替代手动JSON里的{ "prefix": "xxx" }格式
  • 用FilterCondition.all()组合多个条件(默认逻辑与,和手动策略的预期一致)

此配置会生成与手动设置完全一致的过滤策略,同时通过TypeScript的类型检查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:33:19