UNPKG

cdk-secret-manager-wrapper-layer

Version:

that Lambda layer uses a wrapper script to fetch information from Secrets Manager and create environmental variables. > idea from [source](https://github.com/aws-samples/aws-lambda-environmental-variables-from-aws-secrets-manager)

71 lines 7.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const aws_cdk_lib_1 = require("aws-cdk-lib"); const aws_iam_1 = require("aws-cdk-lib/aws-iam"); const aws_lambda_1 = require("aws-cdk-lib/aws-lambda"); const aws_secretsmanager_1 = require("aws-cdk-lib/aws-secretsmanager"); const index_1 = require("./index"); const env = { region: process.env.CDK_DEFAULT_REGION, account: process.env.CDK_DEFAULT_ACCOUNT, }; const mockApp = new aws_cdk_lib_1.App(); const stack = new aws_cdk_lib_1.Stack(mockApp, 'testing-stack', { env }); /** * Example create an Secret for testing. */ const secret = new aws_secretsmanager_1.CfnSecret(stack, 'MySecret', { secretString: JSON.stringify({ KEY1: 'VALUE1', KEY2: 'VALUE2', KEY3: 'VALUE3', }), }); const lambdaArchitecture = aws_lambda_1.Architecture.ARM_64; const layer = new index_1.SecretManagerWrapperLayer(stack, 'SecretManagerWrapperLayer', { lambdaArchitecture, }); const lambda = new aws_lambda_1.Function(stack, 'fn', { runtime: aws_lambda_1.Runtime.PYTHON_3_13, code: aws_lambda_1.Code.fromInline(` import os def handler(events, contexts): env = {} env['KEY1'] = os.environ.get('KEY1', 'Not Found') env['KEY2'] = os.environ.get('KEY2', 'Not Found') env['KEY3'] = os.environ.get('KEY3', 'Not Found') return env `), handler: 'index.handler', layers: [layer.layerVersion], timeout: aws_cdk_lib_1.Duration.minutes(1), /** * you need to define this 4 environment various. */ environment: { AWS_LAMBDA_EXEC_WRAPPER: '/opt/get-secrets-layer', SECRET_REGION: stack.region, SECRET_ARN: secret.ref, API_TIMEOUT: '5000', }, architecture: lambdaArchitecture, }); /** * Add Permission for lambda get secret value from secret manager. */ lambda.role.addToPrincipalPolicy(new aws_iam_1.PolicyStatement({ effect: aws_iam_1.Effect.ALLOW, actions: ['secretsmanager:GetSecretValue'], // Also you can use find from context. resources: [secret.ref], })); /** * For Testing. */ const FnUrl = lambda.addFunctionUrl({ authType: aws_lambda_1.FunctionUrlAuthType.NONE, }); new aws_cdk_lib_1.CfnOutput(stack, 'FnUrl', { value: FnUrl.url, }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW50ZWcuaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2Q0FBOEQ7QUFDOUQsaURBQThEO0FBQzlELHVEQUFvRztBQUNwRyx1RUFBMkQ7QUFDM0QsbUNBQW9EO0FBQ3BELE1BQU0sR0FBRyxHQUFHO0lBQ1YsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCO0lBQ3RDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQjtDQUN6QyxDQUFDO0FBQ0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxpQkFBRyxFQUFFLENBQUM7QUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBRTNEOztHQUVHO0FBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBSSw4QkFBUyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUU7SUFDOUMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDM0IsSUFBSSxFQUFFLFFBQVE7UUFDZCxJQUFJLEVBQUUsUUFBUTtRQUNkLElBQUksRUFBRSxRQUFRO0tBQ2YsQ0FBQztDQUNILENBQUMsQ0FBQztBQUVILE1BQU0sa0JBQWtCLEdBQUcseUJBQVksQ0FBQyxNQUFNLENBQUM7QUFFL0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxpQ0FBeUIsQ0FBQyxLQUFLLEVBQUUsMkJBQTJCLEVBQUU7SUFDOUUsa0JBQWtCO0NBQ25CLENBQUMsQ0FBQztBQUVILE1BQU0sTUFBTSxHQUFHLElBQUkscUJBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFO0lBQ3ZDLE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7SUFDNUIsSUFBSSxFQUFFLGlCQUFJLENBQUMsVUFBVSxDQUFDOzs7Ozs7OztLQVFuQixDQUFDO0lBQ0osT0FBTyxFQUFFLGVBQWU7SUFDeEIsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztJQUM1QixPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzVCOztPQUVHO0lBQ0gsV0FBVyxFQUFFO1FBQ1gsdUJBQXVCLEVBQUUsd0JBQXdCO1FBQ2pELGFBQWEsRUFBRSxLQUFLLENBQUMsTUFBTTtRQUMzQixVQUFVLEVBQUUsTUFBTSxDQUFDLEdBQUc7UUFDdEIsV0FBVyxFQUFFLE1BQU07S0FDcEI7SUFDRCxZQUFZLEVBQUUsa0JBQWtCO0NBQ2pDLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gsTUFBTSxDQUFDLElBQUssQ0FBQyxvQkFBb0IsQ0FDL0IsSUFBSSx5QkFBZSxDQUFDO0lBQ2xCLE1BQU0sRUFBRSxnQkFBTSxDQUFDLEtBQUs7SUFDcEIsT0FBTyxFQUFFLENBQUMsK0JBQStCLENBQUM7SUFDMUMsc0NBQXNDO0lBQ3RDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7Q0FDeEIsQ0FBQyxDQUNILENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFDbEMsUUFBUSxFQUFFLGdDQUFtQixDQUFDLElBQUk7Q0FDbkMsQ0FBQyxDQUFDO0FBRUgsSUFBSSx1QkFBUyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7SUFDNUIsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHO0NBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcCwgU3RhY2ssIENmbk91dHB1dCwgRHVyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBFZmZlY3QsIFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgRnVuY3Rpb24sIFJ1bnRpbWUsIENvZGUsIEZ1bmN0aW9uVXJsQXV0aFR5cGUsIEFyY2hpdGVjdHVyZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQ2ZuU2VjcmV0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCB7IFNlY3JldE1hbmFnZXJXcmFwcGVyTGF5ZXIgfSBmcm9tICcuL2luZGV4JztcbmNvbnN0IGVudiA9IHtcbiAgcmVnaW9uOiBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9SRUdJT04sXG4gIGFjY291bnQ6IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX0FDQ09VTlQsXG59O1xuY29uc3QgbW9ja0FwcCA9IG5ldyBBcHAoKTtcbmNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKG1vY2tBcHAsICd0ZXN0aW5nLXN0YWNrJywgeyBlbnYgfSk7XG5cbi8qKlxuICogRXhhbXBsZSBjcmVhdGUgYW4gU2VjcmV0IGZvciB0ZXN0aW5nLlxuICovXG5jb25zdCBzZWNyZXQgPSBuZXcgQ2ZuU2VjcmV0KHN0YWNrLCAnTXlTZWNyZXQnLCB7XG4gIHNlY3JldFN0cmluZzogSlNPTi5zdHJpbmdpZnkoe1xuICAgIEtFWTE6ICdWQUxVRTEnLFxuICAgIEtFWTI6ICdWQUxVRTInLFxuICAgIEtFWTM6ICdWQUxVRTMnLFxuICB9KSxcbn0pO1xuXG5jb25zdCBsYW1iZGFBcmNoaXRlY3R1cmUgPSBBcmNoaXRlY3R1cmUuQVJNXzY0O1xuXG5jb25zdCBsYXllciA9IG5ldyBTZWNyZXRNYW5hZ2VyV3JhcHBlckxheWVyKHN0YWNrLCAnU2VjcmV0TWFuYWdlcldyYXBwZXJMYXllcicsIHtcbiAgbGFtYmRhQXJjaGl0ZWN0dXJlLFxufSk7XG5cbmNvbnN0IGxhbWJkYSA9IG5ldyBGdW5jdGlvbihzdGFjaywgJ2ZuJywge1xuICBydW50aW1lOiBSdW50aW1lLlBZVEhPTl8zXzEzLFxuICBjb2RlOiBDb2RlLmZyb21JbmxpbmUoYFxuaW1wb3J0IG9zXG5kZWYgaGFuZGxlcihldmVudHMsIGNvbnRleHRzKTpcbiAgICBlbnYgPSB7fVxuICAgIGVudlsnS0VZMSddID0gb3MuZW52aXJvbi5nZXQoJ0tFWTEnLCAnTm90IEZvdW5kJylcbiAgICBlbnZbJ0tFWTInXSA9IG9zLmVudmlyb24uZ2V0KCdLRVkyJywgJ05vdCBGb3VuZCcpXG4gICAgZW52WydLRVkzJ10gPSBvcy5lbnZpcm9uLmdldCgnS0VZMycsICdOb3QgRm91bmQnKVxuICAgIHJldHVybiBlbnZcbiAgICBgKSxcbiAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICBsYXllcnM6IFtsYXllci5sYXllclZlcnNpb25dLFxuICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAvKipcbiAgICogeW91IG5lZWQgdG8gZGVmaW5lIHRoaXMgNCBlbnZpcm9ubWVudCB2YXJpb3VzLlxuICAgKi9cbiAgZW52aXJvbm1lbnQ6IHtcbiAgICBBV1NfTEFNQkRBX0VYRUNfV1JBUFBFUjogJy9vcHQvZ2V0LXNlY3JldHMtbGF5ZXInLFxuICAgIFNFQ1JFVF9SRUdJT046IHN0YWNrLnJlZ2lvbixcbiAgICBTRUNSRVRfQVJOOiBzZWNyZXQucmVmLFxuICAgIEFQSV9USU1FT1VUOiAnNTAwMCcsXG4gIH0sXG4gIGFyY2hpdGVjdHVyZTogbGFtYmRhQXJjaGl0ZWN0dXJlLFxufSk7XG5cbi8qKlxuICogQWRkIFBlcm1pc3Npb24gZm9yIGxhbWJkYSBnZXQgc2VjcmV0IHZhbHVlIGZyb20gc2VjcmV0IG1hbmFnZXIuXG4gKi9cbmxhbWJkYS5yb2xlIS5hZGRUb1ByaW5jaXBhbFBvbGljeShcbiAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgYWN0aW9uczogWydzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZSddLFxuICAgIC8vIEFsc28geW91IGNhbiB1c2UgZmluZCBmcm9tIGNvbnRleHQuXG4gICAgcmVzb3VyY2VzOiBbc2VjcmV0LnJlZl0sXG4gIH0pLFxuKTtcblxuLyoqXG4gKiBGb3IgVGVzdGluZy5cbiAqL1xuY29uc3QgRm5VcmwgPSBsYW1iZGEuYWRkRnVuY3Rpb25Vcmwoe1xuICBhdXRoVHlwZTogRnVuY3Rpb25VcmxBdXRoVHlwZS5OT05FLFxufSk7XG5cbm5ldyBDZm5PdXRwdXQoc3RhY2ssICdGblVybCcsIHtcbiAgdmFsdWU6IEZuVXJsLnVybCxcbn0pOyJdfQ==