croudtech-python-aws-app-config us a utility to help manage application config using the AWS SSM Parameter Store
There is a cli tool to help set the values and a utility to use the SSM parameters within you application.
Use the package manager pip to install croudtech-python-aws-app-config.
pip install croudtech-python-aws-app-config
Usage: cli.py [OPTIONS] COMMAND [ARGS]...
Options:
--debug / --no-debug
--endpoint-url TEXT
--help Show this message and exit.
Commands:
delete-parameters
get-arns
get-parameters
put-parameters
put-parameters-recursive
manage-redis
--endpoint-url specified the AWS API endpoint URL used. This should be used if using localstack or a similar aws mock service. You can also set the AWS_ENDPOINT_URL
env var to enable this feature.
Delete parameters from SSM for a specified app and environment
Usage: cli.py delete-parameters [OPTIONS]
Options:
--environment-name TEXT The environment name [required]
--app-name TEXT The app name [required]
--ssm-prefix TEXT The ssm path prefix
--region TEXT The AWS region
--help Show this message and exit.
Get ARNs for published parameters
Usage: cli.py get-arns [OPTIONS]
Options:
--environment-name TEXT The environment name [required]
--app-name TEXT The app name [required]
--ssm-prefix TEXT The ssm path prefix
--region TEXT The AWS region
--include-common / --ignore-common
Include shared variables
--output-format [ecs]
--help Show this message and exit.
Get parameters for a specific app and environment
Usage: cli.py get-parameters [OPTIONS]
Options:
--environment-name TEXT The environment name [required]
--app-name TEXT The app name [required]
--ssm-prefix TEXT The ssm path prefix
--region TEXT The AWS region
--include-common / --ignore-common
Include shared variables
--output-format [json|yaml|environment|environment-export]
--help Show this message and exit.
You can export the variables to your local shell by using
eval $(croudtech-app-config get-parameters --app-name myapp --environment-name myenv --output-format environment-export)
INPUT should be the path to a yaml or json file
Usage: cli.py put-parameters [OPTIONS] INPUT
Options:
--environment-name TEXT The environment name [required]
--app-name TEXT The app name [required]
--ssm-prefix TEXT The ssm path prefix
--region TEXT The AWS region
--encrypted TEXT Do you want these parameters to be encrypted?
--delete-first Delete the values in this path before pushing
(useful for cleanup)
--help Show this message and exit.
Recursively put parameters from a directory with the following structure
├── EnvironmentName1
│ ├── AppName1.yaml
│ ├── AppName1.secret.yaml
│ ├── AppName2.yaml
│ └──AppName2.secret.yaml
└── EnvironmentName2
├── AppName1.yaml
├── AppName1.secret.yaml
├── AppName2.yaml
└──AppName2.secret.yaml
Files with a secret.yaml or secret.json suffix will have the parameters encrypted in SSM.
Usage: cli.py put-parameters-recursive [OPTIONS] VALUES_PATH
Options:
--ssm-prefix TEXT The ssm path prefix
--region TEXT The AWS region
--delete-first Delete the values in this path before pushing (useful for
cleanup)
--help Show this message and exit.
Manage redis DB allocation
Usage: python -m croudtech_python_aws_app_config.cli manage-redis allocate-db
[OPTIONS]
Allocate a Redis database for a specified application and environment
Options:
--redis-host TEXT The redis host [required]
--redis-port INTEGER The redis port [required]
--environment-name TEXT The environment name [required]
--app-name TEXT The application name [required]
--help Show this message and exit.
Usage: python -m croudtech_python_aws_app_config.cli manage-redis deallocate-db
[OPTIONS]
Remove Redis database allocation for the specified application and
environment
Options:
--redis-host TEXT The redis host [required]
--redis-port INTEGER The redis port [required]
--environment-name TEXT The environment name [required]
--app-name TEXT The application name [required]
--help Show this message and exit.
Usage: python -m croudtech_python_aws_app_config.cli manage-redis show-db
[OPTIONS]
Show Allocated Redis Database for a specified application
Options:
--environment-name TEXT The environment name [required]
--app-name TEXT The app name [required]
--ssm-prefix TEXT The ssm path prefix
--region TEXT The AWS region
--include-common / --ignore-common
Include shared variables
--help Show this message and exit.
Usage: python -m croudtech_python_aws_app_config.cli manage-redis show-dbs
[OPTIONS]
Show all allocated Redis databases
Options:
--redis-host TEXT The redis host [required]
--redis-port INTEGER The redis port [required]
--help Show this message and exit.
Nested values will have their keys flattened when being converted to environment variables. This allows for a simpler structure than just adding all your env vars separately.
For example:
SOME_VARIABLE: test
ANOTHER_VAR: 123
SOME_OTHER_VAR: foo
CONNECTIONS:
POSTGRESS:
HOST: somehost
PORT: 1234
USERNAME: someuser
PASSWORD: somepass
Would translate into the following environment variables:
SOME_VARIABLE="test"
ANOTHER_VAR="123"
SOME_OTHER_VAR="foo"
CONNECTIONS_POSTGRESS_HOST="somehost"
CONNECTIONS_POSTGRESS_PORT="1234"
CONNECTIONS_POSTGRESS_USERNAME="someuser"
CONNECTIONS_POSTGRESS_PASSWORD="somepass"
In the top of your application bootstrap file (or settings.py in django) add:
from croudtech_python_aws_app_config.ssm_config import SsmConfig
ssm_config = SsmConfig(
environment_name=os.environ.get("ENVIRONMENT_NAME"), app_name=os.environ.get("APP_NAME")
)
ssm_config.params_to_env()
Make sure your ENVIRONMENT_NAME and APP_NAME env vars are set.
This will pull values from SSM and inject them into your application environment variables.
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.