Skip to main content

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 and with_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 of local, aws, azure, gcp
  • CONFIG_LOCATION: path/endpoint for the provider (see Providers below). For local, 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
  • .env in 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=aws
  • CONFIG_LOCATION=/trident/awsmarketplace/dev (path prefix)
  • Permissions: IAM role needs ssm:GetParametersByPath.
  • SDK: boto3

Azure (App Configuration)

  • CLOUD_PROVIDER=azure
  • CONFIG_LOCATION= either:
    • Connection string: Endpoint=https://your-app-config.azconfig.io;Id=...;Secret=...
    • Endpoint URL: https://your-app-config.azconfig.io (uses Managed Identity via DefaultAzureCredential)
  • SDKs: azure-appconfiguration, azure-identity

GCP (Secret Manager)

  • CLOUD_PROVIDER=gcp
  • CONFIG_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 .env from 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)

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:
    • boto3 for AWS
    • azure-appconfiguration and azure-identity for Azure
    • google-cloud-secret-manager for GCP
    • python-dotenv for 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.
  • with_cloud_config():

    • Decorator that calls load_cloud_config() before the wrapped function executes.

Development

  • Python >= 3.8 recommended.
  • To run locally with .env, set CLOUD_PROVIDER=local and ensure a .env exists in your working directory.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cloud_config_service-0.1.4.tar.gz (6.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cloud_config_service-0.1.4-py3-none-any.whl (6.8 kB view details)

Uploaded Python 3

File details

Details for the file cloud_config_service-0.1.4.tar.gz.

File metadata

  • Download URL: cloud_config_service-0.1.4.tar.gz
  • Upload date:
  • Size: 6.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.7

File hashes

Hashes for cloud_config_service-0.1.4.tar.gz
Algorithm Hash digest
SHA256 dee135b0211bddd90c32d7b320a18e420a054708f7b134e279a52b0b756e10d0
MD5 59b6cd0cab21d94a4e40e34a4ee5b459
BLAKE2b-256 942e367767e8f6b88c10dad37b0bbaca87f281607288f8d4b908fffcdfcb9b33

See more details on using hashes here.

File details

Details for the file cloud_config_service-0.1.4-py3-none-any.whl.

File metadata

File hashes

Hashes for cloud_config_service-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 ed9386bf8ce418f3813517647b1eb011c97531eb7b70d89b587f750b74970076
MD5 eeac49709b2f295cd44a48f42f6d03cc
BLAKE2b-256 e0055aaced2d2a1d4da315c01f172636f1535794f871d20905f6800dc218004f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page