constructor()

in src/modules/sitewise/cdk/lib/sitewise-stack.ts [14:91]


    constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
        super(scope, id, props);

        // The code that defines your stack goes here
        const iottwinmaker_connector_role = new iam.Role(this, 'iottwinmaker_connector_role', {
            assumedBy: new iam.CompositePrincipal(
                new iam.ServicePrincipal('lambda.amazonaws.com'),
                new iam.ServicePrincipal('states.amazonaws.com'),
                new iam.ServicePrincipal('events.amazonaws.com'),
                new iam.ServicePrincipal('iottwinmaker.amazonaws.com'),
            ),
            managedPolicies: [
                iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonS3FullAccess'),
                iam.ManagedPolicy.fromAwsManagedPolicyName('CloudWatchLogsFullAccess'),
                iam.ManagedPolicy.fromAwsManagedPolicyName('AWSStepFunctionsReadOnlyAccess'),
                iam.ManagedPolicy.fromAwsManagedPolicyName('SecretsManagerReadWrite')
            ]
        });

        const policy = new iam.ManagedPolicy(this, "IoTTwinMakerFullAccessPolicy", {
            statements: [
                new iam.PolicyStatement({
                    effect: iam.Effect.ALLOW,
                    actions: ["*" ],
                    resources: ["*"]
                })
            ],
            roles: [iottwinmaker_connector_role]
        });

        console.log("PWD:" + __dirname)
        const iottwinmaker_env = new lambda.LayerVersion(this, 'iottwinmaker_env', {
            code: lambda.Code.fromAsset(path.join(__dirname, '..', '..', '..', '..', '..', 'src', 'libs', 'connector_utils')),
            compatibleRuntimes: [lambda.Runtime.PYTHON_3_9, lambda.Runtime.PYTHON_3_8, lambda.Runtime.PYTHON_3_7]
        });

        /***************************/
        /* SiteWise step function */
        /***************************/

        const sitewise_exporter_lambda = new lambda.Function(this, 'sitewiseExporterLambda', {
            code: lambda.Code.fromAsset(path.join(__dirname, '..', '..', '..', 'sitewise', 'lib')),
            handler: this.node.tryGetContext('SiteWiseExporterHandler'),
            memorySize: 256,
            role: iottwinmaker_connector_role,
            runtime: lambda.Runtime.PYTHON_3_9,
            timeout: cdk.Duration.minutes(15),
            layers: [iottwinmaker_env],
            environment: {
                'AWS_ENDPOINT': this.node.tryGetContext('AWSAPIEndpoint')
            }
        });

        const iottwinmaker_sitewise_importer = new lambda.Function(this, 'iottwinmakerSiteWiseImporterLambda', {
            code: lambda.Code.fromAsset(path.join(__dirname, '..', '..', '..', 'sitewise', 'lib')),
            handler: this.node.tryGetContext('IoTTwinMakerSiteWiseImporterHandler'),
            memorySize: 256,
            role: iottwinmaker_connector_role,
            runtime: lambda.Runtime.PYTHON_3_9,
            timeout: cdk.Duration.minutes(15),
            layers: [iottwinmaker_env],
            environment: {
                'AWS_ENDPOINT': this.node.tryGetContext('AWSAPIEndpoint')
            }
        });
        const sitewise_export_task = new tasks.LambdaInvoke(this, 'sitewise_export', {
            lambdaFunction: sitewise_exporter_lambda,
            outputPath: '$.Payload'
        });
        const sitewise_import_task = new tasks.LambdaInvoke(this, 'sitewise_import', {
            lambdaFunction: iottwinmaker_sitewise_importer
        });
        const sitewise_sfn_defn = sitewise_export_task.next(sitewise_import_task);
        const sitewise_sfn = new sfn.StateMachine(this, 'sitewise_to_iottwinmaker', {
            definition: sitewise_sfn_defn
        });

    }