在 CDK 中使用 arnForObjects
方法指定死信队列的 ARN。具体示例如下:
import * as cdk from 'aws-cdk-lib';
import * as sqs from 'aws-cdk-lib/aws-sqs';
import * as iam from 'aws-cdk-lib/aws-iam';
const app = new cdk.App();
const stack = new cdk.Stack(app, 'MyStack');
// 创建 SQS 队列
const queue = new sqs.Queue(stack, 'MyQueue', {
queueName: 'my-queue'
});
// 创建死信队列
const dlQueue = new sqs.Queue(stack, 'DeadLetterQueue', {
queueName: 'dead-letter-queue'
});
// 添加队列属性
queue.deadLetterQueue = {
maxReceiveCount: 3,
queue: dlQueue
};
// 获取死信队列 ARN
const dlQueueArn = cdk.Arn.forObjects(stack, 'MyQueueDeadLetterQueueArn', dlQueue);
// 创建 Lambda 角色
const lambdaRole = new iam.Role(stack, 'LambdaRole', {
assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com')
});
// Lambda 需要有访问死信队列的权限
const dlQueuePermission = new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: ['sqs:*'],
resources: [dlQueueArn]
});
lambdaRole.addToPolicy(dlQueuePermission);
在以上示例中,我们在创建 SQS 队列时,添加了一个死信队列,并使用 arnForObjects
方法获取了死信队列的 ARN。然后,我们创建了一个 Lambda 角色并向其添加了访问死信队列的权限。