A unified configuration loader for local, AWS SSM, Azure App Configuration, and GCP Secret Manager.
Project description
cloud_config_service
A lightweight, unified configuration loader for local development, AWS, Azure, and GCP. It centralizes your environment variables in one place (Parameter Store / App Configuration / Secret Manager) and loads them into os.environ at runtime. Also provides a simple decorator to ensure config is loaded before your handler executes.
Features
- Local: Loads from
.env - AWS: Loads from SSM Parameter Store (GetParametersByPath)
- Azure: Loads from Azure App Configuration (connection string or endpoint + Managed Identity)
- GCP: Loads from Secret Manager (lists all secrets in a project and reads latest version)
- Single
load_cloud_config()entrypoint andwith_cloud_config()decorator - Cross-platform (Windows, macOS, Linux)
- Minimal imports: cloud SDKs are only imported when needed
Installation
pip install cloud_config_service
Or from source in your repository root (where README.md and setup.py live):
pip install .
Quick Start
Set two environment variables:
CLOUD_PROVIDER: one oflocal,aws,azure,gcpCONFIG_LOCATION: path/endpoint for the provider (see Providers below). Forlocal, you can leave it empty.
Then:
from cloud_config_service.config_loader import load_cloud_config
config = load_cloud_config()
# Values are now available via os.environ
Providers
Local
CLOUD_PROVIDER=local.envin your current working directory is loaded (key=value pairs).- Example
.env:DATABASE_URL=postgresql://localhost:5432/mydb API_KEY=your-api-key JWT_SECRET=supersecret ENVIRONMENT=development
AWS (SSM Parameter Store)
CLOUD_PROVIDER=awsCONFIG_LOCATION=/trident/awsmarketplace/dev(path prefix)- Permissions: IAM role needs
ssm:GetParametersByPath. - SDK:
boto3
Azure (App Configuration)
CLOUD_PROVIDER=azureCONFIG_LOCATION=either:- Connection string:
Endpoint=https://your-app-config.azconfig.io;Id=...;Secret=... - Endpoint URL:
https://your-app-config.azconfig.io(uses Managed Identity viaDefaultAzureCredential)
- Connection string:
- SDKs:
azure-appconfiguration,azure-identity
GCP (Secret Manager)
CLOUD_PROVIDER=gcpCONFIG_LOCATION=projects/YOUR_PROJECT_ID- Auth: ADC (Application Default Credentials) or service account with Secret Manager access.
- SDK:
google-cloud-secret-manager
Usage
1) Explicit load
import os
from cloud_config_service.config_loader import load_cloud_config
# Typically set in your environment/platform:
# os.environ["CLOUD_PROVIDER"] = "aws"
# os.environ["CONFIG_LOCATION"] = "/trident/awsmarketplace/dev"
config = load_cloud_config() # returns dict and sets environment variables
print("DATABASE_URL:", os.getenv("DATABASE_URL"))
print("API_KEY:", os.getenv("API_KEY"))
2) Decorator for handlers
Use with_cloud_config() to ensure config is loaded before your function runs. Good for AWS Lambda/Azure Functions.
import os
from cloud_config_service.config_loader import with_cloud_config
@with_cloud_config()
def lambda_handler(event, context):
token = os.getenv("JWT_SECRET")
return {"statusCode": 200, "body": "OK"}
Stacking with other decorators (e.g., JWT)
import functools
import os
from cloud_config_service.config_loader import with_cloud_config
def jwt_middleware(func):
@functools.wraps(func)
def wrapper(event, context):
jwt_secret = os.getenv("JWT_SECRET")
# validate token using jwt_secret
return func(event, context)
return wrapper
@with_cloud_config() # load config first
@jwt_middleware
def lambda_handler(event, context):
return {"statusCode": 200, "body": "OK"}
Environment Variables Reference
-
CLOUD_PROVIDER:local|aws|azure|gcp- Default:
local.
-
CONFIG_LOCATION:- local: optional (loads
.envfrom current working directory) - aws: required (e.g.,
/my/app/dev) - azure: required (connection string
Endpoint=...;Id=...;Secret=...or endpoint URL) - gcp: required (e.g.,
projects/my-project)
- local: optional (loads
Permissions and Auth
- AWS: Lambda/EC2 role needs
ssm:GetParametersByPath. - Azure: If using endpoint URL, assign Managed Identity to allow App Configuration access. If using connection string, MSI not required.
- GCP: Ensure your service account or ADC has Secret Manager access and
roles/secretmanager.secretAccessor.
Error Handling
- Missing SDKs are handled gracefully with guidance to install them:
boto3for AWSazure-appconfigurationandazure-identityfor Azuregoogle-cloud-secret-managerfor GCPpython-dotenvfor local.env
- Provider exceptions are caught and printed; wrap
load_cloud_config()in your own error handling for production if desired.
API
from cloud_config_service import load_cloud_config, with_cloud_config
-
load_cloud_config() -> Dict[str, str]:- Reads envs, loads config from the selected provider, returns a dict, and sets
os.environ.
- Reads envs, loads config from the selected provider, returns a dict, and sets
-
with_cloud_config():- Decorator that calls
load_cloud_config()before the wrapped function executes.
- Decorator that calls
Development
- Python >= 3.8 recommended.
- To run locally with
.env, setCLOUD_PROVIDER=localand ensure a.envexists in your working directory.
License
MIT
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cloud_config_service-0.1.10.tar.gz.
File metadata
- Download URL: cloud_config_service-0.1.10.tar.gz
- Upload date:
- Size: 6.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
92c59d2b7c73f83ba94280d6036093a8ce9166d5e6a3055c998f07cc22ea1dd3
|
|
| MD5 |
475ca33df06aaf5f40ead882b8ab4f8f
|
|
| BLAKE2b-256 |
d8bb46f31ffe1b9aa22b3634495c3f3846b30a834de91c084b0dd8a1908c7458
|
File details
Details for the file cloud_config_service-0.1.10-py3-none-any.whl.
File metadata
- Download URL: cloud_config_service-0.1.10-py3-none-any.whl
- Upload date:
- Size: 6.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a4e749dac249302f1c9ecbb59863092b2ef0b8f0b50c12e2feb7cf923b4dfef
|
|
| MD5 |
95a6052c21cee6b45e08586bfd9f8a77
|
|
| BLAKE2b-256 |
9e72c297026e7398f367f6150e5ec2210a7d9a8f6707b68410e8f09a6bf66779
|