cdk-factory 0.18.12__tar.gz → 0.18.19__tar.gz

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.

Potentially problematic release.


This version of cdk-factory might be problematic. Click here for more details.

Files changed (167) hide show
  1. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/PKG-INFO +1 -1
  2. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/pyproject.toml +1 -1
  3. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/ecs_service.py +24 -2
  4. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/route53.py +5 -0
  5. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/interfaces/standardized_ssm_mixin.py +27 -0
  6. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/cloudfront/cloudfront_stack.py +8 -3
  7. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/ecs/ecs_service_stack.py +1 -1
  8. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/load_balancer/load_balancer_stack.py +41 -34
  9. cdk_factory-0.18.19/src/cdk_factory/stack_library/route53/route53_stack.py +449 -0
  10. cdk_factory-0.18.19/src/cdk_factory/version.py +1 -0
  11. cdk_factory-0.18.12/src/cdk_factory/stack_library/route53/route53_stack.py +0 -210
  12. cdk_factory-0.18.12/src/cdk_factory/version.py +0 -1
  13. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/.gitignore +0 -0
  14. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/.windsurfrules +0 -0
  15. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/LICENSE +0 -0
  16. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/README.md +0 -0
  17. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/REFACTORING_PLAN.md +0 -0
  18. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/archive/README.md +0 -0
  19. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/archive/migrate_to_enhanced_ssm.py +0 -0
  20. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/examples/json-imports/README.md +0 -0
  21. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/examples/separate-api-gateway/README.md +0 -0
  22. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/examples/separate-api-gateway/api-gateway-stack.json +0 -0
  23. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/examples/separate-api-gateway/config.json +0 -0
  24. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/examples/separate-api-gateway/lambda-stack.json +0 -0
  25. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/mypy.ini +0 -0
  26. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/publish_to_pypi.py +0 -0
  27. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/publish_to_pypi.sh +0 -0
  28. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/pysetup.py +0 -0
  29. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/pysetup.sh +0 -0
  30. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/requirements.dev.txt +0 -0
  31. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/requirements.tests.txt +0 -0
  32. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/requirements.txt +0 -0
  33. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/run-checks.sh +0 -0
  34. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/run-tests-clean-venv.sh +0 -0
  35. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/run-tests.sh +0 -0
  36. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/scripts/cloudfront-cleanup.sh +0 -0
  37. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/__init__.py +0 -0
  38. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/app.py +0 -0
  39. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/builds/README.md +0 -0
  40. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/cdk.json +0 -0
  41. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/cli.py +0 -0
  42. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/commands/command_loader.py +0 -0
  43. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/base_config.py +0 -0
  44. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/cdk_config.py +0 -0
  45. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/deployment.py +0 -0
  46. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/deployment_wave.py +0 -0
  47. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/devops.py +0 -0
  48. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/enhanced_base_config.py +0 -0
  49. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/enhanced_ssm_config.py +0 -0
  50. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/management.py +0 -0
  51. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/pipeline.py +0 -0
  52. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/pipeline_stage.py +0 -0
  53. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/_resources.py +0 -0
  54. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/acm.py +0 -0
  55. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/api_gateway.py +0 -0
  56. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/apigateway_route_config.py +0 -0
  57. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/auto_scaling.py +0 -0
  58. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/cloudfront.py +0 -0
  59. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/cloudwatch_widget.py +0 -0
  60. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/code_artifact.py +0 -0
  61. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/code_artifact_login.py +0 -0
  62. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/code_repository.py +0 -0
  63. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/cognito.py +0 -0
  64. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/docker.py +0 -0
  65. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/dynamodb.py +0 -0
  66. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/ecr.py +0 -0
  67. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/ecs_cluster.py +0 -0
  68. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/exisiting.py +0 -0
  69. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/lambda_edge.py +0 -0
  70. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/lambda_function.py +0 -0
  71. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/lambda_layers.py +0 -0
  72. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/lambda_triggers.py +0 -0
  73. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/load_balancer.py +0 -0
  74. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/monitoring.py +0 -0
  75. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/rds.py +0 -0
  76. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/resource_mapping.py +0 -0
  77. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/resource_naming.py +0 -0
  78. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/resource_types.py +0 -0
  79. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/route53_hosted_zone.py +0 -0
  80. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/rum.py +0 -0
  81. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/s3.py +0 -0
  82. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/security_group.py +0 -0
  83. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/security_group_full_stack.py +0 -0
  84. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/sqs.py +0 -0
  85. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/resources/vpc.py +0 -0
  86. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/stack.py +0 -0
  87. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/configurations/workload.py +0 -0
  88. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/constructs/cloudfront/cloudfront_distribution_construct.py +0 -0
  89. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/constructs/ecr/ecr_construct.py +0 -0
  90. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/constructs/lambdas/lambda_function_construct.py +0 -0
  91. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/constructs/lambdas/lambda_function_docker_construct.py +0 -0
  92. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/constructs/lambdas/lambda_function_role_construct.py +0 -0
  93. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/constructs/lambdas/policies/policy_docs.py +0 -0
  94. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/constructs/lambdas/policies/policy_statements.py +0 -0
  95. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/constructs/s3_buckets/s3_bucket_construct.py +0 -0
  96. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/constructs/s3_buckets/s3_bucket_replication_destination_construct.py +0 -0
  97. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/constructs/s3_buckets/s3_bucket_replication_source_construct.py +0 -0
  98. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/constructs/sqs/policies/sqs_policies.py +0 -0
  99. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/interfaces/istack.py +0 -0
  100. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/interfaces/live_ssm_resolver.py +0 -0
  101. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/interfaces/networked_stack_mixin.py +0 -0
  102. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/interfaces/vpc_provider_mixin.py +0 -0
  103. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/lambdas/edge/ip_gate/handler.py +0 -0
  104. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/lambdas/health_handler.py +0 -0
  105. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/pipeline/path_utils.py +0 -0
  106. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/pipeline/pipeline_factory.py +0 -0
  107. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/pipeline/security/policies.py +0 -0
  108. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/pipeline/security/roles.py +0 -0
  109. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/pipeline/stage.py +0 -0
  110. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack/istack.py +0 -0
  111. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack/stack_factory.py +0 -0
  112. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack/stack_module_loader.py +0 -0
  113. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack/stack_module_registry.py +0 -0
  114. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack/stack_modules.py +0 -0
  115. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/__init__.py +0 -0
  116. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/acm/__init__.py +0 -0
  117. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/acm/acm_stack.py +0 -0
  118. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/api_gateway/api_gateway_stack.py +0 -0
  119. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/auto_scaling/__init__.py +0 -0
  120. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/auto_scaling/auto_scaling_stack.py +0 -0
  121. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/aws_lambdas/lambda_stack.py +0 -0
  122. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/buckets/README.md +0 -0
  123. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/buckets/bucket_stack.py +0 -0
  124. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/cloudfront/__init__.py +0 -0
  125. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/code_artifact/code_artifact_stack.py +0 -0
  126. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/cognito/cognito_stack.py +0 -0
  127. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/dynamodb/dynamodb_stack.py +0 -0
  128. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/ecr/README.md +0 -0
  129. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/ecr/ecr_stack.py +0 -0
  130. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/ecs/__init__.py +0 -0
  131. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/ecs/ecs_cluster_stack.py +0 -0
  132. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/lambda_edge/__init__.py +0 -0
  133. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/lambda_edge/lambda_edge_stack.py +0 -0
  134. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/load_balancer/__init__.py +0 -0
  135. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/monitoring/__init__.py +0 -0
  136. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/monitoring/monitoring_stack.py +0 -0
  137. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/rds/__init__.py +0 -0
  138. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/rds/rds_stack.py +0 -0
  139. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/route53/__init__.py +0 -0
  140. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/rum/__init__.py +0 -0
  141. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/rum/rum_stack.py +0 -0
  142. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/security_group/__init__.py +0 -0
  143. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/security_group/security_group_full_stack.py +0 -0
  144. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/security_group/security_group_stack.py +0 -0
  145. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/simple_queue_service/sqs_stack.py +0 -0
  146. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/stack_base.py +0 -0
  147. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/vpc/__init__.py +0 -0
  148. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/vpc/vpc_stack.py +0 -0
  149. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stack_library/websites/static_website_stack.py +0 -0
  150. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/stages/websites/static_website_stage.py +0 -0
  151. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/templates/README.md +0 -0
  152. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/templates/app.py.template +0 -0
  153. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/templates/cdk.json.template +0 -0
  154. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/utilities/api_gateway_integration_utility.py +0 -0
  155. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/utilities/commandline_args.py +0 -0
  156. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/utilities/configuration_loader.py +0 -0
  157. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/utilities/docker_utilities.py +0 -0
  158. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/utilities/environment_services.py +0 -0
  159. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/utilities/file_operations.py +0 -0
  160. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/utilities/git_utilities.py +0 -0
  161. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/utilities/json_loading_utility.py +0 -0
  162. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/utilities/lambda_function_utilities.py +0 -0
  163. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/utilities/os_execute.py +0 -0
  164. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/utils/api_gateway_utilities.py +0 -0
  165. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/validation/config_validator.py +0 -0
  166. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/cdk_factory/workload/workload_factory.py +0 -0
  167. {cdk_factory-0.18.12 → cdk_factory-0.18.19}/src/handlers/test/handler.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cdk_factory
3
- Version: 0.18.12
3
+ Version: 0.18.19
4
4
  Summary: CDK Factory. A QuickStarter and best practices setup for CDK projects
5
5
  Author-email: Eric Wilson <eric.wilson@geekcafe.com>
6
6
  License: MIT License
@@ -33,7 +33,7 @@ markers = [
33
33
  [project]
34
34
 
35
35
  name = "cdk_factory"
36
- version = "0.18.12"
36
+ version = "0.18.19"
37
37
  authors = [
38
38
  { name="Eric Wilson", email="eric.wilson@geekcafe.com" }
39
39
  ]
@@ -83,14 +83,27 @@ class EcsServiceConfig:
83
83
  """Whether to assign public IP addresses"""
84
84
  return self._config.get("assign_public_ip", False)
85
85
 
86
+ @property
87
+ def load_balancer_config(self) -> Dict[str, Any]:
88
+ """Load balancer configuration"""
89
+ return self._config.get("load_balancer", {})
90
+
86
91
  @property
87
92
  def target_group_arns(self) -> List[str]:
88
93
  """Target group ARNs for load balancing"""
94
+ # Check if load_balancer config has target_group_arn
95
+ if self.load_balancer_config and self.load_balancer_config.get("target_group_arn"):
96
+ arn = self.load_balancer_config["target_group_arn"]
97
+ if arn and arn != "arn:aws:elasticloadbalancing:placeholder":
98
+ return [arn]
89
99
  return self._config.get("target_group_arns", [])
90
100
 
91
101
  @property
92
102
  def container_port(self) -> int:
93
103
  """Container port for load balancer"""
104
+ # Check load_balancer config first
105
+ if self.load_balancer_config and self.load_balancer_config.get("container_port"):
106
+ return self.load_balancer_config["container_port"]
94
107
  return self._config.get("container_port", 80)
95
108
 
96
109
  @property
@@ -138,8 +151,17 @@ class EcsServiceConfig:
138
151
  """SSM parameter imports"""
139
152
  # Check both nested and flat structures for backwards compatibility
140
153
  if "ssm" in self._config and "imports" in self._config["ssm"]:
141
- return self._config["ssm"]["imports"]
142
- return self.ssm.get("imports", {})
154
+ imports = self._config["ssm"]["imports"]
155
+ else:
156
+ imports = self.ssm.get("imports", {})
157
+
158
+ # Add load_balancer SSM imports if they exist
159
+ if self.load_balancer_config and "ssm" in self.load_balancer_config:
160
+ lb_ssm = self.load_balancer_config["ssm"]
161
+ if "imports" in lb_ssm:
162
+ imports.update(lb_ssm["imports"])
163
+
164
+ return imports
143
165
 
144
166
  @property
145
167
  def deployment_type(self) -> str:
@@ -106,3 +106,8 @@ class Route53Config:
106
106
  def tags(self) -> Dict[str, str]:
107
107
  """Tags to apply to the Route53 resources"""
108
108
  return self.__config.get("tags", {})
109
+
110
+ @property
111
+ def records(self) -> List[Dict[str, Any]]:
112
+ """Records to create"""
113
+ return self.__config.get("records", [])
@@ -119,6 +119,7 @@ class StandardizedSsmMixin:
119
119
  """Export multiple resource values to SSM Parameter Store."""
120
120
  params = {}
121
121
 
122
+ invalid_export_keys = []
122
123
  # Only export parameters that are explicitly configured in ssm_exports
123
124
  if not hasattr(config, 'ssm_exports') or not config.ssm_exports:
124
125
  logger.debug("No SSM exports configured")
@@ -138,8 +139,17 @@ class StandardizedSsmMixin:
138
139
  )
139
140
  params[key] = param
140
141
  else:
142
+ invalid_export_keys.append(key)
141
143
  logger.warning(f"SSM export configured for '{key}' but no value found in resource_values")
142
144
 
145
+ if invalid_export_keys:
146
+ message = f"Export SSM Error\n🚨 SSM exports configured for '{invalid_export_keys}' but no values found in resource_values"
147
+ available_keys = list(resource_values.keys())
148
+ message = f"{message}\n✅ Available keys: {available_keys}"
149
+ message = f"{message}\n👉 Please update to the correct key or remove from the export list."
150
+ logger.warning(message)
151
+ raise ValueError(message)
152
+
143
153
  return params
144
154
 
145
155
  def normalize_resource_name(self, name: str, for_export: bool = False) -> str:
@@ -269,6 +279,23 @@ class StandardizedSsmMixin:
269
279
 
270
280
  return exported_params
271
281
 
282
+ def resolve_ssm_value(self, scope: Construct, value: str, unique_id: str)-> str:
283
+ if isinstance(value, str) and value.startswith("{{ssm:") and value.endswith("}}"):
284
+ # Extract SSM parameter path
285
+ ssm_param_path = value[6:-2] # Remove {{ssm: and }}
286
+
287
+ # Import SSM parameter - this creates a token that resolves at deployment time
288
+ param = ssm.StringParameter.from_string_parameter_name(
289
+ scope=scope,
290
+ id=f"{unique_id}-env-{hash(ssm_param_path) % 10000}",
291
+ string_parameter_name=ssm_param_path
292
+ )
293
+ resolved_value = param.string_value
294
+ logger.info(f"Resolved SSM parameter {ssm_param_path}")
295
+ return resolved_value
296
+ else:
297
+ return value
298
+
272
299
  def _resolve_ssm_import(self, import_value: Union[str, List[str]], import_key: str) -> Union[str, List[str]]:
273
300
  """
274
301
  Resolve SSM import value with proper error handling and validation.
@@ -13,6 +13,7 @@ from aws_cdk import (
13
13
  aws_cloudfront as cloudfront,
14
14
  aws_cloudfront_origins as origins,
15
15
  aws_certificatemanager as acm,
16
+ aws_route53 as route53,
16
17
  aws_lambda as _lambda,
17
18
  aws_ssm as ssm,
18
19
  CfnOutput,
@@ -173,14 +174,18 @@ class CloudFrontStack(IStack):
173
174
  return
174
175
 
175
176
  # Create the certificate
177
+ # Get hosted zone from SSM imports
178
+ hosted_zone_id = cert_config.get("hosted_zone_id")
179
+ hosted_zone = route53.HostedZone.from_hosted_zone_id(
180
+ self, "HostedZone", hosted_zone_id
181
+ )
182
+
176
183
  self.certificate = acm.Certificate(
177
184
  self,
178
185
  "Certificate",
179
186
  domain_name=domain_name,
180
187
  subject_alternative_names=self.cf_config.aliases,
181
- validation_method=acm.ValidationMethod.from_string(
182
- cert_config.get("validation_method", "DNS")
183
- ),
188
+ validation=acm.CertificateValidation.from_dns(hosted_zone=hosted_zone),
184
189
  )
185
190
  logger.info(f"Created new ACM certificate for domain: {domain_name}")
186
191
  return
@@ -563,7 +563,7 @@ class EcsServiceStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
563
563
  for param_key, param_name in ssm_imports.items():
564
564
  if 'target_group' in param_key.lower() or 'tg' in param_key.lower():
565
565
  try:
566
- param_value = self.get_ssm_parameter_value(param_name)
566
+ param_value = self.get_ssm_imported_value(param_name)
567
567
  if param_value and param_value.startswith('arn:'):
568
568
  target_group_arns.append(param_value)
569
569
  except Exception as e:
@@ -456,44 +456,42 @@ class LoadBalancerStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
456
456
  # Configure conditions
457
457
  conditions = []
458
458
 
459
- # Path patterns
460
- path_patterns = rule_config.get("path_patterns", [])
461
- if path_patterns:
462
- conditions.append(elbv2.ListenerCondition.path_patterns(path_patterns))
463
-
464
- # Host headers
465
- host_headers = rule_config.get("host_headers", [])
466
- if host_headers:
467
- conditions.append(elbv2.ListenerCondition.host_headers(host_headers))
468
-
469
- # HTTP headers
470
- http_headers = rule_config.get("http_headers", {})
471
- for header_name, header_values in http_headers.items():
472
- conditions.append(
473
- elbv2.ListenerCondition.http_header(header_name, header_values)
474
- )
475
-
476
- # Query strings
477
- query_strings = rule_config.get("query_strings", [])
478
- if query_strings:
479
- query_string_conditions = []
480
- for qs in query_strings:
481
- query_string_conditions.append(
482
- elbv2.QueryStringCondition(
483
- key=qs.get("key"), value=qs.get("value")
459
+ # Parse AWS ALB conditions format
460
+ aws_conditions = rule_config.get("conditions", [])
461
+ for condition in aws_conditions:
462
+ field = condition.get("field")
463
+ if field == "http-header" and "http_header_config" in condition:
464
+ header_config = condition["http_header_config"]
465
+ header_name = header_config.get("header_name")
466
+ header_values = header_config.get("values", [])
467
+ if header_name and header_values:
468
+ conditions.append(
469
+ elbv2.ListenerCondition.http_header(header_name, header_values)
484
470
  )
485
- )
486
- conditions.append(
487
- elbv2.ListenerCondition.query_strings(query_string_conditions)
488
- )
471
+ elif field == "path-pattern" and "values" in condition:
472
+ path_patterns = condition.get("values", [])
473
+ if path_patterns:
474
+ conditions.append(elbv2.ListenerCondition.path_patterns(path_patterns))
475
+ elif field == "host-header" and "values" in condition:
476
+ host_headers = condition.get("values", [])
477
+ if host_headers:
478
+ conditions.append(elbv2.ListenerCondition.host_headers(host_headers))
489
479
 
490
480
  # Configure actions
491
- target_group_name = rule_config.get("target_group")
492
- target_group = (
493
- self.target_groups.get(target_group_name) if target_group_name else None
494
- )
481
+ target_group = None
482
+
483
+ # Parse AWS ALB actions format
484
+ aws_actions = rule_config.get("actions", [])
485
+ for action in aws_actions:
486
+ if action.get("type") == "forward":
487
+ target_group_name = action.get("target_group")
488
+ target_group = (
489
+ self.target_groups.get(target_group_name) if target_group_name else None
490
+ )
491
+ break # Use first forward action
495
492
 
496
- if target_group:
493
+ # Validate that we have both conditions and target group before creating rule
494
+ if target_group and conditions:
497
495
  # Create rule with forward action
498
496
  elbv2.ApplicationListenerRule(
499
497
  self,
@@ -503,6 +501,15 @@ class LoadBalancerStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
503
501
  conditions=conditions,
504
502
  target_groups=[target_group],
505
503
  )
504
+ elif not conditions:
505
+ logger.warning(
506
+ f"Skipping listener rule '{rule_id}' - no conditions defined. "
507
+ f"CDK requires at least one condition for every rule."
508
+ )
509
+ elif not target_group:
510
+ logger.warning(
511
+ f"Skipping listener rule '{rule_id}' - no valid target group found."
512
+ )
506
513
 
507
514
  def _add_ip_whitelist_rules(
508
515
  self,