cdk-cost-analyzer 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cdk-cost-analyzer-cache/metadata.json +12 -0
- package/.gitlab-ci.yml +214 -0
- package/.husky/pre-commit +12 -0
- package/.kiro/hooks/accessibility-audit.kiro.hook +18 -0
- package/.kiro/hooks/api-schema-validation.kiro.hook +21 -0
- package/.kiro/hooks/auto-test-on-save.kiro.hook +19 -0
- package/.kiro/hooks/cdk-synth-on-change.kiro.hook +20 -0
- package/.kiro/hooks/code-coverage-check.kiro.hook +14 -0
- package/.kiro/hooks/commit-message-helper.kiro.hook +14 -0
- package/.kiro/hooks/dependency-update-check.kiro.hook +14 -0
- package/.kiro/hooks/env-file-validation.kiro.hook +18 -0
- package/.kiro/hooks/lint-and-format-on-save.kiro.hook +21 -0
- package/.kiro/hooks/mcp-config-validation.kiro.hook +17 -0
- package/.kiro/hooks/mcp-server-test.kiro.hook +14 -0
- package/.kiro/hooks/performance-analysis.kiro.hook +14 -0
- package/.kiro/hooks/readme-spell-check.kiro.hook +14 -0
- package/.kiro/hooks/security-scan-on-dependency-change.kiro.hook +21 -0
- package/.kiro/hooks/translation-update.kiro.hook +18 -0
- package/.kiro/hooks/update-documentation.kiro.hook +18 -0
- package/.kiro/settings/mcp.json +20 -0
- package/.kiro/specs/cdk-cost-analyzer/design.md +620 -0
- package/.kiro/specs/cdk-cost-analyzer/requirements.md +183 -0
- package/.kiro/specs/cdk-cost-analyzer/tasks.md +357 -0
- package/.kiro/specs/github-actions-ci/design.md +281 -0
- package/.kiro/specs/github-actions-ci/requirements.md +86 -0
- package/.kiro/specs/github-actions-ci/tasks.md +115 -0
- package/.kiro/specs/nlb-calculator-test-coverage/design.md +190 -0
- package/.kiro/specs/nlb-calculator-test-coverage/requirements.md +84 -0
- package/.kiro/specs/nlb-calculator-test-coverage/tasks.md +150 -0
- package/.kiro/specs/production-readiness/design.md +1213 -0
- package/.kiro/specs/production-readiness/requirements.md +312 -0
- package/.kiro/specs/production-readiness/tasks.md +269 -0
- package/.kiro/specs/repository-cleanup/design.md +283 -0
- package/.kiro/specs/repository-cleanup/requirements.md +74 -0
- package/.kiro/specs/repository-cleanup/tasks.md +64 -0
- package/.kiro/steering/aws-cli-best-practices.md +41 -0
- package/.kiro/steering/cdk-best-practices.md +49 -0
- package/.kiro/steering/development-standards.md +54 -0
- package/.kiro/steering/docker-best-practices.md +34 -0
- package/.kiro/steering/documentation-style.md +151 -0
- package/.kiro/steering/git-best-practices.md +37 -0
- package/.kiro/steering/mcp-best-practices.md +95 -0
- package/.kiro/steering/python-best-practices.md +48 -0
- package/.kiro/steering/react-best-practices.md +44 -0
- package/.kiro/steering/security-best-practices.md +41 -0
- package/.kiro/steering/testing-best-practices.md +59 -0
- package/.kiro/steering/typescript-best-practices.md +40 -0
- package/CHANGELOG.md +49 -0
- package/CONTRIBUTING.md +258 -0
- package/LICENSE +19 -0
- package/README.md +480 -0
- package/SECURITY.md +117 -0
- package/dist/api/index.d.ts +11 -0
- package/dist/api/index.js +65 -0
- package/dist/api/types.d.ts +15 -0
- package/dist/api/types.js +3 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +262 -0
- package/dist/config/ConfigManager.d.ts +40 -0
- package/dist/config/ConfigManager.js +238 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.js +19 -0
- package/dist/config/types.d.ts +72 -0
- package/dist/config/types.js +15 -0
- package/dist/diff/DiffEngine.d.ts +7 -0
- package/dist/diff/DiffEngine.js +73 -0
- package/dist/diff/index.d.ts +2 -0
- package/dist/diff/index.js +21 -0
- package/dist/diff/types.d.ts +20 -0
- package/dist/diff/types.js +3 -0
- package/dist/integrations/GitLabIntegration.d.ts +7 -0
- package/dist/integrations/GitLabIntegration.js +45 -0
- package/dist/integrations/index.d.ts +2 -0
- package/dist/integrations/index.js +21 -0
- package/dist/integrations/types.d.ts +11 -0
- package/dist/integrations/types.js +13 -0
- package/dist/parser/TemplateParser.d.ts +8 -0
- package/dist/parser/TemplateParser.js +75 -0
- package/dist/parser/index.d.ts +2 -0
- package/dist/parser/index.js +22 -0
- package/dist/parser/types.d.ts +30 -0
- package/dist/parser/types.js +3 -0
- package/dist/pipeline/PipelineOrchestrator.d.ts +23 -0
- package/dist/pipeline/PipelineOrchestrator.js +191 -0
- package/dist/pipeline/index.d.ts +2 -0
- package/dist/pipeline/index.js +19 -0
- package/dist/pipeline/types.d.ts +41 -0
- package/dist/pipeline/types.js +13 -0
- package/dist/pricing/CacheManager.d.ts +75 -0
- package/dist/pricing/CacheManager.js +195 -0
- package/dist/pricing/PricingClient.d.ts +17 -0
- package/dist/pricing/PricingClient.js +122 -0
- package/dist/pricing/PricingService.d.ts +16 -0
- package/dist/pricing/PricingService.js +149 -0
- package/dist/pricing/calculators/ALBCalculator.d.ts +16 -0
- package/dist/pricing/calculators/ALBCalculator.js +163 -0
- package/dist/pricing/calculators/APIGatewayCalculator.d.ts +10 -0
- package/dist/pricing/calculators/APIGatewayCalculator.js +177 -0
- package/dist/pricing/calculators/CloudFrontCalculator.d.ts +59 -0
- package/dist/pricing/calculators/CloudFrontCalculator.js +151 -0
- package/dist/pricing/calculators/DynamoDBCalculator.d.ts +9 -0
- package/dist/pricing/calculators/DynamoDBCalculator.js +146 -0
- package/dist/pricing/calculators/EC2Calculator.d.ts +7 -0
- package/dist/pricing/calculators/EC2Calculator.js +80 -0
- package/dist/pricing/calculators/ECSCalculator.d.ts +9 -0
- package/dist/pricing/calculators/ECSCalculator.js +116 -0
- package/dist/pricing/calculators/ElastiCacheCalculator.d.ts +8 -0
- package/dist/pricing/calculators/ElastiCacheCalculator.js +106 -0
- package/dist/pricing/calculators/LambdaCalculator.d.ts +13 -0
- package/dist/pricing/calculators/LambdaCalculator.js +111 -0
- package/dist/pricing/calculators/NLBCalculator.d.ts +16 -0
- package/dist/pricing/calculators/NLBCalculator.js +138 -0
- package/dist/pricing/calculators/NatGatewayCalculator.d.ts +12 -0
- package/dist/pricing/calculators/NatGatewayCalculator.js +116 -0
- package/dist/pricing/calculators/RDSCalculator.d.ts +9 -0
- package/dist/pricing/calculators/RDSCalculator.js +103 -0
- package/dist/pricing/calculators/S3Calculator.d.ts +8 -0
- package/dist/pricing/calculators/S3Calculator.js +68 -0
- package/dist/pricing/calculators/VPCEndpointCalculator.d.ts +12 -0
- package/dist/pricing/calculators/VPCEndpointCalculator.js +129 -0
- package/dist/pricing/index.d.ts +10 -0
- package/dist/pricing/index.js +37 -0
- package/dist/pricing/types.d.ts +53 -0
- package/dist/pricing/types.js +22 -0
- package/dist/releasetag.txt +1 -0
- package/dist/reporter/Reporter.d.ts +18 -0
- package/dist/reporter/Reporter.js +412 -0
- package/dist/reporter/index.d.ts +2 -0
- package/dist/reporter/index.js +21 -0
- package/dist/reporter/types.d.ts +72 -0
- package/dist/reporter/types.js +3 -0
- package/dist/synthesis/SynthesisOrchestrator.d.ts +26 -0
- package/dist/synthesis/SynthesisOrchestrator.js +243 -0
- package/dist/synthesis/index.d.ts +2 -0
- package/dist/synthesis/index.js +19 -0
- package/dist/synthesis/types.d.ts +17 -0
- package/dist/synthesis/types.js +13 -0
- package/dist/threshold/ThresholdEnforcer.d.ts +29 -0
- package/dist/threshold/ThresholdEnforcer.js +143 -0
- package/dist/threshold/index.d.ts +2 -0
- package/dist/threshold/index.js +19 -0
- package/dist/threshold/types.d.ts +15 -0
- package/dist/threshold/types.js +17 -0
- package/docs/CALCULATORS.md +820 -0
- package/docs/CI_CD.md +608 -0
- package/docs/CONFIGURATION.md +407 -0
- package/docs/DEVELOPMENT.md +387 -0
- package/docs/RELEASE.md +223 -0
- package/docs/TROUBLESHOOTING.md +847 -0
- package/examples/.cdk-cost-analyzer.yml +85 -0
- package/examples/.gitlab-ci.yml +125 -0
- package/examples/api-usage.js +26 -0
- package/examples/complex/base.json +16 -0
- package/examples/complex/target.json +29 -0
- package/examples/monorepo/.gitlab-ci.yml +251 -0
- package/examples/monorepo/README.md +341 -0
- package/examples/monorepo/package.json +27 -0
- package/examples/monorepo/packages/backend-infra/.cdk-cost-analyzer.yml +34 -0
- package/examples/monorepo/packages/backend-infra/bin/app.ts +16 -0
- package/examples/monorepo/packages/backend-infra/cdk.json +7 -0
- package/examples/monorepo/packages/backend-infra/lib/backend-stack.ts +128 -0
- package/examples/monorepo/packages/backend-infra/package.json +30 -0
- package/examples/monorepo/packages/backend-infra/tsconfig.json +11 -0
- package/examples/monorepo/packages/data-infra/.cdk-cost-analyzer.yml +38 -0
- package/examples/monorepo/packages/data-infra/bin/app.ts +16 -0
- package/examples/monorepo/packages/data-infra/cdk.json +7 -0
- package/examples/monorepo/packages/data-infra/lib/data-stack.ts +121 -0
- package/examples/monorepo/packages/data-infra/package.json +30 -0
- package/examples/monorepo/packages/data-infra/tsconfig.json +11 -0
- package/examples/monorepo/packages/frontend-infra/.cdk-cost-analyzer.yml +31 -0
- package/examples/monorepo/packages/frontend-infra/bin/app.ts +16 -0
- package/examples/monorepo/packages/frontend-infra/cdk.json +7 -0
- package/examples/monorepo/packages/frontend-infra/lib/frontend-stack.ts +60 -0
- package/examples/monorepo/packages/frontend-infra/package.json +30 -0
- package/examples/monorepo/packages/frontend-infra/tsconfig.json +11 -0
- package/examples/monorepo/tsconfig.json +35 -0
- package/examples/multi-stack/.cdk-cost-analyzer.yml +72 -0
- package/examples/multi-stack/.gitlab-ci.yml +184 -0
- package/examples/multi-stack/README.md +279 -0
- package/examples/multi-stack/bin/app.ts +36 -0
- package/examples/multi-stack/cdk.json +72 -0
- package/examples/multi-stack/lib/compute-stack.ts +128 -0
- package/examples/multi-stack/lib/networking-stack.ts +69 -0
- package/examples/multi-stack/lib/storage-stack.ts +141 -0
- package/examples/multi-stack/package-lock.json +4437 -0
- package/examples/multi-stack/package.json +42 -0
- package/examples/multi-stack/tsconfig.json +34 -0
- package/examples/simple/base.json +8 -0
- package/examples/simple/target.json +14 -0
- package/examples/single-stack/.NVP +0 -0
- package/examples/single-stack/.cdk-cost-analyzer.yml +52 -0
- package/examples/single-stack/.gitlab-ci.yml +126 -0
- package/examples/single-stack/README.md +184 -0
- package/examples/single-stack/UeK +0 -0
- package/examples/single-stack/bin/app.ts +16 -0
- package/examples/single-stack/cdk.json +72 -0
- package/examples/single-stack/lib/infrastructure-stack.ts +119 -0
- package/examples/single-stack/package-lock.json +4443 -0
- package/examples/single-stack/package.json +38 -0
- package/examples/single-stack/tsconfig.json +34 -0
- package/package.json +139 -0
- package/test-cdk-project/README-COMPUTE.md +141 -0
- package/test-cdk-project/README.md +95 -0
- package/test-cdk-project/app-with-compute.js +102 -0
- package/test-cdk-project/app.js +81 -0
- package/test-cdk-project/cdk-compute.json +3 -0
- package/test-cdk-project/cdk.context.json +7 -0
- package/test-cdk-project/cdk.json +3 -0
- package/test-cdk-project/cdk.out/TestStack.assets.json +21 -0
- package/test-cdk-project/cdk.out/TestStack.template.json +115 -0
- package/test-cdk-project/cdk.out/cdk.out +1 -0
- package/test-cdk-project/cdk.out/manifest.json +503 -0
- package/test-cdk-project/cdk.out/tree.json +1 -0
- package/test-cdk-project/cdk.out.base/TestStack.assets.json +21 -0
- package/test-cdk-project/cdk.out.base/TestStack.template.json +115 -0
- package/test-cdk-project/cdk.out.base/cdk.out +1 -0
- package/test-cdk-project/cdk.out.base/manifest.json +503 -0
- package/test-cdk-project/cdk.out.base/tree.json +1 -0
- package/test-cdk-project/cdk.out.target/TestStack.assets.json +21 -0
- package/test-cdk-project/cdk.out.target/TestStack.template.json +183 -0
- package/test-cdk-project/cdk.out.target/cdk.out +1 -0
- package/test-cdk-project/cdk.out.target/manifest.json +521 -0
- package/test-cdk-project/cdk.out.target/tree.json +1 -0
- package/test-cdk-project/package-lock.json +422 -0
- package/test-cdk-project/package.json +17 -0
- package/tools/workflows/README.md +102 -0
- package/tools/workflows/validate-workflows.js +109 -0
- package/tools/workflows/workflow-utils.ts +181 -0
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
# Requirements Document
|
|
2
|
+
|
|
3
|
+
## Introduction
|
|
4
|
+
|
|
5
|
+
The Production Readiness specification enhances the CDK Cost Analyzer to make it truly production-ready for developer workflows. While Phase 1 and Phase 2 delivered core functionality and GitLab integration, this specification addresses critical gaps that prevent real-world adoption: automatic CDK synthesis, complete CI/CD pipeline integration, cost threshold enforcement, configuration flexibility, and extended resource coverage.
|
|
6
|
+
|
|
7
|
+
This specification focuses on removing friction from the developer experience, ensuring the tool integrates seamlessly into existing GitLab CI/CD pipelines, and providing the intelligence needed for effective FinOps practices.
|
|
8
|
+
|
|
9
|
+
## Glossary
|
|
10
|
+
|
|
11
|
+
- **CDK Synthesis**: The process of converting AWS CDK code into CloudFormation templates using the `cdk synth` command
|
|
12
|
+
- **Base Branch**: The target branch of a merge request, typically main or master, representing the current deployed state
|
|
13
|
+
- **Target Branch**: The source branch of a merge request containing proposed infrastructure changes
|
|
14
|
+
- **Cost Threshold**: A configured monetary limit that triggers pipeline actions when exceeded
|
|
15
|
+
- **Pipeline Job**: A unit of work in GitLab CI/CD that executes specific tasks
|
|
16
|
+
- **Manual Approval Gate**: A pipeline stage requiring human intervention before proceeding
|
|
17
|
+
- **Multi-Stack Application**: A CDK application that synthesizes multiple CloudFormation stacks
|
|
18
|
+
- **Usage Assumptions**: Default values for usage-based pricing calculations (storage size, request volume, etc.)
|
|
19
|
+
- **Configuration File**: A project-specific file defining custom settings for cost analysis
|
|
20
|
+
- **Cost Baseline**: Historical average cost for similar infrastructure changes
|
|
21
|
+
- **Resource Calculator**: A component that estimates costs for a specific AWS resource type
|
|
22
|
+
- **Synthesis Context**: Environment variables and configuration used during CDK synthesis
|
|
23
|
+
|
|
24
|
+
## Requirements
|
|
25
|
+
|
|
26
|
+
### Requirement 1
|
|
27
|
+
|
|
28
|
+
**User Story:** As a developer, I want the cost analyzer to automatically synthesize my CDK application in the pipeline, so that I do not need to manually generate CloudFormation templates.
|
|
29
|
+
|
|
30
|
+
#### Acceptance Criteria
|
|
31
|
+
|
|
32
|
+
1. WHEN the cost analyzer runs in a GitLab pipeline THEN the system SHALL automatically execute CDK synthesis for the base branch
|
|
33
|
+
2. WHEN synthesizing the base branch THEN the system SHALL check out the base branch code and run cdk synth
|
|
34
|
+
3. WHEN the cost analyzer runs in a GitLab pipeline THEN the system SHALL automatically execute CDK synthesis for the target branch
|
|
35
|
+
4. WHEN synthesizing the target branch THEN the system SHALL check out the target branch code and run cdk synth
|
|
36
|
+
5. IF CDK synthesis fails for either branch THEN the system SHALL report the synthesis error with the CDK error output and exit with a non-zero status code
|
|
37
|
+
|
|
38
|
+
### Requirement 2
|
|
39
|
+
|
|
40
|
+
**User Story:** As a developer, I want the cost analyzer to handle multi-stack CDK applications, so that I can see the total cost impact across all my infrastructure stacks.
|
|
41
|
+
|
|
42
|
+
#### Acceptance Criteria
|
|
43
|
+
|
|
44
|
+
1. WHEN a CDK application synthesizes multiple stacks THEN the system SHALL identify all generated CloudFormation templates
|
|
45
|
+
2. WHEN multiple stacks are identified THEN the system SHALL analyze cost changes for each stack independently
|
|
46
|
+
3. WHEN displaying results THEN the system SHALL show per-stack cost breakdowns
|
|
47
|
+
4. WHEN calculating total cost delta THEN the system SHALL aggregate costs across all stacks
|
|
48
|
+
5. WHEN generating reports THEN the system SHALL include both per-stack and total cost summaries
|
|
49
|
+
|
|
50
|
+
### Requirement 3
|
|
51
|
+
|
|
52
|
+
**User Story:** As a developer, I want complete GitLab CI/CD pipeline examples, so that I can easily integrate the cost analyzer into my project.
|
|
53
|
+
|
|
54
|
+
#### Acceptance Criteria
|
|
55
|
+
|
|
56
|
+
1. WHEN documentation is provided THEN the system SHALL include a complete .gitlab-ci.yml example for basic CDK projects
|
|
57
|
+
2. WHEN documentation is provided THEN the system SHALL include a .gitlab-ci.yml example for multi-stack CDK applications
|
|
58
|
+
3. WHEN documentation is provided THEN the system SHALL include a .gitlab-ci.yml example for monorepo projects
|
|
59
|
+
4. WHEN documentation is provided THEN the system SHALL explain all required environment variables and their sources
|
|
60
|
+
5. WHEN documentation is provided THEN the system SHALL include troubleshooting guidance for common pipeline failures
|
|
61
|
+
|
|
62
|
+
### Requirement 4
|
|
63
|
+
|
|
64
|
+
**User Story:** As a FinOps engineer, I want to enforce cost thresholds in the pipeline, so that expensive infrastructure changes require additional review before merging.
|
|
65
|
+
|
|
66
|
+
#### Acceptance Criteria
|
|
67
|
+
|
|
68
|
+
1. WHEN a cost threshold is configured THEN the system SHALL compare the total cost delta against the threshold value
|
|
69
|
+
2. WHEN the cost delta exceeds the threshold THEN the system SHALL fail the pipeline job with a descriptive error message
|
|
70
|
+
3. WHEN the cost delta is below the threshold THEN the system SHALL pass the pipeline job
|
|
71
|
+
4. WHERE multiple threshold levels are configured THEN the system SHALL support warning thresholds that pass but display warnings
|
|
72
|
+
5. WHERE multiple threshold levels are configured THEN the system SHALL support error thresholds that fail the pipeline job
|
|
73
|
+
|
|
74
|
+
### Requirement 5
|
|
75
|
+
|
|
76
|
+
**User Story:** As a developer, I want to configure cost thresholds per project, so that different applications can have appropriate cost limits.
|
|
77
|
+
|
|
78
|
+
#### Acceptance Criteria
|
|
79
|
+
|
|
80
|
+
1. WHEN a configuration file exists THEN the system SHALL read threshold values from the configuration file
|
|
81
|
+
2. WHEN threshold configuration includes warning levels THEN the system SHALL display warnings without failing the pipeline
|
|
82
|
+
3. WHEN threshold configuration includes error levels THEN the system SHALL fail the pipeline when exceeded
|
|
83
|
+
4. WHEN no configuration file exists THEN the system SHALL use default threshold values or no thresholds
|
|
84
|
+
5. WHEN displaying threshold violations THEN the system SHALL show the configured threshold and the actual cost delta
|
|
85
|
+
|
|
86
|
+
### Requirement 6
|
|
87
|
+
|
|
88
|
+
**User Story:** As a developer, I want to override default usage assumptions, so that cost estimates reflect my actual application usage patterns.
|
|
89
|
+
|
|
90
|
+
#### Acceptance Criteria
|
|
91
|
+
|
|
92
|
+
1. WHEN a configuration file exists THEN the system SHALL read custom usage assumptions from the configuration file
|
|
93
|
+
2. WHEN custom assumptions are provided for a resource type THEN the system SHALL use those values instead of defaults
|
|
94
|
+
3. WHEN no custom assumptions are provided THEN the system SHALL use the default assumptions
|
|
95
|
+
4. WHEN displaying cost estimates THEN the system SHALL indicate which assumptions were used (default or custom)
|
|
96
|
+
5. WHEN configuration file syntax is invalid THEN the system SHALL report the configuration error and exit with a non-zero status code
|
|
97
|
+
|
|
98
|
+
### Requirement 7
|
|
99
|
+
|
|
100
|
+
**User Story:** As a developer, I want support for NAT Gateway cost estimation, so that I can understand the impact of network architecture changes.
|
|
101
|
+
|
|
102
|
+
#### Acceptance Criteria
|
|
103
|
+
|
|
104
|
+
1. WHEN analyzing AWS::EC2::NatGateway resources THEN the system SHALL calculate monthly costs based on hourly rates
|
|
105
|
+
2. WHEN analyzing NAT Gateway resources THEN the system SHALL estimate data processing costs using default assumptions
|
|
106
|
+
3. WHEN displaying NAT Gateway costs THEN the system SHALL show both hourly and data processing cost components
|
|
107
|
+
4. WHEN NAT Gateway pricing data is unavailable THEN the system SHALL mark the cost as unknown and continue processing
|
|
108
|
+
5. WHEN configuration provides custom data processing assumptions THEN the system SHALL use those values for estimation
|
|
109
|
+
|
|
110
|
+
### Requirement 8
|
|
111
|
+
|
|
112
|
+
**User Story:** As a developer, I want support for Application Load Balancer cost estimation, so that I can understand the cost of my application routing infrastructure.
|
|
113
|
+
|
|
114
|
+
#### Acceptance Criteria
|
|
115
|
+
|
|
116
|
+
1. WHEN analyzing AWS::ElasticLoadBalancingV2::LoadBalancer resources of type application THEN the system SHALL calculate monthly costs based on hourly rates
|
|
117
|
+
2. WHEN analyzing ALB resources THEN the system SHALL estimate Load Balancer Capacity Unit costs using default assumptions
|
|
118
|
+
3. WHEN displaying ALB costs THEN the system SHALL show both hourly and LCU cost components
|
|
119
|
+
4. WHEN ALB pricing data is unavailable THEN the system SHALL mark the cost as unknown and continue processing
|
|
120
|
+
5. WHEN configuration provides custom LCU assumptions THEN the system SHALL use those values for estimation
|
|
121
|
+
|
|
122
|
+
### Requirement 9
|
|
123
|
+
|
|
124
|
+
**User Story:** As a developer, I want support for CloudFront distribution cost estimation, so that I can understand the cost of content delivery changes.
|
|
125
|
+
|
|
126
|
+
#### Acceptance Criteria
|
|
127
|
+
|
|
128
|
+
1. WHEN analyzing AWS::CloudFront::Distribution resources THEN the system SHALL estimate costs based on data transfer assumptions
|
|
129
|
+
2. WHEN analyzing CloudFront resources THEN the system SHALL estimate request costs using default assumptions
|
|
130
|
+
3. WHEN displaying CloudFront costs THEN the system SHALL show data transfer and request cost components
|
|
131
|
+
4. WHEN CloudFront pricing data is unavailable THEN the system SHALL mark the cost as unknown and continue processing
|
|
132
|
+
5. WHEN configuration provides custom data transfer assumptions THEN the system SHALL use those values for estimation
|
|
133
|
+
|
|
134
|
+
### Requirement 10
|
|
135
|
+
|
|
136
|
+
**User Story:** As a developer, I want support for ElastiCache cluster cost estimation, so that I can understand the cost of caching infrastructure.
|
|
137
|
+
|
|
138
|
+
#### Acceptance Criteria
|
|
139
|
+
|
|
140
|
+
1. WHEN analyzing AWS::ElastiCache::CacheCluster resources THEN the system SHALL calculate monthly costs based on node type and count
|
|
141
|
+
2. WHEN analyzing ElastiCache resources THEN the system SHALL support both Redis and Memcached engine types
|
|
142
|
+
3. WHEN displaying ElastiCache costs THEN the system SHALL show per-node and total cluster costs
|
|
143
|
+
4. WHEN ElastiCache pricing data is unavailable THEN the system SHALL mark the cost as unknown and continue processing
|
|
144
|
+
5. WHEN multi-AZ deployment is configured THEN the system SHALL account for additional replica costs
|
|
145
|
+
|
|
146
|
+
### Requirement 11
|
|
147
|
+
|
|
148
|
+
**User Story:** As a developer, I want support for VPC Endpoint cost estimation, so that I can understand the cost of private AWS service connectivity.
|
|
149
|
+
|
|
150
|
+
#### Acceptance Criteria
|
|
151
|
+
|
|
152
|
+
1. WHEN analyzing AWS::EC2::VPCEndpoint resources THEN the system SHALL calculate monthly costs based on endpoint type
|
|
153
|
+
2. WHEN analyzing interface endpoints THEN the system SHALL calculate costs based on hourly rates and data processing
|
|
154
|
+
3. WHEN analyzing gateway endpoints THEN the system SHALL mark costs as zero (no charge for S3 and DynamoDB gateway endpoints)
|
|
155
|
+
4. WHEN displaying VPC Endpoint costs THEN the system SHALL show hourly and data processing cost components
|
|
156
|
+
5. WHEN configuration provides custom data processing assumptions THEN the system SHALL use those values for estimation
|
|
157
|
+
|
|
158
|
+
### Requirement 12
|
|
159
|
+
|
|
160
|
+
**User Story:** As a developer, I want clear error messages when AWS credentials are missing, so that I can quickly resolve authentication issues.
|
|
161
|
+
|
|
162
|
+
#### Acceptance Criteria
|
|
163
|
+
|
|
164
|
+
1. WHEN AWS credentials are not configured THEN the system SHALL detect the missing credentials before attempting API calls
|
|
165
|
+
2. WHEN credentials are missing THEN the system SHALL display a clear error message explaining how to configure credentials
|
|
166
|
+
3. WHEN credentials are missing THEN the system SHALL exit with a non-zero status code
|
|
167
|
+
4. WHEN credentials are invalid THEN the system SHALL display the AWS authentication error message
|
|
168
|
+
5. WHEN running in GitLab CI THEN the system SHALL provide guidance on configuring AWS credentials in the pipeline
|
|
169
|
+
|
|
170
|
+
### Requirement 13
|
|
171
|
+
|
|
172
|
+
**User Story:** As a developer, I want the cost analyzer to handle CDK synthesis failures gracefully, so that I understand what went wrong with my infrastructure code.
|
|
173
|
+
|
|
174
|
+
#### Acceptance Criteria
|
|
175
|
+
|
|
176
|
+
1. WHEN CDK synthesis fails THEN the system SHALL capture the complete CDK error output
|
|
177
|
+
2. WHEN displaying synthesis errors THEN the system SHALL show the CDK error message prominently
|
|
178
|
+
3. WHEN synthesis fails THEN the system SHALL indicate which branch (base or target) failed synthesis
|
|
179
|
+
4. WHEN synthesis fails THEN the system SHALL exit with a non-zero status code
|
|
180
|
+
5. WHEN synthesis fails due to missing dependencies THEN the system SHALL suggest installing CDK dependencies
|
|
181
|
+
|
|
182
|
+
### Requirement 14
|
|
183
|
+
|
|
184
|
+
**User Story:** As a developer, I want the cost analyzer to work with different CDK project structures, so that I can use it regardless of my project organization.
|
|
185
|
+
|
|
186
|
+
#### Acceptance Criteria
|
|
187
|
+
|
|
188
|
+
1. WHEN the CDK application entry point is not in the default location THEN the system SHALL accept a configuration parameter for the app path
|
|
189
|
+
2. WHEN the CDK output directory is not in the default location THEN the system SHALL accept a configuration parameter for the output path
|
|
190
|
+
3. WHEN CDK context values are required THEN the system SHALL pass through environment variables to the synthesis process
|
|
191
|
+
4. WHEN custom CDK synthesis commands are needed THEN the system SHALL accept a configuration parameter for the synthesis command
|
|
192
|
+
5. WHEN the project uses a monorepo structure THEN the system SHALL support specifying the CDK application subdirectory
|
|
193
|
+
|
|
194
|
+
### Requirement 15
|
|
195
|
+
|
|
196
|
+
**User Story:** As a developer, I want to exclude specific resource types from cost analysis, so that I can focus on the resources that matter for my use case.
|
|
197
|
+
|
|
198
|
+
#### Acceptance Criteria
|
|
199
|
+
|
|
200
|
+
1. WHEN a configuration file specifies excluded resource types THEN the system SHALL skip cost calculation for those resource types
|
|
201
|
+
2. WHEN displaying results THEN the system SHALL indicate which resources were excluded from analysis
|
|
202
|
+
3. WHEN calculating total cost delta THEN the system SHALL exclude costs from excluded resource types
|
|
203
|
+
4. WHEN no exclusions are configured THEN the system SHALL analyze all supported resource types
|
|
204
|
+
5. WHEN an excluded resource type is encountered THEN the system SHALL not mark it as unsupported in the report
|
|
205
|
+
|
|
206
|
+
### Requirement 16
|
|
207
|
+
|
|
208
|
+
**User Story:** As a developer, I want the cost report to include a summary of configuration used, so that I can verify the analysis used correct assumptions.
|
|
209
|
+
|
|
210
|
+
#### Acceptance Criteria
|
|
211
|
+
|
|
212
|
+
1. WHEN generating a report THEN the system SHALL include a configuration summary section
|
|
213
|
+
2. WHEN displaying configuration summary THEN the system SHALL show which usage assumptions were applied
|
|
214
|
+
3. WHEN displaying configuration summary THEN the system SHALL show which thresholds were configured
|
|
215
|
+
4. WHEN displaying configuration summary THEN the system SHALL show which resource types were excluded
|
|
216
|
+
5. WHEN custom configuration was used THEN the system SHALL indicate the configuration file path
|
|
217
|
+
|
|
218
|
+
### Requirement 17
|
|
219
|
+
|
|
220
|
+
**User Story:** As a developer, I want the cost analyzer to provide actionable next steps when thresholds are exceeded, so that I know how to proceed with my merge request.
|
|
221
|
+
|
|
222
|
+
#### Acceptance Criteria
|
|
223
|
+
|
|
224
|
+
1. WHEN a threshold is exceeded THEN the system SHALL display specific guidance on how to proceed
|
|
225
|
+
2. WHEN a warning threshold is exceeded THEN the system SHALL suggest reviewing the cost impact with the team
|
|
226
|
+
3. WHEN an error threshold is exceeded THEN the system SHALL explain how to request threshold override approval
|
|
227
|
+
4. WHEN displaying threshold violations THEN the system SHALL show which specific resources contributed most to the cost increase
|
|
228
|
+
5. WHEN displaying threshold violations THEN the system SHALL suggest potential cost optimization opportunities
|
|
229
|
+
|
|
230
|
+
### Requirement 18
|
|
231
|
+
|
|
232
|
+
**User Story:** As a developer, I want the cost analyzer to work with CDK applications that use custom synthesis, so that I can analyze costs for complex infrastructure setups.
|
|
233
|
+
|
|
234
|
+
#### Acceptance Criteria
|
|
235
|
+
|
|
236
|
+
1. WHEN a CDK application uses custom synthesis logic THEN the system SHALL support executing custom synthesis commands
|
|
237
|
+
2. WHEN custom synthesis requires additional environment variables THEN the system SHALL pass through configured environment variables
|
|
238
|
+
3. WHEN custom synthesis produces templates in non-standard locations THEN the system SHALL accept configuration for template paths
|
|
239
|
+
4. WHEN custom synthesis fails THEN the system SHALL capture and display the custom command error output
|
|
240
|
+
5. WHEN documentation is provided THEN the system SHALL include examples of custom synthesis configuration
|
|
241
|
+
|
|
242
|
+
### Requirement 19
|
|
243
|
+
|
|
244
|
+
**User Story:** As a FinOps engineer, I want to configure different thresholds for different environments, so that production changes have stricter cost controls than development changes.
|
|
245
|
+
|
|
246
|
+
#### Acceptance Criteria
|
|
247
|
+
|
|
248
|
+
1. WHEN configuration includes environment-specific thresholds THEN the system SHALL detect the current environment from GitLab variables
|
|
249
|
+
2. WHEN environment-specific thresholds are configured THEN the system SHALL apply the threshold matching the current environment
|
|
250
|
+
3. WHEN no environment-specific threshold matches THEN the system SHALL use the default threshold
|
|
251
|
+
4. WHEN displaying threshold information THEN the system SHALL indicate which environment threshold was applied
|
|
252
|
+
5. WHERE environment detection fails THEN the system SHALL use the default threshold and log a warning
|
|
253
|
+
|
|
254
|
+
### Requirement 20
|
|
255
|
+
|
|
256
|
+
**User Story:** As a developer, I want the cost analyzer to cache pricing data across pipeline runs, so that analysis completes faster and reduces AWS API calls.
|
|
257
|
+
|
|
258
|
+
#### Acceptance Criteria
|
|
259
|
+
|
|
260
|
+
1. WHEN pricing data is fetched THEN the system SHALL cache the data with a timestamp
|
|
261
|
+
2. WHEN cached pricing data exists and is less than 24 hours old THEN the system SHALL use the cached data
|
|
262
|
+
3. WHEN cached pricing data is older than 24 hours THEN the system SHALL fetch fresh pricing data
|
|
263
|
+
4. WHEN running in GitLab CI THEN the system SHALL use GitLab cache to persist pricing data across pipeline runs
|
|
264
|
+
5. WHEN cache configuration is provided THEN the system SHALL respect custom cache duration settings
|
|
265
|
+
|
|
266
|
+
### Requirement 21
|
|
267
|
+
|
|
268
|
+
**User Story:** As a package maintainer, I want automated package publishing with Projen, so that releases are consistent and follow best practices.
|
|
269
|
+
|
|
270
|
+
#### Acceptance Criteria
|
|
271
|
+
|
|
272
|
+
1. WHEN the project is configured THEN the system SHALL use Projen for package management
|
|
273
|
+
2. WHEN a version tag is pushed THEN the GitLab CI pipeline SHALL automatically build and test the package
|
|
274
|
+
3. WHEN tests pass for a version tag THEN the system SHALL publish the package to NPM registry
|
|
275
|
+
4. WHEN publishing to NPM THEN the system SHALL include compiled JavaScript, type definitions, and documentation
|
|
276
|
+
5. WHEN publishing THEN the system SHALL exclude source TypeScript files, tests, and development configuration
|
|
277
|
+
|
|
278
|
+
### Requirement 22
|
|
279
|
+
|
|
280
|
+
**User Story:** As a developer, I want multiple installation methods, so that I can use the tool in different contexts.
|
|
281
|
+
|
|
282
|
+
#### Acceptance Criteria
|
|
283
|
+
|
|
284
|
+
1. WHEN the package is published THEN developers SHALL be able to install it globally via npm install -g
|
|
285
|
+
2. WHEN the package is published THEN developers SHALL be able to install it as a project dependency
|
|
286
|
+
3. WHEN the package is published THEN developers SHALL be able to run it via npx without installation
|
|
287
|
+
4. WHEN the package is published THEN the CLI executable SHALL be available in the system PATH after global installation
|
|
288
|
+
5. WHEN imported programmatically THEN the package SHALL export all public APIs with TypeScript type definitions
|
|
289
|
+
|
|
290
|
+
### Requirement 23
|
|
291
|
+
|
|
292
|
+
**User Story:** As a package maintainer, I want semantic versioning and automated changelog generation, so that users understand what changed between versions.
|
|
293
|
+
|
|
294
|
+
#### Acceptance Criteria
|
|
295
|
+
|
|
296
|
+
1. WHEN releasing a new version THEN the system SHALL follow semantic versioning (major.minor.patch)
|
|
297
|
+
2. WHEN commits use conventional commit format THEN the system SHALL automatically generate changelog entries
|
|
298
|
+
3. WHEN generating changelogs THEN the system SHALL group changes by type (features, bug fixes, breaking changes)
|
|
299
|
+
4. WHEN a breaking change is introduced THEN the system SHALL increment the major version number
|
|
300
|
+
5. WHEN publishing a release THEN the system SHALL include the changelog in the package and GitLab release notes
|
|
301
|
+
|
|
302
|
+
### Requirement 24
|
|
303
|
+
|
|
304
|
+
**User Story:** As a developer, I want quality gates before releases, so that only tested and validated code is published.
|
|
305
|
+
|
|
306
|
+
#### Acceptance Criteria
|
|
307
|
+
|
|
308
|
+
1. WHEN a release is triggered THEN the system SHALL run all tests before publishing
|
|
309
|
+
2. WHEN running quality gates THEN the system SHALL verify code coverage is above 80 percent
|
|
310
|
+
3. WHEN running quality gates THEN the system SHALL verify no TypeScript compilation errors exist
|
|
311
|
+
4. WHEN running quality gates THEN the system SHALL verify no linting errors exist
|
|
312
|
+
5. IF any quality gate fails THEN the system SHALL prevent package publishing and report the failure
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
# Implementation Plan
|
|
2
|
+
|
|
3
|
+
- [x] 1. Core infrastructure components (COMPLETED)
|
|
4
|
+
- ConfigManager, SynthesisOrchestrator, PipelineOrchestrator, ThresholdEnforcer implemented
|
|
5
|
+
- NAT Gateway, ALB, VPC Endpoint calculators implemented
|
|
6
|
+
- Pipeline CLI command implemented
|
|
7
|
+
- _Requirements: 1.1-1.5, 2.1-2.5, 4.1-4.3, 6.1-6.5, 7.1-7.5, 8.1-8.5, 11.1-11.5_
|
|
8
|
+
|
|
9
|
+
- [x] 2. Implement CloudFront Calculator (COMPLETED)
|
|
10
|
+
- [x] 2.1 Create CloudFront calculator class (COMPLETED)
|
|
11
|
+
- Implement ResourceCostCalculator interface
|
|
12
|
+
- Support AWS::CloudFront::Distribution resource type
|
|
13
|
+
- Added JSDoc documentation
|
|
14
|
+
- _Requirements: 9.1_
|
|
15
|
+
|
|
16
|
+
- [x] 2.2 Implement CloudFront cost calculation (COMPLETED)
|
|
17
|
+
- Query AWS Pricing API for data transfer rates
|
|
18
|
+
- Estimate data transfer costs using default assumptions
|
|
19
|
+
- Estimate request costs using default assumptions
|
|
20
|
+
- Use custom assumptions from configuration
|
|
21
|
+
- _Requirements: 9.1, 9.2, 9.5_
|
|
22
|
+
|
|
23
|
+
- [x] 2.3 Implement CloudFront cost breakdown (COMPLETED)
|
|
24
|
+
- Return separate data transfer and request cost components
|
|
25
|
+
- Document assumptions in MonthlyCost object
|
|
26
|
+
- _Requirements: 9.3, 9.4_
|
|
27
|
+
|
|
28
|
+
- [x] 2.4 Write unit tests for CloudFront calculator (COMPLETED)
|
|
29
|
+
- Test cost calculation with default assumptions
|
|
30
|
+
- Test cost calculation with custom assumptions
|
|
31
|
+
- Test cost breakdown components
|
|
32
|
+
- Test handling of missing pricing data
|
|
33
|
+
- _Requirements: 9.1, 9.2, 9.3, 9.4, 9.5_
|
|
34
|
+
|
|
35
|
+
- [x] 2.5 Update documentation (COMPLETED)
|
|
36
|
+
- Added CloudFront to README supported resources
|
|
37
|
+
- Added CloudFront usage assumptions to CONFIGURATION.md
|
|
38
|
+
- Added JSDoc comments to CloudFrontCalculator class
|
|
39
|
+
|
|
40
|
+
- [x] 3. Implement ElastiCache Calculator
|
|
41
|
+
- [x] 3.1 Create ElastiCache calculator class
|
|
42
|
+
- Implement ResourceCostCalculator interface
|
|
43
|
+
- Support AWS::ElastiCache::CacheCluster resource type
|
|
44
|
+
- _Requirements: 10.1_
|
|
45
|
+
|
|
46
|
+
- [x] 3.2 Implement ElastiCache cost calculation
|
|
47
|
+
- Query AWS Pricing API for node hourly rates
|
|
48
|
+
- Support Redis engine type
|
|
49
|
+
- Support Memcached engine type
|
|
50
|
+
- Calculate cost based on node type and count
|
|
51
|
+
- Account for multi-AZ replica costs when configured
|
|
52
|
+
- _Requirements: 10.1, 10.2, 10.5_
|
|
53
|
+
|
|
54
|
+
- [x] 3.3 Implement ElastiCache cost breakdown
|
|
55
|
+
- Return per-node and total cluster costs
|
|
56
|
+
- Document node configuration in assumptions
|
|
57
|
+
- _Requirements: 10.3, 10.4_
|
|
58
|
+
|
|
59
|
+
- [x] 3.4 Write unit tests for ElastiCache calculator
|
|
60
|
+
- Test Redis cluster cost calculation
|
|
61
|
+
- Test Memcached cluster cost calculation
|
|
62
|
+
- Test multi-node cluster costs
|
|
63
|
+
- Test multi-AZ replica costs
|
|
64
|
+
- Test handling of missing pricing data
|
|
65
|
+
- _Requirements: 10.1, 10.2, 10.3, 10.4, 10.5_
|
|
66
|
+
|
|
67
|
+
- [x] 4. Register new calculators in Pricing Service
|
|
68
|
+
- Register CloudFront calculator
|
|
69
|
+
- Register ElastiCache calculator
|
|
70
|
+
- Update calculator selection logic
|
|
71
|
+
- _Requirements: 9.1, 10.1_
|
|
72
|
+
|
|
73
|
+
- [x] 5. Enhance Reporter with configuration summary
|
|
74
|
+
- [x] 5.1 Add configuration summary to reports
|
|
75
|
+
- Show usage assumptions applied
|
|
76
|
+
- Show thresholds configured
|
|
77
|
+
- Show resource types excluded
|
|
78
|
+
- Show configuration file path if used
|
|
79
|
+
- _Requirements: 16.1, 16.2, 16.3, 16.4, 16.5_
|
|
80
|
+
|
|
81
|
+
- [x] 5.2 Update Markdown formatter for GitLab MR
|
|
82
|
+
- Format configuration summary as collapsible section
|
|
83
|
+
- Format threshold status prominently
|
|
84
|
+
- Format per-stack breakdowns for multi-stack apps
|
|
85
|
+
- Add actionable guidance for threshold violations
|
|
86
|
+
- _Requirements: 16.1, 17.1, 17.2, 17.3, 17.4_
|
|
87
|
+
|
|
88
|
+
- [x] 5.3 Write property test for configuration summary (COMPLETED)
|
|
89
|
+
- **Property 14: Configuration summary reflects actual settings**
|
|
90
|
+
- **Validates: Requirements 16.1, 16.2, 16.3, 16.4**
|
|
91
|
+
|
|
92
|
+
- [x] 5.4 Write property test for threshold violation guidance (COMPLETED)
|
|
93
|
+
- **Property 15: Threshold violations include actionable guidance**
|
|
94
|
+
- **Validates: Requirements 17.1, 17.2, 17.3, 17.4**
|
|
95
|
+
|
|
96
|
+
- [x] 5.5 Write unit tests for enhanced reporter (COMPLETED)
|
|
97
|
+
- Test configuration summary generation
|
|
98
|
+
- Test Markdown formatting for GitLab
|
|
99
|
+
- Test threshold violation messages
|
|
100
|
+
- Test multi-stack report formatting
|
|
101
|
+
- _Requirements: 16.1, 16.2, 16.3, 16.4, 17.1, 17.2, 17.3_
|
|
102
|
+
|
|
103
|
+
- [x] 6. Implement pricing cache with GitLab CI support
|
|
104
|
+
- [x] 6.1 Create cache manager
|
|
105
|
+
- Implement cache storage with timestamps
|
|
106
|
+
- Implement cache retrieval with freshness check
|
|
107
|
+
- Support custom cache duration from configuration
|
|
108
|
+
- Use .cdk-cost-analyzer-cache directory
|
|
109
|
+
- _Requirements: 20.1, 20.2, 20.3, 20.5_
|
|
110
|
+
|
|
111
|
+
- [x] 6.2 Integrate cache with Pricing Service
|
|
112
|
+
- Check cache before making API calls
|
|
113
|
+
- Store pricing data in cache after API calls
|
|
114
|
+
- Use cached data when API calls fail
|
|
115
|
+
- Respect cache duration configuration
|
|
116
|
+
- _Requirements: 20.2, 20.3, 20.4_
|
|
117
|
+
|
|
118
|
+
- [x] 6.3 Write property test for cache (COMPLETED)
|
|
119
|
+
- **Property 13: Cache reduces API calls**
|
|
120
|
+
- **Validates: Requirements 20.2, 20.3**
|
|
121
|
+
- Implemented in test/pricing/CacheIntegration.test.ts
|
|
122
|
+
|
|
123
|
+
- [x] 6.4 Write unit tests for cache manager (COMPLETED)
|
|
124
|
+
- Test cache storage and retrieval
|
|
125
|
+
- Test cache freshness validation
|
|
126
|
+
- Test cache usage on API failure
|
|
127
|
+
- Test custom cache duration
|
|
128
|
+
- _Requirements: 20.1, 20.2, 20.3, 20.4, 20.5_
|
|
129
|
+
- Implemented in test/pricing/CacheManager.test.ts
|
|
130
|
+
|
|
131
|
+
- [-] 7. Write property-based tests for core components
|
|
132
|
+
- [x] 7.1 Write property test for configuration validation
|
|
133
|
+
- **Property 3: Configuration file validation catches invalid schemas**
|
|
134
|
+
- **Validates: Requirements 6.5**
|
|
135
|
+
|
|
136
|
+
- [x] 7.2 Write property test for synthesis
|
|
137
|
+
- **Property 1: CDK synthesis produces valid CloudFormation templates**
|
|
138
|
+
- **Validates: Requirements 1.1, 1.2, 1.3**
|
|
139
|
+
|
|
140
|
+
- [x] 7.3 Write property test for multi-stack aggregation
|
|
141
|
+
- **Property 2: Multi-stack cost aggregation equals sum of individual stacks**
|
|
142
|
+
- **Validates: Requirements 2.4**
|
|
143
|
+
|
|
144
|
+
- [x] 7.4 Write property test for threshold evaluation
|
|
145
|
+
- **Property 4: Threshold evaluation is consistent**
|
|
146
|
+
- **Validates: Requirements 4.1, 4.2, 4.3**
|
|
147
|
+
|
|
148
|
+
- [x] 7.5 Write property test for custom usage assumptions
|
|
149
|
+
- **Property 5: Custom usage assumptions override defaults**
|
|
150
|
+
- **Validates: Requirements 6.2, 6.3**
|
|
151
|
+
|
|
152
|
+
- [x] 7.6 Write property test for resource exclusions
|
|
153
|
+
- **Property 6: Resource exclusions are respected**
|
|
154
|
+
- **Validates: Requirements 15.1, 15.2, 15.3**
|
|
155
|
+
|
|
156
|
+
- [x] 7.7 Write property test for environment-specific thresholds
|
|
157
|
+
- **Property 7: Environment-specific thresholds are applied correctly**
|
|
158
|
+
- **Validates: Requirements 19.1, 19.2, 19.3**
|
|
159
|
+
|
|
160
|
+
- [x] 7.8 Write property test for NAT Gateway calculator
|
|
161
|
+
- **Property 8: NAT Gateway costs include all components**
|
|
162
|
+
- **Validates: Requirements 7.1, 7.2, 7.3**
|
|
163
|
+
|
|
164
|
+
- [x] 7.9 Write property test for ALB calculator
|
|
165
|
+
- **Property 9: ALB costs scale with LCU assumptions**
|
|
166
|
+
- **Validates: Requirements 8.1, 8.2, 8.3**
|
|
167
|
+
|
|
168
|
+
- [x] 7.10 Write property test for VPC Endpoint calculator
|
|
169
|
+
- **Property 10: Gateway VPC endpoints have zero cost**
|
|
170
|
+
- **Validates: Requirements 11.3**
|
|
171
|
+
|
|
172
|
+
- [x] 7.11 Write property test for synthesis error capture
|
|
173
|
+
- **Property 11: Synthesis errors are captured and reported**
|
|
174
|
+
- **Validates: Requirements 13.1, 13.2, 13.3**
|
|
175
|
+
|
|
176
|
+
- [x] 7.12 Write property test for credential detection
|
|
177
|
+
- **Property 12: Missing AWS credentials are detected early**
|
|
178
|
+
- **Validates: Requirements 12.1, 12.2, 12.3**
|
|
179
|
+
|
|
180
|
+
- [x] 8. Checkpoint - Ensure all tests pass
|
|
181
|
+
- Ensure all tests pass, ask the user if questions arise.
|
|
182
|
+
|
|
183
|
+
- [x] 9. Migrate project to Projen
|
|
184
|
+
- [x] 9.1 Create .projenrc.ts configuration
|
|
185
|
+
- Convert existing package.json configuration to .projenrc.ts
|
|
186
|
+
- Configure Projen for TypeScript project with CLI binary
|
|
187
|
+
- Set up NPM publishing configuration
|
|
188
|
+
- Configure test coverage threshold (80%)
|
|
189
|
+
- Configure linting rules
|
|
190
|
+
- _Requirements: 21.1, 21.2, 24.1, 24.2, 24.3_
|
|
191
|
+
|
|
192
|
+
- [x] 9.2 Run projen synthesis and verify
|
|
193
|
+
- Run node ./projen.js to generate project files
|
|
194
|
+
- Verify all existing functionality works after migration
|
|
195
|
+
- Ensure all tests still pass
|
|
196
|
+
- _Requirements: 21.1, 21.2_
|
|
197
|
+
|
|
198
|
+
- [x] 9.3 Create GitLab CI release pipeline
|
|
199
|
+
- Configure test stage with quality gates
|
|
200
|
+
- Configure build stage for package creation
|
|
201
|
+
- Configure publish stage for NPM
|
|
202
|
+
- Configure release notes generation
|
|
203
|
+
- _Requirements: 21.2, 21.3, 21.4, 23.3, 23.4, 23.5_
|
|
204
|
+
|
|
205
|
+
- [x] 10. Create comprehensive documentation
|
|
206
|
+
- [x] 10.1 Create configuration file reference (docs/CONFIGURATION.md) (COMPLETED)
|
|
207
|
+
- Document complete configuration schema
|
|
208
|
+
- Provide examples for each configuration section
|
|
209
|
+
- Document default values
|
|
210
|
+
- Document environment variable substitution
|
|
211
|
+
- _Requirements: 3.4, 6.1, 6.2, 6.3, 6.4_
|
|
212
|
+
|
|
213
|
+
- [x] 10.2 Create GitLab CI integration guide (docs/GITLAB_CI.md) (COMPLETED)
|
|
214
|
+
- Provide complete .gitlab-ci.yml examples
|
|
215
|
+
- Document single-stack project setup
|
|
216
|
+
- Document multi-stack project setup
|
|
217
|
+
- Document monorepo project setup
|
|
218
|
+
- Document environment variables required
|
|
219
|
+
- Document AWS credential configuration
|
|
220
|
+
- Document cache configuration
|
|
221
|
+
- _Requirements: 3.1, 3.2, 3.3, 3.4, 3.5, 12.5_
|
|
222
|
+
|
|
223
|
+
- [x] 10.3 Create troubleshooting guide (docs/TROUBLESHOOTING.md)
|
|
224
|
+
- Document common synthesis errors and solutions
|
|
225
|
+
- Document credential configuration issues
|
|
226
|
+
- Document configuration validation errors
|
|
227
|
+
- Document pricing API failures
|
|
228
|
+
- Document GitLab CI common issues
|
|
229
|
+
- _Requirements: 3.5, 12.1, 12.2, 12.3, 13.1, 13.2, 13.3_
|
|
230
|
+
|
|
231
|
+
- [x] 10.4 Create resource calculator reference (docs/CALCULATORS.md)
|
|
232
|
+
- Document all supported resource types
|
|
233
|
+
- Document default usage assumptions for each type
|
|
234
|
+
- Document how to override assumptions
|
|
235
|
+
- Document cost components for each type
|
|
236
|
+
- _Requirements: 6.2, 6.3, 7.1, 7.2, 8.1, 8.2, 9.1, 9.2, 10.1, 10.2, 11.1, 11.2_
|
|
237
|
+
|
|
238
|
+
- [x] 10.5 Update README with new features (COMPLETED)
|
|
239
|
+
- Add configuration file examples
|
|
240
|
+
- Add pipeline command examples
|
|
241
|
+
- Add GitLab CI integration examples
|
|
242
|
+
- Add threshold enforcement examples
|
|
243
|
+
- Update installation instructions
|
|
244
|
+
- _Requirements: 3.1, 3.2, 3.3, 22.1, 22.2, 22.3, 22.4_
|
|
245
|
+
|
|
246
|
+
- [x] 11. Create example projects
|
|
247
|
+
- [x] 11.1 Create example single-stack CDK project (examples/single-stack/)
|
|
248
|
+
- Create minimal CDK application with basic infrastructure
|
|
249
|
+
- Add .cdk-cost-analyzer.yml configuration with thresholds
|
|
250
|
+
- Add .gitlab-ci.yml with cost analysis pipeline
|
|
251
|
+
- Add README with setup and usage instructions
|
|
252
|
+
- _Requirements: 3.1, 3.2, 14.1, 14.2_
|
|
253
|
+
|
|
254
|
+
- [x] 11.2 Create example multi-stack CDK project (examples/multi-stack/)
|
|
255
|
+
- Create CDK application with multiple stacks (e.g., networking, compute, storage)
|
|
256
|
+
- Add configuration for multi-stack analysis
|
|
257
|
+
- Add .gitlab-ci.yml with cost analysis pipeline
|
|
258
|
+
- Add README with setup and usage instructions
|
|
259
|
+
- _Requirements: 2.1, 2.2, 2.3, 3.2, 14.1, 14.2_
|
|
260
|
+
|
|
261
|
+
- [x] 11.3 Create example monorepo project (examples/monorepo/)
|
|
262
|
+
- Create monorepo structure with multiple CDK applications
|
|
263
|
+
- Add configuration for monorepo structure
|
|
264
|
+
- Add .gitlab-ci.yml with parallel cost analysis for each app
|
|
265
|
+
- Add README with setup and usage instructions
|
|
266
|
+
- _Requirements: 3.3, 14.4, 14.5_
|
|
267
|
+
|
|
268
|
+
- [x] 12. Final checkpoint - Ensure all tests pass
|
|
269
|
+
- Ensure all tests pass, ask the user if questions arise.
|