@ixor/aws-cdk-ixor-ingests3
v1.3.0
Published
This `aws-cdk` stack can be used create the following components:
Downloads
107
Keywords
Readme
@ixor/aws-cdk-ixor-ingests3 module
This aws-cdk
stack can be used create the following components:
+------+ +---------------+
| | +-------IngestS3 Construct-----------------------------+ | |
| File | | | +-> Step Function |
| | | | | | |
+--+---+ | +-----------+ +-----------+ +-----------+ | | +---------------+
| | | | | | | +-----+
+---------> SNS Topic +------> SQS Queue +------> Lambda | | +---------------+
| | | | | | +-----+ | |
| +-----------+ +-----------+ +-----------+ | +-> Lambda |
| | | |
| | +---------------+
+------------------------------------------------------+
Use this construct in a stack where the S3 bucket that requires the trigger is created.
An example (you can copy this to a cdk project to test on sandbox):
import * as cdk from 'aws-cdk-lib';
import {Bucket} from "aws-cdk-lib/aws-s3";
import {Construct} from 'constructs';
import {IngestS3, LambdaTargetLambda, LambdaTarget} from "../../../aws-cdk-ixor-ingests3/lib/aws-cdk-ixor-ingests3";
import {StackProps} from "aws-cdk-lib";
import {Function, IFunction, Code, Runtime} from "aws-cdk-lib/aws-lambda";
import path = require('path');
export interface S3Props {
suffix?: string,
prefix?: string,
lambdaTargetTimeoutSeconds?: number,
lambdaTarget: LambdaTarget,
resourceBasename: string
}
interface TestIngestS3Props extends StackProps {
bucketName: string,
triggerList?: S3Props[],
}
export class TestAwsCdkIxorIngests3Stack extends cdk.Stack {
public bucket: Bucket;
private consumer_lambda: IFunction;
constructor(scope: Construct, id: string, props: TestIngestS3Props) {
super(scope, id, props);
// Create a bucket in which the trigger will be placed
this.bucket = new Bucket(this, "test-ingests3", {bucketName: props.bucketName});
// Create the lambda that needs to be triggered
this.consumer_lambda = new Function(this, "ingestionConsumer-lambda", {
functionName: `ingestionConsumer-lambda`,
// Optionally: add logging code to test whether works well and place it in appropriate folder
code: Code.fromAsset(path.join(__dirname, '../test_ingestion_handler')),
handler: "test_ingestion_handler.lambda_handler",
runtime: Runtime.PYTHON_3_8,
timeout: cdk.Duration.seconds(120)
})
// Create the construct necessary so that when a file test_ingestions3.json is put in the bucket
// with prefix triggers, the lambdaTarget will be triggered by that
let ingestS3 = new IngestS3(this, "myIngestS3", {
bucket: this.bucket,
prefix: 'triggers/',
suffix: 'test_ingestions3.json',
lambdaTarget: new LambdaTargetLambda("ingestionConsumer-lambda"),
resourceBasename: "myIngestS3"
});
}
}