gpt4 book ai didi

amazon-web-services - AWS SQS - CDK - 如何创建主题过滤器

转载 作者:行者123 更新时间:2023-12-02 18:24:53 25 4
gpt4 key购买 nike

我能够创建一个 SQS 队列 + lambda 函数并通过触发器/订阅连接它们。

如何通过 CDK 创建主题过滤器?

我能够像这样创建主题、lambda 和触发器/订阅:

const queue = new sqs.Queue(this, 'OurSqsQueue', {
queueName: 'OurSQSQueue',
});
const lambdaFunction = new lambda.Function(this,'test', {
code: lambda.Code.fromAsset('src'),
handler: index.lambdaHandler,
functionName: 'test',
runtime: lambda.Runtime.NODEJS_14_X,
});

const eventSource = new lambdaEventSources.SqsEventSource(queue);
lambdaFunction.addEventSource(eventSource);

According to the docs Amazon SQS 主题订阅者会收到发布到该主题的每条消息。要接收消息子集,订阅者必须为主题订阅分配过滤策略。

enter image description here

最佳答案

SQS、DynamoDB 和 Kinesis 事件源的 Lambda 事件过滤为 announced last month ,但 CDK 尚不支持。有一个open feature request在 github 上。

同时,我们可以使用 escape hatch到在底层 CfnEventSourceMapping 构造上设置过滤器。

这是一个最小的工作示例:

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

const func = new lambda.Function(this, 'MyFunction', {
code: new lambda.InlineCode('exports.handler = async (event) => console.log(event)'),
runtime: lambda.Runtime.NODEJS_14_X,
handler: 'index.handler',
});

const queue = new sqs.Queue(this, 'MyQueue');
queue.grantConsumeMessages(func);

const source = new lambda.EventSourceMapping(this, 'EventSourceMapping', {
target: func,
eventSourceArn: queue.queueArn,
});

// escape hatch
const cfnSouce = source.node.defaultChild as lambda.CfnEventSourceMapping;

cfnSouce.addPropertyOverride('FilterCriteria', {
// https://docs.aws.amazon.com/lambda/latest/dg/invocation-eventfiltering.html#filtering-syntax
Filters: [{ Pattern: `{\"body\": { \"Data\" : { \"Name\": [\"Zaphod\", \"Ford\" ] }}}` }],
});
}
}

关于amazon-web-services - AWS SQS - CDK - 如何创建主题过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70358763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com