constructor()

in resources/flink-on-kda/cdk/lib/build-workshop-resources.ts [11:137]


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


        const oauthTokenSecret = new CfnParameter(this, 'GithubOauthTokenSecret', {
            type: 'String',
            default: 'arn:aws:secretsmanager:eu-west-1:399220903411:secret:github-A6LLW8'
        });

        const outputBucketArn = new CfnParameter(this, 'OutputBucketArn', {
            type: 'String',
            default: 'arn:aws:s3:::shausma-public'
        });

        const outputPrefix = new CfnParameter(this, 'OutputPrefix', {
            type: 'String',
            default: 'public/cfn-templates/streaming-analytics-workshop'
        });

        const oauthToken = SecretValue.secretsManager(oauthTokenSecret.valueAsString, {
            jsonField: 'api-key'
        })


        const artifactBucket = new s3.Bucket(this, 'ArtifactBucket', {
            versioned: true,
            removalPolicy: RemovalPolicy.DESTROY
        });

        const outputBucket = Bucket.fromBucketAttributes(this, 'OutputBucket', {
            bucketArn: outputBucketArn.valueAsString
        });


        const sourceOutput = new codepipeline.Artifact();

        const sourceAction = new codepipeline_actions.GitHubSourceAction({
            actionName: 'SourceAction',
            branch: 'mainline',
            owner: 'aws-samples',
            repo: 'streaming-analytics-workshop',
            output: sourceOutput,
            oauthToken: oauthToken
          });


        let cdkBuildProject = (path:string) => new codebuild.PipelineProject(this, `CdkCodebuildProject-${path}`, {
            environment: {
                buildImage: codebuild.LinuxBuildImage.STANDARD_5_0,
            },
            buildSpec: BuildSpec.fromObject({
                version: '0.2',
                phases: {
                    install: {
                        'runtime-versions': {
                            nodejs: 14
                        }
                    },
                    pre_build: {
                        commands: [
                            'npm install -g aws-cdk'
                        ]
                    },
                    build: {
                        commands: [
                            `cd ${path}`,
                            'npm install',
                            'cdk synthesize',
                        ]
                    }
                },
                artifacts: {
                  files: [
                    '*.template.json'
                  ],
                  'base-directory': `${path}/cdk.out`,
                  'discard-paths': true,
                }
            })
        });


        const flinkBuildOutput = new codepipeline.Artifact('flinkCfnTemplate');
        const beamBuildOutput = new codepipeline.Artifact('beamCfnTemplate');

        const flinkBuildAction = new codepipeline_actions.CodeBuildAction({
            actionName: 'flinkCdkBuildAction',
            project: cdkBuildProject('resources/flink-on-kda/cdk'),
            input: sourceOutput,
            outputs: [flinkBuildOutput]
        });

        const beamBuildAction = new codepipeline_actions.CodeBuildAction({
            actionName: 'beamCdkBuildAction',
            project: cdkBuildProject('resources/beam-on-kda/cdk'),
            input: sourceOutput,
            outputs: [beamBuildOutput]
        });

        let cdkCopyAction = (output:codepipeline.Artifact) => new codepipeline_actions.S3DeployAction({
            actionName: `CdkCopyAction-${output.artifactName}`,
            bucket: outputBucket,
            input: beamBuildOutput,
            objectKey: outputPrefix.valueAsString,
            extract: true
        });


        new codepipeline.Pipeline(this, 'CodePipeline', {
            stages: [
              {
                stageName: 'Source',
                actions: [ sourceAction ]
              },
              {
                stageName: 'Build',
                actions: [ flinkBuildAction, beamBuildAction ]
              },
              {
                stageName: 'Copy',
                actions: [ cdkCopyAction(flinkBuildOutput), cdkCopyAction(beamBuildOutput) ]
              }
            ],
            artifactBucket: artifactBucket
          });
      
    }