如何向导入的 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));
取自文档的示例:
我正在由 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));
取自文档的示例: