Export AWS SSM Parameter Store as Environment Variables with Bash

Export AWS SSM Parameter Store as Environment Variables with Bash

This bash script exports all SSM parameters under a given path as environment variables and appends the export statements to the ~/.bashrc

1. Add parameters to AWS System Manager

aws ssm put-parameter --name "/my-app/my-param-name" --value "my-param-value" --type "String"

Replace "/my-app/my-param-name" with the desired path and name for the parameter. Note that the path must begin with a forward slash (/) and can include multiple levels separated by forward slashes. Also, if the path does not exist, the put-parameter command will create it automatically.

Make sure you have permission to create parameters in the SSM parameter store, and specify any necessary additional parameters like --region or --profile.

2. Create the bash script

The script sets some parameters like APP, SERVICE, ENVIRONMENT, and REGION. These variables are used to construct the SSM path to retrieve the parameters.

The script uses the aws ssm get-parameters-by-path command to retrieve all SSM parameter names under the given path. Then, it loops through each parameter and exports it as an environment variable. The script also appends the export statements to the ~/.bashrc file so that they persist on future logins.

Finally, the script reloads the ~/.bashrc file with the source command.

Create a file for the script

nano export-ssm-params.sh
#or
vim export-ssm-params.sh

Copy/paste the following code.

Here's the script:

#!/bin/bash

# This script will export all SSM parameters under a given path as environment variables
# It will also append the export statements to the ~/.bashrc file so that they are available on future logins

# Set some parameters
APP="myapp"
SERVICE="api"
ENVIRONMENT="production"
REGION="us-east-1"

# Set the SSM path
SSM_PATH="/$APP/$SERVICE/$ENVIRONMENT"

# Get all SSM parameter names under the given path
SSM_PARAMETER_NAMES=$(aws ssm get-parameters-by-path \
  --region $REGION \
  --path "$SSM_PATH" \
  --recursive \
  --with-decryption \
  --query 'Parameters[].Name' \
  --output text)

# Loop through each parameter and export it as an environment variable
for name in $SSM_PARAMETER_NAMES; do
  value=$(aws ssm get-parameter \
    --region $REGION \
    --name $name \
    --with-decryption \
    --query 'Parameter.Value' \
    --output text)
  if [ ! -z "$name" ] && [ ! -z "$value" ]; then
    name=$(echo $name | awk -F/ '{print toupper($NF)}')
    export "$name"="$value"
    echo "Exported variable: $name=$value"
    echo "export $name=$value" >> ~/.bashrc
  fi
done

# Reload the bashrc file
source ~/.bashrc

3. How to Run the Script

To use this script, you need to have the AWS client (awscli) installed and configured to authenticate to an AWS account. Then, simply execute the script with Bash in a terminal.

You can save the script in a file with .sh extension, for example export-ssm-params.sh.

nano export-ssm-params.sh
#or
vim export-ssm-params.sh

Don't forget add execution permission

chmod +x export-ssm-params.sh

Now you can run the script with the following command:

bash export-ssm-params.sh
#or
./export-ssm-params.sh

Conclusion

In summary, this bash script is useful to export AWS Systems Manager parameters as environment variables. This can be helpful in different situations, for example, to avoid the need to repeatedly call the AWS API to get the parameter values.

Additionally, the script also adds the export statements to the ~/.bashrc file, meaning that the environment variables will be available in future Bash terminal sessions.