Lambd secrets
A minimal AWS TypeScript Pulumi program
This example lives in the pulumi/examples repository. Check out just this directory to use it:
git clone --filter=blob:none --sparse https://github.com/pulumi/examples pulumi-examplesgit -C pulumi-examples sparse-checkout set aws-ts-lambda-secretscd pulumi-examples/aws-ts-lambda-secretsStoring stack secrets securely and accessing them in a Lambda Function
You can find a post describing the code on the Pulumi blog.
Running the App#
-
Create a new stack:
pulumi stack init dev -
Configure Pulumi to use an AWS region of your choice, for example:
pulumi config set aws:region us-west-2 -
Restore NPM modules via
npm installoryarn install. -
Add values to your stack config, both secret and plaintext:
pulumi config set --path 'lambdawithsecrets.envvars["envvar1"]' envvar1valuepulumi config set --path 'lambdawithsecrets.envvars["envvar2"]' envvar2valuepulumi config set --path 'lambdawithsecrets.secrets["secret1"]' secretvalue1 --secretpulumi config set --path 'lambdawithsecrets.secrets["secret2"]' secretvalue2 --secret-
Preview and deploy the app via
pulumi up.$ pulumi upPreviewing update (dev)View Live: https://app.pulumi.com/acmecorp/lambda-secrets/dev/previews/209f07fb-190d-4596-af9f-d2d72e9c5cc9Type Name Plan+ pulumi:pulumi:Stack lambda-secrets-dev create+ ├─ aws:secretsmanager:Secret secret1 create+ ├─ aws:secretsmanager:Secret secret2 create+ ├─ aws:iam:Role roleLambdaWithSecrets create+ ├─ aws:secretsmanager:SecretVersion secretversion-secret2 create+ ├─ aws:secretsmanager:SecretVersion secretversion-secret1 create+ ├─ aws:iam:Policy secretsPolicy create+ ├─ aws:iam:RolePolicyAttachment rpa-basic create+ ├─ aws:iam:RolePolicyAttachment rpa-secrets create+ └─ aws:lambda:Function lambdaWithSecrets createOutputs:lambdaName: "lambdaWithSecrets-b8ac5e9"Resources:+ 10 to createDo you want to perform this update? yesUpdating (dev)View Live: https://app.pulumi.com/acmecorp/lambda-secrets/dev/updates/1Type Name Status+ pulumi:pulumi:Stack lambda-secrets-dev created+ ├─ aws:secretsmanager:Secret secret1 created+ ├─ aws:secretsmanager:Secret secret2 created+ ├─ aws:iam:Role roleLambdaWithSecrets created+ ├─ aws:secretsmanager:SecretVersion secretversion-secret2 created+ ├─ aws:secretsmanager:SecretVersion secretversion-secret1 created+ ├─ aws:iam:Policy secretsPolicy created+ ├─ aws:iam:RolePolicyAttachment rpa-basic created+ ├─ aws:lambda:Function lambdaWithSecrets created+ └─ aws:iam:RolePolicyAttachment rpa-secrets createdOutputs:lambdaName: "lambdaWithSecrets-ca62cf8"Resources:+ 10 createdDuration: 24s -
Invoke the Lambda Function:
aws lambda invoke --function-name $(pulumi stack output lambdaName) /dev/stdoutYou should see the output as the secret values you added:
{"secret1":"secret1value","secret2":"secret2value"} -
You can view the environment variables containing the plaintext values and the secret ARNs in the details of the Lambda Function in the AWS Console.
Clean up#
To clean up the resources, you will need to run pulumi destroy and answer the confirmation question at the prompt.