When using Lambda@Edge, a function cannot use environment variables.
This CDK Construct uses a Custom Resource to inject a config.json
file with user provided values into an existing function, and
publishes a new version that is ready to be used as part of a
CloudFront Distribution.
Inspired by similar mechanism in https://github.com/aws-samples/cloudfront-authorization-at-edge/
npm install @studyportals/cdk-lambda-configUsing the construct:
constoriginalFunction=lambda.Function.fromFunctionArn(...)constupdatedFunction=newLambdaConfig(this,"UpdatedFunction",{function: originalFunction,config: {Key1: "Some value",Nested: {Key2: "Other value",},},nonce: "1",// See TSDoc.}// Can now retrieve the new version:updatedFunction.versionRead from within the handler:
constfs=require("fs")constpath=require("path")constconfig=JSON.parse(fs.readFileSync(path.join(__dirname,"config.json"),"utf-8"),)If function update is meant to run concurrently targeting the same function, you can pass
locksTable property in the config object, pointing to a table that's been created
using LockableTable.create(this,"UpdateCodeLocks") in the project that uses @studyportals/cdk-lambda-config
This will ensure that multiple stacks won't get stuck while trying to update the same function