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
});
}