An AWS SES deployment script failed in non-production environments due to hardcoded domain and email values, which were tailored only for production. This prevented environment-agnostic deployment, requiring manual edits for development and staging environments.
Issue
The script was designed for a single production domain (name.com) and hardcoded critical configuration values, including:
- Domain names (e.g.,
name.com). - Email addresses (e.g.,
now@name.com).
As a result, deployment attempts in development and staging environments failed because they required different domains and email configurations. This violated the principle of reusable, environment-agnostic automation.
Culprit
The root cause was direct embedding of environment-specific values in the script, specifically:
- Hardcoded domain and email variables in the script logic.
- No mechanism for dynamic configuration or environment-specific overrides.
- Violated best practices for infrastructure-as-code and reusable deployment scripts.
Solution
A dynamic configuration approach was implemented to enable environment-agnostic deployment:
Key Changes
- Environment Variables: Replaced hardcoded values with environment-specific variables (e.g.,
SES_DOMAIN,SES_FROM_EMAIL). - Centralized Configuration: Introduced an
.envfile to store environment-specific values, serving as the single source of truth for all configurations. - Script Integration: Modified the script to source environment variables at runtime, ensuring flexibility across environments.
Benefits
- Environment-Agnostic Deployment: The script now works seamlessly in development, staging, and production without manual edits.
- Automated Configuration Updates: Changes to environment-specific values (e.g., domains, emails) are applied automatically when
.envis updated. - Reduced Configuration Drift: Eliminated inconsistencies between environments by standardizing configuration management.
- Improved Maintainability: Configuration is centralized and easier to manage, reducing the risk of errors.
This solution ensures that AWS SES deployments are flexible, reusable, and consistent across all environments.