cdk-factory 0.15.7__tar.gz → 0.15.9__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 (158) hide show
  1. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/.gitignore +2 -1
  2. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/PKG-INFO +1 -1
  3. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/pyproject.toml +1 -1
  4. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/security_group_full_stack.py +13 -0
  5. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/lambdas/edge/ip_gate/handler.py +19 -19
  6. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/security_group/security_group_full_stack.py +73 -0
  7. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/websites/static_website_stack.py +12 -0
  8. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/utilities/api_gateway_integration_utility.py +3 -1
  9. cdk_factory-0.15.9/src/cdk_factory/version.py +1 -0
  10. cdk_factory-0.15.7/src/cdk_factory/version.py +0 -1
  11. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/.windsurfrules +0 -0
  12. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/LICENSE +0 -0
  13. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/README.md +0 -0
  14. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/archive/README.md +0 -0
  15. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/archive/migrate_to_enhanced_ssm.py +0 -0
  16. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/examples/json-imports/README.md +0 -0
  17. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/examples/separate-api-gateway/README.md +0 -0
  18. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/examples/separate-api-gateway/api-gateway-stack.json +0 -0
  19. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/examples/separate-api-gateway/config.json +0 -0
  20. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/examples/separate-api-gateway/lambda-stack.json +0 -0
  21. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/mypy.ini +0 -0
  22. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/publish_to_pypi.py +0 -0
  23. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/publish_to_pypi.sh +0 -0
  24. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/pysetup.py +0 -0
  25. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/pysetup.sh +0 -0
  26. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/requirements.dev.txt +0 -0
  27. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/requirements.tests.txt +0 -0
  28. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/requirements.txt +0 -0
  29. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/run-checks.sh +0 -0
  30. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/run-tests-clean-venv.sh +0 -0
  31. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/run-tests.sh +0 -0
  32. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/scripts/cloudfront-cleanup.sh +0 -0
  33. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/__init__.py +0 -0
  34. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/app.py +0 -0
  35. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/builds/README.md +0 -0
  36. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/cdk.json +0 -0
  37. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/cli.py +0 -0
  38. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/commands/command_loader.py +0 -0
  39. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/base_config.py +0 -0
  40. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/cdk_config.py +0 -0
  41. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/deployment.py +0 -0
  42. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/deployment_wave.py +0 -0
  43. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/devops.py +0 -0
  44. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/enhanced_base_config.py +0 -0
  45. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/enhanced_ssm_config.py +0 -0
  46. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/management.py +0 -0
  47. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/pipeline.py +0 -0
  48. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/pipeline_stage.py +0 -0
  49. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/_resources.py +0 -0
  50. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/api_gateway.py +0 -0
  51. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/apigateway_route_config.py +0 -0
  52. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/auto_scaling.py +0 -0
  53. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/cloudfront.py +0 -0
  54. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/cloudwatch_widget.py +0 -0
  55. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/code_artifact.py +0 -0
  56. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/code_artifact_login.py +0 -0
  57. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/code_repository.py +0 -0
  58. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/cognito.py +0 -0
  59. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/docker.py +0 -0
  60. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/dynamodb.py +0 -0
  61. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/ecr.py +0 -0
  62. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/ecs_service.py +0 -0
  63. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/exisiting.py +0 -0
  64. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/lambda_edge.py +0 -0
  65. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/lambda_function.py +0 -0
  66. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/lambda_layers.py +0 -0
  67. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/lambda_triggers.py +0 -0
  68. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/load_balancer.py +0 -0
  69. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/monitoring.py +0 -0
  70. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/rds.py +0 -0
  71. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/resource_mapping.py +0 -0
  72. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/resource_naming.py +0 -0
  73. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/resource_types.py +0 -0
  74. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/route53.py +0 -0
  75. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/route53_hosted_zone.py +0 -0
  76. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/rum.py +0 -0
  77. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/s3.py +0 -0
  78. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/security_group.py +0 -0
  79. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/sqs.py +0 -0
  80. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/resources/vpc.py +0 -0
  81. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/stack.py +0 -0
  82. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/configurations/workload.py +0 -0
  83. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/constructs/cloudfront/cloudfront_distribution_construct.py +0 -0
  84. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/constructs/ecr/ecr_construct.py +0 -0
  85. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/constructs/lambdas/lambda_function_construct.py +0 -0
  86. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/constructs/lambdas/lambda_function_docker_construct.py +0 -0
  87. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/constructs/lambdas/lambda_function_role_construct.py +0 -0
  88. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/constructs/lambdas/policies/policy_docs.py +0 -0
  89. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/constructs/lambdas/policies/policy_statements.py +0 -0
  90. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/constructs/s3_buckets/s3_bucket_construct.py +0 -0
  91. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/constructs/s3_buckets/s3_bucket_replication_destination_construct.py +0 -0
  92. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/constructs/s3_buckets/s3_bucket_replication_source_construct.py +0 -0
  93. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/constructs/sqs/policies/sqs_policies.py +0 -0
  94. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/interfaces/enhanced_ssm_parameter_mixin.py +0 -0
  95. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/interfaces/istack.py +0 -0
  96. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/interfaces/live_ssm_resolver.py +0 -0
  97. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/interfaces/ssm_parameter_mixin.py +0 -0
  98. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/lambdas/health_handler.py +0 -0
  99. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/pipeline/path_utils.py +0 -0
  100. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/pipeline/pipeline_factory.py +0 -0
  101. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/pipeline/security/policies.py +0 -0
  102. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/pipeline/security/roles.py +0 -0
  103. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/pipeline/stage.py +0 -0
  104. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack/istack.py +0 -0
  105. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack/stack_factory.py +0 -0
  106. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack/stack_module_loader.py +0 -0
  107. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack/stack_module_registry.py +0 -0
  108. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack/stack_modules.py +0 -0
  109. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/__init__.py +0 -0
  110. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/api_gateway/api_gateway_stack.py +0 -0
  111. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/auto_scaling/__init__.py +0 -0
  112. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/auto_scaling/auto_scaling_stack.py +0 -0
  113. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/aws_lambdas/lambda_stack.py +0 -0
  114. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/buckets/README.md +0 -0
  115. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/buckets/bucket_stack.py +0 -0
  116. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/cloudfront/__init__.py +0 -0
  117. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/cloudfront/cloudfront_stack.py +0 -0
  118. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/code_artifact/code_artifact_stack.py +0 -0
  119. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/cognito/cognito_stack.py +0 -0
  120. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/dynamodb/dynamodb_stack.py +0 -0
  121. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/ecr/README.md +0 -0
  122. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/ecr/ecr_stack.py +0 -0
  123. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/ecs/__init__.py +0 -0
  124. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/ecs/ecs_service_stack.py +0 -0
  125. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/lambda_edge/__init__.py +0 -0
  126. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/lambda_edge/lambda_edge_stack.py +0 -0
  127. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/load_balancer/__init__.py +0 -0
  128. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/load_balancer/load_balancer_stack.py +0 -0
  129. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/monitoring/__init__.py +0 -0
  130. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/monitoring/monitoring_stack.py +0 -0
  131. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/rds/__init__.py +0 -0
  132. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/rds/rds_stack.py +0 -0
  133. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/route53/__init__.py +0 -0
  134. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/route53/route53_stack.py +0 -0
  135. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/rum/__init__.py +0 -0
  136. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/rum/rum_stack.py +0 -0
  137. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/security_group/__init__.py +0 -0
  138. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/security_group/security_group_stack.py +0 -0
  139. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/simple_queue_service/sqs_stack.py +0 -0
  140. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/stack_base.py +0 -0
  141. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/vpc/__init__.py +0 -0
  142. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stack_library/vpc/vpc_stack.py +0 -0
  143. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/stages/websites/static_website_stage.py +0 -0
  144. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/templates/README.md +0 -0
  145. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/templates/app.py.template +0 -0
  146. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/templates/cdk.json.template +0 -0
  147. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/utilities/commandline_args.py +0 -0
  148. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/utilities/configuration_loader.py +0 -0
  149. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/utilities/docker_utilities.py +0 -0
  150. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/utilities/environment_services.py +0 -0
  151. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/utilities/file_operations.py +0 -0
  152. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/utilities/git_utilities.py +0 -0
  153. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/utilities/json_loading_utility.py +0 -0
  154. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/utilities/lambda_function_utilities.py +0 -0
  155. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/utilities/os_execute.py +0 -0
  156. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/utils/api_gateway_utilities.py +0 -0
  157. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/cdk_factory/workload/workload_factory.py +0 -0
  158. {cdk_factory-0.15.7 → cdk_factory-0.15.9}/src/handlers/test/handler.py +0 -0
@@ -197,4 +197,5 @@ activate.sh
197
197
  .lambda_package
198
198
 
199
199
  # Lambda runtime config (generated during CDK deployment)
200
- **/runtime_config.json
200
+ **/runtime_config.json
201
+ .pip/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cdk_factory
3
- Version: 0.15.7
3
+ Version: 0.15.9
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.15.7"
36
+ version = "0.15.9"
37
37
  authors = [
38
38
  { name="Eric Wilson", email="eric.wilson@geekcafe.com" }
39
39
  ]
@@ -69,3 +69,16 @@ class SecurityGroupFullStackConfig:
69
69
  if "ssm" in self.__config and "imports" in self.__config["ssm"]:
70
70
  return self.__config["ssm"]["imports"]
71
71
  return self.__config.get("ssm_imports", {})
72
+
73
+ @property
74
+ def ssm_exports(self) -> Dict[str, str]:
75
+ """SSM parameter exports for the Security Group"""
76
+ # Check both nested and flat structures for backwards compatibility
77
+ if "ssm" in self.__config and "exports" in self.__config["ssm"]:
78
+ return self.__config["ssm"]["exports"]
79
+ return self.__config.get("ssm_exports", {})
80
+
81
+ @property
82
+ def security_groups(self) -> List[Dict[str, Any]]:
83
+ """List of security groups to create"""
84
+ return self.__config.get("security_groups", [])
@@ -113,7 +113,7 @@ def lambda_handler(event, context):
113
113
  Configuration (fetched from SSM Parameter Store):
114
114
  - GATE_ENABLED: Whether IP gating is enabled (true/false)
115
115
  - ALLOW_CIDRS: Comma-separated list of allowed CIDR ranges
116
- - MAINT_CF_HOST: CloudFront domain for maintenance/lockout page
116
+ - DNS_ALIAS: CloudFront domain for backup/lockout page
117
117
 
118
118
  Runtime configuration is bundled in runtime_config.json by CDK.
119
119
  SSM parameter paths are auto-generated by CDK as:
@@ -172,9 +172,9 @@ def lambda_handler(event, context):
172
172
  print(f"IP gating is disabled (GATE_ENABLED={gate_enabled or 'NONE'})")
173
173
  return request
174
174
 
175
- # Get allowed CIDRs and maintenance host
175
+ # Get allowed CIDRs and backup host
176
176
  allow_cidrs_str = get_ssm_parameter(f'/{env}/{function_name}/allow-cidrs', 'us-east-1')
177
- maint_cf_host = get_ssm_parameter(f'/{env}/{function_name}/maint-cf-host', 'us-east-1')
177
+ dns_alias = get_ssm_parameter(f'/{env}/{function_name}/dns-alias', 'us-east-1')
178
178
 
179
179
  # Parse allowed CIDRs (empty string results in empty list)
180
180
  allowed_cidrs = [cidr.strip() for cidr in allow_cidrs_str.split(',') if cidr.strip()]
@@ -188,35 +188,35 @@ def lambda_handler(event, context):
188
188
  print(f"IP {client_ip} is allowed")
189
189
  return request
190
190
 
191
- # IP not allowed - either redirect or proxy maintenance page
191
+ # IP not allowed - either redirect or proxy backup page
192
192
  # Check response mode from SSM (default: redirect for backward compatibility)
193
193
  response_mode_param = f"/{env}/{function_name}/response-mode"
194
194
  response_mode = get_ssm_parameter(response_mode_param, 'us-east-1', default='redirect')
195
195
 
196
196
  if response_mode == 'proxy':
197
- # Proxy mode: Fetch and return maintenance content (keeps URL the same)
198
- print(f"IP {client_ip} is NOT allowed, proxying content from {maint_cf_host}")
197
+ # Proxy mode: Fetch and return backup content (keeps URL the same)
198
+ print(f"IP {client_ip} is NOT allowed, proxying content from {dns_alias}")
199
199
 
200
200
  try:
201
201
  import urllib3
202
202
  http = urllib3.PoolManager()
203
203
 
204
- # Fetch the maintenance page
205
- maint_response = http.request(
204
+ # Fetch the backup page - always request /index.html
205
+ alias_response = http.request(
206
206
  'GET',
207
- f'https://{maint_cf_host}',
207
+ f'https://{dns_alias}/index.html',
208
208
  headers={'User-Agent': 'CloudFront-IP-Gate-Proxy'},
209
209
  timeout=3.0
210
210
  )
211
211
 
212
- # Return the maintenance content
212
+ # Return the backup content
213
213
  response = {
214
- 'status': str(maint_response.status),
215
- 'statusDescription': 'OK' if maint_response.status == 200 else 'Service Unavailable',
214
+ 'status': str(alias_response.status),
215
+ 'statusDescription': 'OK' if alias_response.status == 200 else 'Service Unavailable',
216
216
  'headers': {
217
217
  'content-type': [{
218
218
  'key': 'Content-Type',
219
- 'value': maint_response.headers.get('Content-Type', 'text/html')
219
+ 'value': alias_response.headers.get('Content-Type', 'text/html')
220
220
  }],
221
221
  'cache-control': [{
222
222
  'key': 'Cache-Control',
@@ -227,20 +227,20 @@ def lambda_handler(event, context):
227
227
  'value': 'proxy'
228
228
  }]
229
229
  },
230
- 'body': maint_response.data.decode('utf-8')
230
+ 'body': alias_response.data.decode('utf-8')
231
231
  }
232
232
 
233
- print(f"Successfully proxied maintenance page (status {maint_response.status})")
233
+ print(f"Successfully proxied backup page (status {alias_response.status})")
234
234
  return response
235
235
 
236
236
  except Exception as proxy_error:
237
- print(f"Error proxying maintenance content: {str(proxy_error)}")
237
+ print(f"Error proxying backup content: {str(proxy_error)}")
238
238
  # Fall back to redirect if proxy fails
239
239
  print(f"Falling back to redirect mode")
240
240
  response_mode = 'redirect'
241
241
 
242
- # Redirect mode (default): HTTP 302 redirect to maintenance site
243
- print(f"IP {client_ip} is NOT allowed, redirecting to {maint_cf_host}")
242
+ # Redirect mode (default): HTTP 302 redirect to backup site
243
+ print(f"IP {client_ip} is NOT allowed, redirecting to {dns_alias}")
244
244
 
245
245
  response = {
246
246
  'status': '302',
@@ -248,7 +248,7 @@ def lambda_handler(event, context):
248
248
  'headers': {
249
249
  'location': [{
250
250
  'key': 'Location',
251
- 'value': f'https://{maint_cf_host}'
251
+ 'value': f'https://{dns_alias}'
252
252
  }],
253
253
  'cache-control': [{
254
254
  'key': 'Cache-Control',
@@ -225,6 +225,18 @@ class SecurityGroupsStack(IStack):
225
225
  export_name=f"{self.deployment.environment}-{self.workload.name}-WebMonitoringSecurityGroup",
226
226
  )
227
227
 
228
+ # =========================================================
229
+ # SSM Parameter Store Exports
230
+ # =========================================================
231
+ self._export_ssm_parameters(
232
+ security_groups_map={
233
+ "alb": alb_sg,
234
+ "ecs": web_fleet_sg,
235
+ "rds": mysql_sg,
236
+ "monitoring": monitoring_sg,
237
+ }
238
+ )
239
+
228
240
  def _process_ssm_imports(self) -> None:
229
241
  """
230
242
  Process SSM imports from configuration.
@@ -287,3 +299,64 @@ class SecurityGroupsStack(IStack):
287
299
  raise ValueError("VPC ID is not defined in the configuration or SSM imports.")
288
300
 
289
301
  return self._vpc
302
+
303
+ def _export_ssm_parameters(self, security_groups_map: Dict[str, ec2.CfnSecurityGroup]) -> None:
304
+ """
305
+ Export security group IDs to SSM Parameter Store based on configuration.
306
+
307
+ Args:
308
+ security_groups_map: Dictionary mapping security group types to their CDK resources
309
+ """
310
+ # Get the security groups configuration list from the config
311
+ security_groups_config = self.sg_config.security_groups
312
+
313
+ if not security_groups_config:
314
+ logger.debug("No security groups configuration found for SSM exports")
315
+ return
316
+
317
+ logger.info(f"Processing SSM exports for {len(security_groups_config)} security groups")
318
+
319
+ # Process each security group configuration
320
+ for sg_config in security_groups_config:
321
+ # Get the security group name and SSM exports
322
+ sg_name = sg_config.get("name", "")
323
+ ssm_config = sg_config.get("ssm", {})
324
+ ssm_exports = ssm_config.get("exports", {})
325
+
326
+ if not ssm_exports:
327
+ logger.debug(f"No SSM exports configured for security group: {sg_name}")
328
+ continue
329
+
330
+ # Determine which security group this config refers to based on the name pattern
331
+ # The config uses patterns like "{{WORKLOAD_NAME}}-{{ENVIRONMENT}}-rds-sg"
332
+ sg_resource = None
333
+ sg_type = None
334
+
335
+ if "-rds-sg" in sg_name or "-rds" in sg_name:
336
+ sg_resource = security_groups_map.get("rds")
337
+ sg_type = "rds"
338
+ elif "-ecs-sg" in sg_name or "instances" in sg_name:
339
+ sg_resource = security_groups_map.get("ecs")
340
+ sg_type = "ecs"
341
+ elif "-alb-sg" in sg_name or "alb" in sg_name:
342
+ sg_resource = security_groups_map.get("alb")
343
+ sg_type = "alb"
344
+ elif "monitoring" in sg_name:
345
+ sg_resource = security_groups_map.get("monitoring")
346
+ sg_type = "monitoring"
347
+
348
+ if not sg_resource:
349
+ logger.warning(f"Could not map security group configuration to resource: {sg_name}")
350
+ continue
351
+
352
+ # Export the security group ID if configured
353
+ security_group_id_path = ssm_exports.get("security_group_id")
354
+ if security_group_id_path:
355
+ self.export_ssm_parameter(
356
+ scope=self,
357
+ id=f"SsmExport{sg_type.upper()}SecurityGroupId",
358
+ value=sg_resource.ref,
359
+ parameter_name=security_group_id_path,
360
+ description=f"Security Group ID for {sg_type} ({sg_name})",
361
+ )
362
+ logger.info(f"Exported SSM parameter: {security_group_id_path} for {sg_type} security group")
@@ -261,6 +261,18 @@ class StaticWebSiteStack(IStack):
261
261
  description=f"CloudFront distribution ID for {stack_config.name}",
262
262
  )
263
263
 
264
+ # Export DNS alias (first alias) if configured
265
+ if "dns_alias" in ssm_exports and cloudfront_distribution.aliases:
266
+ # Export the first alias (primary domain)
267
+ primary_alias = cloudfront_distribution.aliases[0] if isinstance(cloudfront_distribution.aliases, list) else cloudfront_distribution.aliases
268
+ self.export_ssm_parameter(
269
+ scope=self,
270
+ id="SsmExportDnsAlias",
271
+ value=primary_alias,
272
+ parameter_name=ssm_exports["dns_alias"],
273
+ description=f"Primary DNS alias for {stack_config.name}",
274
+ )
275
+
264
276
  logger.info(f"Exported {len(ssm_exports)} SSM parameters for stack {stack_config.name}")
265
277
 
266
278
  def __get_version_number(self, assets_path: str) -> str:
@@ -1425,7 +1425,9 @@ class ApiGatewayIntegrationUtility:
1425
1425
  f" 2. Add 'allow_public_override': true to explicitly allow public access\n"
1426
1426
  f" 3. Remove 'authorization_type': 'NONE' to use secure Cognito auth\n\n"
1427
1427
  f"🔒 This prevents accidental public endpoints when authentication is available.\n\n"
1428
- f"👉 ApiGatewayIntegrationUtility documentation for more details: https://github.com/your-repo/api-gateway-stack"
1428
+ f"👉 ApiGatewayIntegrationUtility documentation for more details: \n\n "
1429
+ "\t https://github.com/geekcafe/cdk-factory/blob/main/src/cdk_factory/utilities/api_gateway_integration_utility.py \n\n"
1430
+ "\t and https://github.com/geekcafe/cdk-factory/blob/main/src/cdk_factory/stack_library/api_gateway/api_gateway_stack.py"
1429
1431
  )
1430
1432
  raise ValueError(error_msg)
1431
1433
 
@@ -0,0 +1 @@
1
+ __version__ = "0.15.9"
@@ -1 +0,0 @@
1
- __version__ = "0.15.7"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes