cdk-imports-swap
v1.0.0
Published
This tool analyzes synthesized CDK templates (cdk.out directory), detects repeated Fn::ImportValue references to ExportsOutputFn outputs, and replaces them with cleaner, named exports—resulting in more readable and maintainable templates.
Readme
🔁 CDK Imports Swap
Optimize AWS CDK CloudFormation templates by replacing redundant ExportsOutputFn imports with named exports.
This utility analyzes your synthesized CDK templates from the cdk.out directory, identifies where the same exported values are referenced under both ExportsOutputFn* and named exports, and rewrites the templates to use named exports for better readability and consistency.
✨ Features
- 🔍 Scans all
*.template.jsonfiles insidecdk.out/assembly-* - 📦 Detects
ExportsOutputFn*style exports - 🏷 Identifies equivalent named exports across templates
- 🔁 Replaces
Fn::ImportValuereferences usingExportsOutputFn*with named alternatives - 🧼 Cleans up cross-stack references and improves maintainability
📦 Installation & Usage
Prerequisites
- Node.js (v14+ recommended)
- TypeScript
- CDK project with
cdk.outfolder (runcdk synthfirst)
Run the Script
npx cdk-imports-swap.tsYou may also add this as an npm/yarn script inside your project for convenience.
📁 Example
Before optimization:
"Fn::ImportValue": "ExportsOutputFn12345"After optimization:
"Fn::ImportValue": "SharedVpcId"🛠 How It Works
- Loads all templates from
cdk.out/assembly-*/*.template.json - Identifies Outputs with Export keys, separating
ExportsOutputFn*from named exports - Compares values of both export types
- Finds and replaces matching imports using a named export instead of
ExportsOutputFn - Saves modified template files in place
🔒 Safety
- Only modifies files inside the
cdk.outdirectory - Uses deep value comparison to ensure safe replacements
- Outputs logs for every match and modification
🧪 Development
To run locally:
git clone https://github.com/your-org/cdk-imports-swap.git
cd cdk-imports-swap
npm install
npx ts-node src/cdk-imports-swap.ts📄 License
MIT © Iurii Favi
🤝 Contributing
Pull requests and suggestions are welcome! Please open an issue first to discuss what you would like to change.
