constructor()

in lib/semverHandler-stack.ts [33:73]


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

    // Provision Lambda Layer
    const pythonLayer = new lambda.LayerVersion(this, 'python3Layer', {
      code: lambda.Code.fromAsset('./lambda-helpers/layers/python3_layer.zip'),
      compatibleRuntimes: [lambda.Runtime.PYTHON_3_6, lambda.Runtime.PYTHON_3_7, lambda.Runtime.PYTHON_3_8],
      description: 'A Python layer with Semver',
      layerVersionName: `${props.prefix}-cicd-python3-layer`
    });

    // Provision Lambda
    const semverHandler = new lambda.Function(this, 'semverHandler', {
      code: lambda.Code.asset('./lambda-helpers/semver-handler'),
      functionName: `${props.prefix}-cicd-semverHandler`,
      handler: 'lambda.semver_handler',
      runtime: lambda.Runtime.PYTHON_3_8,
      layers: [ pythonLayer ],
      logRetention: logs.RetentionDays.TWO_WEEKS,
      environment: {
        "SSM_ROOT": props.ssmRoot
      }
    });

    semverHandler.addPermission('codePipelinePermission', {
      principal: new ServicePrincipal('codepipeline.amazonaws.com')
    })

    semverHandler.addToRolePolicy(new iam.PolicyStatement({
      effect: iam.Effect.ALLOW,
      actions: [ 'ssm:GetParameter', 'ssm:PutParameter', 'codepipeline:PutJobFailureResult', 'codepipeline:PutJobSuccessResult' ],
      resources: [ '*' ]
    }));

    new ssm.StringParameter(this, 'SemverHandlerArn', {
      description: 'Semver Handler Lambda Function Arn',
      parameterName: `${props.ssmRoot}/lambda/cicd-semver-handler`,
      stringValue: semverHandler.functionArn
    });

  }