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-2.0.196.tar.gz (37.7 kB view details)

Uploaded Source

Built Distribution

File details

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

File metadata

File hashes

Hashes for cdk-secret-manager-wrapper-layer-2.0.196.tar.gz
Algorithm Hash digest
SHA256 a4d386aa27f0ee3e65bf6aead29f87a0a4e15d8b12cc71bde9e537a3d3f05abd
MD5 ab14b0711bfa5ace715e6a9b8b7640be
BLAKE2b-256 af2f911b76ba89b7edf3c8710f925869a34cbe98ea71ffd9d59c07925d7fb672

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cdk_secret_manager_wrapper_layer-2.0.196-py3-none-any.whl
Algorithm Hash digest
SHA256 c5d4be766337247c2eb2e59db6babcb3940c682fca2f96c591c61632df54d220
MD5 e6a0c7ba3f8f711128dc07b3991592bd
BLAKE2b-256 444643a2e43ae4f6aefe4576aaa2d4f6e0d156518567a272ed5f6d0b7a1a7517

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