Java 查找S3 Bucket并添加触发器以调用lambda
我正在使用新的AWSCDK(云开发工具包)在Java的AWS上构建基础设施 我要做的是:查找一个s3 bucket并添加一个调用lambda函数的触发器 我所做的:Java 查找S3 Bucket并添加触发器以调用lambda,java,amazon-web-services,amazon-s3,aws-lambda,aws-cdk,Java,Amazon Web Services,Amazon S3,Aws Lambda,Aws Cdk,我正在使用新的AWSCDK(云开发工具包)在Java的AWS上构建基础设施 我要做的是:查找一个s3 bucket并添加一个调用lambda函数的触发器 我所做的: 查找s3存储桶: IBucket bucket = Bucket.fromBucketName(scope, bucketId, bucketName); 将新事件源添加到现有lambda: IEventSource eventSource = getObjectCreationEvent(); lambda.addEvent
- 查找s3存储桶:
IBucket bucket = Bucket.fromBucketName(scope, bucketId, bucketName);
- 将新事件源添加到现有lambda:
IEventSource eventSource = getObjectCreationEvent(); lambda.addEventSource(eventSource);
- 其中
是:getObjectCreationEvent()
private S3EventSource getObjectCreationEvent() { return new S3EventSource(bucket, new S3EventSourceProps() { @Override public List<EventType> getEvents() { return Collections.singletonList(EventType.OBJECT_CREATED); } }); }
private S3EventSource getObjectCreationEvent(){ 返回新的S3EventSource(bucket,新的S3EventSourceProps(){ @凌驾 公共列表getEvents(){ 返回集合.singletonList(EventType.OBJECT\u已创建); } }); }
S3EventSource
构造函数中bucket
参数的类型是bucket
,但是每个查找方法(例如bucket.fromBucketName()
)都返回IBucket
,而不是bucket
,因此存在签名不匹配。如果我将IBucket
转换为Bucket
,我会从git问题跟踪器中获得一个ClassCastException
由于当前CloudFormation的限制以及我们在CDK中实现bucket通知的方式,无法在导入的bucket上添加bucket通知。这就是事件源使用s3.Bucket而不是s3.IBucket的原因
您可以使用onPutObject:
但进一步阅读,这似乎也不再有效
目前的答案似乎是:
设置是不可能的。您必须使用CDK吗?您可以从堆栈中获取bucket。这不是您正在寻找的解决方案,但作为一种解决方案,您可以将s3Bucket+触发器创建为一个基础设施项目。不过,请确保事先创建了lambda。
const bucket = s3.Bucket.import(this, 'B', {
bucketName: 'my-bucket'
});
const fn = new lambda.Function(this, 'F', {
code: lambda.Code.inline('boom'),
runtime: lambda.Runtime.NodeJS810,
handler: 'index.handler'
});
bucket.onPutObject('put-object', fn);