Skip to main content

cdk-secret-manager-wrapper-layer

Project description

cdk-secret-manager-wrapper-layer

that Lambda layer uses a wrapper script to fetch information from Secrets Manager and create environmental variables.

idea from source

Example

import { App, Stack, CfnOutput, Duration } from 'aws-cdk-lib';
import { Effect, PolicyStatement } from 'aws-cdk-lib/aws-iam';
import { Function, Runtime, Code, FunctionUrlAuthType } from 'aws-cdk-lib/aws-lambda';
import { CfnSecret } from 'aws-cdk-lib/aws-secretsmanager';
import { SecretManagerWrapperLayer } from 'cdk-secret-manager-wrapper-layer';
const env = {
  region: process.env.CDK_DEFAULT_REGION,
  account: process.env.CDK_DEFAULT_ACCOUNT,
};
const app = new App();
const stack = new Stack(app, 'testing-stack', { env });

/**
 * Example create an Secret for testing.
 */
const secret = new CfnSecret(stack, 'Mysecret', {
  secretString: JSON.stringify({
    KEY1: 'VALUE1',
    KEY2: 'VALUE2',
    KEY3: 'VALUE3',
  }),
});

const layer = new SecretManagerWrapperLayer(stack, 'SecretManagerWrapperLayer');

const lambda = new Function(stack, 'fn', {
  runtime: Runtime.PYTHON_3_9,
  code: Code.fromInline(`
import os
def hander(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.hander',
  layers: [layer],
  timeout: 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',
  },
});

/**
 * Add Permission for lambda get secret value from secret manager.
 */
lambda.role!.addToPrincipalPolicy(
  new PolicyStatement({
    effect: Effect.ALLOW,
    actions: ['secretsmanager:GetSecretValue'],
    // Also you can use find from context.
    resources: [secret.ref],
  }),
);

/**
 * For Testing.
 */
const FnUrl = lambda.addFunctionUrl({
  authType: FunctionUrlAuthType.NONE,
});

new CfnOutput(stack, 'FnUrl', {
  value: FnUrl.url,
});

Testing

# ex: curl https://sdfghjklertyuioxcvbnmghj.lambda-url.us-east-1.on.aws/
curl ${FnUrl}
{"KEY2":"VALUE2","KEY1":"VALUE1","KEY3":"VALUE3"}

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cdk-secret-manager-wrapper-layer-1.0.667.tar.gz (33.5 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file cdk-secret-manager-wrapper-layer-1.0.667.tar.gz.

File metadata

File hashes

Hashes for cdk-secret-manager-wrapper-layer-1.0.667.tar.gz
Algorithm Hash digest
SHA256 3a002b7859d04d5c9be7ef356d8a0d828386810374b67355276aa0e31515aabd
MD5 d012ef1f73e470ee35318395caff02d5
BLAKE2b-256 88ca7d874882ed7ee6a21eb5fa7dd14c5308290554307350e0608aab9a8d4575

See more details on using hashes here.

File details

Details for the file cdk_secret_manager_wrapper_layer-1.0.667-py3-none-any.whl.

File metadata

File hashes

Hashes for cdk_secret_manager_wrapper_layer-1.0.667-py3-none-any.whl
Algorithm Hash digest
SHA256 ebf471dbe1f276e193195f76bf018441a9ecdf311ff88c72bdfc6dac43fa61a3
MD5 a8d730ee4182f1dbba0920a6716041e1
BLAKE2b-256 522a68ec39ef612b3865bc1917dfcff4db439f44c2e03ac5dd5669d0226d3b32

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page