Hi, We want to download doppler secrets through the cli in a json file in a specific format -
{
“Parameters”: {
“TABLE_NAME”: “localtable”,
“BUCKET_NAME”: “testBucket”,
“STAGE”: “dev”
}
}
The use case is to send env variables to the AWS SAM cli - sam local start-api --template samtemplate.yml --env-vars env.json
Additionally is there any way to use a standard format .env file to get the CLI working?
We tried doppler run -- sam local start-api --template samtemplate.yml
with no success.
Reference - Invoking functions locally - AWS Serverless Application Model
Hey @Rnjai_Lamba and welcome to the Doppler community!
As long as you have all of the Doppler secrets listed in the Environment.Variables
section of your SAM template, then doppler run -- sam local start-api
will work. For example:
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
Environment:
Variables:
DOPPLER_SECRET:
OTHER_DOPPLER_SECRET:
# Every other secret here
If for whatever reason you’d like to use the --env-vars
option instead, you can achieve this using:
sam local start-api --env-vars <(echo "{\"Parameters\":$(doppler secrets download --no-file --format json)}")
Let me know how you go!
Hi Ryan, thanks a lot for the guidance.
Since our environment variables will keep on changing while we manage them on Doppler, how should we ensure our SAM template gets these secrets listed in the Environment.Variables
section?
This is a good question!
After a bit of experimentation, I think a better (although slightly more complex) solution is to have a script that renders a deployment template with populated environment variables that will be used as a custom template provided to the SAM CLI using the --template
option.
The workflow would essentially be this:
- Create deployment template file populated with environment variables form Doppler
- Execute SAM CLI command (e.g
sam local start-api --template template-deploy.yaml
)
- Remove
template-deploy.yaml
An example of a template generator in the wild is Kubernetes kustomize.
This means you’ll never have to worry about the list of secrets getting out of sync, and takes care of setting the environment variables for deployment.
Check out this GitHub Gist for an implementation starting point and keen to get your feedback.
1 Like