npm package: @ixor/aws-cdk-ixor-ingests3
Description: This `aws-cdk` stack can be used create the following components:
Author: Rik Tytgat
Latest version: 1.3.0

# @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):

```TypeScript
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"
        });
    }
}

```