如何向导入的 Bucket 添加事件通知

How to add an event notification to an imported Bucket

我正在由 typescript 编写 cdk 脚本。

我想选择已经存在的 bucket 并设置为 lambda

的触发器
const _bucket = s3.Bucket.fromBucketName(this,"frombucket",`vr-${targetEnv}-resource-up-bk`);

lambdaFromContainer_.addEventSource(new S3EventSource(_bucket, { 
  events: [ s3.EventType.OBJECT_CREATED],

}));

s3.Bucket.fromBucketName returns IBucket 并且出现错误 S3EventSource(_bucket

Argument of type 'IBucket' is not assignable to parameter of type 'Bucket'.
  Type 'IBucket' is missing the following properties from type 'Bucket': autoCreatePolicy, lifecycleRules, metrics, cors, and 31 more.ts(2345)

我该如何解决这个问题?

但是当我创建新的Bucket时,没有错误。

const _bucket = new s3.Bucket(this, 'cdk-out-bk', {
      bucketName: `vr-${targetEnv}-resource-up-bk`,
}
lambdaFromContainer_.addEventSource(new S3EventSource(_bucket, { 
  events: [ s3.EventType.OBJECT_CREATED],

}));

这是因为CDK无法修改导入的资源。 IBucket 上可用的属性数量有限反映了这一点。您需要使用 CDK 创建存储桶并在同一个 CDK 应用程序中添加通知。

参考以下问题:

也就是说,您可以使用自定义资源做任何您想做的事情。碰巧有一个自定义资源,用于为导入的存储桶添加事件通知。你这样使用它:

bucket.addEventNotification(s3.EventType.OBJECT_CREATED, new s3n.LambdaDestination(myLambda));

取自文档的示例:

https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_s3-readme.html#importing-existing-buckets