cdk-factory 0.18.5__tar.gz → 0.18.6__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.5 → cdk_factory-0.18.6}/PKG-INFO +1 -1
  2. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/pyproject.toml +1 -1
  3. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/interfaces/standardized_ssm_mixin.py +39 -35
  4. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/auto_scaling/auto_scaling_stack_standardized.py +5 -26
  5. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/load_balancer/load_balancer_stack.py +27 -25
  6. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/rds/rds_stack.py +64 -47
  7. cdk_factory-0.18.6/src/cdk_factory/version.py +1 -0
  8. cdk_factory-0.18.5/src/cdk_factory/stack_library/auto_scaling/auto_scaling_old.py +0 -721
  9. cdk_factory-0.18.5/src/cdk_factory/version.py +0 -1
  10. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/.gitignore +0 -0
  11. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/.windsurfrules +0 -0
  12. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/LICENSE +0 -0
  13. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/README.md +0 -0
  14. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/REFACTORING_PLAN.md +0 -0
  15. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/archive/README.md +0 -0
  16. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/archive/migrate_to_enhanced_ssm.py +0 -0
  17. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/examples/json-imports/README.md +0 -0
  18. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/examples/separate-api-gateway/README.md +0 -0
  19. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/examples/separate-api-gateway/api-gateway-stack.json +0 -0
  20. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/examples/separate-api-gateway/config.json +0 -0
  21. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/examples/separate-api-gateway/lambda-stack.json +0 -0
  22. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/mypy.ini +0 -0
  23. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/publish_to_pypi.py +0 -0
  24. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/publish_to_pypi.sh +0 -0
  25. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/pysetup.py +0 -0
  26. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/pysetup.sh +0 -0
  27. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/requirements.dev.txt +0 -0
  28. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/requirements.tests.txt +0 -0
  29. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/requirements.txt +0 -0
  30. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/run-checks.sh +0 -0
  31. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/run-tests-clean-venv.sh +0 -0
  32. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/run-tests.sh +0 -0
  33. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/scripts/cloudfront-cleanup.sh +0 -0
  34. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/__init__.py +0 -0
  35. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/app.py +0 -0
  36. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/builds/README.md +0 -0
  37. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/cdk.json +0 -0
  38. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/cli.py +0 -0
  39. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/commands/command_loader.py +0 -0
  40. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/base_config.py +0 -0
  41. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/cdk_config.py +0 -0
  42. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/deployment.py +0 -0
  43. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/deployment_wave.py +0 -0
  44. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/devops.py +0 -0
  45. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/enhanced_base_config.py +0 -0
  46. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/enhanced_ssm_config.py +0 -0
  47. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/management.py +0 -0
  48. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/pipeline.py +0 -0
  49. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/pipeline_stage.py +0 -0
  50. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/_resources.py +0 -0
  51. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/acm.py +0 -0
  52. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/api_gateway.py +0 -0
  53. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/apigateway_route_config.py +0 -0
  54. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/auto_scaling.py +0 -0
  55. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/cloudfront.py +0 -0
  56. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/cloudwatch_widget.py +0 -0
  57. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/code_artifact.py +0 -0
  58. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/code_artifact_login.py +0 -0
  59. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/code_repository.py +0 -0
  60. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/cognito.py +0 -0
  61. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/docker.py +0 -0
  62. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/dynamodb.py +0 -0
  63. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/ecr.py +0 -0
  64. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/ecs_cluster.py +0 -0
  65. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/ecs_service.py +0 -0
  66. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/exisiting.py +0 -0
  67. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/lambda_edge.py +0 -0
  68. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/lambda_function.py +0 -0
  69. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/lambda_layers.py +0 -0
  70. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/lambda_triggers.py +0 -0
  71. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/load_balancer.py +0 -0
  72. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/monitoring.py +0 -0
  73. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/rds.py +0 -0
  74. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/resource_mapping.py +0 -0
  75. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/resource_naming.py +0 -0
  76. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/resource_types.py +0 -0
  77. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/route53.py +0 -0
  78. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/route53_hosted_zone.py +0 -0
  79. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/rum.py +0 -0
  80. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/s3.py +0 -0
  81. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/security_group.py +0 -0
  82. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/security_group_full_stack.py +0 -0
  83. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/sqs.py +0 -0
  84. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/resources/vpc.py +0 -0
  85. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/stack.py +0 -0
  86. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/configurations/workload.py +0 -0
  87. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/constructs/cloudfront/cloudfront_distribution_construct.py +0 -0
  88. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/constructs/ecr/ecr_construct.py +0 -0
  89. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/constructs/lambdas/lambda_function_construct.py +0 -0
  90. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/constructs/lambdas/lambda_function_docker_construct.py +0 -0
  91. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/constructs/lambdas/lambda_function_role_construct.py +0 -0
  92. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/constructs/lambdas/policies/policy_docs.py +0 -0
  93. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/constructs/lambdas/policies/policy_statements.py +0 -0
  94. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/constructs/s3_buckets/s3_bucket_construct.py +0 -0
  95. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/constructs/s3_buckets/s3_bucket_replication_destination_construct.py +0 -0
  96. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/constructs/s3_buckets/s3_bucket_replication_source_construct.py +0 -0
  97. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/constructs/sqs/policies/sqs_policies.py +0 -0
  98. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/interfaces/istack.py +0 -0
  99. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/interfaces/live_ssm_resolver.py +0 -0
  100. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/interfaces/networked_stack_mixin.py +0 -0
  101. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/interfaces/vpc_provider_mixin.py +0 -0
  102. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/lambdas/edge/ip_gate/handler.py +0 -0
  103. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/lambdas/health_handler.py +0 -0
  104. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/pipeline/path_utils.py +0 -0
  105. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/pipeline/pipeline_factory.py +0 -0
  106. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/pipeline/security/policies.py +0 -0
  107. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/pipeline/security/roles.py +0 -0
  108. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/pipeline/stage.py +0 -0
  109. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack/istack.py +0 -0
  110. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack/stack_factory.py +0 -0
  111. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack/stack_module_loader.py +0 -0
  112. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack/stack_module_registry.py +0 -0
  113. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack/stack_modules.py +0 -0
  114. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/__init__.py +0 -0
  115. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/acm/__init__.py +0 -0
  116. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/acm/acm_stack.py +0 -0
  117. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/api_gateway/api_gateway_stack.py +0 -0
  118. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/auto_scaling/__init__.py +0 -0
  119. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/aws_lambdas/lambda_stack.py +0 -0
  120. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/buckets/README.md +0 -0
  121. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/buckets/bucket_stack.py +0 -0
  122. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/cloudfront/__init__.py +0 -0
  123. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/cloudfront/cloudfront_stack.py +0 -0
  124. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/code_artifact/code_artifact_stack.py +0 -0
  125. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/cognito/cognito_stack.py +0 -0
  126. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/dynamodb/dynamodb_stack.py +0 -0
  127. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/ecr/README.md +0 -0
  128. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/ecr/ecr_stack.py +0 -0
  129. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/ecs/__init__.py +0 -0
  130. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/ecs/ecs_cluster_stack_standardized.py +0 -0
  131. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/ecs/ecs_service_stack.py +0 -0
  132. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/lambda_edge/__init__.py +0 -0
  133. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/lambda_edge/lambda_edge_stack.py +0 -0
  134. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/load_balancer/__init__.py +0 -0
  135. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/monitoring/__init__.py +0 -0
  136. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/monitoring/monitoring_stack.py +0 -0
  137. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/rds/__init__.py +0 -0
  138. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/route53/__init__.py +0 -0
  139. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/route53/route53_stack.py +0 -0
  140. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/rum/__init__.py +0 -0
  141. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/rum/rum_stack.py +0 -0
  142. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/security_group/__init__.py +0 -0
  143. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/security_group/security_group_full_stack.py +0 -0
  144. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/security_group/security_group_stack.py +0 -0
  145. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/simple_queue_service/sqs_stack.py +0 -0
  146. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/stack_base.py +0 -0
  147. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/vpc/__init__.py +0 -0
  148. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/vpc/vpc_stack_standardized.py +0 -0
  149. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stack_library/websites/static_website_stack.py +0 -0
  150. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/stages/websites/static_website_stage.py +0 -0
  151. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/templates/README.md +0 -0
  152. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/templates/app.py.template +0 -0
  153. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/templates/cdk.json.template +0 -0
  154. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/utilities/api_gateway_integration_utility.py +0 -0
  155. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/utilities/commandline_args.py +0 -0
  156. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/utilities/configuration_loader.py +0 -0
  157. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/utilities/docker_utilities.py +0 -0
  158. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/utilities/environment_services.py +0 -0
  159. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/utilities/file_operations.py +0 -0
  160. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/utilities/git_utilities.py +0 -0
  161. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/utilities/json_loading_utility.py +0 -0
  162. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/utilities/lambda_function_utilities.py +0 -0
  163. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/utilities/os_execute.py +0 -0
  164. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/utils/api_gateway_utilities.py +0 -0
  165. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/validation/config_validator.py +0 -0
  166. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/src/cdk_factory/workload/workload_factory.py +0 -0
  167. {cdk_factory-0.18.5 → cdk_factory-0.18.6}/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.5
3
+ Version: 0.18.6
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.5"
36
+ version = "0.18.6"
37
37
  authors = [
38
38
  { name="Eric Wilson", email="eric.wilson@geekcafe.com" }
39
39
  ]
@@ -531,6 +531,44 @@ class StandardizedSsmMixin:
531
531
  return self._ssm_exported_values.copy()
532
532
 
533
533
 
534
+ def get_subnet_ids(self, config) -> List[str]:
535
+ """
536
+ Helper function to parse subnet IDs from SSM imports.
537
+
538
+ This common pattern handles:
539
+ 1. Comma-separated subnet ID strings from SSM
540
+ 2. List of subnet IDs from SSM
541
+ 3. Fallback to config attributes
542
+
543
+ Args:
544
+ config: Configuration object that might have subnet_ids attribute
545
+
546
+ Returns:
547
+ List of subnet IDs (empty list if not found or invalid format)
548
+ """
549
+ # Use the standardized SSM imports
550
+ ssm_imports = self.get_all_ssm_imports()
551
+ if "subnet_ids" in ssm_imports:
552
+ subnet_ids = ssm_imports["subnet_ids"]
553
+
554
+ # Handle comma-separated string or list
555
+ if isinstance(subnet_ids, str):
556
+ # Split comma-separated string
557
+ parsed_ids = [sid.strip() for sid in subnet_ids.split(',') if sid.strip()]
558
+ return parsed_ids
559
+ elif isinstance(subnet_ids, list):
560
+ return subnet_ids
561
+ else:
562
+ logger.warning(f"Unexpected subnet_ids type: {type(subnet_ids)}")
563
+ return []
564
+
565
+ # Fallback: Check config attributes
566
+ elif hasattr(config, 'subnet_ids') and config.subnet_ids:
567
+ return config.subnet_ids
568
+
569
+ else:
570
+ logger.warning("No subnet IDs found, using default behavior")
571
+ return []
534
572
 
535
573
  class ValidationResult:
536
574
  """Result of configuration validation."""
@@ -614,38 +652,4 @@ class SsmStandardValidator:
614
652
  return errors
615
653
 
616
654
 
617
- def parse_subnet_ids_from_ssm(self, subnet_ids_key: str = "subnet_ids") -> List[str]:
618
- """
619
- Helper function to parse subnet IDs from SSM imports.
620
-
621
- This common pattern handles:
622
- 1. Comma-separated subnet ID strings from SSM
623
- 2. List of subnet IDs from SSM
624
- 3. CDK Token resolution for deployment-time values
625
-
626
- Args:
627
- subnet_ids_key: The key used for subnet IDs in SSM imports (default: "subnet_ids")
628
-
629
- Returns:
630
- List of subnet IDs (empty list if not found or invalid format)
631
- """
632
- ssm_imports = self.get_all_ssm_imports()
633
-
634
- if subnet_ids_key not in ssm_imports:
635
- logger.warning(f"No subnet IDs found in SSM imports with key: {subnet_ids_key}")
636
- return []
637
-
638
- subnet_ids = ssm_imports[subnet_ids_key]
639
-
640
- # Handle comma-separated string or list
641
- if isinstance(subnet_ids, str):
642
- # Split comma-separated string
643
- parsed_ids = [sid.strip() for sid in subnet_ids.split(',') if sid.strip()]
644
- logger.info(f"Parsed {len(parsed_ids)} subnet IDs from comma-separated string")
645
- return parsed_ids
646
- elif isinstance(subnet_ids, list):
647
- logger.info(f"Using {len(subnet_ids)} subnet IDs from list")
648
- return subnet_ids
649
- else:
650
- logger.warning(f"Unexpected subnet_ids type: {type(subnet_ids)}")
651
- return []
655
+
@@ -211,33 +211,12 @@ class AutoScalingStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
211
211
  Get subnet IDs using standardized SSM approach.
212
212
  """
213
213
  # Primary method: Use standardized SSM imports
214
- ssm_imports = self._get_ssm_imports()
215
-
216
- if "subnet_ids" in ssm_imports:
217
- subnet_ids = ssm_imports["subnet_ids"]
218
-
219
- # Handle comma-separated string or list
220
- if isinstance(subnet_ids, str):
221
- # Split comma-separated string
222
- parsed_ids = [sid.strip() for sid in subnet_ids.split(',') if sid.strip()]
223
- return parsed_ids
224
- elif isinstance(subnet_ids, list):
225
- return subnet_ids
226
- else:
227
- logger.warning(f"Unexpected subnet_ids type: {type(subnet_ids)}")
228
- return []
229
-
230
- # Fallback: Use VPC provider mixin (backward compatibility)
231
- elif hasattr(self, '_get_subnets_from_provider'):
232
- return self._get_subnets_from_provider()
233
-
234
- # Final fallback: Direct configuration
235
- elif hasattr(self.asg_config, 'subnet_ids') and self.asg_config.subnet_ids:
236
- return self.asg_config.subnet_ids
214
+ # ssm_imports = self._get_ssm_imports()
215
+
216
+ subnet_ids = self.get_subnet_ids(self.asg_config)
237
217
 
238
- else:
239
- logger.warning("No subnet IDs found, using default behavior")
240
- return []
218
+ return subnet_ids
219
+
241
220
 
242
221
  def _create_instance_role(self, asg_name: str) -> iam.Role:
243
222
  """Create IAM role for EC2 instances"""
@@ -156,16 +156,22 @@ class LoadBalancerStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
156
156
 
157
157
  # If subnets is None, check if we have SSM-imported subnet_ids as a token
158
158
  # We need to use Fn.Split to convert the comma-separated string to an array
159
- if subnets is None and "subnet_ids" in self.ssm_imported_values:
160
- subnet_ids_value = self.ssm_imported_values["subnet_ids"]
161
- if cdk.Token.is_unresolved(subnet_ids_value):
162
- logger.info("Using Fn.Split to convert comma-separated subnet IDs token to array")
163
- # Use CloudFormation escape hatch to set Subnets property with Fn.Split
164
- cfn_lb = load_balancer.node.default_child
165
- cfn_lb.add_property_override(
166
- "Subnets",
167
- cdk.Fn.split(",", subnet_ids_value)
168
- )
159
+ if subnets is None:
160
+ subnet_ids = self.get_subnet_ids(self.lb_config)
161
+ if subnet_ids:
162
+ # For CloudFormation token resolution, we still need Fn.split
163
+ # but we use the helper to determine if subnet IDs are available
164
+ ssm_imports = self.get_all_ssm_imports()
165
+ if "subnet_ids" in ssm_imports:
166
+ subnet_ids_value = ssm_imports["subnet_ids"]
167
+ if cdk.Token.is_unresolved(subnet_ids_value):
168
+ logger.info("Using Fn.Split to convert comma-separated subnet IDs token to array")
169
+ # Use CloudFormation escape hatch to set Subnets property with Fn.Split
170
+ cfn_lb = load_balancer.node.default_child
171
+ cfn_lb.add_property_override(
172
+ "Subnets",
173
+ cdk.Fn.split(",", subnet_ids_value)
174
+ )
169
175
 
170
176
  # Add tags
171
177
  for key, value in self.lb_config.tags.items():
@@ -261,9 +267,16 @@ class LoadBalancerStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
261
267
  """Get subnets for the Load Balancer"""
262
268
  subnets = []
263
269
 
264
- # Check SSM imported values first
265
- if "subnet_ids" in self.ssm_imported_values:
266
- subnet_ids_value = self.ssm_imported_values["subnet_ids"]
270
+ # Use the standardized helper function to get subnet IDs
271
+ subnet_ids = self.get_subnet_ids(self.lb_config)
272
+
273
+ if not subnet_ids:
274
+ return None
275
+
276
+ # Check if we have unresolved tokens from SSM
277
+ ssm_imports = self.get_all_ssm_imports()
278
+ if "subnet_ids" in ssm_imports:
279
+ subnet_ids_value = ssm_imports["subnet_ids"]
267
280
 
268
281
  # Check if this is a CDK token (unresolved SSM parameter)
269
282
  if cdk.Token.is_unresolved(subnet_ids_value):
@@ -272,19 +285,8 @@ class LoadBalancerStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
272
285
  # The ALB construct will handle the token-based subnet IDs
273
286
  logger.info("Subnet IDs are unresolved tokens, will use vpc_subnets with token resolution")
274
287
  return None
275
- elif isinstance(subnet_ids_value, str):
276
- # If it's a resolved string, split it
277
- subnet_ids = [s.strip() for s in subnet_ids_value.split(',')]
278
- elif isinstance(subnet_ids_value, list):
279
- subnet_ids = subnet_ids_value
280
- else:
281
- subnet_ids = [subnet_ids_value]
282
- else:
283
- subnet_ids = self.lb_config.subnets
284
-
285
- if not subnet_ids:
286
- return None
287
288
 
289
+ # Convert subnet IDs to subnet objects
288
290
  for idx, subnet_id in enumerate(subnet_ids):
289
291
  subnets.append(
290
292
  ec2.Subnet.from_subnet_id(self, f"Subnet-{idx}", subnet_id)
@@ -69,8 +69,18 @@ class RdsStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
69
69
  self.rds_config = RdsConfig(stack_config.dictionary.get("rds", {}), deployment)
70
70
  db_name = deployment.build_resource_name(self.rds_config.name)
71
71
 
72
- # Process SSM imports first
73
- self._process_ssm_imports()
72
+ # Setup standardized SSM integration
73
+ self.setup_standardized_ssm_integration(
74
+ scope=self,
75
+ config=self.rds_config,
76
+ resource_type="rds",
77
+ resource_name=self.rds_config.name,
78
+ deployment=deployment,
79
+ workload=workload
80
+ )
81
+
82
+ # Process SSM imports
83
+ self.process_standardized_ssm_imports()
74
84
 
75
85
  # Get VPC and security groups
76
86
  self.security_groups = self._get_security_groups()
@@ -87,40 +97,13 @@ class RdsStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
87
97
  # Export to SSM Parameter Store
88
98
  self._export_ssm_parameters(db_name)
89
99
 
90
- def _process_ssm_imports(self) -> None:
91
- """Process SSM imports from configuration"""
92
- ssm_imports = self.rds_config.ssm_imports
93
-
94
- if not ssm_imports:
95
- logger.debug("No SSM imports configured for RDS")
96
- return
97
-
98
- logger.info(f"Processing {len(ssm_imports)} SSM imports for RDS")
99
-
100
- for param_key, param_path in ssm_imports.items():
101
- try:
102
- if not param_path.startswith('/'):
103
- param_path = f"/{param_path}"
104
-
105
- construct_id = f"ssm-import-{param_key}-{hash(param_path) % 10000}"
106
- param = ssm.StringParameter.from_string_parameter_name(
107
- self, construct_id, param_path
108
- )
109
-
110
- self.ssm_imported_values[param_key] = param.string_value
111
- logger.info(f"Imported SSM parameter: {param_key} from {param_path}")
112
-
113
- except Exception as e:
114
- logger.error(f"Failed to import SSM parameter {param_key} from {param_path}: {e}")
115
- raise
116
-
117
100
  @property
118
101
  def vpc(self) -> ec2.IVpc:
119
102
  """Get the VPC for the RDS instance using centralized VPC provider mixin."""
120
- if self._vpc:
103
+ if hasattr(self, '_vpc') and self._vpc:
121
104
  return self._vpc
122
105
 
123
- # Use the centralized VPC resolution from VPCProviderMixin
106
+ # Resolve VPC using the centralized VPC provider mixin
124
107
  self._vpc = self.resolve_vpc(
125
108
  config=self.rds_config,
126
109
  deployment=self.deployment,
@@ -133,8 +116,9 @@ class RdsStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
133
116
  security_groups = []
134
117
 
135
118
  # Check SSM imports first for security group ID
136
- if "security_group_rds_id" in self.ssm_imported_values:
137
- sg_id = self.ssm_imported_values["security_group_rds_id"]
119
+ ssm_imports = self.get_all_ssm_imports()
120
+ if "security_group_rds_id" in ssm_imports:
121
+ sg_id = ssm_imports["security_group_rds_id"]
138
122
  security_groups.append(
139
123
  ec2.SecurityGroup.from_security_group_id(
140
124
  self, "RDSSecurityGroup", sg_id
@@ -151,27 +135,60 @@ class RdsStack(IStack, VPCProviderMixin, StandardizedSsmMixin):
151
135
 
152
136
  return security_groups
153
137
 
138
+ def _get_subnet_selection(self) -> ec2.SubnetSelection:
139
+ """
140
+ Get subnet selection based on available subnet types in the VPC.
141
+
142
+ RDS instances require private subnets for security, but we'll fall back
143
+ to available subnets if the preferred types aren't available.
144
+ """
145
+ vpc = self.vpc
146
+
147
+ # Check for isolated subnets first (most secure for RDS)
148
+ if vpc.isolated_subnets:
149
+ logger.info("Using isolated subnets for RDS instance")
150
+ return ec2.SubnetSelection(subnet_type=ec2.SubnetType.PRIVATE_ISOLATED)
151
+
152
+ # Check for private subnets next
153
+ elif vpc.private_subnets:
154
+ logger.info("Using private subnets for RDS instance")
155
+ return ec2.SubnetSelection(subnet_type=ec2.SubnetType.PRIVATE_WITH_EGRESS)
156
+
157
+ # Fall back to public subnets (not recommended for production)
158
+ elif vpc.public_subnets:
159
+ logger.warning("Using public subnets for RDS instance - not recommended for production")
160
+ return ec2.SubnetSelection(subnet_type=ec2.SubnetType.PUBLIC)
161
+
162
+ else:
163
+ raise ValueError("No subnets available in VPC for RDS instance")
164
+
154
165
  def _create_db_instance(self, db_name: str) -> rds.DatabaseInstance:
155
166
  """Create a new RDS instance"""
156
167
  # Configure subnet group
157
168
  # If we have subnet IDs from SSM, create a DB subnet group explicitly
158
169
  db_subnet_group = None
159
- if "subnet_ids" in self.ssm_imported_values:
160
- subnet_ids_str = self.ssm_imported_values["subnet_ids"]
161
- # Split the comma-separated token into a list
162
- subnet_ids_list = cdk.Fn.split(",", subnet_ids_str)
163
-
164
- # Create DB subnet group with the token-based subnet list
165
- db_subnet_group = rds.CfnDBSubnetGroup(
166
- self,
167
- "DBSubnetGroup",
168
- db_subnet_group_description=f"Subnet group for {db_name}",
169
- subnet_ids=subnet_ids_list,
170
- db_subnet_group_name=f"{db_name}-subnet-group"
171
- )
170
+ subnet_ids = self.get_subnet_ids(self.rds_config)
171
+
172
+ if subnet_ids:
173
+ # For CloudFormation token resolution, we need to get the raw SSM value
174
+ # Use the standardized SSM imports
175
+ ssm_imports = self.get_all_ssm_imports()
176
+ if "subnet_ids" in ssm_imports:
177
+ subnet_ids_str = ssm_imports["subnet_ids"]
178
+ # Split the comma-separated token into a list for CloudFormation
179
+ subnet_ids_list = cdk.Fn.split(",", subnet_ids_str)
180
+
181
+ # Create DB subnet group with the token-based subnet list
182
+ db_subnet_group = rds.CfnDBSubnetGroup(
183
+ self,
184
+ "DBSubnetGroup",
185
+ db_subnet_group_description=f"Subnet group for {db_name}",
186
+ subnet_ids=subnet_ids_list,
187
+ db_subnet_group_name=f"{db_name}-subnet-group"
188
+ )
172
189
 
173
190
  # Configure subnet selection for VPC (when not using SSM imports)
174
- subnets = None if db_subnet_group else ec2.SubnetSelection(subnet_type=ec2.SubnetType.PRIVATE_ISOLATED)
191
+ subnets = None if db_subnet_group else self._get_subnet_selection()
175
192
 
176
193
  # Configure engine
177
194
  engine_version = None
@@ -0,0 +1 @@
1
+ __version__ = "0.18.6"