Estoy usando el nuevo AWS CDK (Cloud Development Toolkit) para construir la infraestructura en AWS en Java.
Lo que tengo que hacer: buscar un depósito s3 y agregar un disparador que invoque una función lambda.
Que he hecho:
Busqué el cubo s3:
IBucket bucket = Bucket.fromBucketName(scope, bucketId, bucketName);Agregue una nueva fuente de eventos a la lambda existente:
IEventSource eventSource = getObjectCreationEvent(); lambda.addEventSource(eventSource); Donde getObjectCreationEvent() es:
private S3EventSource getObjectCreationEvent() { return new S3EventSource(bucket, new S3EventSourceProps() { @Override public List<EventType> getEvents() { return Collections.singletonList(EventType.OBJECT_CREATED); } }); }Cuál es el problema:
El tipo de parámetro de S3EventSource bucket Bucket , pero cada método de búsqueda (p. ej Bucket.fromBucketName() ) devuelve un IBucket y no un Bucket , por lo que no coincide la firma. Si IBucket a Bucket , tengo una ClassCastException .
Desde el rastreador de problemas de git https://github.com/aws/aws-cdk/issues/2004#issuecomment-479923251
Debido a las limitaciones actuales con CloudFormation y la forma en que implementamos las notificaciones de depósito en el CDK, es imposible agregar notificaciones de depósito en un depósito importado. Esta es la razón por la que el origen del evento usa s3.Bucket en lugar de s3.IBucket.
Podrías usar outPutObject:
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);Pero leyendo más adelante, esto tampoco parece funcionar.
Parece que la respuesta actualmente es:
Es imposible de configurar.