{
 "Description": "(SO0282) - Modular Cloud Studio on AWS - Core Infrastructure. Version v1.1.0",
 "Metadata": {
  "Module": {
   "MetadataType": "Modular Cloud Studio on AWS",
   "MetadataVersion": "2024-01-23",
   "Revision": "1.1.0",
   "Outputs": [
    {
     "Name": "/Core/HubRegion",
     "Type": "ssm:string",
     "Description": "The AWS Region where Modular Cloud Studio on AWS hub infrastructure is deployed"
    },
    {
     "Name": "/Core/MCSStack/Name",
     "Type": "ssm:string",
     "Description": "The name of the Modular Cloud Studio on AWS stack"
    },
    {
     "Name": "/Core/HubOrSpoke",
     "Type": "ssm:string",
     "Description": "Indicates that the AWS Region is the \"hub\" or a \"spoke\""
    },
    {
     "Name": "/Core/Tag/Key",
     "Type": "ssm:string",
     "Description": "The Key of the Tag of instances provisioned by Modular Cloud Studio on AWS"
    },
    {
     "Name": "/Core/Tag/Value/Linux",
     "Type": "ssm:string",
     "Description": "The Value of the Tag of Linux OS instances provisioned by Modular Cloud Studio on AWS infrastructure"
    },
    {
     "Name": "/Core/Tag/Value/Windows",
     "Type": "ssm:string",
     "Description": "The Value of the Tag of Windows OS instances provisioned by Modular Cloud Studio on AWS infrastructure"
    },
    {
     "Name": "/Core/AdminEmail",
     "Type": "ssm:string",
     "Description": "The admin email address to use for authorization"
    },
    {
     "Name": "/Core/MyApplication/Tag",
     "Type": "ssm:string",
     "Description": "The tag value of the My Application app from MCS, each spoke region has its own application so this value varies among spoke regions"
    },
    {
     "Name": "/Core/API/URL",
     "Type": "ssm:string",
     "Description": "The value of the URL for the API Gateway from MCS"
    }
   ]
  }
 },
 "Resources": {
  "HubRegionParameter": {
   "Type": "AWS::SSM::Parameter",
   "Properties": {
    "Description": "The AWS Region where Modular Cloud Studio on AWS hub infrastructure is deployed",
    "Name": {
     "Fn::Join": [
      "",
      [
       "/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/Core/HubRegion"
      ]
     ]
    },
    "Tags": {
     "awsApplication": {
      "Fn::GetAtt": [
       "MyApplications",
       "ApplicationTagValue"
      ]
     },
     "SolutionId": "SO0282"
    },
    "Type": "String",
    "Value": {
     "Ref": "AWS::Region"
    }
   }
  },
  "MCSStackNameParameter": {
   "Type": "AWS::SSM::Parameter",
   "Properties": {
    "Description": "The name of the Modular Cloud Studio on AWS stack",
    "Name": {
     "Fn::Join": [
      "",
      [
       "/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/Core/MCSStack/Name"
      ]
     ]
    },
    "Tags": {
     "awsApplication": {
      "Fn::GetAtt": [
       "MyApplications",
       "ApplicationTagValue"
      ]
     },
     "SolutionId": "SO0282"
    },
    "Type": "String",
    "Value": {
     "Ref": "AWS::StackName"
    }
   }
  },
  "HubOrSpokeParameter": {
   "Type": "AWS::SSM::Parameter",
   "Properties": {
    "Description": "Indicates that the AWS Region is the \"hub\" or a \"spoke\"",
    "Name": {
     "Fn::Join": [
      "",
      [
       "/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/Core/HubOrSpoke"
      ]
     ]
    },
    "Tags": {
     "awsApplication": {
      "Fn::GetAtt": [
       "MyApplications",
       "ApplicationTagValue"
      ]
     },
     "SolutionId": "SO0282"
    },
    "Type": "String",
    "Value": "hub"
   }
  },
  "InstanceTagKeyParameter": {
   "Type": "AWS::SSM::Parameter",
   "Properties": {
    "Description": "The Key of the Tag of instances provisioned by Modular Cloud Studio on AWS",
    "Name": {
     "Fn::Join": [
      "",
      [
       "/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/Core/Tag/Key"
      ]
     ]
    },
    "Tags": {
     "awsApplication": {
      "Fn::GetAtt": [
       "MyApplications",
       "ApplicationTagValue"
      ]
     },
     "SolutionId": "SO0282"
    },
    "Type": "String",
    "Value": "MCSWorkstation"
   }
  },
  "InstanceTagValueLinuxParameter": {
   "Type": "AWS::SSM::Parameter",
   "Properties": {
    "Description": "The Value of the Tag of Linux OS instances provisioned by Modular Cloud Studio on AWS infrastructure",
    "Name": {
     "Fn::Join": [
      "",
      [
       "/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/Core/Tag/Value/Linux"
      ]
     ]
    },
    "Tags": {
     "awsApplication": {
      "Fn::GetAtt": [
       "MyApplications",
       "ApplicationTagValue"
      ]
     },
     "SolutionId": "SO0282"
    },
    "Type": "String",
    "Value": "Linux"
   }
  },
  "InstanceTagValueWindowsParameter": {
   "Type": "AWS::SSM::Parameter",
   "Properties": {
    "Description": "The Value of the Tag of Windows OS instances provisioned by Modular Cloud Studio on AWS infrastructure",
    "Name": {
     "Fn::Join": [
      "",
      [
       "/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/Core/Tag/Value/Windows"
      ]
     ]
    },
    "Tags": {
     "awsApplication": {
      "Fn::GetAtt": [
       "MyApplications",
       "ApplicationTagValue"
      ]
     },
     "SolutionId": "SO0282"
    },
    "Type": "String",
    "Value": "Windows"
   }
  },
  "LeostreamConsoleAdminEmailParameter": {
   "Type": "AWS::SSM::Parameter",
   "Properties": {
    "Description": "The admin email address to use for authorization",
    "Name": {
     "Fn::Join": [
      "",
      [
       "/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/Core/AdminEmail"
      ]
     ]
    },
    "Tags": {
     "awsApplication": {
      "Fn::GetAtt": [
       "MyApplications",
       "ApplicationTagValue"
      ]
     },
     "SolutionId": "SO0282"
    },
    "Type": "String",
    "Value": {
     "Ref": "AdminEmail"
    }
   }
  },
  "McsModulesServiceCatalogPortfolioCB9CECD1": {
   "Type": "AWS::ServiceCatalog::Portfolio",
   "Properties": {
    "Description": "List of registered modules for Modular Cloud Studio on AWS",
    "DisplayName": "Modular Cloud Studio on AWS Modules",
    "ProviderName": "Modular Cloud Studio",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   }
  },
  "McsModulesServiceCatalogPortfolioPortolioPrincipalAssociationda7e039fd3287BA94054": {
   "Type": "AWS::ServiceCatalog::PortfolioPrincipalAssociation",
   "Properties": {
    "PortfolioId": {
     "Ref": "McsModulesServiceCatalogPortfolioCB9CECD1"
    },
    "PrincipalARN": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunctionServiceRole2C4FFC9A",
      "Arn"
     ]
    },
    "PrincipalType": "IAM"
   }
  },
  "McsModulesServiceCatalogPortfolioPortolioPrincipalAssociation1a098ef6004cB5B52DBE": {
   "Type": "AWS::ServiceCatalog::PortfolioPrincipalAssociation",
   "Properties": {
    "PortfolioId": {
     "Ref": "McsModulesServiceCatalogPortfolioCB9CECD1"
    },
    "PrincipalARN": {
     "Fn::GetAtt": [
      "DeploymentConstructDeploymentEventLambdaRole46C7CFFE",
      "Arn"
     ]
    },
    "PrincipalType": "IAM"
   }
  },
  "McsModulesServiceCatalogPortfolioPortolioPrincipalAssociation4de1cd939a2466C2C47B": {
   "Type": "AWS::ServiceCatalog::PortfolioPrincipalAssociation",
   "Properties": {
    "PortfolioId": {
     "Ref": "McsModulesServiceCatalogPortfolioCB9CECD1"
    },
    "PrincipalARN": {
     "Fn::GetAtt": [
      "StackDeletionProtectionConstructCustomResourceLambdaRole3CD9C40B",
      "Arn"
     ]
    },
    "PrincipalType": "IAM"
   }
  },
  "MCSPythonLayerPythonLambdaLayerC6475430": {
   "Type": "AWS::Lambda::LayerVersion",
   "Properties": {
    "CompatibleRuntimes": [
     "python3.12"
    ],
    "Content": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/48679c6e271d4a752830831d3d0839714fa445ad268018770a034d5c03120654.zip"
    },
    "Description": "Shared Python Layer for Python Functions"
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete"
  },
  "MCSPythonLayerRoleF056307F": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "lambda.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Policies": [
     {
      "PolicyDocument": {
       "Statement": [
        {
         "Action": [
          "logs:CreateLogGroup",
          "logs:CreateLogStream",
          "logs:PutLogEvents"
         ],
         "Effect": "Allow",
         "Resource": {
          "Fn::Join": [
           "",
           [
            "arn:",
            {
             "Ref": "AWS::Partition"
            },
            ":logs:",
            {
             "Ref": "AWS::Region"
            },
            ":",
            {
             "Ref": "AWS::AccountId"
            },
            ":log-group:/aws/lambda/*"
           ]
          ]
         }
        }
       ],
       "Version": "2012-10-17"
      },
      "PolicyName": "StubCustomResourcePolicy"
     }
    ],
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "IAM_NO_INLINE_POLICY_CHECK"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "This is only used for logging",
       "id": "AwsSolutions-IAM5"
      }
     ]
    }
   }
  },
  "PythonLambdaLayerArnParameter": {
   "Type": "AWS::SSM::Parameter",
   "Properties": {
    "Description": "(Internal property. DO NOT USE): Shared Python Layer for Python Functions ARN",
    "Name": {
     "Fn::Join": [
      "",
      [
       "/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/Internal/LambdaLayer/PythonLambdaLayerArn"
      ]
     ]
    },
    "Tags": {
     "awsApplication": {
      "Fn::GetAtt": [
       "MyApplications",
       "ApplicationTagValue"
      ]
     },
     "SolutionId": "SO0282"
    },
    "Type": "String",
    "Value": {
     "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
    }
   }
  },
  "MyApplications": {
   "Type": "AWS::ServiceCatalogAppRegistry::Application",
   "Properties": {
    "Description": {
     "Fn::Join": [
      "",
      [
       "AWS myApplications dashboard for ",
       {
        "Fn::FindInMap": [
         "SolutionMappings",
         "MyApplication",
         "SolutionName"
        ]
       },
       " in ",
       {
        "Ref": "AWS::Region"
       },
       ". This application provides centralized cost monitoring of AWS resources. Note: Some Third-Party module resources may not be automatically tracked in this dashboard."
      ]
     ]
    },
    "Name": {
     "Fn::Join": [
      "-",
      [
       {
        "Fn::FindInMap": [
         "SolutionMappings",
         "MyApplication",
         "ApplicationName"
        ]
       },
       "Hub",
       {
        "Fn::Join": [
         "",
         [
          "mcs-",
          {
           "Fn::Select": [
            2,
            {
             "Fn::Split": [
              "/",
              {
               "Ref": "AWS::StackId"
              }
             ]
            }
           ]
          }
         ]
        ]
       }
      ]
     ]
    },
    "Tags": {
     "SolutionId": "SO0282",
     "Solutions:ApplicationType": {
      "Fn::FindInMap": [
       "SolutionMappings",
       "MyApplication",
       "ApplicationType"
      ]
     },
     "Solutions:SolutionID": "SO0282",
     "Solutions:SolutionName": {
      "Fn::FindInMap": [
       "SolutionMappings",
       "MyApplication",
       "SolutionName"
      ]
     },
     "Solutions:SolutionVersion": "v1.1.0"
    }
   }
  },
  "MyApplicationTagParameter": {
   "Type": "AWS::SSM::Parameter",
   "Properties": {
    "Description": "The tag value of the My Application app from MCS, each spoke region has its own application so this value varies among spoke regions",
    "Name": {
     "Fn::Join": [
      "",
      [
       "/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/Core/MyApplication/Tag"
      ]
     ]
    },
    "Tags": {
     "awsApplication": {
      "Fn::GetAtt": [
       "MyApplications",
       "ApplicationTagValue"
      ]
     },
     "SolutionId": "SO0282"
    },
    "Type": "String",
    "Value": {
     "Fn::GetAtt": [
      "MyApplications",
      "ApplicationTagValue"
     ]
    }
   }
  },
  "StorageConstructRegionsTableC985427B": {
   "Type": "AWS::DynamoDB::Table",
   "Properties": {
    "AttributeDefinitions": [
     {
      "AttributeName": "name",
      "AttributeType": "S"
     },
     {
      "AttributeName": "provisioned_product_id",
      "AttributeType": "S"
     }
    ],
    "GlobalSecondaryIndexes": [
     {
      "IndexName": "ProvisionedProductIdIndex",
      "KeySchema": [
       {
        "AttributeName": "provisioned_product_id",
        "KeyType": "HASH"
       }
      ],
      "Projection": {
       "ProjectionType": "ALL"
      },
      "ProvisionedThroughput": {
       "ReadCapacityUnits": 5,
       "WriteCapacityUnits": 5
      }
     }
    ],
    "KeySchema": [
     {
      "AttributeName": "name",
      "KeyType": "HASH"
     }
    ],
    "ProvisionedThroughput": {
     "ReadCapacityUnits": 5,
     "WriteCapacityUnits": 5
    },
    "SSESpecification": {
     "SSEEnabled": true
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "DYNAMODB_PITR_ENABLED",
      "DYNAMODB_TABLE_ENCRYPTED_KMS",
      "DYNAMODB_BILLING_MODE_RULE"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "System tables should not have PITR enabled since it will impact the enablement and disablement of modules and regions.",
       "id": "AwsSolutions-DDB3"
      }
     ]
    }
   }
  },
  "StorageConstructExternalModulesTable7BD8EF6F": {
   "Type": "AWS::DynamoDB::Table",
   "Properties": {
    "AttributeDefinitions": [
     {
      "AttributeName": "module_name",
      "AttributeType": "S"
     },
     {
      "AttributeName": "status",
      "AttributeType": "S"
     }
    ],
    "GlobalSecondaryIndexes": [
     {
      "IndexName": "StatusIndex",
      "KeySchema": [
       {
        "AttributeName": "status",
        "KeyType": "HASH"
       }
      ],
      "Projection": {
       "ProjectionType": "ALL"
      },
      "ProvisionedThroughput": {
       "ReadCapacityUnits": 5,
       "WriteCapacityUnits": 5
      }
     }
    ],
    "KeySchema": [
     {
      "AttributeName": "module_name",
      "KeyType": "HASH"
     }
    ],
    "ProvisionedThroughput": {
     "ReadCapacityUnits": 5,
     "WriteCapacityUnits": 5
    },
    "SSESpecification": {
     "SSEEnabled": true
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "DYNAMODB_PITR_ENABLED",
      "DYNAMODB_TABLE_ENCRYPTED_KMS",
      "DYNAMODB_BILLING_MODE_RULE"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "System tables should not have PITR enabled since it will impact the enablement and disablement of modules and regions.",
       "id": "AwsSolutions-DDB3"
      }
     ]
    }
   }
  },
  "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7": {
   "Type": "AWS::DynamoDB::Table",
   "Properties": {
    "AttributeDefinitions": [
     {
      "AttributeName": "registered_module_pk",
      "AttributeType": "S"
     },
     {
      "AttributeName": "module_version",
      "AttributeType": "S"
     },
     {
      "AttributeName": "module_name",
      "AttributeType": "S"
     }
    ],
    "GlobalSecondaryIndexes": [
     {
      "IndexName": "ModuleNameIndex",
      "KeySchema": [
       {
        "AttributeName": "module_name",
        "KeyType": "HASH"
       }
      ],
      "Projection": {
       "ProjectionType": "ALL"
      },
      "ProvisionedThroughput": {
       "ReadCapacityUnits": 5,
       "WriteCapacityUnits": 5
      }
     }
    ],
    "KeySchema": [
     {
      "AttributeName": "registered_module_pk",
      "KeyType": "HASH"
     },
     {
      "AttributeName": "module_version",
      "KeyType": "RANGE"
     }
    ],
    "ProvisionedThroughput": {
     "ReadCapacityUnits": 5,
     "WriteCapacityUnits": 5
    },
    "SSESpecification": {
     "SSEEnabled": true
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "DYNAMODB_PITR_ENABLED",
      "DYNAMODB_TABLE_ENCRYPTED_KMS",
      "DYNAMODB_BILLING_MODE_RULE"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "System tables should not have PITR enabled since it will impact the enablement and disablement of modules and regions.",
       "id": "AwsSolutions-DDB3"
      }
     ]
    }
   }
  },
  "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94": {
   "Type": "AWS::DynamoDB::Table",
   "Properties": {
    "AttributeDefinitions": [
     {
      "AttributeName": "enabled_module_pk",
      "AttributeType": "S"
     },
     {
      "AttributeName": "module_name",
      "AttributeType": "S"
     },
     {
      "AttributeName": "module_region",
      "AttributeType": "S"
     },
     {
      "AttributeName": "status",
      "AttributeType": "S"
     },
     {
      "AttributeName": "servicecatalog_provisioned_product_id",
      "AttributeType": "S"
     }
    ],
    "GlobalSecondaryIndexes": [
     {
      "IndexName": "region",
      "KeySchema": [
       {
        "AttributeName": "module_name",
        "KeyType": "HASH"
       },
       {
        "AttributeName": "module_region",
        "KeyType": "RANGE"
       }
      ],
      "Projection": {
       "ProjectionType": "ALL"
      },
      "ProvisionedThroughput": {
       "ReadCapacityUnits": 5,
       "WriteCapacityUnits": 5
      }
     },
     {
      "IndexName": "StatusIndex",
      "KeySchema": [
       {
        "AttributeName": "status",
        "KeyType": "HASH"
       }
      ],
      "Projection": {
       "ProjectionType": "ALL"
      },
      "ProvisionedThroughput": {
       "ReadCapacityUnits": 5,
       "WriteCapacityUnits": 5
      }
     },
     {
      "IndexName": "ModuleRegionIndex",
      "KeySchema": [
       {
        "AttributeName": "module_region",
        "KeyType": "HASH"
       }
      ],
      "Projection": {
       "ProjectionType": "ALL"
      },
      "ProvisionedThroughput": {
       "ReadCapacityUnits": 5,
       "WriteCapacityUnits": 5
      }
     },
     {
      "IndexName": "ProvisionedProductIdIndex",
      "KeySchema": [
       {
        "AttributeName": "servicecatalog_provisioned_product_id",
        "KeyType": "HASH"
       }
      ],
      "Projection": {
       "ProjectionType": "ALL"
      },
      "ProvisionedThroughput": {
       "ReadCapacityUnits": 5,
       "WriteCapacityUnits": 5
      }
     }
    ],
    "KeySchema": [
     {
      "AttributeName": "enabled_module_pk",
      "KeyType": "HASH"
     }
    ],
    "ProvisionedThroughput": {
     "ReadCapacityUnits": 5,
     "WriteCapacityUnits": 5
    },
    "SSESpecification": {
     "SSEEnabled": true
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "DYNAMODB_PITR_ENABLED",
      "DYNAMODB_TABLE_ENCRYPTED_KMS",
      "DYNAMODB_BILLING_MODE_RULE"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "System tables should not have PITR enabled since it will impact the enablement and disablement of modules and regions.",
       "id": "AwsSolutions-DDB3"
      }
     ]
    }
   }
  },
  "StorageConstructMcsDynamoDbTableModulesMapping4D272082": {
   "Type": "AWS::DynamoDB::Table",
   "Properties": {
    "AttributeDefinitions": [
     {
      "AttributeName": "param_name",
      "AttributeType": "S"
     }
    ],
    "KeySchema": [
     {
      "AttributeName": "param_name",
      "KeyType": "HASH"
     }
    ],
    "ProvisionedThroughput": {
     "ReadCapacityUnits": 5,
     "WriteCapacityUnits": 5
    },
    "SSESpecification": {
     "SSEEnabled": true
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "DYNAMODB_PITR_ENABLED",
      "DYNAMODB_TABLE_ENCRYPTED_KMS",
      "DYNAMODB_BILLING_MODE_RULE"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "System tables should not have PITR enabled since it will impact the enablement and disablement of modules and regions.",
       "id": "AwsSolutions-DDB3"
      }
     ]
    }
   }
  },
  "StorageConstructMcsDynamoDbTableLock85A89D6F": {
   "Type": "AWS::DynamoDB::Table",
   "Properties": {
    "AttributeDefinitions": [
     {
      "AttributeName": "lock_name",
      "AttributeType": "S"
     }
    ],
    "KeySchema": [
     {
      "AttributeName": "lock_name",
      "KeyType": "HASH"
     }
    ],
    "ProvisionedThroughput": {
     "ReadCapacityUnits": 5,
     "WriteCapacityUnits": 5
    },
    "SSESpecification": {
     "SSEEnabled": true
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "TimeToLiveSpecification": {
     "AttributeName": "time_to_live",
     "Enabled": true
    }
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "DYNAMODB_PITR_ENABLED",
      "DYNAMODB_TABLE_ENCRYPTED_KMS",
      "DYNAMODB_BILLING_MODE_RULE"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "System tables should not have PITR enabled since it will impact the enablement and disablement of modules and regions.",
       "id": "AwsSolutions-DDB3"
      }
     ]
    }
   }
  },
  "OperationalMetricsConstructModuleStatusMetricRole8DD1552D": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "pipes.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   }
  },
  "OperationalMetricsConstructModuleStatusMetricRoleDefaultPolicy709F0078": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "sqs:ChangeMessageVisibility",
        "sqs:DeleteMessage",
        "sqs:GetQueueAttributes",
        "sqs:GetQueueUrl",
        "sqs:ReceiveMessage"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "OperationalMetricsConstructModuleStatusMetricQueue8FB49372",
         "Arn"
        ]
       }
      },
      {
       "Action": "events:InvokeApiDestination",
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "OperationalMetricsConstructModuleStatusMetricEventBridgeDestinationDECE9AD4",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "OperationalMetricsConstructModuleStatusMetricRoleDefaultPolicy709F0078",
    "Roles": [
     {
      "Ref": "OperationalMetricsConstructModuleStatusMetricRole8DD1552D"
     }
    ]
   }
  },
  "OperationalMetricsConstructModuleStatusMetricDLQF37B4C36": {
   "Type": "AWS::SQS::Queue",
   "Properties": {
    "KmsMasterKeyId": "alias/aws/sqs",
    "QueueName": {
     "Fn::Join": [
      "",
      [
       "ModuleStatusMetric-DLQ-mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       }
      ]
     ]
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete"
  },
  "OperationalMetricsConstructModuleStatusMetricDLQPolicy7016F22C": {
   "Type": "AWS::SQS::QueuePolicy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": "sqs:*",
       "Condition": {
        "Bool": {
         "aws:SecureTransport": "false"
        }
       },
       "Effect": "Deny",
       "Principal": {
        "AWS": "*"
       },
       "Resource": {
        "Fn::GetAtt": [
         "OperationalMetricsConstructModuleStatusMetricDLQF37B4C36",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Queues": [
     {
      "Ref": "OperationalMetricsConstructModuleStatusMetricDLQF37B4C36"
     }
    ]
   }
  },
  "OperationalMetricsConstructModuleStatusMetricQueue8FB49372": {
   "Type": "AWS::SQS::Queue",
   "Properties": {
    "KmsMasterKeyId": "alias/aws/sqs",
    "QueueName": {
     "Fn::Join": [
      "",
      [
       "ModuleStatusMetric-Queue-mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       }
      ]
     ]
    },
    "RedrivePolicy": {
     "deadLetterTargetArn": {
      "Fn::GetAtt": [
       "OperationalMetricsConstructModuleStatusMetricDLQF37B4C36",
       "Arn"
      ]
     },
     "maxReceiveCount": 3
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete"
  },
  "OperationalMetricsConstructModuleStatusMetricQueuePolicy261CC666": {
   "Type": "AWS::SQS::QueuePolicy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": "sqs:*",
       "Condition": {
        "Bool": {
         "aws:SecureTransport": "false"
        }
       },
       "Effect": "Deny",
       "Principal": {
        "AWS": "*"
       },
       "Resource": {
        "Fn::GetAtt": [
         "OperationalMetricsConstructModuleStatusMetricQueue8FB49372",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Queues": [
     {
      "Ref": "OperationalMetricsConstructModuleStatusMetricQueue8FB49372"
     }
    ]
   }
  },
  "OperationalMetricsConstructModuleStatusMetricEventBridgeConnectionB95938A5": {
   "Type": "AWS::Events::Connection",
   "Properties": {
    "AuthParameters": {
     "ApiKeyAuthParameters": {
      "ApiKeyName": "no-auth-needed",
      "ApiKeyValue": "none"
     },
     "InvocationHttpParameters": {
      "HeaderParameters": [
       {
        "Key": "Content-Type",
        "Value": "application/json"
       }
      ]
     }
    },
    "AuthorizationType": "API_KEY"
   }
  },
  "OperationalMetricsConstructModuleStatusMetricEventBridgeDestinationDECE9AD4": {
   "Type": "AWS::Events::ApiDestination",
   "Properties": {
    "ConnectionArn": {
     "Fn::GetAtt": [
      "OperationalMetricsConstructModuleStatusMetricEventBridgeConnectionB95938A5",
      "Arn"
     ]
    },
    "HttpMethod": "POST",
    "InvocationEndpoint": "https://metrics.awssolutionsbuilder.com/generic"
   }
  },
  "OperationalMetricsConstructModuleStatusMetricPipe8F944269": {
   "Type": "AWS::Pipes::Pipe",
   "Properties": {
    "Name": {
     "Fn::Join": [
      "",
      [
       "ModuleStatusMetric-Pipe-mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       }
      ]
     ]
    },
    "RoleArn": {
     "Fn::GetAtt": [
      "OperationalMetricsConstructModuleStatusMetricRole8DD1552D",
      "Arn"
     ]
    },
    "Source": {
     "Fn::GetAtt": [
      "OperationalMetricsConstructModuleStatusMetricQueue8FB49372",
      "Arn"
     ]
    },
    "SourceParameters": {
     "SqsQueueParameters": {
      "BatchSize": 1,
      "MaximumBatchingWindowInSeconds": 30
     }
    },
    "Tags": {
     "awsApplication": {
      "Fn::GetAtt": [
       "MyApplications",
       "ApplicationTagValue"
      ]
     },
     "SolutionId": "SO0282"
    },
    "Target": {
     "Fn::GetAtt": [
      "OperationalMetricsConstructModuleStatusMetricEventBridgeDestinationDECE9AD4",
      "Arn"
     ]
    },
    "TargetParameters": {
     "InputTemplate": "{\n                    \"Solution\": <$.body.solution>,\n                    \"Version\": <$.body.version>,\n                    \"UUID\": <$.body.uuid>,\n                    \"TimeStamp\": <$.body.timestamp>,\n                    \"Data\": {\n                        \"metricName\": <$.body.metricName>,\n                        \"moduleName\": <$.body.moduleName>,\n                        \"moduleId\": <$.body.moduleId>,\n                        \"moduleVersion\": <$.body.moduleVersion>,\n                        \"moduleRegion\": <$.body.moduleRegion>,\n                        \"moduleRegionType\": <$.body.moduleRegionType>,\n                        \"moduleType\": <$.body.moduleType>,\n                        \"moduleStatus\": <$.body.moduleStatus>,\n                        \"moduleInputParameters\": <$.body.moduleInputParameters>\n                    }\n                }"
    }
   }
  },
  "StackDeletionProtectionConstructCustomResourceLambdaRole3CD9C40B": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "lambda.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Policies": [
     {
      "PolicyDocument": {
       "Statement": [
        {
         "Action": [
          "logs:CreateLogGroup",
          "logs:CreateLogStream",
          "logs:PutLogEvents"
         ],
         "Effect": "Allow",
         "Resource": {
          "Fn::Join": [
           "",
           [
            "arn:",
            {
             "Ref": "AWS::Partition"
            },
            ":logs:",
            {
             "Ref": "AWS::Region"
            },
            ":",
            {
             "Ref": "AWS::AccountId"
            },
            ":log-group:/aws/lambda/*"
           ]
          ]
         },
         "Sid": "CloudWatchLoggingPolicy"
        },
        {
         "Action": [
          "servicecatalog:SearchProducts",
          "servicecatalog:SearchProvisionedProducts"
         ],
         "Effect": "Allow",
         "Resource": "*",
         "Sid": "ServiceCatalogPolicy"
        },
        {
         "Action": [
          "dynamodb:DescribeTable",
          "dynamodb:GetItem",
          "dynamodb:Query",
          "dynamodb:Scan"
         ],
         "Effect": "Allow",
         "Resource": [
          {
           "Fn::GetAtt": [
            "StorageConstructExternalModulesTable7BD8EF6F",
            "Arn"
           ]
          },
          {
           "Fn::GetAtt": [
            "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7",
            "Arn"
           ]
          },
          {
           "Fn::Join": [
            "",
            [
             {
              "Fn::GetAtt": [
               "StorageConstructExternalModulesTable7BD8EF6F",
               "Arn"
              ]
             },
             "/*"
            ]
           ]
          },
          {
           "Fn::Join": [
            "",
            [
             {
              "Fn::GetAtt": [
               "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7",
               "Arn"
              ]
             },
             "/*"
            ]
           ]
          }
         ]
        }
       ],
       "Version": "2012-10-17"
      },
      "PolicyName": "CustomResourceLambdaPolicy"
     }
    ],
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "IAM_NO_INLINE_POLICY_CHECK",
      "IAM_POLICYDOCUMENT_NO_WILDCARD_RESOURCE"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The IAM entity requires wildcard permissions for logging, X-ray tracing and searching products",
       "id": "AwsSolutions-IAM5"
      }
     ]
    }
   }
  },
  "StackDeletionProtectionConstructCustomResourceDeletionProtection6C503E33": {
   "Type": "AWS::CloudFormation::CustomResource",
   "Properties": {
    "ServiceToken": {
     "Fn::GetAtt": [
      "StackDeletionProtectorProviderframeworkonEventCBCE8FBA",
      "Arn"
     ]
    }
   },
   "DependsOn": [
    "ApiConstructAdminUser7FF34F11",
    "ApiConstructApiLambdaPolicy6F9B66E9",
    "ApiConstructCognitoApiGatewayApiAccessLogGroup7B614D91",
    "ApiConstructCognitoApiGatewayCognitoAuthorizer2B1FACFC",
    "ApiConstructCognitoApiGatewayCognitoUserPool4127C806",
    "ApiConstructCognitoApiGatewayCognitoUserPoolClient84249B30",
    "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
    "ApiConstructCognitoApiGatewayLambdaFunctionServiceRoleDefaultPolicy7806739F",
    "ApiConstructCognitoApiGatewayLambdaFunctionServiceRole2C4FFC9A",
    "ApiConstructCognitoApiGatewayLambdaRestApiproxyANYApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DANYproxy10836500",
    "ApiConstructCognitoApiGatewayLambdaRestApiproxyANYApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DANYproxy30BBE0FF",
    "ApiConstructCognitoApiGatewayLambdaRestApiproxyANY98578703",
    "ApiConstructCognitoApiGatewayLambdaRestApiproxyOPTIONS7C5F061D",
    "ApiConstructCognitoApiGatewayLambdaRestApiproxy8293BAFA",
    "ApiConstructCognitoApiGatewayLambdaRestApiANYApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DANY504D1AFD",
    "ApiConstructCognitoApiGatewayLambdaRestApiANYApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DANY8CD86CC2",
    "ApiConstructCognitoApiGatewayLambdaRestApiANY7C20EE1E",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesderegisteredOPTIONS99954752",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesderegisteredPOSTApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPOSTmodulesderegistered38E64E79",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesderegisteredPOSTApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPOSTmodulesderegistered1D91285C",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesderegisteredPOST70489E0A",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesderegistered644C0E2B",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesdisabledOPTIONSAB7280A7",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesdisabledPOSTApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPOSTmodulesdisabled1FBBFD26",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesdisabledPOSTApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPOSTmodulesdisabled001DDECE",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesdisabledPOST0C9FD03A",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesdisabledD8057B54",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledGETApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodulesenabled854F1F18",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledGETApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodulesenabledCE2E4FDD",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledGET33345FA0",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledOPTIONS788ADF09",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledPOSTApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPOSTmodulesenabled48504578",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledPOSTApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPOSTmodulesenabled0E2BD1AE",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledPOST853CED6B",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledB8DF564A",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesGETApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodules41F2C547",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesGETApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodules8FA4FB5E",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesGET5F52773F",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesOPTIONSDCDDCDF6",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnerGETApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodulespartnerFA710ADA",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnerGETApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodulespartner1F42E38F",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnerGETD30F6F1F",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnerOPTIONSFFDAF510",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulespartner24DB1750",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnersyncOPTIONS4AE53C7A",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnersyncPUTApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPUTmodulespartnersync207F281A",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnersyncPUTApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPUTmodulespartnersync0E2703DF",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnersyncPUT819245A9",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnersync10C1EAC0",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesPOSTApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPOSTmodules4560EC3A",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesPOSTApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPOSTmodules5A12F5DC",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesPOST7E59C7E7",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredGETApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodulesregisteredB28AF845",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredGETApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodulesregistered6B36036F",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredGET84C02F36",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredinputsGETApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodulesregisteredinputsEBB66351",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredinputsGETApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodulesregisteredinputs573C9FDC",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredinputsGET83C089DF",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredinputsOPTIONS41D4F865",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredinputsC8F11BB2",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredOPTIONS3CC543E3",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredPOSTApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPOSTmodulesregistered56F14E45",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredPOSTApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPOSTmodulesregisteredE267C772",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredPOST5DE7871A",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesregistered87735B2F",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesF3CCE545",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesvalidateGETApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodulesvalidate2F2B13B7",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesvalidateGETApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodulesvalidateAAF9CB8D",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesvalidateGETF91B337C",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesvalidateOPTIONS62EF3231",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesvalidate520231BA",
    "ApiConstructCognitoApiGatewayLambdaRestApiOPTIONSCAA3922F",
    "ApiConstructCognitoApiGatewayLambdaRestApiregionsGETApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETregions970E88DF",
    "ApiConstructCognitoApiGatewayLambdaRestApiregionsGETApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETregionsE3B1BF3A",
    "ApiConstructCognitoApiGatewayLambdaRestApiregionsGET9C3A43A6",
    "ApiConstructCognitoApiGatewayLambdaRestApiregionsOPTIONS1FD7CD5B",
    "ApiConstructCognitoApiGatewayLambdaRestApiregionsPUTApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPUTregions540896AE",
    "ApiConstructCognitoApiGatewayLambdaRestApiregionsPUTApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPUTregionsBE60F794",
    "ApiConstructCognitoApiGatewayLambdaRestApiregionsPUT006033B3",
    "ApiConstructCognitoApiGatewayLambdaRestApiregionsD8F039EF",
    "ApiConstructCognitoApiGatewayLambdaRestApiDeployment6A7DA6A5d31b78e0c09f88cea108d31eb300689d",
    "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A",
    "ApiConstructCognitoApiGatewayLambdaRestApiDeregisteredModuleRequestBodyModel7E02A8AD",
    "ApiConstructCognitoApiGatewayLambdaRestApiDisabledModuleRequestBodyModel89DD9638",
    "ApiConstructCognitoApiGatewayLambdaRestApiEnabledModuleRequestBodyModelC9F3F90A",
    "ApiConstructCognitoApiGatewayLambdaRestApiExternalModuleRegisterRequestBodyModelE9E7FA7D",
    "ApiConstructCognitoApiGatewayLambdaRestApiRegionRequestBodyModel7B23A7BD",
    "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B",
    "ApiConstructCognitoApiGatewayLambdaRestApiUsagePlan39BAEB2B",
    "ApiConstructCognitoApiGatewayLambdaRestApiAccount65F2A074",
    "ApiConstructCognitoApiGatewayLambdaRestApiCloudWatchRoleA0B4C1C0",
    "ApiConstructValidateRequestBodyRequestValidator2D2F5346",
    "ApiConstructValidateRequestParametersRequestValidator8597A856",
    "ApiUrlParameter",
    "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536",
    "DeploymentConstructDeploymentDisableFailedRuleAllowEventRuleModularCloudStudioOnAwsStackDeploymentConstructDeploymentEventDisableFailedEBD04BAA70CE30D7",
    "DeploymentConstructDeploymentDisableFailedRuleC687D747",
    "DeploymentConstructDeploymentDisableInProgressRuleAllowEventRuleModularCloudStudioOnAwsStackDeploymentConstructDeploymentEventDisableInProgressCE36EF538FAC6CEB",
    "DeploymentConstructDeploymentDisableInProgressRule97030268",
    "DeploymentConstructDeploymentDisableSucceededRuleAllowEventRuleModularCloudStudioOnAwsStackDeploymentConstructDeploymentEventDisableSucceededCAEFA3E04CFF8D6E",
    "DeploymentConstructDeploymentDisableSucceededRule7E3CCF8B",
    "DeploymentConstructDeploymentEnableFailedRuleAllowEventRuleModularCloudStudioOnAwsStackDeploymentConstructDeploymentEventEnableFailed9282B4C6CE401C92",
    "DeploymentConstructDeploymentEnableFailedRuleE906F8BD",
    "DeploymentConstructDeploymentEnableSucceededRuleAllowEventRuleModularCloudStudioOnAwsStackDeploymentConstructDeploymentEventEnableSucceeded39C73438F209132A",
    "DeploymentConstructDeploymentEnableSucceededRule0CA0BD81",
    "DeploymentConstructDeploymentEventDisableFailedBD097A2D",
    "DeploymentConstructDeploymentEventDisableFailedLogs3663AE2E",
    "DeploymentConstructDeploymentEventDisableFailedLogsPolicyF1F5BECD",
    "DeploymentConstructDeploymentEventDisableInProgressF86F99D9",
    "DeploymentConstructDeploymentEventDisableInProgressLogsCA872311",
    "DeploymentConstructDeploymentEventDisableInProgressLogsPolicy768A42FE",
    "DeploymentConstructDeploymentEventDisableSucceededEE8DCBE8",
    "DeploymentConstructDeploymentEventDisableSucceededLogs537BFFF8",
    "DeploymentConstructDeploymentEventDisableSucceededLogsPolicy82DE044C",
    "DeploymentConstructDeploymentEventEnableFailed166F5DC9",
    "DeploymentConstructDeploymentEventEnableFailedLogs5863FE49",
    "DeploymentConstructDeploymentEventEnableFailedLogsPolicy3AB0A695",
    "DeploymentConstructDeploymentEventEnableSucceededCC7D111D",
    "DeploymentConstructDeploymentEventEnableSucceededLogs3501BCAA",
    "DeploymentConstructDeploymentEventEnableSucceededLogsPolicy024139C6",
    "DeploymentConstructDeploymentEventLambdaRole46C7CFFE",
    "DeRegisterConstructLambdaDeregisterLambdaRoleCC1AABAA",
    "DeregisterOnFailureEF37F166",
    "DeregisterOnFailureLogs0946D05B",
    "DeregisterOnFailureLogsPolicyAAACDAAC",
    "DeregisterRemoveSCLambda0EBFB995",
    "DeregisterRemoveSCLambdaLogsB8812842",
    "DeregisterRemoveSCLambdaLogsPolicy55615B25",
    "DeregisterStateMachineC2A35F3D",
    "DeregisterStateMachineRoleDefaultPolicy3FD79DAB",
    "DeregisterStateMachineRoleD5994EE7",
    "DeregisterStateMachineLogs82298893",
    "DeregisterUpdateExternalTableF921E5A8",
    "DeregisterUpdateExternalTableLogsC2934BF0",
    "DeregisterUpdateExternalTableLogsPolicy26703094",
    "DeregisterUpdateMappingLambdaAA21049F",
    "DeregisterUpdateMappingLambdaLogs2F673A56",
    "DeregisterUpdateMappingLambdaLogsPolicy80BCD9E8",
    "DeregisterUpdateRegisterTableC1AD4598",
    "DeregisterUpdateRegisterTableLogsB717EB38",
    "DeregisterUpdateRegisterTableLogsPolicy9BD85B44",
    "HubOrSpokeParameter",
    "HubRegionParameter",
    "InstanceTagKeyParameter",
    "InstanceTagValueLinuxParameter",
    "InstanceTagValueWindowsParameter",
    "InternalModuleRegistrationInternalModuleRegistrationLambdaRole8E5A8AC8",
    "InternalModuleRegistrationModuleRegistrationleostreambroker1F5BA9C5",
    "InternalModuleRegistrationModuleRegistrationmanagedidentity311A47E2",
    "InternalModuleRegistrationModuleRegistrationManagedVPC65B24730",
    "InternalModuleRegistrationModuleRegistrationpixelstreaming2F2F7979",
    "InternalModuleRegistrationModuleRegistrationspokeregion47BB083C",
    "InternalModuleRegistrationModuleRegistrationstoragelusture1440B20D",
    "InternalModuleRegistrationModuleRegistrationstoragewindows6A537EBD",
    "InternalModuleRegistrationModuleRegistrationunmanagedidentity5954B96C",
    "InternalModuleRegistrationModuleRegistrationUnmanagedVPC9FB50AF2",
    "InternalModuleRegistrationIsCompleteLambda2DDD31A8",
    "InternalModuleRegistrationIsCompleteLambdaLogsBE1312CE",
    "InternalModuleRegistrationIsCompleteLambdaLogsPolicy2A8894E2",
    "InternalModuleRegistrationOnEventLambda2706D47D",
    "InternalModuleRegistrationOnEventLambdaLogsD1849893",
    "InternalModuleRegistrationOnEventLambdaLogsPolicy2E98C260",
    "InternalModuleRegistrationProviderframeworkisComplete927D6186",
    "InternalModuleRegistrationProviderframeworkisCompleteServiceRoleDefaultPolicy126D96B9",
    "InternalModuleRegistrationProviderframeworkisCompleteServiceRole9BA03842",
    "InternalModuleRegistrationProviderframeworkonEvent786003AB",
    "InternalModuleRegistrationProviderframeworkonEventServiceRoleDefaultPolicy0AFFA39C",
    "InternalModuleRegistrationProviderframeworkonEventServiceRoleC4DF77D0",
    "InternalModuleRegistrationProviderframeworkonTimeoutEF0F01E9",
    "InternalModuleRegistrationProviderframeworkonTimeoutServiceRoleDefaultPolicyBFE43EBD",
    "InternalModuleRegistrationProviderframeworkonTimeoutServiceRole1DC28D13",
    "InternalModuleRegistrationProviderwaiterstatemachine2B1000CD",
    "InternalModuleRegistrationProviderwaiterstatemachineRoleDefaultPolicy918D7BAB",
    "InternalModuleRegistrationProviderwaiterstatemachineRole87976507",
    "InternalModuleRegistrationProviderLogs89042602",
    "InternalModuleRegistrationProviderWaiterLogsE3CC7099",
    "LeostreamConsoleAdminEmailParameter",
    "MCSApiAccessLogs78256D33",
    "MCSApiLambdaLogs0F8081F9",
    "McsModulesServiceCatalogPortfolioPortolioPrincipalAssociation1a098ef6004cB5B52DBE",
    "McsModulesServiceCatalogPortfolioPortolioPrincipalAssociation4de1cd939a2466C2C47B",
    "McsModulesServiceCatalogPortfolioPortolioPrincipalAssociationda7e039fd3287BA94054",
    "McsModulesServiceCatalogPortfolioCB9CECD1",
    "MCSPythonLayerPythonLambdaLayerC6475430",
    "MCSPythonLayerRoleF056307F",
    "MCSStackNameParameter",
    "MyApplications",
    "MyApplicationTagParameter",
    "OperationalMetricsConstructModuleStatusMetricDLQPolicy7016F22C",
    "OperationalMetricsConstructModuleStatusMetricDLQF37B4C36",
    "OperationalMetricsConstructModuleStatusMetricEventBridgeConnectionB95938A5",
    "OperationalMetricsConstructModuleStatusMetricEventBridgeDestinationDECE9AD4",
    "OperationalMetricsConstructModuleStatusMetricPipe8F944269",
    "OperationalMetricsConstructModuleStatusMetricQueuePolicy261CC666",
    "OperationalMetricsConstructModuleStatusMetricQueue8FB49372",
    "OperationalMetricsConstructModuleStatusMetricRoleDefaultPolicy709F0078",
    "OperationalMetricsConstructModuleStatusMetricRole8DD1552D",
    "PartnerModulesConstructFunction2CD5F79C",
    "PartnerModulesConstructFunctionLogs885D62BE",
    "PartnerModulesConstructFunctionLogsPolicyE932A730",
    "PartnerModulesConstructFunctionServiceRoleDefaultPolicyB043CF85",
    "PartnerModulesConstructFunctionServiceRoleF9E219F8",
    "PartnerModulesConstructLockReleaseLambdaB53023AA",
    "PartnerModulesConstructLockReleaseLambdaLogs9904494D",
    "PartnerModulesConstructLockReleaseLambdaLogsPolicyCCB6105F",
    "PartnerModulesConstructPartnerModuleSyncLambdaDE49194D",
    "PartnerModulesConstructPartnerModuleSyncLambdaLogs7E1A81CC",
    "PartnerModulesConstructPartnerModuleSyncLambdaLogsPolicyECCDF427",
    "PartnerModulesConstructPartnersTableSeedingRole2BBA8AAF",
    "PartnerModulesConstructProviderframeworkonEvent1E708CC8",
    "PartnerModulesConstructProviderframeworkonEventServiceRoleDefaultPolicy02456F7A",
    "PartnerModulesConstructProviderframeworkonEventServiceRoleEE3C91E9",
    "PartnerModulesConstructProviderLogsB898AF37",
    "PartnerModulesConstructStateMachineD146B721",
    "PartnerModulesConstructStateMachineRoleDefaultPolicy31A22A13",
    "PartnerModulesConstructStateMachineRole8B614A75",
    "PartnerModulesConstructStateMachineLogsAD6929AF",
    "PartnerModulesConstructStateMachineTriggerCustomResource5D9BE67F",
    "PythonLambdaLayerArnParameter",
    "RegionsConstructCustomRegionSeedingTable811851F7",
    "RegionsConstructRegionsTableSeedingRole34D70A20",
    "RegionSeedingLambdaCF3022E8",
    "RegionSeedingLambdaLogs5ADAD638",
    "RegionSeedingLambdaLogsPolicyA9181F29",
    "RegionsSeedingTableProviderframeworkonEventB266F449",
    "RegionsSeedingTableProviderframeworkonEventServiceRoleDefaultPolicy9B749F8B",
    "RegionsSeedingTableProviderframeworkonEventServiceRole863CED36",
    "RegionsSeedingTableProviderLogsFA1885AE",
    "RegisterAddSCLambda61D0BCF7",
    "RegisterAddSCLambdaLogs4C0FCD5E",
    "RegisterAddSCLambdaLogsPolicy10C1AD37",
    "RegisterConstructLambdaRegisterLambdaRoleD5B1E852",
    "RegisterOnFailure4FC91C4F",
    "RegisterOnFailureLogs42961D69",
    "RegisterOnFailureLogsPolicy5301CA42",
    "RegisterStateMachineDAC291DA",
    "RegisterStateMachineRoleDefaultPolicy9D7ACEC8",
    "RegisterStateMachineRoleCAD54A24",
    "RegisterStateMachineLogsC77C067E",
    "RegisterUpdateExternalTable24EC5847",
    "RegisterUpdateExternalTableLogs1946959D",
    "RegisterUpdateExternalTableLogsPolicy46EED8D7",
    "RegisterUpdateMappingLambda7180D7AA",
    "RegisterUpdateMappingLambdaLogs46AD55BE",
    "RegisterUpdateMappingLambdaLogsPolicy515D3098",
    "RegisterUpdateRegisterTable46FF335E",
    "RegisterUpdateRegisterTableLogsCA79B202",
    "RegisterUpdateRegisterTableLogsPolicyCB5AEE60",
    "ServiceCatalogExecutionRoleC180B941",
    "ServiceCatalogRegistrationConstructServiceCatalogSetupLambdaRole64D34C5C",
    "StackDeletionProtectionConstructCustomResourceLambdaRole3CD9C40B",
    "StackDeletionProtectorBC796FD4",
    "StackDeletionProtectorLogs7DD07429",
    "StackDeletionProtectorLogsPolicy596E83D6",
    "StackDeletionProtectorProviderframeworkonEventCBCE8FBA",
    "StackDeletionProtectorProviderframeworkonEventServiceRoleDefaultPolicy7BD39DB5",
    "StackDeletionProtectorProviderframeworkonEventServiceRole95405292",
    "StackDeletionProtectorProviderLogs0359B0CA",
    "StorageConstructExternalModulesTable7BD8EF6F",
    "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94",
    "StorageConstructMcsDynamoDbTableLock85A89D6F",
    "StorageConstructMcsDynamoDbTableModulesMapping4D272082",
    "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7",
    "StorageConstructRegionsTableC985427B",
    "UIBucketDeploymentDeployWebsiteAwsCliLayer18657DAE",
    "UIBucketDeploymentDeployWebsiteCustomResource06061288",
    "UIBucketDeploymentuiCopyAssetsToS3FnServiceRoleDefaultPolicy1D3BFA93",
    "UIBucketDeploymentuiCopyAssetsToS3FnServiceRole95E1B3B0",
    "UIConstructWebCloudFrontDistribution517B16CD",
    "UIConstructWebCloudfrontLoggingBucketPolicy78F4AA40",
    "UIConstructWebCloudfrontLoggingBucket9539A40F",
    "UIConstructWebCloudfrontLoggingBucketAccessLogPolicy8CE0AE20",
    "UIConstructWebCloudfrontLoggingBucketAccessLogD0677398",
    "UIConstructWebCloudFrontOacB3D0A20B",
    "UIConstructWebResponseHeadersPolicyF2BAF82D",
    "UIConstructWebS3BucketPolicy7C259B2E",
    "UIConstructWebS3Bucket53F62957",
    "UIConstructWebS3LoggingBucketPolicyD610E3F2",
    "UIConstructWebS3LoggingBucketF47C78B9",
    "ValidateModuleLambdaF5A5C23A",
    "ValidateModuleLambdaLogs1A57EBE1",
    "ValidateModuleLambdaLogsPolicyC763FE82"
   ],
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete"
  },
  "StackDeletionProtectorLogs7DD07429": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/StackDeletionProtector"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "StackDeletionProtectorBC796FD4": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/8fec18233be69595a390d1da97e1b9a0691f11e6c091c19c0c5025a003a82d19.zip"
    },
    "Description": "Prevent stack deletion before SC product cleanup",
    "Environment": {
     "Variables": {
      "PORTFOLIO_ID": {
       "Ref": "McsModulesServiceCatalogPortfolioCB9CECD1"
      },
      "EXTERNAL_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructExternalModulesTable7BD8EF6F"
      },
      "REGISTERED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7"
      },
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0"
     }
    },
    "Handler": "stack_deletion_protector.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "StackDeletionProtectorLogs7DD07429"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "StackDeletionProtectionConstructCustomResourceLambdaRole3CD9C40B",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 300
   },
   "DependsOn": [
    "StackDeletionProtectionConstructCustomResourceLambdaRole3CD9C40B",
    "StackDeletionProtectorLogsPolicy596E83D6"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "StackDeletionProtectorLogsPolicy596E83D6": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "StackDeletionProtectorLogs7DD07429",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "StackDeletionProtectorLogsPolicy596E83D6",
    "Roles": [
     {
      "Ref": "StackDeletionProtectionConstructCustomResourceLambdaRole3CD9C40B"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<StackDeletionProtectorBC796FD4>:*"
       ]
      }
     ]
    }
   }
  },
  "StackDeletionProtectorProviderLogs0359B0CA": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/StackDeletionProtectorProvider"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "StackDeletionProtectorProviderframeworkonEventServiceRole95405292": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "lambda.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "ManagedPolicyArns": [
     {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      ]
     }
    ],
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<StackDeletionProtectorBC796FD4.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "StackDeletionProtectorProviderframeworkonEventServiceRoleDefaultPolicy7BD39DB5": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": "lambda:InvokeFunction",
       "Effect": "Allow",
       "Resource": [
        {
         "Fn::GetAtt": [
          "StackDeletionProtectorBC796FD4",
          "Arn"
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "StackDeletionProtectorBC796FD4",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        }
       ]
      },
      {
       "Action": "lambda:GetFunction",
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "StackDeletionProtectorBC796FD4",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "StackDeletionProtectorProviderframeworkonEventServiceRoleDefaultPolicy7BD39DB5",
    "Roles": [
     {
      "Ref": "StackDeletionProtectorProviderframeworkonEventServiceRole95405292"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<StackDeletionProtectorBC796FD4.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "StackDeletionProtectorProviderframeworkonEventCBCE8FBA": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca.zip"
    },
    "Description": "AWS CDK resource provider framework - onEvent (ModularCloudStudioOnAwsStack/StackDeletionProtectorProvider)",
    "Environment": {
     "Variables": {
      "USER_ON_EVENT_FUNCTION_ARN": {
       "Fn::GetAtt": [
        "StackDeletionProtectorBC796FD4",
        "Arn"
       ]
      }
     }
    },
    "Handler": "framework.onEvent",
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "StackDeletionProtectorProviderLogs0359B0CA"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "StackDeletionProtectorProviderframeworkonEventServiceRole95405292",
      "Arn"
     ]
    },
    "Runtime": "nodejs22.x",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 900
   },
   "DependsOn": [
    "StackDeletionProtectorProviderframeworkonEventServiceRoleDefaultPolicy7BD39DB5",
    "StackDeletionProtectorProviderframeworkonEventServiceRole95405292"
   ],
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<StackDeletionProtectorBC796FD4.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      }
     ]
    },
    "guard": {
     "SuppressedRules": [
      "LAMBDA_INSIDE_VPC",
      "LAMBDA_CONCURRENCY_CHECK"
     ]
    }
   }
  },
  "RegionsConstructRegionsTableSeedingRole34D70A20": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "lambda.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Policies": [
     {
      "PolicyDocument": {
       "Statement": [
        {
         "Action": [
          "dynamodb:BatchGetItem",
          "dynamodb:BatchWriteItem",
          "dynamodb:DeleteItem",
          "dynamodb:DescribeTable",
          "dynamodb:GetItem",
          "dynamodb:PutItem",
          "dynamodb:Query",
          "dynamodb:Scan",
          "dynamodb:UpdateItem"
         ],
         "Effect": "Allow",
         "Resource": {
          "Fn::GetAtt": [
           "StorageConstructRegionsTableC985427B",
           "Arn"
          ]
         }
        },
        {
         "Action": [
          "logs:CreateLogGroup",
          "logs:CreateLogStream",
          "logs:PutLogEvents"
         ],
         "Effect": "Allow",
         "Resource": {
          "Fn::Join": [
           "",
           [
            "arn:",
            {
             "Ref": "AWS::Partition"
            },
            ":logs:",
            {
             "Ref": "AWS::Region"
            },
            ":",
            {
             "Ref": "AWS::AccountId"
            },
            ":log-group:/aws/lambda/*"
           ]
          ]
         }
        }
       ],
       "Version": "2012-10-17"
      },
      "PolicyName": "LambdaFunctionServiceRolePolicy"
     }
    ],
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "IAM_NO_INLINE_POLICY_CHECK"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Custom resource needs to be able to log",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "CDK adds AWSLambdaBasicExecutionRole which just provides logging/x-ray access",
       "id": "AwsSolutions-IAM4"
      }
     ]
    }
   }
  },
  "RegionsConstructCustomRegionSeedingTable811851F7": {
   "Type": "AWS::CloudFormation::CustomResource",
   "Properties": {
    "ServiceToken": {
     "Fn::GetAtt": [
      "RegionsSeedingTableProviderframeworkonEventB266F449",
      "Arn"
     ]
    },
    "RegionsTableName": {
     "Ref": "StorageConstructRegionsTableC985427B"
    },
    "SupportedRegions": [
     "us-east-1",
     "us-east-2",
     "us-west-1",
     "us-west-2",
     "eu-north-1",
     "eu-west-1",
     "eu-west-2",
     "eu-west-3",
     "eu-central-1",
     "ap-northeast-1",
     "ap-northeast-2",
     "ap-south-1",
     "ap-southeast-1",
     "ap-southeast-2",
     "ca-central-1",
     "sa-east-1"
    ]
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete"
  },
  "RegionSeedingLambdaLogs5ADAD638": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/RegionSeedingLambda"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "RegionSeedingLambdaCF3022E8": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/12d211c7924435d1aa792816986140f8847791bb930efbeb702c0275817aeb8c.zip"
    },
    "Description": "Lambda function to setup regions table with all supported regions",
    "Environment": {
     "Variables": {
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0"
     }
    },
    "Handler": "handler.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "RegionSeedingLambdaLogs5ADAD638"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "RegionsConstructRegionsTableSeedingRole34D70A20",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "RegionsConstructRegionsTableSeedingRole34D70A20",
    "RegionSeedingLambdaLogsPolicyA9181F29"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "RegionSeedingLambdaLogsPolicyA9181F29": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "RegionSeedingLambdaLogs5ADAD638",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "RegionSeedingLambdaLogsPolicyA9181F29",
    "Roles": [
     {
      "Ref": "RegionsConstructRegionsTableSeedingRole34D70A20"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<RegionSeedingLambdaCF3022E8>:*"
       ]
      }
     ]
    }
   }
  },
  "RegionsSeedingTableProviderLogsFA1885AE": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/RegionsSeedingTableProvider"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "RegionsSeedingTableProviderframeworkonEventServiceRole863CED36": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "lambda.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "ManagedPolicyArns": [
     {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      ]
     }
    ],
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<RegionSeedingLambdaCF3022E8.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "RegionsSeedingTableProviderframeworkonEventServiceRoleDefaultPolicy9B749F8B": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": "lambda:InvokeFunction",
       "Effect": "Allow",
       "Resource": [
        {
         "Fn::GetAtt": [
          "RegionSeedingLambdaCF3022E8",
          "Arn"
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "RegionSeedingLambdaCF3022E8",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        }
       ]
      },
      {
       "Action": "lambda:GetFunction",
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "RegionSeedingLambdaCF3022E8",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "RegionsSeedingTableProviderframeworkonEventServiceRoleDefaultPolicy9B749F8B",
    "Roles": [
     {
      "Ref": "RegionsSeedingTableProviderframeworkonEventServiceRole863CED36"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<RegionSeedingLambdaCF3022E8.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "RegionsSeedingTableProviderframeworkonEventB266F449": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca.zip"
    },
    "Description": "AWS CDK resource provider framework - onEvent (ModularCloudStudioOnAwsStack/RegionsSeedingTableProvider)",
    "Environment": {
     "Variables": {
      "USER_ON_EVENT_FUNCTION_ARN": {
       "Fn::GetAtt": [
        "RegionSeedingLambdaCF3022E8",
        "Arn"
       ]
      }
     }
    },
    "Handler": "framework.onEvent",
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "RegionsSeedingTableProviderLogsFA1885AE"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "RegionsSeedingTableProviderframeworkonEventServiceRole863CED36",
      "Arn"
     ]
    },
    "Runtime": "nodejs22.x",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 900
   },
   "DependsOn": [
    "RegionsSeedingTableProviderframeworkonEventServiceRoleDefaultPolicy9B749F8B",
    "RegionsSeedingTableProviderframeworkonEventServiceRole863CED36"
   ],
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<RegionSeedingLambdaCF3022E8.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      }
     ]
    },
    "guard": {
     "SuppressedRules": [
      "LAMBDA_INSIDE_VPC",
      "LAMBDA_CONCURRENCY_CHECK"
     ]
    }
   }
  },
  "PartnerModulesConstructPartnersTableSeedingRole2BBA8AAF": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "lambda.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Policies": [
     {
      "PolicyDocument": {
       "Statement": [
        {
         "Action": [
          "dynamodb:BatchWriteItem",
          "dynamodb:DeleteItem",
          "dynamodb:DescribeTable",
          "dynamodb:GetItem",
          "dynamodb:PutItem",
          "dynamodb:Query",
          "dynamodb:Scan",
          "dynamodb:UpdateItem"
         ],
         "Effect": "Allow",
         "Resource": [
          {
           "Fn::GetAtt": [
            "StorageConstructExternalModulesTable7BD8EF6F",
            "Arn"
           ]
          },
          {
           "Fn::GetAtt": [
            "StorageConstructMcsDynamoDbTableLock85A89D6F",
            "Arn"
           ]
          },
          {
           "Fn::Join": [
            "",
            [
             {
              "Fn::GetAtt": [
               "StorageConstructExternalModulesTable7BD8EF6F",
               "Arn"
              ]
             },
             "/*"
            ]
           ]
          }
         ]
        }
       ],
       "Version": "2012-10-17"
      },
      "PolicyName": "PartnerModuleSyncDynamoAccessPolicy"
     }
    ],
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "IAM_NO_INLINE_POLICY_CHECK"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs to create Log group and put log events",
       "id": "AwsSolutions-IAM5"
      }
     ]
    }
   }
  },
  "PartnerModulesConstructLockReleaseLambdaLogs9904494D": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/PartnerModulesConstruct/LockReleaseLambda"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "PartnerModulesConstructLockReleaseLambdaB53023AA": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/b387dc990e1f8e1e47e04341370e3578b1a125c19c5cedcdceebf0d94cf7ad6e.zip"
    },
    "Description": "Releases lock set in DynamoDb lock table",
    "Environment": {
     "Variables": {
      "LOCK_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableLock85A89D6F"
      },
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0"
     }
    },
    "Handler": "handler.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "PartnerModulesConstructLockReleaseLambdaLogs9904494D"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "PartnerModulesConstructPartnersTableSeedingRole2BBA8AAF",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "PartnerModulesConstructLockReleaseLambdaLogsPolicyCCB6105F",
    "PartnerModulesConstructPartnersTableSeedingRole2BBA8AAF"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "PartnerModulesConstructLockReleaseLambdaLogsPolicyCCB6105F": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "PartnerModulesConstructLockReleaseLambdaLogs9904494D",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "PartnerModulesConstructLockReleaseLambdaLogsPolicyCCB6105F",
    "Roles": [
     {
      "Ref": "PartnerModulesConstructPartnersTableSeedingRole2BBA8AAF"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<PartnerModulesConstructLockReleaseLambdaB53023AA>:*"
       ]
      }
     ]
    }
   }
  },
  "PartnerModulesConstructPartnerModuleSyncLambdaLogs7E1A81CC": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/PartnerModulesConstruct/PartnerModuleSyncLambda"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "PartnerModulesConstructPartnerModuleSyncLambdaDE49194D": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/189a3117d6786c06efd6fdff19ce98e2d10568e82e56e3aab85653f0879db713.zip"
    },
    "Description": "Synchronizes Partner modules stored in DynamoDb table from remote source",
    "Environment": {
     "Variables": {
      "EXTERNAL_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructExternalModulesTable7BD8EF6F"
      },
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0"
     }
    },
    "Handler": "handler.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "PartnerModulesConstructPartnerModuleSyncLambdaLogs7E1A81CC"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "PartnerModulesConstructPartnersTableSeedingRole2BBA8AAF",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "PartnerModulesConstructPartnerModuleSyncLambdaLogsPolicyECCDF427",
    "PartnerModulesConstructPartnersTableSeedingRole2BBA8AAF"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "PartnerModulesConstructPartnerModuleSyncLambdaLogsPolicyECCDF427": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "PartnerModulesConstructPartnerModuleSyncLambdaLogs7E1A81CC",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "PartnerModulesConstructPartnerModuleSyncLambdaLogsPolicyECCDF427",
    "Roles": [
     {
      "Ref": "PartnerModulesConstructPartnersTableSeedingRole2BBA8AAF"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<PartnerModulesConstructPartnerModuleSyncLambdaDE49194D>:*"
       ]
      }
     ]
    }
   }
  },
  "PartnerModulesConstructStateMachineLogsAD6929AF": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/states/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/PartnerModulesConstruct/StateMachine"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "PartnerModulesConstructStateMachineRole8B614A75": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "states.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The state machine is using what AWS gives it out of the box which is locked down",
       "id": "AwsSolutions-IAM5"
      }
     ]
    }
   }
  },
  "PartnerModulesConstructStateMachineRoleDefaultPolicy31A22A13": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": "lambda:InvokeFunction",
       "Effect": "Allow",
       "Resource": [
        {
         "Fn::GetAtt": [
          "PartnerModulesConstructLockReleaseLambdaB53023AA",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "PartnerModulesConstructPartnerModuleSyncLambdaDE49194D",
          "Arn"
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "PartnerModulesConstructLockReleaseLambdaB53023AA",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "PartnerModulesConstructPartnerModuleSyncLambdaDE49194D",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        }
       ]
      },
      {
       "Action": [
        "logs:CreateLogDelivery",
        "logs:DeleteLogDelivery",
        "logs:DescribeLogGroups",
        "logs:DescribeResourcePolicies",
        "logs:GetLogDelivery",
        "logs:ListLogDeliveries",
        "logs:PutResourcePolicy",
        "logs:UpdateLogDelivery",
        "xray:GetSamplingRules",
        "xray:GetSamplingTargets",
        "xray:PutTelemetryRecords",
        "xray:PutTraceSegments"
       ],
       "Effect": "Allow",
       "Resource": "*"
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "PartnerModulesConstructStateMachineRoleDefaultPolicy31A22A13",
    "Roles": [
     {
      "Ref": "PartnerModulesConstructStateMachineRole8B614A75"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The state machine is using what AWS gives it out of the box which is locked down",
       "id": "AwsSolutions-IAM5"
      }
     ]
    }
   }
  },
  "PartnerModulesConstructStateMachineD146B721": {
   "Type": "AWS::StepFunctions::StateMachine",
   "Properties": {
    "DefinitionString": {
     "Fn::Join": [
      "",
      [
       "{\"StartAt\":\"PartnerModuleSyncTask\",\"States\":{\"PartnerModuleSyncTask\":{\"Next\":\"Done\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2},{\"ErrorEquals\":[\"DynamoDB.ServiceException\",\"DynamoDB.SdkClientException\",\"DynamoDB.InternalServerErrorException\"],\"IntervalSeconds\":30,\"MaxAttempts\":5,\"BackoffRate\":2}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.error\",\"Next\":\"ReleaseLockTask\"}],\"Type\":\"Task\",\"InputPath\":\"$\",\"ResultPath\":\"$.result\",\"Resource\":\"",
       {
        "Fn::GetAtt": [
         "PartnerModulesConstructPartnerModuleSyncLambdaDE49194D",
         "Arn"
        ]
       },
       "\",\"Parameters\":{\"request.$\":\"$.request\",\"lock_name.$\":\"$.lock_name\"}},\"Done\":{\"Type\":\"Pass\",\"Next\":\"ReleaseLockTask\"},\"ReleaseLockTask\":{\"End\":true,\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2},{\"ErrorEquals\":[\"DynamoDB.ServiceException\",\"DynamoDB.SdkClientException\",\"DynamoDB.InternalServerErrorException\"],\"IntervalSeconds\":30,\"MaxAttempts\":5,\"BackoffRate\":2}],\"Type\":\"Task\",\"InputPath\":\"$\",\"ResultPath\":\"$.result\",\"Resource\":\"",
       {
        "Fn::GetAtt": [
         "PartnerModulesConstructLockReleaseLambdaB53023AA",
         "Arn"
        ]
       },
       "\",\"Parameters\":{\"request.$\":\"$.request\",\"lock_name.$\":\"$.lock_name\"}}}}"
      ]
     ]
    },
    "LoggingConfiguration": {
     "Destinations": [
      {
       "CloudWatchLogsLogGroup": {
        "LogGroupArn": {
         "Fn::GetAtt": [
          "PartnerModulesConstructStateMachineLogsAD6929AF",
          "Arn"
         ]
        }
       }
      }
     ],
     "IncludeExecutionData": true,
     "Level": "ALL"
    },
    "RoleArn": {
     "Fn::GetAtt": [
      "PartnerModulesConstructStateMachineRole8B614A75",
      "Arn"
     ]
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "TracingConfiguration": {
     "Enabled": true
    }
   },
   "DependsOn": [
    "PartnerModulesConstructStateMachineRoleDefaultPolicy31A22A13",
    "PartnerModulesConstructStateMachineRole8B614A75"
   ],
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete",
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The state machine is using what AWS gives it out of the box which is locked down",
       "id": "AwsSolutions-IAM5"
      }
     ]
    }
   }
  },
  "PartnerModulesConstructStateMachineTriggerCustomResource5D9BE67F": {
   "Type": "AWS::CloudFormation::CustomResource",
   "Properties": {
    "ServiceToken": {
     "Fn::GetAtt": [
      "PartnerModulesConstructProviderframeworkonEvent1E708CC8",
      "Arn"
     ]
    }
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete"
  },
  "PartnerModulesConstructFunctionServiceRoleF9E219F8": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "lambda.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   }
  },
  "PartnerModulesConstructFunctionServiceRoleDefaultPolicyB043CF85": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": "states:StartExecution",
       "Effect": "Allow",
       "Resource": {
        "Ref": "PartnerModulesConstructStateMachineD146B721"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "PartnerModulesConstructFunctionServiceRoleDefaultPolicyB043CF85",
    "Roles": [
     {
      "Ref": "PartnerModulesConstructFunctionServiceRoleF9E219F8"
     }
    ]
   }
  },
  "PartnerModulesConstructFunctionLogs885D62BE": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/PartnerModulesConstruct/Function"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "PartnerModulesConstructFunction2CD5F79C": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/c7d0b17cef3ae5d49f421798d4ae643efb716f428a4e84e95d08c9de0817ac2d.zip"
    },
    "Description": "CustomResource provider to populate external modules DynamoDb table",
    "Environment": {
     "Variables": {
      "PARTNER_MODULES_SYNC_STATE_MACHINE_ARN": {
       "Ref": "PartnerModulesConstructStateMachineD146B721"
      },
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0"
     }
    },
    "Handler": "handler.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "PartnerModulesConstructFunctionLogs885D62BE"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "PartnerModulesConstructFunctionServiceRoleF9E219F8",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "DependsOn": [
    "PartnerModulesConstructFunctionLogsPolicyE932A730",
    "PartnerModulesConstructFunctionServiceRoleDefaultPolicyB043CF85",
    "PartnerModulesConstructFunctionServiceRoleF9E219F8"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "PartnerModulesConstructFunctionLogsPolicyE932A730": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "PartnerModulesConstructFunctionLogs885D62BE",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "PartnerModulesConstructFunctionLogsPolicyE932A730",
    "Roles": [
     {
      "Ref": "PartnerModulesConstructFunctionServiceRoleF9E219F8"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<PartnerModulesConstructFunction2CD5F79C>:*"
       ]
      }
     ]
    }
   }
  },
  "PartnerModulesConstructProviderLogsB898AF37": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/PartnerModulesConstruct/Provider"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "PartnerModulesConstructProviderframeworkonEventServiceRoleEE3C91E9": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "lambda.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "ManagedPolicyArns": [
     {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      ]
     }
    ],
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<PartnerModulesConstructFunction2CD5F79C.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "PartnerModulesConstructProviderframeworkonEventServiceRoleDefaultPolicy02456F7A": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": "lambda:InvokeFunction",
       "Effect": "Allow",
       "Resource": [
        {
         "Fn::GetAtt": [
          "PartnerModulesConstructFunction2CD5F79C",
          "Arn"
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "PartnerModulesConstructFunction2CD5F79C",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        }
       ]
      },
      {
       "Action": "lambda:GetFunction",
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "PartnerModulesConstructFunction2CD5F79C",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "PartnerModulesConstructProviderframeworkonEventServiceRoleDefaultPolicy02456F7A",
    "Roles": [
     {
      "Ref": "PartnerModulesConstructProviderframeworkonEventServiceRoleEE3C91E9"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<PartnerModulesConstructFunction2CD5F79C.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "PartnerModulesConstructProviderframeworkonEvent1E708CC8": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca.zip"
    },
    "Description": "AWS CDK resource provider framework - onEvent (ModularCloudStudioOnAwsStack/PartnerModulesConstruct/Provider)",
    "Environment": {
     "Variables": {
      "USER_ON_EVENT_FUNCTION_ARN": {
       "Fn::GetAtt": [
        "PartnerModulesConstructFunction2CD5F79C",
        "Arn"
       ]
      }
     }
    },
    "Handler": "framework.onEvent",
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "PartnerModulesConstructProviderLogsB898AF37"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "PartnerModulesConstructProviderframeworkonEventServiceRoleEE3C91E9",
      "Arn"
     ]
    },
    "Runtime": "nodejs22.x",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 900
   },
   "DependsOn": [
    "PartnerModulesConstructProviderframeworkonEventServiceRoleDefaultPolicy02456F7A",
    "PartnerModulesConstructProviderframeworkonEventServiceRoleEE3C91E9"
   ],
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<PartnerModulesConstructFunction2CD5F79C.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      }
     ]
    },
    "guard": {
     "SuppressedRules": [
      "LAMBDA_INSIDE_VPC",
      "LAMBDA_CONCURRENCY_CHECK"
     ]
    }
   }
  },
  "DeRegisterConstructLambdaDeregisterLambdaRoleCC1AABAA": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "lambda.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Policies": [
     {
      "PolicyDocument": {
       "Statement": [
        {
         "Action": [
          "dynamodb:DeleteItem",
          "dynamodb:GetItem",
          "dynamodb:PutItem",
          "dynamodb:Query",
          "dynamodb:Scan",
          "dynamodb:UpdateItem"
         ],
         "Effect": "Allow",
         "Resource": [
          {
           "Fn::GetAtt": [
            "StorageConstructExternalModulesTable7BD8EF6F",
            "Arn"
           ]
          },
          {
           "Fn::GetAtt": [
            "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94",
            "Arn"
           ]
          },
          {
           "Fn::GetAtt": [
            "StorageConstructMcsDynamoDbTableModulesMapping4D272082",
            "Arn"
           ]
          },
          {
           "Fn::GetAtt": [
            "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7",
            "Arn"
           ]
          },
          {
           "Fn::Join": [
            "",
            [
             {
              "Fn::GetAtt": [
               "StorageConstructExternalModulesTable7BD8EF6F",
               "Arn"
              ]
             },
             "/index/*"
            ]
           ]
          },
          {
           "Fn::Join": [
            "",
            [
             {
              "Fn::GetAtt": [
               "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94",
               "Arn"
              ]
             },
             "/index/*"
            ]
           ]
          },
          {
           "Fn::Join": [
            "",
            [
             {
              "Fn::GetAtt": [
               "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7",
               "Arn"
              ]
             },
             "/index/*"
            ]
           ]
          }
         ]
        },
        {
         "Action": [
          "servicecatalog:DeleteProduct",
          "servicecatalog:DeleteProvisioningArtifact",
          "servicecatalog:DescribeProduct",
          "servicecatalog:DescribeProductAsAdmin",
          "servicecatalog:DescribeProvisionedProduct",
          "servicecatalog:DescribeProvisioningArtifact",
          "servicecatalog:DisassociateProductFromPortfolio",
          "servicecatalog:SearchProducts"
         ],
         "Effect": "Allow",
         "Resource": {
          "Fn::Join": [
           "",
           [
            "arn:",
            {
             "Ref": "AWS::Partition"
            },
            ":catalog:*:",
            {
             "Ref": "AWS::AccountId"
            },
            ":*/*"
           ]
          ]
         }
        },
        {
         "Action": [
          "logs:CreateLogGroup",
          "logs:CreateLogStream",
          "logs:PutLogEvents"
         ],
         "Effect": "Allow",
         "Resource": {
          "Fn::Join": [
           "",
           [
            "arn:",
            {
             "Ref": "AWS::Partition"
            },
            ":logs:",
            {
             "Ref": "AWS::Region"
            },
            ":",
            {
             "Ref": "AWS::AccountId"
            },
            ":log-group:/aws/lambda/*"
           ]
          ]
         }
        }
       ],
       "Version": "2012-10-17"
      },
      "PolicyName": "LambdaFunctionServiceRolePolicy"
     }
    ],
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "IAM_NO_INLINE_POLICY_CHECK"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/*",
        "Resource::arn:<AWS::Partition>:catalog:*:<AWS::AccountId>:*/*",
        "Resource::<StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94.Arn>/index/*",
        "Resource::<StorageConstructExternalModulesTable7BD8EF6F.Arn>/index/*",
        "Resource::<StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7.Arn>/index/*"
       ]
      }
     ]
    }
   }
  },
  "DeregisterUpdateMappingLambdaLogs2F673A56": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/DeregisterUpdateMappingLambda"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "DeregisterUpdateMappingLambdaAA21049F": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/6d5bbe5c77adf25500130f588eff6f8ec39c9fab600494a86990db6b423e9774.zip"
    },
    "Description": "Update mapping table upon module de-register",
    "Environment": {
     "Variables": {
      "ENABLED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94"
      },
      "REGISTERED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7"
      },
      "EXTERNAL_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructExternalModulesTable7BD8EF6F"
      },
      "MAPPING_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableModulesMapping4D272082"
      },
      "ACCOUNT_ID": {
       "Ref": "AWS::AccountId"
      },
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0"
     }
    },
    "Handler": "index.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "DeregisterUpdateMappingLambdaLogs2F673A56"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "DeRegisterConstructLambdaDeregisterLambdaRoleCC1AABAA",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "DeRegisterConstructLambdaDeregisterLambdaRoleCC1AABAA",
    "DeregisterUpdateMappingLambdaLogsPolicy80BCD9E8"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "DeregisterUpdateMappingLambdaLogsPolicy80BCD9E8": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "DeregisterUpdateMappingLambdaLogs2F673A56",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "DeregisterUpdateMappingLambdaLogsPolicy80BCD9E8",
    "Roles": [
     {
      "Ref": "DeRegisterConstructLambdaDeregisterLambdaRoleCC1AABAA"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<DeregisterUpdateMappingLambdaAA21049F>:*"
       ]
      }
     ]
    }
   }
  },
  "DeregisterRemoveSCLambdaLogsB8812842": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/DeregisterRemoveSCLambda"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "DeregisterRemoveSCLambda0EBFB995": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/9a93d4228b851164185a0f4385319dbe73612a36d409a159d2e8fb52fd68b7cc.zip"
    },
    "Description": "Remove sc product upon module de-register",
    "Environment": {
     "Variables": {
      "ENABLED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94"
      },
      "REGISTERED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7"
      },
      "EXTERNAL_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructExternalModulesTable7BD8EF6F"
      },
      "MAPPING_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableModulesMapping4D272082"
      },
      "ACCOUNT_ID": {
       "Ref": "AWS::AccountId"
      },
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0"
     }
    },
    "Handler": "index.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "DeregisterRemoveSCLambdaLogsB8812842"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "DeRegisterConstructLambdaDeregisterLambdaRoleCC1AABAA",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "DeRegisterConstructLambdaDeregisterLambdaRoleCC1AABAA",
    "DeregisterRemoveSCLambdaLogsPolicy55615B25"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "DeregisterRemoveSCLambdaLogsPolicy55615B25": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "DeregisterRemoveSCLambdaLogsB8812842",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "DeregisterRemoveSCLambdaLogsPolicy55615B25",
    "Roles": [
     {
      "Ref": "DeRegisterConstructLambdaDeregisterLambdaRoleCC1AABAA"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<DeregisterRemoveSCLambda0EBFB995>:*"
       ]
      }
     ]
    }
   }
  },
  "DeregisterUpdateExternalTableLogsC2934BF0": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/DeregisterUpdateExternalTable"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "DeregisterUpdateExternalTableF921E5A8": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/a5faf45c67bd8375726ad617f530fe8626b430e9b167672f41108cf571b8a5dc.zip"
    },
    "Description": "Update external modules table upon de-register",
    "Environment": {
     "Variables": {
      "ENABLED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94"
      },
      "REGISTERED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7"
      },
      "EXTERNAL_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructExternalModulesTable7BD8EF6F"
      },
      "MAPPING_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableModulesMapping4D272082"
      },
      "ACCOUNT_ID": {
       "Ref": "AWS::AccountId"
      },
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0"
     }
    },
    "Handler": "index.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "DeregisterUpdateExternalTableLogsC2934BF0"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "DeRegisterConstructLambdaDeregisterLambdaRoleCC1AABAA",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "DeRegisterConstructLambdaDeregisterLambdaRoleCC1AABAA",
    "DeregisterUpdateExternalTableLogsPolicy26703094"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "DeregisterUpdateExternalTableLogsPolicy26703094": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "DeregisterUpdateExternalTableLogsC2934BF0",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "DeregisterUpdateExternalTableLogsPolicy26703094",
    "Roles": [
     {
      "Ref": "DeRegisterConstructLambdaDeregisterLambdaRoleCC1AABAA"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<DeregisterUpdateExternalTableF921E5A8>:*"
       ]
      }
     ]
    }
   }
  },
  "DeregisterUpdateRegisterTableLogsB717EB38": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/DeregisterUpdateRegisterTable"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "DeregisterUpdateRegisterTableC1AD4598": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/f8c68b826e71882040778b48a7ed477fdbd3c95f4bdc79a178362198160e1cf0.zip"
    },
    "Description": "Update registered modules table upon de-register",
    "Environment": {
     "Variables": {
      "ENABLED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94"
      },
      "REGISTERED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7"
      },
      "EXTERNAL_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructExternalModulesTable7BD8EF6F"
      },
      "MAPPING_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableModulesMapping4D272082"
      },
      "ACCOUNT_ID": {
       "Ref": "AWS::AccountId"
      },
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0"
     }
    },
    "Handler": "index.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "DeregisterUpdateRegisterTableLogsB717EB38"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "DeRegisterConstructLambdaDeregisterLambdaRoleCC1AABAA",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "DeRegisterConstructLambdaDeregisterLambdaRoleCC1AABAA",
    "DeregisterUpdateRegisterTableLogsPolicy9BD85B44"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "DeregisterUpdateRegisterTableLogsPolicy9BD85B44": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "DeregisterUpdateRegisterTableLogsB717EB38",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "DeregisterUpdateRegisterTableLogsPolicy9BD85B44",
    "Roles": [
     {
      "Ref": "DeRegisterConstructLambdaDeregisterLambdaRoleCC1AABAA"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<DeregisterUpdateRegisterTableC1AD4598>:*"
       ]
      }
     ]
    }
   }
  },
  "DeregisterOnFailureLogs0946D05B": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/DeregisterOnFailure"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "DeregisterOnFailureEF37F166": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/07a645be6fda2db69845b7e51534a66d8e5df4c3fdce6a307e9df7a126d9e0ed.zip"
    },
    "Description": "Handle failure upon de-register",
    "Environment": {
     "Variables": {
      "ENABLED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94"
      },
      "REGISTERED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7"
      },
      "EXTERNAL_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructExternalModulesTable7BD8EF6F"
      },
      "MAPPING_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableModulesMapping4D272082"
      },
      "ACCOUNT_ID": {
       "Ref": "AWS::AccountId"
      },
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0"
     }
    },
    "Handler": "index.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "DeregisterOnFailureLogs0946D05B"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "DeRegisterConstructLambdaDeregisterLambdaRoleCC1AABAA",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "DeRegisterConstructLambdaDeregisterLambdaRoleCC1AABAA",
    "DeregisterOnFailureLogsPolicyAAACDAAC"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "DeregisterOnFailureLogsPolicyAAACDAAC": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "DeregisterOnFailureLogs0946D05B",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "DeregisterOnFailureLogsPolicyAAACDAAC",
    "Roles": [
     {
      "Ref": "DeRegisterConstructLambdaDeregisterLambdaRoleCC1AABAA"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<DeregisterOnFailureEF37F166>:*"
       ]
      }
     ]
    }
   }
  },
  "DeregisterStateMachineLogs82298893": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/states/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/DeregisterStateMachine"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "DeregisterStateMachineRoleD5994EE7": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "states.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The state machine is using what AWS gives it out of the box which is locked down",
       "id": "AwsSolutions-IAM5"
      }
     ]
    }
   }
  },
  "DeregisterStateMachineRoleDefaultPolicy3FD79DAB": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": "lambda:InvokeFunction",
       "Effect": "Allow",
       "Resource": [
        {
         "Fn::GetAtt": [
          "DeregisterOnFailureEF37F166",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "DeregisterRemoveSCLambda0EBFB995",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "DeregisterUpdateExternalTableF921E5A8",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "DeregisterUpdateMappingLambdaAA21049F",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "DeregisterUpdateRegisterTableC1AD4598",
          "Arn"
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "DeregisterOnFailureEF37F166",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "DeregisterRemoveSCLambda0EBFB995",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "DeregisterUpdateExternalTableF921E5A8",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "DeregisterUpdateMappingLambdaAA21049F",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "DeregisterUpdateRegisterTableC1AD4598",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        }
       ]
      },
      {
       "Action": [
        "logs:CreateLogDelivery",
        "logs:DeleteLogDelivery",
        "logs:DescribeLogGroups",
        "logs:DescribeResourcePolicies",
        "logs:GetLogDelivery",
        "logs:ListLogDeliveries",
        "logs:PutResourcePolicy",
        "logs:UpdateLogDelivery",
        "xray:GetSamplingRules",
        "xray:GetSamplingTargets",
        "xray:PutTelemetryRecords",
        "xray:PutTraceSegments"
       ],
       "Effect": "Allow",
       "Resource": "*"
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "DeregisterStateMachineRoleDefaultPolicy3FD79DAB",
    "Roles": [
     {
      "Ref": "DeregisterStateMachineRoleD5994EE7"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The state machine is using what AWS gives it out of the box which is locked down",
       "id": "AwsSolutions-IAM5"
      }
     ]
    }
   }
  },
  "DeregisterStateMachineC2A35F3D": {
   "Type": "AWS::StepFunctions::StateMachine",
   "Properties": {
    "DefinitionString": {
     "Fn::Join": [
      "",
      [
       "{\"StartAt\":\"DeregisterUpdateMappingTableTask\",\"States\":{\"DeregisterUpdateMappingTableTask\":{\"Next\":\"RemoveSCTask\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2},{\"ErrorEquals\":[\"DynamoDB.ServiceException\",\"DynamoDB.SdkClientException\",\"DynamoDB.InternalServerErrorException\"],\"IntervalSeconds\":30,\"MaxAttempts\":5,\"BackoffRate\":2}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.error\",\"Next\":\"DeregisterFailureTask\"}],\"Type\":\"Task\",\"InputPath\":\"$\",\"ResultPath\":\"$.TaskResult\",\"Resource\":\"",
       {
        "Fn::GetAtt": [
         "DeregisterUpdateMappingLambdaAA21049F",
         "Arn"
        ]
       },
       "\",\"Parameters\":{\"request.$\":\"$.request\"}},\"RemoveSCTask\":{\"Next\":\"DeregisterUpdateExternalModuleTableTask\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2},{\"ErrorEquals\":[\"DynamoDB.ServiceException\",\"DynamoDB.SdkClientException\",\"DynamoDB.InternalServerErrorException\"],\"IntervalSeconds\":30,\"MaxAttempts\":5,\"BackoffRate\":2}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.error\",\"Next\":\"DeregisterFailureTask\"}],\"Type\":\"Task\",\"InputPath\":\"$\",\"ResultPath\":\"$.TaskResult\",\"Resource\":\"",
       {
        "Fn::GetAtt": [
         "DeregisterRemoveSCLambda0EBFB995",
         "Arn"
        ]
       },
       "\",\"Parameters\":{\"request.$\":\"$.request\"}},\"DeregisterUpdateExternalModuleTableTask\":{\"Next\":\"DeregisterUpdateRegisteredTableTask\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2},{\"ErrorEquals\":[\"DynamoDB.ServiceException\",\"DynamoDB.SdkClientException\",\"DynamoDB.InternalServerErrorException\"],\"IntervalSeconds\":30,\"MaxAttempts\":5,\"BackoffRate\":2}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.error\",\"Next\":\"DeregisterFailureTask\"}],\"Type\":\"Task\",\"InputPath\":\"$\",\"ResultPath\":\"$.TaskResult\",\"Resource\":\"",
       {
        "Fn::GetAtt": [
         "DeregisterUpdateExternalTableF921E5A8",
         "Arn"
        ]
       },
       "\",\"Parameters\":{\"request.$\":\"$.request\"}},\"DeregisterUpdateRegisteredTableTask\":{\"Next\":\"Done\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2},{\"ErrorEquals\":[\"DynamoDB.ServiceException\",\"DynamoDB.SdkClientException\",\"DynamoDB.InternalServerErrorException\"],\"IntervalSeconds\":30,\"MaxAttempts\":5,\"BackoffRate\":2}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.error\",\"Next\":\"DeregisterFailureTask\"}],\"Type\":\"Task\",\"InputPath\":\"$\",\"ResultPath\":\"$.TaskResult\",\"Resource\":\"",
       {
        "Fn::GetAtt": [
         "DeregisterUpdateRegisterTableC1AD4598",
         "Arn"
        ]
       },
       "\",\"Parameters\":{\"request.$\":\"$.request\"}},\"Done\":{\"Type\":\"Pass\",\"End\":true},\"DeregisterFailureTask\":{\"Next\":\"Fail\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2},{\"ErrorEquals\":[\"DynamoDB.ServiceException\",\"DynamoDB.SdkClientException\",\"DynamoDB.InternalServerErrorException\"],\"IntervalSeconds\":30,\"MaxAttempts\":5,\"BackoffRate\":2}],\"Type\":\"Task\",\"InputPath\":\"$\",\"ResultPath\":\"$.TaskResult\",\"Resource\":\"",
       {
        "Fn::GetAtt": [
         "DeregisterOnFailureEF37F166",
         "Arn"
        ]
       },
       "\",\"Parameters\":{\"request.$\":\"$.request\"}},\"Fail\":{\"Type\":\"Fail\"}}}"
      ]
     ]
    },
    "LoggingConfiguration": {
     "Destinations": [
      {
       "CloudWatchLogsLogGroup": {
        "LogGroupArn": {
         "Fn::GetAtt": [
          "DeregisterStateMachineLogs82298893",
          "Arn"
         ]
        }
       }
      }
     ],
     "IncludeExecutionData": true,
     "Level": "ALL"
    },
    "RoleArn": {
     "Fn::GetAtt": [
      "DeregisterStateMachineRoleD5994EE7",
      "Arn"
     ]
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "TracingConfiguration": {
     "Enabled": true
    }
   },
   "DependsOn": [
    "DeregisterStateMachineRoleDefaultPolicy3FD79DAB",
    "DeregisterStateMachineRoleD5994EE7"
   ],
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete",
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The state machine is using what AWS gives it out of the box which is locked down",
       "id": "AwsSolutions-IAM5"
      }
     ]
    }
   }
  },
  "RegisterConstructLambdaRegisterLambdaRoleD5B1E852": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "lambda.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Policies": [
     {
      "PolicyDocument": {
       "Statement": [
        {
         "Action": [
          "servicecatalog:AssociateProductWithPortfolio",
          "servicecatalog:CreateConstraint",
          "servicecatalog:CreateProduct",
          "servicecatalog:DeleteProduct",
          "servicecatalog:DescribeProduct",
          "servicecatalog:DescribeProductAsAdmin",
          "servicecatalog:DescribeProvisioningArtifact",
          "servicecatalog:DescribeProvisioningParameters",
          "servicecatalog:ListLaunchPaths",
          "servicecatalog:SearchProducts",
          "servicecatalog:TagResource"
         ],
         "Effect": "Allow",
         "Resource": {
          "Fn::Join": [
           "",
           [
            "arn:",
            {
             "Ref": "AWS::Partition"
            },
            ":catalog:*:",
            {
             "Ref": "AWS::AccountId"
            },
            ":*/*"
           ]
          ]
         }
        },
        {
         "Action": "servicecatalog:SearchProductsAsAdmin",
         "Effect": "Allow",
         "Resource": {
          "Fn::Join": [
           "",
           [
            "arn:",
            {
             "Ref": "AWS::Partition"
            },
            ":servicecatalog:*:",
            {
             "Ref": "AWS::AccountId"
            },
            ":*/*"
           ]
          ]
         }
        },
        {
         "Action": [
          "cloudformation:GetTemplateSummary",
          "cloudformation:TagResource",
          "cloudformation:ValidateTemplate"
         ],
         "Effect": "Allow",
         "Resource": "*",
         "Sid": "CloudFormationAccessStatement"
        },
        {
         "Action": "s3:GetObject",
         "Effect": "Allow",
         "Resource": "*",
         "Sid": "S3GetObjectAccessStatement"
        },
        {
         "Action": [
          "dynamodb:BatchWriteItem",
          "dynamodb:DeleteItem",
          "dynamodb:DescribeTable",
          "dynamodb:GetItem",
          "dynamodb:PutItem",
          "dynamodb:Query",
          "dynamodb:Scan",
          "dynamodb:UpdateItem"
         ],
         "Effect": "Allow",
         "Resource": [
          {
           "Fn::GetAtt": [
            "StorageConstructExternalModulesTable7BD8EF6F",
            "Arn"
           ]
          },
          {
           "Fn::GetAtt": [
            "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94",
            "Arn"
           ]
          },
          {
           "Fn::GetAtt": [
            "StorageConstructMcsDynamoDbTableLock85A89D6F",
            "Arn"
           ]
          },
          {
           "Fn::GetAtt": [
            "StorageConstructMcsDynamoDbTableModulesMapping4D272082",
            "Arn"
           ]
          },
          {
           "Fn::GetAtt": [
            "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7",
            "Arn"
           ]
          },
          {
           "Fn::Join": [
            "",
            [
             {
              "Fn::GetAtt": [
               "StorageConstructExternalModulesTable7BD8EF6F",
               "Arn"
              ]
             },
             "/index/*"
            ]
           ]
          },
          {
           "Fn::Join": [
            "",
            [
             {
              "Fn::GetAtt": [
               "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94",
               "Arn"
              ]
             },
             "/index/*"
            ]
           ]
          },
          {
           "Fn::Join": [
            "",
            [
             {
              "Fn::GetAtt": [
               "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7",
               "Arn"
              ]
             },
             "/index/*"
            ]
           ]
          }
         ]
        },
        {
         "Action": [
          "logs:CreateLogGroup",
          "logs:CreateLogStream",
          "logs:PutLogEvents"
         ],
         "Effect": "Allow",
         "Resource": {
          "Fn::Join": [
           "",
           [
            "arn:",
            {
             "Ref": "AWS::Partition"
            },
            ":logs:",
            {
             "Ref": "AWS::Region"
            },
            ":",
            {
             "Ref": "AWS::AccountId"
            },
            ":log-group:/aws/lambda/*"
           ]
          ]
         }
        }
       ],
       "Version": "2012-10-17"
      },
      "PolicyName": "LambdaFunctionServiceRolePolicy"
     }
    ],
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "IAM_NO_INLINE_POLICY_CHECK",
      "IAM_POLICYDOCUMENT_NO_WILDCARD_RESOURCE"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/*",
        "Resource::arn:<AWS::Partition>:catalog:*:<AWS::AccountId>:*/*",
        "Resource::<StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94.Arn>/index/*",
        "Resource::<StorageConstructExternalModulesTable7BD8EF6F.Arn>/index/*",
        "Resource::<StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7.Arn>/index/*",
        "Resource::arn:<AWS::Partition>:servicecatalog:*:<AWS::AccountId>:*/*",
        "Resource::*"
       ]
      }
     ]
    }
   }
  },
  "ValidateModuleLambdaLogs1A57EBE1": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/ValidateModuleLambda"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "ValidateModuleLambdaF5A5C23A": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/0f26011a6f5834f2e43f70aff66ab57e7d8324eb71e334ec339ebb5a2dd3fc93.zip"
    },
    "Description": "Update mapping table upon module register",
    "Environment": {
     "Variables": {
      "MCS_VERSION": "v1.1.0",
      "ENABLED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94"
      },
      "REGISTERED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7"
      },
      "EXTERNAL_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructExternalModulesTable7BD8EF6F"
      },
      "MAPPING_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableModulesMapping4D272082"
      },
      "LOCK_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableLock85A89D6F"
      },
      "ACCOUNT_ID": {
       "Ref": "AWS::AccountId"
      },
      "DEPLOYMENT_ID": {
       "Fn::Join": [
        "",
        [
         "mcs-",
         {
          "Fn::Select": [
           2,
           {
            "Fn::Split": [
             "/",
             {
              "Ref": "AWS::StackId"
             }
            ]
           }
          ]
         }
        ]
       ]
      },
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0"
     }
    },
    "Handler": "index.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "ValidateModuleLambdaLogs1A57EBE1"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "RegisterConstructLambdaRegisterLambdaRoleD5B1E852",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "RegisterConstructLambdaRegisterLambdaRoleD5B1E852",
    "ValidateModuleLambdaLogsPolicyC763FE82"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "ValidateModuleLambdaLogsPolicyC763FE82": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "ValidateModuleLambdaLogs1A57EBE1",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "ValidateModuleLambdaLogsPolicyC763FE82",
    "Roles": [
     {
      "Ref": "RegisterConstructLambdaRegisterLambdaRoleD5B1E852"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<ValidateModuleLambdaF5A5C23A>:*"
       ]
      }
     ]
    }
   }
  },
  "RegisterUpdateMappingLambdaLogs46AD55BE": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/RegisterUpdateMappingLambda"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "RegisterUpdateMappingLambda7180D7AA": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/0d3c48129d62f6fb35101dd8e40c7cf66cedbd9bc0eff0e5a38d7b0d66079c62.zip"
    },
    "Description": "Update mapping table upon module register",
    "Environment": {
     "Variables": {
      "MCS_VERSION": "v1.1.0",
      "ENABLED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94"
      },
      "REGISTERED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7"
      },
      "EXTERNAL_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructExternalModulesTable7BD8EF6F"
      },
      "MAPPING_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableModulesMapping4D272082"
      },
      "LOCK_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableLock85A89D6F"
      },
      "ACCOUNT_ID": {
       "Ref": "AWS::AccountId"
      },
      "DEPLOYMENT_ID": {
       "Fn::Join": [
        "",
        [
         "mcs-",
         {
          "Fn::Select": [
           2,
           {
            "Fn::Split": [
             "/",
             {
              "Ref": "AWS::StackId"
             }
            ]
           }
          ]
         }
        ]
       ]
      },
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0"
     }
    },
    "Handler": "index.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "RegisterUpdateMappingLambdaLogs46AD55BE"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "RegisterConstructLambdaRegisterLambdaRoleD5B1E852",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "RegisterConstructLambdaRegisterLambdaRoleD5B1E852",
    "RegisterUpdateMappingLambdaLogsPolicy515D3098"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "RegisterUpdateMappingLambdaLogsPolicy515D3098": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "RegisterUpdateMappingLambdaLogs46AD55BE",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "RegisterUpdateMappingLambdaLogsPolicy515D3098",
    "Roles": [
     {
      "Ref": "RegisterConstructLambdaRegisterLambdaRoleD5B1E852"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<RegisterUpdateMappingLambda7180D7AA>:*"
       ]
      }
     ]
    }
   }
  },
  "RegisterAddSCLambdaLogs4C0FCD5E": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/RegisterAddSCLambda"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "RegisterAddSCLambda61D0BCF7": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/64f2958ab3761f8ed06de66afd8312743785747e460393f88c561af892c09285.zip"
    },
    "Description": "Register sc product upon module register",
    "Environment": {
     "Variables": {
      "MCS_VERSION": "v1.1.0",
      "ENABLED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94"
      },
      "REGISTERED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7"
      },
      "EXTERNAL_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructExternalModulesTable7BD8EF6F"
      },
      "MAPPING_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableModulesMapping4D272082"
      },
      "LOCK_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableLock85A89D6F"
      },
      "ACCOUNT_ID": {
       "Ref": "AWS::AccountId"
      },
      "DEPLOYMENT_ID": {
       "Fn::Join": [
        "",
        [
         "mcs-",
         {
          "Fn::Select": [
           2,
           {
            "Fn::Split": [
             "/",
             {
              "Ref": "AWS::StackId"
             }
            ]
           }
          ]
         }
        ]
       ]
      },
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0"
     }
    },
    "Handler": "index.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "RegisterAddSCLambdaLogs4C0FCD5E"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "RegisterConstructLambdaRegisterLambdaRoleD5B1E852",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "RegisterAddSCLambdaLogsPolicy10C1AD37",
    "RegisterConstructLambdaRegisterLambdaRoleD5B1E852"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "RegisterAddSCLambdaLogsPolicy10C1AD37": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "RegisterAddSCLambdaLogs4C0FCD5E",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "RegisterAddSCLambdaLogsPolicy10C1AD37",
    "Roles": [
     {
      "Ref": "RegisterConstructLambdaRegisterLambdaRoleD5B1E852"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<RegisterAddSCLambda61D0BCF7>:*"
       ]
      }
     ]
    }
   }
  },
  "RegisterUpdateExternalTableLogs1946959D": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/RegisterUpdateExternalTable"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "RegisterUpdateExternalTable24EC5847": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/bcb02467c1aa9bbf6cba656104b3634b13cc3d10e35ec6304fe82f2f5bc2d65b.zip"
    },
    "Description": "Update external modules table upon register",
    "Environment": {
     "Variables": {
      "MCS_VERSION": "v1.1.0",
      "ENABLED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94"
      },
      "REGISTERED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7"
      },
      "EXTERNAL_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructExternalModulesTable7BD8EF6F"
      },
      "MAPPING_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableModulesMapping4D272082"
      },
      "LOCK_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableLock85A89D6F"
      },
      "ACCOUNT_ID": {
       "Ref": "AWS::AccountId"
      },
      "DEPLOYMENT_ID": {
       "Fn::Join": [
        "",
        [
         "mcs-",
         {
          "Fn::Select": [
           2,
           {
            "Fn::Split": [
             "/",
             {
              "Ref": "AWS::StackId"
             }
            ]
           }
          ]
         }
        ]
       ]
      },
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0"
     }
    },
    "Handler": "index.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "RegisterUpdateExternalTableLogs1946959D"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "RegisterConstructLambdaRegisterLambdaRoleD5B1E852",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "RegisterConstructLambdaRegisterLambdaRoleD5B1E852",
    "RegisterUpdateExternalTableLogsPolicy46EED8D7"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "RegisterUpdateExternalTableLogsPolicy46EED8D7": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "RegisterUpdateExternalTableLogs1946959D",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "RegisterUpdateExternalTableLogsPolicy46EED8D7",
    "Roles": [
     {
      "Ref": "RegisterConstructLambdaRegisterLambdaRoleD5B1E852"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<RegisterUpdateExternalTable24EC5847>:*"
       ]
      }
     ]
    }
   }
  },
  "RegisterUpdateRegisterTableLogsCA79B202": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/RegisterUpdateRegisterTable"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "RegisterUpdateRegisterTable46FF335E": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/4c888d558562776c46ca815ad0f63045b57fea8e518c8a0ccfb5a64ee80046f6.zip"
    },
    "Description": "Update registered modules table upon register",
    "Environment": {
     "Variables": {
      "MCS_VERSION": "v1.1.0",
      "ENABLED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94"
      },
      "REGISTERED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7"
      },
      "EXTERNAL_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructExternalModulesTable7BD8EF6F"
      },
      "MAPPING_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableModulesMapping4D272082"
      },
      "LOCK_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableLock85A89D6F"
      },
      "ACCOUNT_ID": {
       "Ref": "AWS::AccountId"
      },
      "DEPLOYMENT_ID": {
       "Fn::Join": [
        "",
        [
         "mcs-",
         {
          "Fn::Select": [
           2,
           {
            "Fn::Split": [
             "/",
             {
              "Ref": "AWS::StackId"
             }
            ]
           }
          ]
         }
        ]
       ]
      },
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0"
     }
    },
    "Handler": "index.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "RegisterUpdateRegisterTableLogsCA79B202"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "RegisterConstructLambdaRegisterLambdaRoleD5B1E852",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "RegisterConstructLambdaRegisterLambdaRoleD5B1E852",
    "RegisterUpdateRegisterTableLogsPolicyCB5AEE60"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "RegisterUpdateRegisterTableLogsPolicyCB5AEE60": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "RegisterUpdateRegisterTableLogsCA79B202",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "RegisterUpdateRegisterTableLogsPolicyCB5AEE60",
    "Roles": [
     {
      "Ref": "RegisterConstructLambdaRegisterLambdaRoleD5B1E852"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<RegisterUpdateRegisterTable46FF335E>:*"
       ]
      }
     ]
    }
   }
  },
  "RegisterOnFailureLogs42961D69": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/RegisterOnFailure"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "RegisterOnFailure4FC91C4F": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/ce17523f403f6bb2de02fc340a46b3088d6f8ac4cf0f328738c7d32f0f62b40a.zip"
    },
    "Description": "Handle failure upon register",
    "Environment": {
     "Variables": {
      "MCS_VERSION": "v1.1.0",
      "ENABLED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94"
      },
      "REGISTERED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7"
      },
      "EXTERNAL_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructExternalModulesTable7BD8EF6F"
      },
      "MAPPING_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableModulesMapping4D272082"
      },
      "LOCK_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableLock85A89D6F"
      },
      "ACCOUNT_ID": {
       "Ref": "AWS::AccountId"
      },
      "DEPLOYMENT_ID": {
       "Fn::Join": [
        "",
        [
         "mcs-",
         {
          "Fn::Select": [
           2,
           {
            "Fn::Split": [
             "/",
             {
              "Ref": "AWS::StackId"
             }
            ]
           }
          ]
         }
        ]
       ]
      },
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0"
     }
    },
    "Handler": "index.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "RegisterOnFailureLogs42961D69"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "RegisterConstructLambdaRegisterLambdaRoleD5B1E852",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "RegisterConstructLambdaRegisterLambdaRoleD5B1E852",
    "RegisterOnFailureLogsPolicy5301CA42"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "RegisterOnFailureLogsPolicy5301CA42": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "RegisterOnFailureLogs42961D69",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "RegisterOnFailureLogsPolicy5301CA42",
    "Roles": [
     {
      "Ref": "RegisterConstructLambdaRegisterLambdaRoleD5B1E852"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<RegisterOnFailure4FC91C4F>:*"
       ]
      }
     ]
    }
   }
  },
  "RegisterStateMachineLogsC77C067E": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/states/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/RegisterStateMachine"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "RegisterStateMachineRoleCAD54A24": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "states.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The state machine is using what AWS gives it out of the box which is locked down",
       "id": "AwsSolutions-IAM5"
      }
     ]
    }
   }
  },
  "RegisterStateMachineRoleDefaultPolicy9D7ACEC8": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": "lambda:InvokeFunction",
       "Effect": "Allow",
       "Resource": [
        {
         "Fn::GetAtt": [
          "PartnerModulesConstructLockReleaseLambdaB53023AA",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "RegisterAddSCLambda61D0BCF7",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "RegisterOnFailure4FC91C4F",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "RegisterUpdateExternalTable24EC5847",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "RegisterUpdateMappingLambda7180D7AA",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "RegisterUpdateRegisterTable46FF335E",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "ValidateModuleLambdaF5A5C23A",
          "Arn"
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "PartnerModulesConstructLockReleaseLambdaB53023AA",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "RegisterAddSCLambda61D0BCF7",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "RegisterOnFailure4FC91C4F",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "RegisterUpdateExternalTable24EC5847",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "RegisterUpdateMappingLambda7180D7AA",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "RegisterUpdateRegisterTable46FF335E",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "ValidateModuleLambdaF5A5C23A",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        }
       ]
      },
      {
       "Action": [
        "logs:CreateLogDelivery",
        "logs:DeleteLogDelivery",
        "logs:DescribeLogGroups",
        "logs:DescribeResourcePolicies",
        "logs:GetLogDelivery",
        "logs:ListLogDeliveries",
        "logs:PutResourcePolicy",
        "logs:UpdateLogDelivery",
        "xray:GetSamplingRules",
        "xray:GetSamplingTargets",
        "xray:PutTelemetryRecords",
        "xray:PutTraceSegments"
       ],
       "Effect": "Allow",
       "Resource": "*"
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "RegisterStateMachineRoleDefaultPolicy9D7ACEC8",
    "Roles": [
     {
      "Ref": "RegisterStateMachineRoleCAD54A24"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The state machine is using what AWS gives it out of the box which is locked down",
       "id": "AwsSolutions-IAM5"
      }
     ]
    }
   }
  },
  "RegisterStateMachineDAC291DA": {
   "Type": "AWS::StepFunctions::StateMachine",
   "Properties": {
    "DefinitionString": {
     "Fn::Join": [
      "",
      [
       "{\"StartAt\":\"ValidateModuleTask\",\"States\":{\"ValidateModuleTask\":{\"Next\":\"UpdateMappingTableTask\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2},{\"ErrorEquals\":[\"DynamoDB.ServiceException\",\"DynamoDB.SdkClientException\",\"DynamoDB.InternalServerErrorException\"],\"IntervalSeconds\":30,\"MaxAttempts\":5,\"BackoffRate\":2}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.error\",\"Next\":\"RegisterFailureTask\"}],\"Type\":\"Task\",\"InputPath\":\"$\",\"ResultPath\":\"$\",\"Resource\":\"",
       {
        "Fn::GetAtt": [
         "ValidateModuleLambdaF5A5C23A",
         "Arn"
        ]
       },
       "\",\"Parameters\":{\"request.$\":\"$.request\",\"config.$\":\"$.config\",\"lock_name.$\":\"$.lock_name\"}},\"UpdateMappingTableTask\":{\"Next\":\"RegisterAddSCTask\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2},{\"ErrorEquals\":[\"DynamoDB.ServiceException\",\"DynamoDB.SdkClientException\",\"DynamoDB.InternalServerErrorException\"],\"IntervalSeconds\":30,\"MaxAttempts\":5,\"BackoffRate\":2}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.error\",\"Next\":\"RegisterFailureTask\"}],\"Type\":\"Task\",\"InputPath\":\"$\",\"ResultPath\":\"$.result\",\"Resource\":\"",
       {
        "Fn::GetAtt": [
         "RegisterUpdateMappingLambda7180D7AA",
         "Arn"
        ]
       },
       "\",\"Parameters\":{\"request.$\":\"$.request\",\"config.$\":\"$.config\",\"lock_name.$\":\"$.lock_name\"}},\"RegisterAddSCTask\":{\"Next\":\"RegisterUpdateExternalModuleTableTask\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2},{\"ErrorEquals\":[\"DynamoDB.ServiceException\",\"DynamoDB.SdkClientException\",\"DynamoDB.InternalServerErrorException\"],\"IntervalSeconds\":30,\"MaxAttempts\":5,\"BackoffRate\":2}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.error\",\"Next\":\"RegisterFailureTask\"}],\"Type\":\"Task\",\"InputPath\":\"$\",\"ResultPath\":\"$\",\"Resource\":\"",
       {
        "Fn::GetAtt": [
         "RegisterAddSCLambda61D0BCF7",
         "Arn"
        ]
       },
       "\",\"Parameters\":{\"request.$\":\"$.request\",\"config.$\":\"$.config\",\"lock_name.$\":\"$.lock_name\"}},\"RegisterUpdateExternalModuleTableTask\":{\"Next\":\"RegisterUpdateRegisteredTableTask\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2},{\"ErrorEquals\":[\"DynamoDB.ServiceException\",\"DynamoDB.SdkClientException\",\"DynamoDB.InternalServerErrorException\"],\"IntervalSeconds\":30,\"MaxAttempts\":5,\"BackoffRate\":2}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.error\",\"Next\":\"RegisterFailureTask\"}],\"Type\":\"Task\",\"InputPath\":\"$\",\"ResultPath\":\"$.result\",\"Resource\":\"",
       {
        "Fn::GetAtt": [
         "RegisterUpdateExternalTable24EC5847",
         "Arn"
        ]
       },
       "\",\"Parameters\":{\"request.$\":\"$.request\",\"config.$\":\"$.config\",\"lock_name.$\":\"$.lock_name\"}},\"RegisterUpdateRegisteredTableTask\":{\"Next\":\"ReleaseLockTask\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2},{\"ErrorEquals\":[\"DynamoDB.ServiceException\",\"DynamoDB.SdkClientException\",\"DynamoDB.InternalServerErrorException\"],\"IntervalSeconds\":30,\"MaxAttempts\":5,\"BackoffRate\":2}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.error\",\"Next\":\"RegisterFailureTask\"}],\"Type\":\"Task\",\"InputPath\":\"$\",\"ResultPath\":\"$.result\",\"Resource\":\"",
       {
        "Fn::GetAtt": [
         "RegisterUpdateRegisterTable46FF335E",
         "Arn"
        ]
       },
       "\",\"Parameters\":{\"request.$\":\"$.request\",\"config.$\":\"$.config\",\"lock_name.$\":\"$.lock_name\"}},\"ReleaseLockTask\":{\"Next\":\"Done\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2},{\"ErrorEquals\":[\"DynamoDB.ServiceException\",\"DynamoDB.SdkClientException\",\"DynamoDB.InternalServerErrorException\"],\"IntervalSeconds\":30,\"MaxAttempts\":5,\"BackoffRate\":2}],\"Type\":\"Task\",\"InputPath\":\"$\",\"ResultPath\":\"$.result\",\"Resource\":\"",
       {
        "Fn::GetAtt": [
         "PartnerModulesConstructLockReleaseLambdaB53023AA",
         "Arn"
        ]
       },
       "\",\"Parameters\":{\"request.$\":\"$.request\",\"config.$\":\"$.config\",\"lock_name.$\":\"$.lock_name\"}},\"Done\":{\"Type\":\"Pass\",\"End\":true},\"RegisterFailureTask\":{\"Next\":\"Fail\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2},{\"ErrorEquals\":[\"DynamoDB.ServiceException\",\"DynamoDB.SdkClientException\",\"DynamoDB.InternalServerErrorException\"],\"IntervalSeconds\":30,\"MaxAttempts\":5,\"BackoffRate\":2}],\"Type\":\"Task\",\"InputPath\":\"$\",\"ResultPath\":\"$.result\",\"Resource\":\"",
       {
        "Fn::GetAtt": [
         "RegisterOnFailure4FC91C4F",
         "Arn"
        ]
       },
       "\",\"Parameters\":{\"request.$\":\"$.request\",\"config.$\":\"$.config\",\"lock_name.$\":\"$.lock_name\"}},\"Fail\":{\"Type\":\"Fail\"}}}"
      ]
     ]
    },
    "LoggingConfiguration": {
     "Destinations": [
      {
       "CloudWatchLogsLogGroup": {
        "LogGroupArn": {
         "Fn::GetAtt": [
          "RegisterStateMachineLogsC77C067E",
          "Arn"
         ]
        }
       }
      }
     ],
     "IncludeExecutionData": true,
     "Level": "ALL"
    },
    "RoleArn": {
     "Fn::GetAtt": [
      "RegisterStateMachineRoleCAD54A24",
      "Arn"
     ]
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "TracingConfiguration": {
     "Enabled": true
    }
   },
   "DependsOn": [
    "RegisterStateMachineRoleDefaultPolicy9D7ACEC8",
    "RegisterStateMachineRoleCAD54A24"
   ],
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete",
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The state machine is using what AWS gives it out of the box which is locked down",
       "id": "AwsSolutions-IAM5"
      }
     ]
    }
   }
  },
  "DeploymentConstructDeploymentEventLambdaRole46C7CFFE": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "lambda.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Policies": [
     {
      "PolicyDocument": {
       "Statement": [
        {
         "Action": [
          "dynamodb:BatchWriteItem",
          "dynamodb:DeleteItem",
          "dynamodb:DescribeTable",
          "dynamodb:GetItem",
          "dynamodb:PutItem",
          "dynamodb:Query",
          "dynamodb:Scan",
          "dynamodb:UpdateItem"
         ],
         "Effect": "Allow",
         "Resource": [
          {
           "Fn::GetAtt": [
            "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94",
            "Arn"
           ]
          },
          {
           "Fn::GetAtt": [
            "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7",
            "Arn"
           ]
          },
          {
           "Fn::GetAtt": [
            "StorageConstructRegionsTableC985427B",
            "Arn"
           ]
          },
          {
           "Fn::Join": [
            "",
            [
             {
              "Fn::GetAtt": [
               "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94",
               "Arn"
              ]
             },
             "/index/*"
            ]
           ]
          },
          {
           "Fn::Join": [
            "",
            [
             {
              "Fn::GetAtt": [
               "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7",
               "Arn"
              ]
             },
             "/index/*"
            ]
           ]
          },
          {
           "Fn::Join": [
            "",
            [
             {
              "Fn::GetAtt": [
               "StorageConstructRegionsTableC985427B",
               "Arn"
              ]
             },
             "/index/*"
            ]
           ]
          }
         ]
        },
        {
         "Action": "cloudformation:DescribeStacks",
         "Effect": "Allow",
         "Resource": {
          "Fn::Join": [
           "",
           [
            "arn:",
            {
             "Ref": "AWS::Partition"
            },
            ":cloudformation:*:",
            {
             "Ref": "AWS::AccountId"
            },
            ":stack/*"
           ]
          ]
         }
        },
        {
         "Action": [
          "cloudformation:DescribeStackSet",
          "cloudformation:ListStackInstances"
         ],
         "Effect": "Allow",
         "Resource": {
          "Fn::Join": [
           "",
           [
            "arn:",
            {
             "Ref": "AWS::Partition"
            },
            ":cloudformation:",
            {
             "Ref": "AWS::Region"
            },
            ":",
            {
             "Ref": "AWS::AccountId"
            },
            ":stackset/*"
           ]
          ]
         }
        },
        {
         "Action": [
          "logs:CreateLogGroup",
          "logs:CreateLogStream",
          "logs:PutLogEvents"
         ],
         "Effect": "Allow",
         "Resource": {
          "Fn::Join": [
           "",
           [
            "arn:",
            {
             "Ref": "AWS::Partition"
            },
            ":logs:",
            {
             "Ref": "AWS::Region"
            },
            ":",
            {
             "Ref": "AWS::AccountId"
            },
            ":log-group:/aws/lambda/*"
           ]
          ]
         }
        },
        {
         "Action": [
          "events:DeleteRule",
          "events:ListTargetsByRule",
          "events:RemoveTargets"
         ],
         "Effect": "Allow",
         "Resource": {
          "Fn::Join": [
           "",
           [
            "arn:",
            {
             "Ref": "AWS::Partition"
            },
            ":events:*:",
            {
             "Ref": "AWS::AccountId"
            },
            ":*/*"
           ]
          ]
         },
         "Sid": "EventBridgeRedirectStatement"
        },
        {
         "Action": "lambda:InvokeFunction",
         "Effect": "Allow",
         "Resource": {
          "Fn::Join": [
           "",
           [
            "arn:",
            {
             "Ref": "AWS::Partition"
            },
            ":lambda:*:",
            {
             "Ref": "AWS::AccountId"
            },
            ":function:*MCSInstructionGenerationLambda-*"
           ]
          ]
         }
        },
        {
         "Action": [
          "sqs:GetQueueUrl",
          "sqs:SendMessage"
         ],
         "Effect": "Allow",
         "Resource": {
          "Fn::GetAtt": [
           "OperationalMetricsConstructModuleStatusMetricQueue8FB49372",
           "Arn"
          ]
         }
        }
       ],
       "Version": "2012-10-17"
      },
      "PolicyName": "LambdaFunctionServiceRolePolicy"
     }
    ],
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "IAM_NO_INLINE_POLICY_CHECK"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs",
       "id": "AwsSolutions-IAM5"
      }
     ]
    }
   }
  },
  "DeploymentConstructDeploymentEventEnableSucceededLogs3501BCAA": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/DeploymentConstruct/DeploymentEventEnableSucceeded"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "DeploymentConstructDeploymentEventEnableSucceededCC7D111D": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/143fa73ed0d821755cfca6682243fc46c388d4f92e59d70740abcb4bb9dded80.zip"
    },
    "Description": "Lambda function to consume enable_succeeded events from module deployments",
    "Environment": {
     "Variables": {
      "ENABLED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94"
      },
      "REGIONS_TABLE_NAME": {
       "Ref": "StorageConstructRegionsTableC985427B"
      },
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0",
      "INSTRUCTION_GENERATOR_LABEL": "InstructionGenerationLambdaArn",
      "METRICS_QUEUE_URL": {
       "Ref": "OperationalMetricsConstructModuleStatusMetricQueue8FB49372"
      },
      "METRICS_OPT_IN_PARAMETER": {
       "Fn::FindInMap": [
        "OpsMetricsOptInParameter",
        "SendAnonymizedData",
        "Data"
       ]
      },
      "SOLUTION_ID": "SO0282",
      "SOLUTION_VERSION": "v1.1.0"
     }
    },
    "Handler": "enable_succeeded.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "DeploymentConstructDeploymentEventEnableSucceededLogs3501BCAA"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "DeploymentConstructDeploymentEventLambdaRole46C7CFFE",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "DeploymentConstructDeploymentEventEnableSucceededLogsPolicy024139C6",
    "DeploymentConstructDeploymentEventLambdaRole46C7CFFE"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "DeploymentConstructDeploymentEventEnableSucceededLogsPolicy024139C6": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "DeploymentConstructDeploymentEventEnableSucceededLogs3501BCAA",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "DeploymentConstructDeploymentEventEnableSucceededLogsPolicy024139C6",
    "Roles": [
     {
      "Ref": "DeploymentConstructDeploymentEventLambdaRole46C7CFFE"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<DeploymentConstructDeploymentEventEnableSucceededCC7D111D>:*"
       ]
      }
     ]
    }
   }
  },
  "DeploymentConstructDeploymentEnableSucceededRule0CA0BD81": {
   "Type": "AWS::Events::Rule",
   "Properties": {
    "EventPattern": {
     "account": [
      {
       "Ref": "AWS::AccountId"
      }
     ],
     "detail": {
      "stack-set-arn": [
       {
        "prefix": {
         "Fn::Join": [
          "",
          [
           "arn:",
           {
            "Ref": "AWS::Partition"
           },
           ":cloudformation:",
           {
            "Ref": "AWS::Region"
           },
           ":",
           {
            "Ref": "AWS::AccountId"
           },
           ":stackset/SC-",
           {
            "Ref": "AWS::AccountId"
           },
           "-pp-"
          ]
         ]
        }
       }
      ],
      "status-details": {
       "status": [
        "SUCCEEDED"
       ]
      },
      "action": [
       "CREATE"
      ]
     },
     "detail-type": [
      "CloudFormation StackSet Operation Status Change"
     ],
     "region": [
      {
       "Ref": "AWS::Region"
      }
     ],
     "source": [
      "aws.cloudformation"
     ]
    },
    "State": "ENABLED",
    "Targets": [
     {
      "Arn": {
       "Fn::GetAtt": [
        "DeploymentConstructDeploymentEventEnableSucceededCC7D111D",
        "Arn"
       ]
      },
      "Id": "Target0"
     }
    ]
   }
  },
  "DeploymentConstructDeploymentEnableSucceededRuleAllowEventRuleModularCloudStudioOnAwsStackDeploymentConstructDeploymentEventEnableSucceeded39C73438F209132A": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "DeploymentConstructDeploymentEventEnableSucceededCC7D111D",
      "Arn"
     ]
    },
    "Principal": "events.amazonaws.com",
    "SourceArn": {
     "Fn::GetAtt": [
      "DeploymentConstructDeploymentEnableSucceededRule0CA0BD81",
      "Arn"
     ]
    }
   }
  },
  "DeploymentConstructDeploymentEventEnableFailedLogs5863FE49": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/DeploymentConstruct/DeploymentEventEnableFailed"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "DeploymentConstructDeploymentEventEnableFailed166F5DC9": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/e031e975d5a3e590773ff8e46692182288926c4e1c13123dd522832cdb9880d5.zip"
    },
    "Description": "Lambda function to consume enable_failed events from module deployments",
    "Environment": {
     "Variables": {
      "ENABLED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94"
      },
      "REGIONS_TABLE_NAME": {
       "Ref": "StorageConstructRegionsTableC985427B"
      },
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0",
      "INSTRUCTION_GENERATOR_LABEL": "InstructionGenerationLambdaArn",
      "METRICS_QUEUE_URL": {
       "Ref": "OperationalMetricsConstructModuleStatusMetricQueue8FB49372"
      },
      "METRICS_OPT_IN_PARAMETER": {
       "Fn::FindInMap": [
        "OpsMetricsOptInParameter",
        "SendAnonymizedData",
        "Data"
       ]
      },
      "SOLUTION_ID": "SO0282",
      "SOLUTION_VERSION": "v1.1.0"
     }
    },
    "Handler": "enable_failed.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "DeploymentConstructDeploymentEventEnableFailedLogs5863FE49"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "DeploymentConstructDeploymentEventLambdaRole46C7CFFE",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "DeploymentConstructDeploymentEventEnableFailedLogsPolicy3AB0A695",
    "DeploymentConstructDeploymentEventLambdaRole46C7CFFE"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "DeploymentConstructDeploymentEventEnableFailedLogsPolicy3AB0A695": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "DeploymentConstructDeploymentEventEnableFailedLogs5863FE49",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "DeploymentConstructDeploymentEventEnableFailedLogsPolicy3AB0A695",
    "Roles": [
     {
      "Ref": "DeploymentConstructDeploymentEventLambdaRole46C7CFFE"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<DeploymentConstructDeploymentEventEnableFailed166F5DC9>:*"
       ]
      }
     ]
    }
   }
  },
  "DeploymentConstructDeploymentEnableFailedRuleE906F8BD": {
   "Type": "AWS::Events::Rule",
   "Properties": {
    "EventPattern": {
     "account": [
      {
       "Ref": "AWS::AccountId"
      }
     ],
     "detail": {
      "stack-set-arn": [
       {
        "prefix": {
         "Fn::Join": [
          "",
          [
           "arn:",
           {
            "Ref": "AWS::Partition"
           },
           ":cloudformation:",
           {
            "Ref": "AWS::Region"
           },
           ":",
           {
            "Ref": "AWS::AccountId"
           },
           ":stackset/SC-",
           {
            "Ref": "AWS::AccountId"
           },
           "-pp-"
          ]
         ]
        }
       }
      ],
      "status-details": {
       "status": [
        "OUTDATED"
       ],
       "detailed-status": [
        "FAILED"
       ]
      }
     },
     "detail-type": [
      "CloudFormation StackSet StackInstance Status Change"
     ],
     "region": [
      {
       "Ref": "AWS::Region"
      }
     ],
     "source": [
      "aws.cloudformation"
     ]
    },
    "State": "ENABLED",
    "Targets": [
     {
      "Arn": {
       "Fn::GetAtt": [
        "DeploymentConstructDeploymentEventEnableFailed166F5DC9",
        "Arn"
       ]
      },
      "Id": "Target0"
     }
    ]
   }
  },
  "DeploymentConstructDeploymentEnableFailedRuleAllowEventRuleModularCloudStudioOnAwsStackDeploymentConstructDeploymentEventEnableFailed9282B4C6CE401C92": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "DeploymentConstructDeploymentEventEnableFailed166F5DC9",
      "Arn"
     ]
    },
    "Principal": "events.amazonaws.com",
    "SourceArn": {
     "Fn::GetAtt": [
      "DeploymentConstructDeploymentEnableFailedRuleE906F8BD",
      "Arn"
     ]
    }
   }
  },
  "DeploymentConstructDeploymentEventDisableInProgressLogsCA872311": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/DeploymentConstruct/DeploymentEventDisableInProgress"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "DeploymentConstructDeploymentEventDisableInProgressF86F99D9": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/65085bb83cf4d31b5eb2d47bb2bdafaa4054ed1d2f14720469317b056a3b1227.zip"
    },
    "Description": "Lambda function to consume disable_in_progress events from module deployments",
    "Environment": {
     "Variables": {
      "ENABLED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94"
      },
      "REGIONS_TABLE_NAME": {
       "Ref": "StorageConstructRegionsTableC985427B"
      },
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0",
      "INSTRUCTION_GENERATOR_LABEL": "InstructionGenerationLambdaArn",
      "METRICS_QUEUE_URL": {
       "Ref": "OperationalMetricsConstructModuleStatusMetricQueue8FB49372"
      },
      "METRICS_OPT_IN_PARAMETER": {
       "Fn::FindInMap": [
        "OpsMetricsOptInParameter",
        "SendAnonymizedData",
        "Data"
       ]
      },
      "SOLUTION_ID": "SO0282",
      "SOLUTION_VERSION": "v1.1.0"
     }
    },
    "Handler": "disable_in_progress.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "DeploymentConstructDeploymentEventDisableInProgressLogsCA872311"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "DeploymentConstructDeploymentEventLambdaRole46C7CFFE",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "DeploymentConstructDeploymentEventDisableInProgressLogsPolicy768A42FE",
    "DeploymentConstructDeploymentEventLambdaRole46C7CFFE"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "DeploymentConstructDeploymentEventDisableInProgressLogsPolicy768A42FE": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "DeploymentConstructDeploymentEventDisableInProgressLogsCA872311",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "DeploymentConstructDeploymentEventDisableInProgressLogsPolicy768A42FE",
    "Roles": [
     {
      "Ref": "DeploymentConstructDeploymentEventLambdaRole46C7CFFE"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<DeploymentConstructDeploymentEventDisableInProgressF86F99D9>:*"
       ]
      }
     ]
    }
   }
  },
  "DeploymentConstructDeploymentDisableInProgressRule97030268": {
   "Type": "AWS::Events::Rule",
   "Properties": {
    "EventPattern": {
     "account": [
      {
       "Ref": "AWS::AccountId"
      }
     ],
     "detail": {
      "stack-set-arn": [
       {
        "prefix": {
         "Fn::Join": [
          "",
          [
           "arn:",
           {
            "Ref": "AWS::Partition"
           },
           ":cloudformation:",
           {
            "Ref": "AWS::Region"
           },
           ":",
           {
            "Ref": "AWS::AccountId"
           },
           ":stackset/SC-",
           {
            "Ref": "AWS::AccountId"
           },
           "-pp-"
          ]
         ]
        }
       }
      ],
      "status-details": {
       "status": [
        "RUNNING"
       ]
      },
      "action": [
       "DELETE"
      ]
     },
     "detail-type": [
      "CloudFormation StackSet Operation Status Change"
     ],
     "region": [
      {
       "Ref": "AWS::Region"
      }
     ],
     "source": [
      "aws.cloudformation"
     ]
    },
    "State": "ENABLED",
    "Targets": [
     {
      "Arn": {
       "Fn::GetAtt": [
        "DeploymentConstructDeploymentEventDisableInProgressF86F99D9",
        "Arn"
       ]
      },
      "Id": "Target0"
     }
    ]
   }
  },
  "DeploymentConstructDeploymentDisableInProgressRuleAllowEventRuleModularCloudStudioOnAwsStackDeploymentConstructDeploymentEventDisableInProgressCE36EF538FAC6CEB": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "DeploymentConstructDeploymentEventDisableInProgressF86F99D9",
      "Arn"
     ]
    },
    "Principal": "events.amazonaws.com",
    "SourceArn": {
     "Fn::GetAtt": [
      "DeploymentConstructDeploymentDisableInProgressRule97030268",
      "Arn"
     ]
    }
   }
  },
  "DeploymentConstructDeploymentEventDisableSucceededLogs537BFFF8": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/DeploymentConstruct/DeploymentEventDisableSucceeded"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "DeploymentConstructDeploymentEventDisableSucceededEE8DCBE8": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/2ee29e66fdbbfd9a072ddcf6604918ab08f09df3ec7958b011932e179681db7e.zip"
    },
    "Description": "Lambda function to consume disable_succeeded events from module deployments",
    "Environment": {
     "Variables": {
      "ENABLED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94"
      },
      "REGIONS_TABLE_NAME": {
       "Ref": "StorageConstructRegionsTableC985427B"
      },
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0",
      "INSTRUCTION_GENERATOR_LABEL": "InstructionGenerationLambdaArn",
      "METRICS_QUEUE_URL": {
       "Ref": "OperationalMetricsConstructModuleStatusMetricQueue8FB49372"
      },
      "METRICS_OPT_IN_PARAMETER": {
       "Fn::FindInMap": [
        "OpsMetricsOptInParameter",
        "SendAnonymizedData",
        "Data"
       ]
      },
      "SOLUTION_ID": "SO0282",
      "SOLUTION_VERSION": "v1.1.0"
     }
    },
    "Handler": "disable_succeeded.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "DeploymentConstructDeploymentEventDisableSucceededLogs537BFFF8"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "DeploymentConstructDeploymentEventLambdaRole46C7CFFE",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "DeploymentConstructDeploymentEventDisableSucceededLogsPolicy82DE044C",
    "DeploymentConstructDeploymentEventLambdaRole46C7CFFE"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "DeploymentConstructDeploymentEventDisableSucceededLogsPolicy82DE044C": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "DeploymentConstructDeploymentEventDisableSucceededLogs537BFFF8",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "DeploymentConstructDeploymentEventDisableSucceededLogsPolicy82DE044C",
    "Roles": [
     {
      "Ref": "DeploymentConstructDeploymentEventLambdaRole46C7CFFE"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<DeploymentConstructDeploymentEventDisableSucceededEE8DCBE8>:*"
       ]
      }
     ]
    }
   }
  },
  "DeploymentConstructDeploymentDisableSucceededRule7E3CCF8B": {
   "Type": "AWS::Events::Rule",
   "Properties": {
    "EventPattern": {
     "account": [
      {
       "Ref": "AWS::AccountId"
      }
     ],
     "detail": {
      "stack-set-arn": [
       {
        "prefix": {
         "Fn::Join": [
          "",
          [
           "arn:",
           {
            "Ref": "AWS::Partition"
           },
           ":cloudformation:",
           {
            "Ref": "AWS::Region"
           },
           ":",
           {
            "Ref": "AWS::AccountId"
           },
           ":stackset/SC-",
           {
            "Ref": "AWS::AccountId"
           },
           "-pp-"
          ]
         ]
        }
       }
      ],
      "status-details": {
       "status": [
        "SUCCEEDED"
       ]
      },
      "action": [
       "DELETE"
      ]
     },
     "detail-type": [
      "CloudFormation StackSet Operation Status Change"
     ],
     "region": [
      {
       "Ref": "AWS::Region"
      }
     ],
     "source": [
      "aws.cloudformation"
     ]
    },
    "State": "ENABLED",
    "Targets": [
     {
      "Arn": {
       "Fn::GetAtt": [
        "DeploymentConstructDeploymentEventDisableSucceededEE8DCBE8",
        "Arn"
       ]
      },
      "Id": "Target0"
     }
    ]
   }
  },
  "DeploymentConstructDeploymentDisableSucceededRuleAllowEventRuleModularCloudStudioOnAwsStackDeploymentConstructDeploymentEventDisableSucceededCAEFA3E04CFF8D6E": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "DeploymentConstructDeploymentEventDisableSucceededEE8DCBE8",
      "Arn"
     ]
    },
    "Principal": "events.amazonaws.com",
    "SourceArn": {
     "Fn::GetAtt": [
      "DeploymentConstructDeploymentDisableSucceededRule7E3CCF8B",
      "Arn"
     ]
    }
   }
  },
  "DeploymentConstructDeploymentEventDisableFailedLogs3663AE2E": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/DeploymentConstruct/DeploymentEventDisableFailed"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "DeploymentConstructDeploymentEventDisableFailedBD097A2D": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/bf2cc17859a9c57031bf18168c6d92530a88c326b20824a3a892499508745336.zip"
    },
    "Description": "Lambda function to consume disable_failed events from module deployments",
    "Environment": {
     "Variables": {
      "ENABLED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94"
      },
      "REGIONS_TABLE_NAME": {
       "Ref": "StorageConstructRegionsTableC985427B"
      },
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0",
      "INSTRUCTION_GENERATOR_LABEL": "InstructionGenerationLambdaArn",
      "METRICS_QUEUE_URL": {
       "Ref": "OperationalMetricsConstructModuleStatusMetricQueue8FB49372"
      },
      "METRICS_OPT_IN_PARAMETER": {
       "Fn::FindInMap": [
        "OpsMetricsOptInParameter",
        "SendAnonymizedData",
        "Data"
       ]
      },
      "SOLUTION_ID": "SO0282",
      "SOLUTION_VERSION": "v1.1.0"
     }
    },
    "Handler": "disable_failed.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "DeploymentConstructDeploymentEventDisableFailedLogs3663AE2E"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "DeploymentConstructDeploymentEventLambdaRole46C7CFFE",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "DeploymentConstructDeploymentEventDisableFailedLogsPolicyF1F5BECD",
    "DeploymentConstructDeploymentEventLambdaRole46C7CFFE"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "DeploymentConstructDeploymentEventDisableFailedLogsPolicyF1F5BECD": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "DeploymentConstructDeploymentEventDisableFailedLogs3663AE2E",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "DeploymentConstructDeploymentEventDisableFailedLogsPolicyF1F5BECD",
    "Roles": [
     {
      "Ref": "DeploymentConstructDeploymentEventLambdaRole46C7CFFE"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<DeploymentConstructDeploymentEventDisableFailedBD097A2D>:*"
       ]
      }
     ]
    }
   }
  },
  "DeploymentConstructDeploymentDisableFailedRuleC687D747": {
   "Type": "AWS::Events::Rule",
   "Properties": {
    "EventPattern": {
     "account": [
      {
       "Ref": "AWS::AccountId"
      }
     ],
     "detail": {
      "stack-set-arn": [
       {
        "prefix": {
         "Fn::Join": [
          "",
          [
           "arn:",
           {
            "Ref": "AWS::Partition"
           },
           ":cloudformation:",
           {
            "Ref": "AWS::Region"
           },
           ":",
           {
            "Ref": "AWS::AccountId"
           },
           ":stackset/SC-",
           {
            "Ref": "AWS::AccountId"
           },
           "-pp-"
          ]
         ]
        }
       }
      ],
      "status-details": {
       "status": [
        "INOPERABLE"
       ],
       "detailed-status": [
        "INOPERABLE"
       ]
      }
     },
     "detail-type": [
      "CloudFormation StackSet StackInstance Status Change"
     ],
     "region": [
      {
       "Ref": "AWS::Region"
      }
     ],
     "source": [
      "aws.cloudformation"
     ]
    },
    "State": "ENABLED",
    "Targets": [
     {
      "Arn": {
       "Fn::GetAtt": [
        "DeploymentConstructDeploymentEventDisableFailedBD097A2D",
        "Arn"
       ]
      },
      "Id": "Target0"
     }
    ]
   }
  },
  "DeploymentConstructDeploymentDisableFailedRuleAllowEventRuleModularCloudStudioOnAwsStackDeploymentConstructDeploymentEventDisableFailedEBD04BAA70CE30D7": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "DeploymentConstructDeploymentEventDisableFailedBD097A2D",
      "Arn"
     ]
    },
    "Principal": "events.amazonaws.com",
    "SourceArn": {
     "Fn::GetAtt": [
      "DeploymentConstructDeploymentDisableFailedRuleC687D747",
      "Arn"
     ]
    }
   }
  },
  "UIConstructWebS3LoggingBucketF47C78B9": {
   "Type": "AWS::S3::Bucket",
   "Properties": {
    "BucketEncryption": {
     "ServerSideEncryptionConfiguration": [
      {
       "ServerSideEncryptionByDefault": {
        "SSEAlgorithm": "AES256"
       }
      }
     ]
    },
    "LoggingConfiguration": {
     "LogFilePrefix": "ui-s3-log/"
    },
    "PublicAccessBlockConfiguration": {
     "BlockPublicAcls": true,
     "BlockPublicPolicy": true,
     "IgnorePublicAcls": true,
     "RestrictPublicBuckets": true
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "VersioningConfiguration": {
     "Status": "Enabled"
    }
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "cfn_nag": {
     "rules_to_suppress": [
      {
       "id": "W35",
       "reason": "This S3 bucket is used as the access logging bucket for another bucket"
      }
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The solution does not control geo restriction.",
       "id": "AwsSolutions-CFR1"
      },
      {
       "reason": "No need to enable WAF.",
       "id": "AwsSolutions-CFR2"
      },
      {
       "reason": "No control on the solution side as it is using the CloudFront default certificate.",
       "id": "AwsSolutions-CFR4"
      },
      {
       "reason": "False alarm. The AWS-cloudfront-s3 solutions construct provides Origin-Access-Control by default.",
       "id": "AwsSolutions-CFR7"
      }
     ]
    }
   }
  },
  "UIConstructWebS3LoggingBucketPolicyD610E3F2": {
   "Type": "AWS::S3::BucketPolicy",
   "Properties": {
    "Bucket": {
     "Ref": "UIConstructWebS3LoggingBucketF47C78B9"
    },
    "PolicyDocument": {
     "Statement": [
      {
       "Action": "s3:*",
       "Condition": {
        "Bool": {
         "aws:SecureTransport": "false"
        }
       },
       "Effect": "Deny",
       "Principal": {
        "AWS": "*"
       },
       "Resource": [
        {
         "Fn::GetAtt": [
          "UIConstructWebS3LoggingBucketF47C78B9",
          "Arn"
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "UIConstructWebS3LoggingBucketF47C78B9",
             "Arn"
            ]
           },
           "/*"
          ]
         ]
        }
       ]
      },
      {
       "Action": "s3:PutObject",
       "Condition": {
        "ArnLike": {
         "aws:SourceArn": {
          "Fn::GetAtt": [
           "UIConstructWebS3LoggingBucketF47C78B9",
           "Arn"
          ]
         }
        },
        "StringEquals": {
         "aws:SourceAccount": {
          "Ref": "AWS::AccountId"
         }
        }
       },
       "Effect": "Allow",
       "Principal": {
        "Service": "logging.s3.amazonaws.com"
       },
       "Resource": {
        "Fn::Join": [
         "",
         [
          {
           "Fn::GetAtt": [
            "UIConstructWebS3LoggingBucketF47C78B9",
            "Arn"
           ]
          },
          "/ui-s3-log/*"
         ]
        ]
       }
      },
      {
       "Action": "s3:PutObject",
       "Condition": {
        "ArnLike": {
         "aws:SourceArn": {
          "Fn::GetAtt": [
           "UIConstructWebS3Bucket53F62957",
           "Arn"
          ]
         }
        },
        "StringEquals": {
         "aws:SourceAccount": {
          "Ref": "AWS::AccountId"
         }
        }
       },
       "Effect": "Allow",
       "Principal": {
        "Service": "logging.s3.amazonaws.com"
       },
       "Resource": {
        "Fn::Join": [
         "",
         [
          {
           "Fn::GetAtt": [
            "UIConstructWebS3LoggingBucketF47C78B9",
            "Arn"
           ]
          },
          "/*"
         ]
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The solution does not control geo restriction.",
       "id": "AwsSolutions-CFR1"
      },
      {
       "reason": "No need to enable WAF.",
       "id": "AwsSolutions-CFR2"
      },
      {
       "reason": "No control on the solution side as it is using the CloudFront default certificate.",
       "id": "AwsSolutions-CFR4"
      },
      {
       "reason": "False alarm. The AWS-cloudfront-s3 solutions construct provides Origin-Access-Control by default.",
       "id": "AwsSolutions-CFR7"
      }
     ]
    }
   }
  },
  "UIConstructWebS3Bucket53F62957": {
   "Type": "AWS::S3::Bucket",
   "Properties": {
    "AccessControl": "Private",
    "BucketEncryption": {
     "ServerSideEncryptionConfiguration": [
      {
       "ServerSideEncryptionByDefault": {
        "SSEAlgorithm": "AES256"
       }
      }
     ]
    },
    "LifecycleConfiguration": {
     "Rules": [
      {
       "NoncurrentVersionTransitions": [
        {
         "StorageClass": "GLACIER",
         "TransitionInDays": 90
        }
       ],
       "Status": "Enabled"
      }
     ]
    },
    "LoggingConfiguration": {
     "DestinationBucketName": {
      "Ref": "UIConstructWebS3LoggingBucketF47C78B9"
     }
    },
    "PublicAccessBlockConfiguration": {
     "BlockPublicAcls": true,
     "BlockPublicPolicy": true,
     "IgnorePublicAcls": true,
     "RestrictPublicBuckets": true
    },
    "Tags": [
     {
      "Key": "aws-cdk:cr-owned:64aac7fb",
      "Value": "true"
     },
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "VersioningConfiguration": {
     "Status": "Enabled"
    }
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The solution does not control geo restriction.",
       "id": "AwsSolutions-CFR1"
      },
      {
       "reason": "No need to enable WAF.",
       "id": "AwsSolutions-CFR2"
      },
      {
       "reason": "No control on the solution side as it is using the CloudFront default certificate.",
       "id": "AwsSolutions-CFR4"
      },
      {
       "reason": "False alarm. The AWS-cloudfront-s3 solutions construct provides Origin-Access-Control by default.",
       "id": "AwsSolutions-CFR7"
      }
     ]
    }
   }
  },
  "UIConstructWebS3BucketPolicy7C259B2E": {
   "Type": "AWS::S3::BucketPolicy",
   "Properties": {
    "Bucket": {
     "Ref": "UIConstructWebS3Bucket53F62957"
    },
    "PolicyDocument": {
     "Statement": [
      {
       "Action": "s3:*",
       "Condition": {
        "Bool": {
         "aws:SecureTransport": "false"
        }
       },
       "Effect": "Deny",
       "Principal": {
        "AWS": "*"
       },
       "Resource": [
        {
         "Fn::GetAtt": [
          "UIConstructWebS3Bucket53F62957",
          "Arn"
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "UIConstructWebS3Bucket53F62957",
             "Arn"
            ]
           },
           "/*"
          ]
         ]
        }
       ]
      },
      {
       "Action": "s3:GetObject",
       "Condition": {
        "StringEquals": {
         "AWS:SourceArn": {
          "Fn::Join": [
           "",
           [
            "arn:",
            {
             "Ref": "AWS::Partition"
            },
            ":cloudfront::",
            {
             "Ref": "AWS::AccountId"
            },
            ":distribution/",
            {
             "Ref": "UIConstructWebCloudFrontDistribution517B16CD"
            }
           ]
          ]
         }
        }
       },
       "Effect": "Allow",
       "Principal": {
        "Service": "cloudfront.amazonaws.com"
       },
       "Resource": {
        "Fn::Join": [
         "",
         [
          {
           "Fn::GetAtt": [
            "UIConstructWebS3Bucket53F62957",
            "Arn"
           ]
          },
          "/*"
         ]
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    }
   },
   "Metadata": {
    "cfn_nag": {
     "rules_to_suppress": [
      {
       "id": "F16",
       "reason": "Public website bucket policy requires a wildcard principal"
      }
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The solution does not control geo restriction.",
       "id": "AwsSolutions-CFR1"
      },
      {
       "reason": "No need to enable WAF.",
       "id": "AwsSolutions-CFR2"
      },
      {
       "reason": "No control on the solution side as it is using the CloudFront default certificate.",
       "id": "AwsSolutions-CFR4"
      },
      {
       "reason": "False alarm. The AWS-cloudfront-s3 solutions construct provides Origin-Access-Control by default.",
       "id": "AwsSolutions-CFR7"
      }
     ]
    }
   }
  },
  "UIConstructWebCloudfrontLoggingBucketAccessLogD0677398": {
   "Type": "AWS::S3::Bucket",
   "Properties": {
    "BucketEncryption": {
     "ServerSideEncryptionConfiguration": [
      {
       "ServerSideEncryptionByDefault": {
        "SSEAlgorithm": "AES256"
       }
      }
     ]
    },
    "PublicAccessBlockConfiguration": {
     "BlockPublicAcls": true,
     "BlockPublicPolicy": true,
     "IgnorePublicAcls": true,
     "RestrictPublicBuckets": true
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "VersioningConfiguration": {
     "Status": "Enabled"
    }
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "cfn_nag": {
     "rules_to_suppress": [
      {
       "id": "W35",
       "reason": "This S3 bucket is used as the access logging bucket for another bucket"
      }
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The solution does not control geo restriction.",
       "id": "AwsSolutions-CFR1"
      },
      {
       "reason": "No need to enable WAF.",
       "id": "AwsSolutions-CFR2"
      },
      {
       "reason": "No control on the solution side as it is using the CloudFront default certificate.",
       "id": "AwsSolutions-CFR4"
      },
      {
       "reason": "False alarm. The AWS-cloudfront-s3 solutions construct provides Origin-Access-Control by default.",
       "id": "AwsSolutions-CFR7"
      }
     ]
    }
   }
  },
  "UIConstructWebCloudfrontLoggingBucketAccessLogPolicy8CE0AE20": {
   "Type": "AWS::S3::BucketPolicy",
   "Properties": {
    "Bucket": {
     "Ref": "UIConstructWebCloudfrontLoggingBucketAccessLogD0677398"
    },
    "PolicyDocument": {
     "Statement": [
      {
       "Action": "s3:*",
       "Condition": {
        "Bool": {
         "aws:SecureTransport": "false"
        }
       },
       "Effect": "Deny",
       "Principal": {
        "AWS": "*"
       },
       "Resource": [
        {
         "Fn::GetAtt": [
          "UIConstructWebCloudfrontLoggingBucketAccessLogD0677398",
          "Arn"
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "UIConstructWebCloudfrontLoggingBucketAccessLogD0677398",
             "Arn"
            ]
           },
           "/*"
          ]
         ]
        }
       ]
      },
      {
       "Action": "s3:PutObject",
       "Condition": {
        "ArnLike": {
         "aws:SourceArn": {
          "Fn::GetAtt": [
           "UIConstructWebCloudfrontLoggingBucket9539A40F",
           "Arn"
          ]
         }
        },
        "StringEquals": {
         "aws:SourceAccount": {
          "Ref": "AWS::AccountId"
         }
        }
       },
       "Effect": "Allow",
       "Principal": {
        "Service": "logging.s3.amazonaws.com"
       },
       "Resource": {
        "Fn::Join": [
         "",
         [
          {
           "Fn::GetAtt": [
            "UIConstructWebCloudfrontLoggingBucketAccessLogD0677398",
            "Arn"
           ]
          },
          "/ui-cf-log/*"
         ]
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The solution does not control geo restriction.",
       "id": "AwsSolutions-CFR1"
      },
      {
       "reason": "No need to enable WAF.",
       "id": "AwsSolutions-CFR2"
      },
      {
       "reason": "No control on the solution side as it is using the CloudFront default certificate.",
       "id": "AwsSolutions-CFR4"
      },
      {
       "reason": "False alarm. The AWS-cloudfront-s3 solutions construct provides Origin-Access-Control by default.",
       "id": "AwsSolutions-CFR7"
      }
     ]
    }
   }
  },
  "UIConstructWebCloudfrontLoggingBucket9539A40F": {
   "Type": "AWS::S3::Bucket",
   "Properties": {
    "AccessControl": "LogDeliveryWrite",
    "BucketEncryption": {
     "ServerSideEncryptionConfiguration": [
      {
       "ServerSideEncryptionByDefault": {
        "SSEAlgorithm": "AES256"
       }
      }
     ]
    },
    "LoggingConfiguration": {
     "DestinationBucketName": {
      "Ref": "UIConstructWebCloudfrontLoggingBucketAccessLogD0677398"
     },
     "LogFilePrefix": "ui-cf-log/"
    },
    "OwnershipControls": {
     "Rules": [
      {
       "ObjectOwnership": "ObjectWriter"
      }
     ]
    },
    "PublicAccessBlockConfiguration": {
     "BlockPublicAcls": true,
     "BlockPublicPolicy": true,
     "IgnorePublicAcls": true,
     "RestrictPublicBuckets": true
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "VersioningConfiguration": {
     "Status": "Enabled"
    }
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The solution does not control geo restriction.",
       "id": "AwsSolutions-CFR1"
      },
      {
       "reason": "No need to enable WAF.",
       "id": "AwsSolutions-CFR2"
      },
      {
       "reason": "No control on the solution side as it is using the CloudFront default certificate.",
       "id": "AwsSolutions-CFR4"
      },
      {
       "reason": "False alarm. The AWS-cloudfront-s3 solutions construct provides Origin-Access-Control by default.",
       "id": "AwsSolutions-CFR7"
      }
     ]
    }
   }
  },
  "UIConstructWebCloudfrontLoggingBucketPolicy78F4AA40": {
   "Type": "AWS::S3::BucketPolicy",
   "Properties": {
    "Bucket": {
     "Ref": "UIConstructWebCloudfrontLoggingBucket9539A40F"
    },
    "PolicyDocument": {
     "Statement": [
      {
       "Action": "s3:*",
       "Condition": {
        "Bool": {
         "aws:SecureTransport": "false"
        }
       },
       "Effect": "Deny",
       "Principal": {
        "AWS": "*"
       },
       "Resource": [
        {
         "Fn::GetAtt": [
          "UIConstructWebCloudfrontLoggingBucket9539A40F",
          "Arn"
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "UIConstructWebCloudfrontLoggingBucket9539A40F",
             "Arn"
            ]
           },
           "/*"
          ]
         ]
        }
       ]
      }
     ],
     "Version": "2012-10-17"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The solution does not control geo restriction.",
       "id": "AwsSolutions-CFR1"
      },
      {
       "reason": "No need to enable WAF.",
       "id": "AwsSolutions-CFR2"
      },
      {
       "reason": "No control on the solution side as it is using the CloudFront default certificate.",
       "id": "AwsSolutions-CFR4"
      },
      {
       "reason": "False alarm. The AWS-cloudfront-s3 solutions construct provides Origin-Access-Control by default.",
       "id": "AwsSolutions-CFR7"
      }
     ]
    }
   }
  },
  "UIConstructWebCloudFrontOacB3D0A20B": {
   "Type": "AWS::CloudFront::OriginAccessControl",
   "Properties": {
    "OriginAccessControlConfig": {
     "Description": "Origin access control provisioned by aws-cloudfront-s3",
     "Name": {
      "Fn::Join": [
       "",
       [
        "aws-cloudfront-s3-Web-",
        {
         "Fn::Select": [
          2,
          {
           "Fn::Split": [
            "/",
            {
             "Ref": "AWS::StackId"
            }
           ]
          }
         ]
        }
       ]
      ]
     },
     "OriginAccessControlOriginType": "s3",
     "SigningBehavior": "always",
     "SigningProtocol": "sigv4"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The solution does not control geo restriction.",
       "id": "AwsSolutions-CFR1"
      },
      {
       "reason": "No need to enable WAF.",
       "id": "AwsSolutions-CFR2"
      },
      {
       "reason": "No control on the solution side as it is using the CloudFront default certificate.",
       "id": "AwsSolutions-CFR4"
      },
      {
       "reason": "False alarm. The AWS-cloudfront-s3 solutions construct provides Origin-Access-Control by default.",
       "id": "AwsSolutions-CFR7"
      }
     ]
    }
   }
  },
  "UIConstructWebResponseHeadersPolicyF2BAF82D": {
   "Type": "AWS::CloudFront::ResponseHeadersPolicy",
   "Properties": {
    "ResponseHeadersPolicyConfig": {
     "CustomHeadersConfig": {
      "Items": [
       {
        "Header": "Cache-Control",
        "Override": true,
        "Value": "no-store, no-cache"
       },
       {
        "Header": "Pragma",
        "Override": true,
        "Value": "no-cache"
       }
      ]
     },
     "Name": {
      "Fn::Join": [
       "",
       [
        "UiReponseHeadersPolicy-",
        {
         "Ref": "AWS::StackName"
        },
        "-",
        {
         "Fn::Join": [
          "",
          {
           "Fn::Split": [
            "-",
            {
             "Fn::Select": [
              2,
              {
               "Fn::Split": [
                "/",
                {
                 "Ref": "AWS::StackId"
                }
               ]
              }
             ]
            }
           ]
          }
         ]
        }
       ]
      ]
     },
     "SecurityHeadersConfig": {
      "ContentSecurityPolicy": {
       "ContentSecurityPolicy": "default-src 'none'; object-src 'none'; upgrade-insecure-requests; script-src 'self'; style-src 'self'; img-src 'self' https://a0.awsstatic.com; connect-src 'self' https://*.amazonaws.com https://metrics.awssolutionsbuilder.com",
       "Override": true
      },
      "ContentTypeOptions": {
       "Override": true
      },
      "FrameOptions": {
       "FrameOption": "DENY",
       "Override": true
      },
      "StrictTransportSecurity": {
       "AccessControlMaxAgeSec": 47260800,
       "IncludeSubdomains": true,
       "Override": true
      },
      "XSSProtection": {
       "ModeBlock": true,
       "Override": true,
       "Protection": true
      }
     }
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The solution does not control geo restriction.",
       "id": "AwsSolutions-CFR1"
      },
      {
       "reason": "No need to enable WAF.",
       "id": "AwsSolutions-CFR2"
      },
      {
       "reason": "No control on the solution side as it is using the CloudFront default certificate.",
       "id": "AwsSolutions-CFR4"
      },
      {
       "reason": "False alarm. The AWS-cloudfront-s3 solutions construct provides Origin-Access-Control by default.",
       "id": "AwsSolutions-CFR7"
      }
     ]
    }
   }
  },
  "UIConstructWebCloudFrontDistribution517B16CD": {
   "Type": "AWS::CloudFront::Distribution",
   "Properties": {
    "DistributionConfig": {
     "CustomErrorResponses": [
      {
       "ErrorCode": 403,
       "ResponseCode": 200,
       "ResponsePagePath": "/index.html"
      }
     ],
     "DefaultCacheBehavior": {
      "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6",
      "Compress": true,
      "ResponseHeadersPolicyId": {
       "Ref": "UIConstructWebResponseHeadersPolicyF2BAF82D"
      },
      "TargetOriginId": "ModularCloudStudioOnAwsStackUIConstructWebCloudFrontDistributionOrigin1833CC289",
      "ViewerProtocolPolicy": "redirect-to-https"
     },
     "DefaultRootObject": "index.html",
     "Enabled": true,
     "HttpVersion": "http2",
     "IPV6Enabled": true,
     "Logging": {
      "Bucket": {
       "Fn::GetAtt": [
        "UIConstructWebCloudfrontLoggingBucket9539A40F",
        "RegionalDomainName"
       ]
      }
     },
     "Origins": [
      {
       "DomainName": {
        "Fn::GetAtt": [
         "UIConstructWebS3Bucket53F62957",
         "RegionalDomainName"
        ]
       },
       "Id": "ModularCloudStudioOnAwsStackUIConstructWebCloudFrontDistributionOrigin1833CC289",
       "OriginAccessControlId": {
        "Fn::GetAtt": [
         "UIConstructWebCloudFrontOacB3D0A20B",
         "Id"
        ]
       },
       "S3OriginConfig": {
        "OriginAccessIdentity": ""
       }
      }
     ]
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "cfn_nag": {
     "rules_to_suppress": [
      {
       "id": "W70",
       "reason": "Since the distribution uses the CloudFront domain name, CloudFront automatically sets the security policy to TLSv1 regardless of the value of MinimumProtocolVersion"
      }
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The solution does not control geo restriction.",
       "id": "AwsSolutions-CFR1"
      },
      {
       "reason": "No need to enable WAF.",
       "id": "AwsSolutions-CFR2"
      },
      {
       "reason": "No control on the solution side as it is using the CloudFront default certificate.",
       "id": "AwsSolutions-CFR4"
      },
      {
       "reason": "False alarm. The AWS-cloudfront-s3 solutions construct provides Origin-Access-Control by default.",
       "id": "AwsSolutions-CFR7"
      }
     ]
    }
   }
  },
  "ServiceCatalogExecutionRoleC180B941": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "AWS": {
         "Fn::Join": [
          "",
          [
           "arn:",
           {
            "Ref": "AWS::Partition"
           },
           ":iam::",
           {
            "Ref": "AWS::AccountId"
           },
           ":root"
          ]
         ]
        },
        "Service": "cloudformation.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Policies": [
     {
      "PolicyDocument": {
       "Statement": [
        {
         "NotAction": [
          "iam:*",
          "organizations:*",
          "account:*"
         ],
         "Effect": "Allow",
         "Resource": "*"
        },
        {
         "Action": [
          "account:GetAccountInformation",
          "account:ListRegions",
          "iam:AddRoleToInstanceProfile",
          "iam:AttachRolePolicy",
          "iam:CreateInstanceProfile",
          "iam:CreatePolicy",
          "iam:CreatePolicyVersion",
          "iam:CreateRole",
          "iam:CreateServiceLinkedRole",
          "iam:DeleteInstanceProfile",
          "iam:DeletePolicy",
          "iam:DeletePolicyVersion",
          "iam:DeleteRole",
          "iam:DeleteRolePolicy",
          "iam:DeleteServiceLinkedRole",
          "iam:DetachRolePolicy",
          "iam:GetInstanceProfile",
          "iam:GetPolicy",
          "iam:GetPolicyVersion",
          "iam:GetRole",
          "iam:GetRolePolicy",
          "iam:ListAttachedRolePolicies",
          "iam:ListInstanceProfileTags",
          "iam:ListInstanceProfiles",
          "iam:ListInstanceProfilesForRole",
          "iam:ListPolicies",
          "iam:ListPolicyVersions",
          "iam:ListRolePolicies",
          "iam:ListRoleTags",
          "iam:ListRoles",
          "iam:PassRole",
          "iam:PutRolePolicy",
          "iam:RemoveRoleFromInstanceProfile",
          "iam:TagInstanceProfile",
          "iam:TagRole",
          "iam:UntagInstanceProfile",
          "iam:UntagRole",
          "iam:UpdateRole",
          "iam:UpdateRoleDescription"
         ],
         "Effect": "Allow",
         "Resource": "*"
        }
       ],
       "Version": "2012-10-17"
      },
      "PolicyName": "PowerUserWithIAMAccess"
     }
    ],
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "IAM_NO_INLINE_POLICY_CHECK",
      "IAM_POLICYDOCUMENT_NO_WILDCARD_RESOURCE",
      "IAM_ROLE_NO_WILDCARD_RESOURCE_ON_PASSROLE"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Custom resource needs to be able to create any iam resource",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "Inbound traffic is only allowed on port 443 within VPC range.cdk-nag was unable to evaluate rule AwsSolutions-EC23 due to CfnDynamicReference.",
       "id": "CdkNagValidationFailure"
      },
      {
       "reason": "CDK adds AWSLambdaBasicExecutionRole which just provides logging/x-ray access",
       "id": "AwsSolutions-IAM4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaFunctionServiceRole2C4FFC9A": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "lambda.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Policies": [
     {
      "PolicyDocument": {
       "Statement": [
        {
         "Action": [
          "logs:CreateLogGroup",
          "logs:CreateLogStream",
          "logs:PutLogEvents"
         ],
         "Effect": "Allow",
         "Resource": {
          "Fn::Join": [
           "",
           [
            "arn:",
            {
             "Ref": "AWS::Partition"
            },
            ":logs:",
            {
             "Ref": "AWS::Region"
            },
            ":",
            {
             "Ref": "AWS::AccountId"
            },
            ":log-group:/aws/lambda/*"
           ]
          ]
         }
        }
       ],
       "Version": "2012-10-17"
      },
      "PolicyName": "LambdaFunctionServiceRolePolicy"
     }
    ],
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "IAM_NO_INLINE_POLICY_CHECK"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaFunctionServiceRoleDefaultPolicy7806739F": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "cloudformation:CreateStackInstances",
        "cloudformation:CreateStackSet",
        "cloudformation:DeleteStackInstances",
        "cloudformation:DeleteStackSet",
        "cloudformation:DescribeStackInstance",
        "cloudformation:DescribeStackSet",
        "cloudformation:DescribeStackSetOperation",
        "cloudformation:GetTemplateSummary",
        "cloudformation:ListStackInstances",
        "cloudformation:UpdateStackSet",
        "ec2:DescribeAvailabilityZones",
        "s3:GetObject",
        "servicecatalog:DescribeProvisioningParameters",
        "servicecatalog:ListLaunchPaths",
        "servicecatalog:SearchProducts",
        "servicecatalog:TerminateProvisionedProduct",
        "xray:PutTelemetryRecords",
        "xray:PutTraceSegments"
       ],
       "Effect": "Allow",
       "Resource": "*"
      },
      {
       "Action": [
        "dynamodb:BatchGetItem",
        "dynamodb:BatchWriteItem",
        "dynamodb:DeleteItem",
        "dynamodb:GetItem",
        "dynamodb:PutItem",
        "dynamodb:Query",
        "dynamodb:Scan",
        "dynamodb:UpdateItem"
       ],
       "Effect": "Allow",
       "Resource": [
        {
         "Fn::GetAtt": [
          "StorageConstructExternalModulesTable7BD8EF6F",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "StorageConstructMcsDynamoDbTableLock85A89D6F",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "StorageConstructRegionsTableC985427B",
          "Arn"
         ]
        }
       ]
      },
      {
       "Action": [
        "servicecatalog:AssociateProductWithPortfolio",
        "servicecatalog:CreateConstraint",
        "servicecatalog:CreateProduct",
        "servicecatalog:CreateProvisioningArtifact",
        "servicecatalog:DeleteProduct",
        "servicecatalog:DeleteProvisioningArtifact",
        "servicecatalog:DescribeProduct",
        "servicecatalog:DescribeProductAsAdmin",
        "servicecatalog:DescribeProvisionedProduct",
        "servicecatalog:DescribeProvisioningArtifact",
        "servicecatalog:DescribeProvisioningParameters",
        "servicecatalog:DisassociateProductFromPortfolio",
        "servicecatalog:ProvisionProduct",
        "servicecatalog:TagResource"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::Join": [
         "",
         [
          "arn:",
          {
           "Ref": "AWS::Partition"
          },
          ":catalog:*:",
          {
           "Ref": "AWS::AccountId"
          },
          ":product/*"
         ]
        ]
       }
      },
      {
       "Action": "servicecatalog:CreateConstraint",
       "Effect": "Allow",
       "Resource": {
        "Fn::Join": [
         "",
         [
          "arn:",
          {
           "Ref": "AWS::Partition"
          },
          ":catalog:",
          {
           "Ref": "AWS::Region"
          },
          ":",
          {
           "Ref": "AWS::AccountId"
          },
          ":portfolio/",
          {
           "Ref": "McsModulesServiceCatalogPortfolioCB9CECD1"
          }
         ]
        ]
       }
      },
      {
       "Action": [
        "servicecatalog:AssociateProductWithPortfolio",
        "servicecatalog:CreatePortfolio",
        "servicecatalog:DeletePortfolio",
        "servicecatalog:DescribePortfolio"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::Join": [
         "",
         [
          "arn:",
          {
           "Ref": "AWS::Partition"
          },
          ":catalog:*:",
          {
           "Ref": "AWS::AccountId"
          },
          ":portfolio/*"
         ]
        ]
       }
      },
      {
       "Action": "iam:PassRole",
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "ServiceCatalogExecutionRoleC180B941",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "ApiConstructCognitoApiGatewayLambdaFunctionServiceRoleDefaultPolicy7806739F",
    "Roles": [
     {
      "Ref": "ApiConstructCognitoApiGatewayLambdaFunctionServiceRole2C4FFC9A"
     }
    ]
   },
   "Metadata": {
    "cfn_nag": {
     "rules_to_suppress": [
      {
       "id": "W12",
       "reason": "Lambda needs the following minimum required permissions to send trace data to X-Ray and access ENIs in a VPC."
      }
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/6628264f940d806c48b409ec2633276637d150a6e4d9f7d8cec9b5423983efb2.zip"
    },
    "Description": "MCS Lambda Endpoint",
    "Environment": {
     "Variables": {
      "MCS_VERSION": "v1.1.0",
      "SOLUTION_ID": "SO0282",
      "REGISTERED_MODULE_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7"
      },
      "ENABLED_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94"
      },
      "MODULES_MAPPING_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableModulesMapping4D272082"
      },
      "PARTNER_MODULES_TABLE_NAME": {
       "Ref": "StorageConstructExternalModulesTable7BD8EF6F"
      },
      "LOCK_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableLock85A89D6F"
      },
      "PORTFOLIO_ID": {
       "Ref": "McsModulesServiceCatalogPortfolioCB9CECD1"
      },
      "STACK_ID": {
       "Ref": "AWS::StackId"
      },
      "DEPLOYMENT_ID": {
       "Fn::Join": [
        "",
        [
         "mcs-",
         {
          "Fn::Select": [
           2,
           {
            "Fn::Split": [
             "/",
             {
              "Ref": "AWS::StackId"
             }
            ]
           }
          ]
         }
        ]
       ]
      },
      "REGIONS_TABLE_NAME": {
       "Ref": "StorageConstructRegionsTableC985427B"
      },
      "SPOKE_INFRA_SERVICE_CATALOG_PRODUCT_NAME": "Spoke Region Infrastructure SPOKE",
      "ACCOUNT_ID": {
       "Ref": "AWS::AccountId"
      },
      "ALLOW_ORIGIN": {
       "Fn::Join": [
        "",
        [
         "https://",
         {
          "Fn::GetAtt": [
           "UIConstructWebCloudFrontDistribution517B16CD",
           "DomainName"
          ]
         }
        ]
       ]
      },
      "ADMIN_ROLE_ARN": {
       "Fn::GetAtt": [
        "ServiceCatalogExecutionRoleC180B941",
        "Arn"
       ]
      },
      "EXECUTION_ROLE_NAME": {
       "Ref": "ServiceCatalogExecutionRoleC180B941"
      },
      "SUPPORTED_REGIONS": "us-east-1,us-east-2,us-west-1,us-west-2,eu-north-1,eu-west-1,eu-west-2,eu-west-3,eu-central-1,ap-northeast-1,ap-northeast-2,ap-south-1,ap-southeast-1,ap-southeast-2,ca-central-1,sa-east-1",
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0",
      "DEREGISTER_STATE_MACHINE_ARN": {
       "Ref": "DeregisterStateMachineC2A35F3D"
      },
      "REGISTER_STATE_MACHINE_ARN": {
       "Ref": "RegisterStateMachineDAC291DA"
      },
      "PARTNER_MODULES_SYNC_STATE_MACHINE_ARN": {
       "Ref": "PartnerModulesConstructStateMachineD146B721"
      }
     }
    },
    "Handler": "index.lambda_handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "MCSApiLambdaLogs0F8081F9"
     }
    },
    "MemorySize": 1024,
    "Role": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunctionServiceRole2C4FFC9A",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 600,
    "TracingConfig": {
     "Mode": "Active"
    }
   },
   "DependsOn": [
    "ApiConstructCognitoApiGatewayLambdaFunctionServiceRoleDefaultPolicy7806739F",
    "ApiConstructCognitoApiGatewayLambdaFunctionServiceRole2C4FFC9A"
   ],
   "Metadata": {
    "cfn_nag": {
     "rules_to_suppress": [
      {
       "id": "W58",
       "reason": "Lambda functions has the required permission to write CloudWatch Logs. It uses custom policy instead of arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole with tighter permissions."
      },
      {
       "id": "W89",
       "reason": "This is not a rule for the general case, just for specific use cases/industries"
      },
      {
       "id": "W92",
       "reason": "Impossible for us to define the correct concurrency for clients"
      }
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      },
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayApiAccessLogGroup7B614D91": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "cfn_nag": {
     "rules_to_suppress": [
      {
       "id": "W86",
       "reason": "Retention period for CloudWatchLogs LogGroups are set to 'Never Expire' to preserve customer data indefinitely"
      },
      {
       "id": "W84",
       "reason": "By default CloudWatchLogs LogGroups data is encrypted using the CloudWatch server-side encryption keys (AWS Managed Keys)"
      }
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B": {
   "Type": "AWS::ApiGateway::RestApi",
   "Properties": {
    "EndpointConfiguration": {
     "Types": [
      "EDGE"
     ]
    },
    "Name": "LambdaRestApi",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiDeployment6A7DA6A5d31b78e0c09f88cea108d31eb300689d": {
   "Type": "AWS::ApiGateway::Deployment",
   "Properties": {
    "Description": "Automatically created by the RestApi construct",
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "DependsOn": [
    "ApiConstructCognitoApiGatewayLambdaRestApiproxyANY98578703",
    "ApiConstructCognitoApiGatewayLambdaRestApiproxyOPTIONS7C5F061D",
    "ApiConstructCognitoApiGatewayLambdaRestApiproxy8293BAFA",
    "ApiConstructCognitoApiGatewayLambdaRestApiANY7C20EE1E",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesderegisteredOPTIONS99954752",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesderegisteredPOST70489E0A",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesderegistered644C0E2B",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesdisabledOPTIONSAB7280A7",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesdisabledPOST0C9FD03A",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesdisabledD8057B54",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledGET33345FA0",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledOPTIONS788ADF09",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledPOST853CED6B",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledB8DF564A",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesGET5F52773F",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesOPTIONSDCDDCDF6",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnerGETD30F6F1F",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnerOPTIONSFFDAF510",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulespartner24DB1750",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnersyncOPTIONS4AE53C7A",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnersyncPUT819245A9",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnersync10C1EAC0",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesPOST7E59C7E7",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredGET84C02F36",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredinputsGET83C089DF",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredinputsOPTIONS41D4F865",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredinputsC8F11BB2",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredOPTIONS3CC543E3",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredPOST5DE7871A",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesregistered87735B2F",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesF3CCE545",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesvalidateGETF91B337C",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesvalidateOPTIONS62EF3231",
    "ApiConstructCognitoApiGatewayLambdaRestApimodulesvalidate520231BA",
    "ApiConstructCognitoApiGatewayLambdaRestApiOPTIONSCAA3922F",
    "ApiConstructCognitoApiGatewayLambdaRestApiregionsGET9C3A43A6",
    "ApiConstructCognitoApiGatewayLambdaRestApiregionsOPTIONS1FD7CD5B",
    "ApiConstructCognitoApiGatewayLambdaRestApiregionsPUT006033B3",
    "ApiConstructCognitoApiGatewayLambdaRestApiregionsD8F039EF",
    "ApiConstructCognitoApiGatewayLambdaRestApiDeregisteredModuleRequestBodyModel7E02A8AD",
    "ApiConstructCognitoApiGatewayLambdaRestApiDisabledModuleRequestBodyModel89DD9638",
    "ApiConstructCognitoApiGatewayLambdaRestApiEnabledModuleRequestBodyModelC9F3F90A",
    "ApiConstructCognitoApiGatewayLambdaRestApiExternalModuleRegisterRequestBodyModelE9E7FA7D",
    "ApiConstructCognitoApiGatewayLambdaRestApiRegionRequestBodyModel7B23A7BD",
    "ApiConstructValidateRequestBodyRequestValidator2D2F5346",
    "ApiConstructValidateRequestParametersRequestValidator8597A856"
   ],
   "Metadata": {
    "aws:cdk:do-not-refactor": true,
    "cfn_nag": {
     "rules_to_suppress": [
      {
       "id": "W45",
       "reason": "ApiGateway has AccessLogging enabled in AWS::ApiGateway::Stage resource, but cfn_nag checks for it in AWS::ApiGateway::Deployment resource"
      }
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A": {
   "Type": "AWS::ApiGateway::Stage",
   "Properties": {
    "AccessLogSetting": {
     "DestinationArn": {
      "Fn::GetAtt": [
       "MCSApiAccessLogs78256D33",
       "Arn"
      ]
     },
     "Format": "{\"requestId\":\"$context.requestId\",\"ip\":\"$context.identity.sourceIp\",\"user\":\"$context.identity.user\",\"caller\":\"$context.identity.caller\",\"requestTime\":\"$context.requestTime\",\"httpMethod\":\"$context.httpMethod\",\"resourcePath\":\"$context.resourcePath\",\"status\":\"$context.status\",\"protocol\":\"$context.protocol\",\"responseLength\":\"$context.responseLength\"}"
    },
    "DeploymentId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeployment6A7DA6A5d31b78e0c09f88cea108d31eb300689d"
    },
    "MethodSettings": [
     {
      "DataTraceEnabled": false,
      "HttpMethod": "*",
      "LoggingLevel": "ERROR",
      "ResourcePath": "/*",
      "ThrottlingBurstLimit": 10,
      "ThrottlingRateLimit": 50
     }
    ],
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    },
    "StageName": "prod",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "TracingEnabled": true
   },
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "API_GW_CACHE_ENABLED_AND_ENCRYPTED"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiOPTIONSCAA3922F": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "ApiKeyRequired": false,
    "AuthorizationType": "NONE",
    "HttpMethod": "OPTIONS",
    "Integration": {
     "IntegrationResponses": [
      {
       "ResponseParameters": {
        "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-amz-user-agent'",
        "method.response.header.Access-Control-Allow-Origin": {
         "Fn::Join": [
          "",
          [
           "'https://",
           {
            "Fn::GetAtt": [
             "UIConstructWebCloudFrontDistribution517B16CD",
             "DomainName"
            ]
           },
           "'"
          ]
         ]
        },
        "method.response.header.Vary": "'Origin'",
        "method.response.header.Access-Control-Allow-Methods": "'GET,POST,PUT,DELETE'"
       },
       "StatusCode": "204"
      }
     ],
     "RequestTemplates": {
      "application/json": "{ statusCode: 200 }"
     },
     "Type": "MOCK"
    },
    "MethodResponses": [
     {
      "ResponseParameters": {
       "method.response.header.Access-Control-Allow-Headers": true,
       "method.response.header.Access-Control-Allow-Origin": true,
       "method.response.header.Vary": true,
       "method.response.header.Access-Control-Allow-Methods": true
      },
      "StatusCode": "204"
     }
    ],
    "ResourceId": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B",
      "RootResourceId"
     ]
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiproxy8293BAFA": {
   "Type": "AWS::ApiGateway::Resource",
   "Properties": {
    "ParentId": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B",
      "RootResourceId"
     ]
    },
    "PathPart": "{proxy+}",
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiproxyOPTIONS7C5F061D": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "ApiKeyRequired": false,
    "AuthorizationType": "NONE",
    "HttpMethod": "OPTIONS",
    "Integration": {
     "IntegrationResponses": [
      {
       "ResponseParameters": {
        "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-amz-user-agent'",
        "method.response.header.Access-Control-Allow-Origin": {
         "Fn::Join": [
          "",
          [
           "'https://",
           {
            "Fn::GetAtt": [
             "UIConstructWebCloudFrontDistribution517B16CD",
             "DomainName"
            ]
           },
           "'"
          ]
         ]
        },
        "method.response.header.Vary": "'Origin'",
        "method.response.header.Access-Control-Allow-Methods": "'GET,POST,PUT,DELETE'"
       },
       "StatusCode": "204"
      }
     ],
     "RequestTemplates": {
      "application/json": "{ statusCode: 200 }"
     },
     "Type": "MOCK"
    },
    "MethodResponses": [
     {
      "ResponseParameters": {
       "method.response.header.Access-Control-Allow-Headers": true,
       "method.response.header.Access-Control-Allow-Origin": true,
       "method.response.header.Vary": true,
       "method.response.header.Access-Control-Allow-Methods": true
      },
      "StatusCode": "204"
     }
    ],
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiproxy8293BAFA"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiproxyANYApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DANYproxy10836500": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A"
       },
       "/*/*"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiproxyANYApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DANYproxy30BBE0FF": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/test-invoke-stage/*/*"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiproxyANY98578703": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "AuthorizationType": "COGNITO_USER_POOLS",
    "AuthorizerId": {
     "Ref": "ApiConstructCognitoApiGatewayCognitoAuthorizer2B1FACFC"
    },
    "HttpMethod": "ANY",
    "Integration": {
     "IntegrationHttpMethod": "POST",
     "Type": "AWS_PROXY",
     "Uri": {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":apigateway:",
        {
         "Ref": "AWS::Region"
        },
        ":lambda:path/2015-03-31/functions/",
        {
         "Fn::GetAtt": [
          "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
          "Arn"
         ]
        },
        "/invocations"
       ]
      ]
     }
    },
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiproxy8293BAFA"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiANYApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DANY504D1AFD": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A"
       },
       "/*/"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiANYApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DANY8CD86CC2": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/test-invoke-stage/*/"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiANY7C20EE1E": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "AuthorizationType": "COGNITO_USER_POOLS",
    "AuthorizerId": {
     "Ref": "ApiConstructCognitoApiGatewayCognitoAuthorizer2B1FACFC"
    },
    "HttpMethod": "ANY",
    "Integration": {
     "IntegrationHttpMethod": "POST",
     "Type": "AWS_PROXY",
     "Uri": {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":apigateway:",
        {
         "Ref": "AWS::Region"
        },
        ":lambda:path/2015-03-31/functions/",
        {
         "Fn::GetAtt": [
          "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
          "Arn"
         ]
        },
        "/invocations"
       ]
      ]
     }
    },
    "ResourceId": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B",
      "RootResourceId"
     ]
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesF3CCE545": {
   "Type": "AWS::ApiGateway::Resource",
   "Properties": {
    "ParentId": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B",
      "RootResourceId"
     ]
    },
    "PathPart": "modules",
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesOPTIONSDCDDCDF6": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "ApiKeyRequired": false,
    "AuthorizationType": "NONE",
    "HttpMethod": "OPTIONS",
    "Integration": {
     "IntegrationResponses": [
      {
       "ResponseParameters": {
        "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-amz-user-agent'",
        "method.response.header.Access-Control-Allow-Origin": {
         "Fn::Join": [
          "",
          [
           "'https://",
           {
            "Fn::GetAtt": [
             "UIConstructWebCloudFrontDistribution517B16CD",
             "DomainName"
            ]
           },
           "'"
          ]
         ]
        },
        "method.response.header.Vary": "'Origin'",
        "method.response.header.Access-Control-Allow-Methods": "'GET,POST,PUT,DELETE'"
       },
       "StatusCode": "204"
      }
     ],
     "RequestTemplates": {
      "application/json": "{ statusCode: 200 }"
     },
     "Type": "MOCK"
    },
    "MethodResponses": [
     {
      "ResponseParameters": {
       "method.response.header.Access-Control-Allow-Headers": true,
       "method.response.header.Access-Control-Allow-Origin": true,
       "method.response.header.Vary": true,
       "method.response.header.Access-Control-Allow-Methods": true
      },
      "StatusCode": "204"
     }
    ],
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesF3CCE545"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesGETApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodules41F2C547": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A"
       },
       "/GET/modules"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesGETApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodules8FA4FB5E": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/test-invoke-stage/GET/modules"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesGET5F52773F": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "AuthorizationType": "COGNITO_USER_POOLS",
    "AuthorizerId": {
     "Ref": "ApiConstructCognitoApiGatewayCognitoAuthorizer2B1FACFC"
    },
    "HttpMethod": "GET",
    "Integration": {
     "IntegrationHttpMethod": "POST",
     "Type": "AWS_PROXY",
     "Uri": {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":apigateway:",
        {
         "Ref": "AWS::Region"
        },
        ":lambda:path/2015-03-31/functions/",
        {
         "Fn::GetAtt": [
          "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
          "Arn"
         ]
        },
        "/invocations"
       ]
      ]
     }
    },
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesF3CCE545"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesPOSTApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPOSTmodules4560EC3A": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A"
       },
       "/POST/modules"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesPOSTApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPOSTmodules5A12F5DC": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/test-invoke-stage/POST/modules"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesPOST7E59C7E7": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "AuthorizationType": "COGNITO_USER_POOLS",
    "AuthorizerId": {
     "Ref": "ApiConstructCognitoApiGatewayCognitoAuthorizer2B1FACFC"
    },
    "HttpMethod": "POST",
    "Integration": {
     "IntegrationHttpMethod": "POST",
     "Type": "AWS_PROXY",
     "Uri": {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":apigateway:",
        {
         "Ref": "AWS::Region"
        },
        ":lambda:path/2015-03-31/functions/",
        {
         "Fn::GetAtt": [
          "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
          "Arn"
         ]
        },
        "/invocations"
       ]
      ]
     }
    },
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesF3CCE545"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulespartner24DB1750": {
   "Type": "AWS::ApiGateway::Resource",
   "Properties": {
    "ParentId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesF3CCE545"
    },
    "PathPart": "partner",
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnerOPTIONSFFDAF510": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "ApiKeyRequired": false,
    "AuthorizationType": "NONE",
    "HttpMethod": "OPTIONS",
    "Integration": {
     "IntegrationResponses": [
      {
       "ResponseParameters": {
        "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-amz-user-agent'",
        "method.response.header.Access-Control-Allow-Origin": {
         "Fn::Join": [
          "",
          [
           "'https://",
           {
            "Fn::GetAtt": [
             "UIConstructWebCloudFrontDistribution517B16CD",
             "DomainName"
            ]
           },
           "'"
          ]
         ]
        },
        "method.response.header.Vary": "'Origin'",
        "method.response.header.Access-Control-Allow-Methods": "'GET,POST,PUT,DELETE'"
       },
       "StatusCode": "204"
      }
     ],
     "RequestTemplates": {
      "application/json": "{ statusCode: 200 }"
     },
     "Type": "MOCK"
    },
    "MethodResponses": [
     {
      "ResponseParameters": {
       "method.response.header.Access-Control-Allow-Headers": true,
       "method.response.header.Access-Control-Allow-Origin": true,
       "method.response.header.Vary": true,
       "method.response.header.Access-Control-Allow-Methods": true
      },
      "StatusCode": "204"
     }
    ],
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulespartner24DB1750"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnerGETApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodulespartnerFA710ADA": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A"
       },
       "/GET/modules/partner"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnerGETApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodulespartner1F42E38F": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/test-invoke-stage/GET/modules/partner"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnerGETD30F6F1F": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "AuthorizationType": "COGNITO_USER_POOLS",
    "AuthorizerId": {
     "Ref": "ApiConstructCognitoApiGatewayCognitoAuthorizer2B1FACFC"
    },
    "HttpMethod": "GET",
    "Integration": {
     "IntegrationHttpMethod": "POST",
     "Type": "AWS_PROXY",
     "Uri": {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":apigateway:",
        {
         "Ref": "AWS::Region"
        },
        ":lambda:path/2015-03-31/functions/",
        {
         "Fn::GetAtt": [
          "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
          "Arn"
         ]
        },
        "/invocations"
       ]
      ]
     }
    },
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulespartner24DB1750"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnersync10C1EAC0": {
   "Type": "AWS::ApiGateway::Resource",
   "Properties": {
    "ParentId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulespartner24DB1750"
    },
    "PathPart": "sync",
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnersyncOPTIONS4AE53C7A": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "ApiKeyRequired": false,
    "AuthorizationType": "NONE",
    "HttpMethod": "OPTIONS",
    "Integration": {
     "IntegrationResponses": [
      {
       "ResponseParameters": {
        "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-amz-user-agent'",
        "method.response.header.Access-Control-Allow-Origin": {
         "Fn::Join": [
          "",
          [
           "'https://",
           {
            "Fn::GetAtt": [
             "UIConstructWebCloudFrontDistribution517B16CD",
             "DomainName"
            ]
           },
           "'"
          ]
         ]
        },
        "method.response.header.Vary": "'Origin'",
        "method.response.header.Access-Control-Allow-Methods": "'GET,POST,PUT,DELETE'"
       },
       "StatusCode": "204"
      }
     ],
     "RequestTemplates": {
      "application/json": "{ statusCode: 200 }"
     },
     "Type": "MOCK"
    },
    "MethodResponses": [
     {
      "ResponseParameters": {
       "method.response.header.Access-Control-Allow-Headers": true,
       "method.response.header.Access-Control-Allow-Origin": true,
       "method.response.header.Vary": true,
       "method.response.header.Access-Control-Allow-Methods": true
      },
      "StatusCode": "204"
     }
    ],
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnersync10C1EAC0"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnersyncPUTApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPUTmodulespartnersync207F281A": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A"
       },
       "/PUT/modules/partner/sync"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnersyncPUTApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPUTmodulespartnersync0E2703DF": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/test-invoke-stage/PUT/modules/partner/sync"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnersyncPUT819245A9": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "AuthorizationType": "COGNITO_USER_POOLS",
    "AuthorizerId": {
     "Ref": "ApiConstructCognitoApiGatewayCognitoAuthorizer2B1FACFC"
    },
    "HttpMethod": "PUT",
    "Integration": {
     "IntegrationHttpMethod": "POST",
     "Type": "AWS_PROXY",
     "Uri": {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":apigateway:",
        {
         "Ref": "AWS::Region"
        },
        ":lambda:path/2015-03-31/functions/",
        {
         "Fn::GetAtt": [
          "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
          "Arn"
         ]
        },
        "/invocations"
       ]
      ]
     }
    },
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulespartnersync10C1EAC0"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesvalidate520231BA": {
   "Type": "AWS::ApiGateway::Resource",
   "Properties": {
    "ParentId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesF3CCE545"
    },
    "PathPart": "validate",
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesvalidateOPTIONS62EF3231": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "ApiKeyRequired": false,
    "AuthorizationType": "NONE",
    "HttpMethod": "OPTIONS",
    "Integration": {
     "IntegrationResponses": [
      {
       "ResponseParameters": {
        "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-amz-user-agent'",
        "method.response.header.Access-Control-Allow-Origin": {
         "Fn::Join": [
          "",
          [
           "'https://",
           {
            "Fn::GetAtt": [
             "UIConstructWebCloudFrontDistribution517B16CD",
             "DomainName"
            ]
           },
           "'"
          ]
         ]
        },
        "method.response.header.Vary": "'Origin'",
        "method.response.header.Access-Control-Allow-Methods": "'GET,POST,PUT,DELETE'"
       },
       "StatusCode": "204"
      }
     ],
     "RequestTemplates": {
      "application/json": "{ statusCode: 200 }"
     },
     "Type": "MOCK"
    },
    "MethodResponses": [
     {
      "ResponseParameters": {
       "method.response.header.Access-Control-Allow-Headers": true,
       "method.response.header.Access-Control-Allow-Origin": true,
       "method.response.header.Vary": true,
       "method.response.header.Access-Control-Allow-Methods": true
      },
      "StatusCode": "204"
     }
    ],
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesvalidate520231BA"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesvalidateGETApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodulesvalidate2F2B13B7": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A"
       },
       "/GET/modules/validate"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesvalidateGETApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodulesvalidateAAF9CB8D": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/test-invoke-stage/GET/modules/validate"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesvalidateGETF91B337C": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "AuthorizationType": "COGNITO_USER_POOLS",
    "AuthorizerId": {
     "Ref": "ApiConstructCognitoApiGatewayCognitoAuthorizer2B1FACFC"
    },
    "HttpMethod": "GET",
    "Integration": {
     "IntegrationHttpMethod": "POST",
     "Type": "AWS_PROXY",
     "Uri": {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":apigateway:",
        {
         "Ref": "AWS::Region"
        },
        ":lambda:path/2015-03-31/functions/",
        {
         "Fn::GetAtt": [
          "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
          "Arn"
         ]
        },
        "/invocations"
       ]
      ]
     }
    },
    "RequestParameters": {
     "method.request.querystring.manifest_url": true,
     "method.request.header.Authorization": true
    },
    "RequestValidatorId": {
     "Ref": "ApiConstructValidateRequestParametersRequestValidator8597A856"
    },
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesvalidate520231BA"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesregistered87735B2F": {
   "Type": "AWS::ApiGateway::Resource",
   "Properties": {
    "ParentId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesF3CCE545"
    },
    "PathPart": "registered",
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredOPTIONS3CC543E3": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "ApiKeyRequired": false,
    "AuthorizationType": "NONE",
    "HttpMethod": "OPTIONS",
    "Integration": {
     "IntegrationResponses": [
      {
       "ResponseParameters": {
        "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-amz-user-agent'",
        "method.response.header.Access-Control-Allow-Origin": {
         "Fn::Join": [
          "",
          [
           "'https://",
           {
            "Fn::GetAtt": [
             "UIConstructWebCloudFrontDistribution517B16CD",
             "DomainName"
            ]
           },
           "'"
          ]
         ]
        },
        "method.response.header.Vary": "'Origin'",
        "method.response.header.Access-Control-Allow-Methods": "'GET,POST,PUT,DELETE'"
       },
       "StatusCode": "204"
      }
     ],
     "RequestTemplates": {
      "application/json": "{ statusCode: 200 }"
     },
     "Type": "MOCK"
    },
    "MethodResponses": [
     {
      "ResponseParameters": {
       "method.response.header.Access-Control-Allow-Headers": true,
       "method.response.header.Access-Control-Allow-Origin": true,
       "method.response.header.Vary": true,
       "method.response.header.Access-Control-Allow-Methods": true
      },
      "StatusCode": "204"
     }
    ],
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesregistered87735B2F"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredPOSTApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPOSTmodulesregistered56F14E45": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A"
       },
       "/POST/modules/registered"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredPOSTApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPOSTmodulesregisteredE267C772": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/test-invoke-stage/POST/modules/registered"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredPOST5DE7871A": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "AuthorizationType": "COGNITO_USER_POOLS",
    "AuthorizerId": {
     "Ref": "ApiConstructCognitoApiGatewayCognitoAuthorizer2B1FACFC"
    },
    "HttpMethod": "POST",
    "Integration": {
     "IntegrationHttpMethod": "POST",
     "Type": "AWS_PROXY",
     "Uri": {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":apigateway:",
        {
         "Ref": "AWS::Region"
        },
        ":lambda:path/2015-03-31/functions/",
        {
         "Fn::GetAtt": [
          "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
          "Arn"
         ]
        },
        "/invocations"
       ]
      ]
     }
    },
    "RequestModels": {
     "application/json": {
      "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiExternalModuleRegisterRequestBodyModelE9E7FA7D"
     }
    },
    "RequestValidatorId": {
     "Ref": "ApiConstructValidateRequestBodyRequestValidator2D2F5346"
    },
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesregistered87735B2F"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredGETApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodulesregisteredB28AF845": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A"
       },
       "/GET/modules/registered"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredGETApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodulesregistered6B36036F": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/test-invoke-stage/GET/modules/registered"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredGET84C02F36": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "AuthorizationType": "COGNITO_USER_POOLS",
    "AuthorizerId": {
     "Ref": "ApiConstructCognitoApiGatewayCognitoAuthorizer2B1FACFC"
    },
    "HttpMethod": "GET",
    "Integration": {
     "IntegrationHttpMethod": "POST",
     "Type": "AWS_PROXY",
     "Uri": {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":apigateway:",
        {
         "Ref": "AWS::Region"
        },
        ":lambda:path/2015-03-31/functions/",
        {
         "Fn::GetAtt": [
          "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
          "Arn"
         ]
        },
        "/invocations"
       ]
      ]
     }
    },
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesregistered87735B2F"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredinputsC8F11BB2": {
   "Type": "AWS::ApiGateway::Resource",
   "Properties": {
    "ParentId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesregistered87735B2F"
    },
    "PathPart": "inputs",
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredinputsOPTIONS41D4F865": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "ApiKeyRequired": false,
    "AuthorizationType": "NONE",
    "HttpMethod": "OPTIONS",
    "Integration": {
     "IntegrationResponses": [
      {
       "ResponseParameters": {
        "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-amz-user-agent'",
        "method.response.header.Access-Control-Allow-Origin": {
         "Fn::Join": [
          "",
          [
           "'https://",
           {
            "Fn::GetAtt": [
             "UIConstructWebCloudFrontDistribution517B16CD",
             "DomainName"
            ]
           },
           "'"
          ]
         ]
        },
        "method.response.header.Vary": "'Origin'",
        "method.response.header.Access-Control-Allow-Methods": "'GET,POST,PUT,DELETE'"
       },
       "StatusCode": "204"
      }
     ],
     "RequestTemplates": {
      "application/json": "{ statusCode: 200 }"
     },
     "Type": "MOCK"
    },
    "MethodResponses": [
     {
      "ResponseParameters": {
       "method.response.header.Access-Control-Allow-Headers": true,
       "method.response.header.Access-Control-Allow-Origin": true,
       "method.response.header.Vary": true,
       "method.response.header.Access-Control-Allow-Methods": true
      },
      "StatusCode": "204"
     }
    ],
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredinputsC8F11BB2"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredinputsGETApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodulesregisteredinputsEBB66351": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A"
       },
       "/GET/modules/registered/inputs"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredinputsGETApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodulesregisteredinputs573C9FDC": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/test-invoke-stage/GET/modules/registered/inputs"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredinputsGET83C089DF": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "AuthorizationType": "COGNITO_USER_POOLS",
    "AuthorizerId": {
     "Ref": "ApiConstructCognitoApiGatewayCognitoAuthorizer2B1FACFC"
    },
    "HttpMethod": "GET",
    "Integration": {
     "IntegrationHttpMethod": "POST",
     "Type": "AWS_PROXY",
     "Uri": {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":apigateway:",
        {
         "Ref": "AWS::Region"
        },
        ":lambda:path/2015-03-31/functions/",
        {
         "Fn::GetAtt": [
          "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
          "Arn"
         ]
        },
        "/invocations"
       ]
      ]
     }
    },
    "RequestParameters": {
     "method.request.querystring.name": true,
     "method.request.querystring.version": true,
     "method.request.querystring.region": true,
     "method.request.querystring.regionType": true,
     "method.request.header.Authorization": true
    },
    "RequestValidatorId": {
     "Ref": "ApiConstructValidateRequestParametersRequestValidator8597A856"
    },
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesregisteredinputsC8F11BB2"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledB8DF564A": {
   "Type": "AWS::ApiGateway::Resource",
   "Properties": {
    "ParentId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesF3CCE545"
    },
    "PathPart": "enabled",
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledOPTIONS788ADF09": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "ApiKeyRequired": false,
    "AuthorizationType": "NONE",
    "HttpMethod": "OPTIONS",
    "Integration": {
     "IntegrationResponses": [
      {
       "ResponseParameters": {
        "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-amz-user-agent'",
        "method.response.header.Access-Control-Allow-Origin": {
         "Fn::Join": [
          "",
          [
           "'https://",
           {
            "Fn::GetAtt": [
             "UIConstructWebCloudFrontDistribution517B16CD",
             "DomainName"
            ]
           },
           "'"
          ]
         ]
        },
        "method.response.header.Vary": "'Origin'",
        "method.response.header.Access-Control-Allow-Methods": "'GET,POST,PUT,DELETE'"
       },
       "StatusCode": "204"
      }
     ],
     "RequestTemplates": {
      "application/json": "{ statusCode: 200 }"
     },
     "Type": "MOCK"
    },
    "MethodResponses": [
     {
      "ResponseParameters": {
       "method.response.header.Access-Control-Allow-Headers": true,
       "method.response.header.Access-Control-Allow-Origin": true,
       "method.response.header.Vary": true,
       "method.response.header.Access-Control-Allow-Methods": true
      },
      "StatusCode": "204"
     }
    ],
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledB8DF564A"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledPOSTApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPOSTmodulesenabled48504578": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A"
       },
       "/POST/modules/enabled"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledPOSTApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPOSTmodulesenabled0E2BD1AE": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/test-invoke-stage/POST/modules/enabled"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledPOST853CED6B": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "AuthorizationType": "COGNITO_USER_POOLS",
    "AuthorizerId": {
     "Ref": "ApiConstructCognitoApiGatewayCognitoAuthorizer2B1FACFC"
    },
    "HttpMethod": "POST",
    "Integration": {
     "IntegrationHttpMethod": "POST",
     "Type": "AWS_PROXY",
     "Uri": {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":apigateway:",
        {
         "Ref": "AWS::Region"
        },
        ":lambda:path/2015-03-31/functions/",
        {
         "Fn::GetAtt": [
          "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
          "Arn"
         ]
        },
        "/invocations"
       ]
      ]
     }
    },
    "RequestModels": {
     "application/json": {
      "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiEnabledModuleRequestBodyModelC9F3F90A"
     }
    },
    "RequestValidatorId": {
     "Ref": "ApiConstructValidateRequestBodyRequestValidator2D2F5346"
    },
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledB8DF564A"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledGETApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodulesenabled854F1F18": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A"
       },
       "/GET/modules/enabled"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledGETApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETmodulesenabledCE2E4FDD": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/test-invoke-stage/GET/modules/enabled"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledGET33345FA0": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "AuthorizationType": "COGNITO_USER_POOLS",
    "AuthorizerId": {
     "Ref": "ApiConstructCognitoApiGatewayCognitoAuthorizer2B1FACFC"
    },
    "HttpMethod": "GET",
    "Integration": {
     "IntegrationHttpMethod": "POST",
     "Type": "AWS_PROXY",
     "Uri": {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":apigateway:",
        {
         "Ref": "AWS::Region"
        },
        ":lambda:path/2015-03-31/functions/",
        {
         "Fn::GetAtt": [
          "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
          "Arn"
         ]
        },
        "/invocations"
       ]
      ]
     }
    },
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesenabledB8DF564A"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesdisabledD8057B54": {
   "Type": "AWS::ApiGateway::Resource",
   "Properties": {
    "ParentId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesF3CCE545"
    },
    "PathPart": "disabled",
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesdisabledOPTIONSAB7280A7": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "ApiKeyRequired": false,
    "AuthorizationType": "NONE",
    "HttpMethod": "OPTIONS",
    "Integration": {
     "IntegrationResponses": [
      {
       "ResponseParameters": {
        "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-amz-user-agent'",
        "method.response.header.Access-Control-Allow-Origin": {
         "Fn::Join": [
          "",
          [
           "'https://",
           {
            "Fn::GetAtt": [
             "UIConstructWebCloudFrontDistribution517B16CD",
             "DomainName"
            ]
           },
           "'"
          ]
         ]
        },
        "method.response.header.Vary": "'Origin'",
        "method.response.header.Access-Control-Allow-Methods": "'GET,POST,PUT,DELETE'"
       },
       "StatusCode": "204"
      }
     ],
     "RequestTemplates": {
      "application/json": "{ statusCode: 200 }"
     },
     "Type": "MOCK"
    },
    "MethodResponses": [
     {
      "ResponseParameters": {
       "method.response.header.Access-Control-Allow-Headers": true,
       "method.response.header.Access-Control-Allow-Origin": true,
       "method.response.header.Vary": true,
       "method.response.header.Access-Control-Allow-Methods": true
      },
      "StatusCode": "204"
     }
    ],
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesdisabledD8057B54"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesdisabledPOSTApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPOSTmodulesdisabled1FBBFD26": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A"
       },
       "/POST/modules/disabled"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesdisabledPOSTApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPOSTmodulesdisabled001DDECE": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/test-invoke-stage/POST/modules/disabled"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesdisabledPOST0C9FD03A": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "AuthorizationType": "COGNITO_USER_POOLS",
    "AuthorizerId": {
     "Ref": "ApiConstructCognitoApiGatewayCognitoAuthorizer2B1FACFC"
    },
    "HttpMethod": "POST",
    "Integration": {
     "IntegrationHttpMethod": "POST",
     "Type": "AWS_PROXY",
     "Uri": {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":apigateway:",
        {
         "Ref": "AWS::Region"
        },
        ":lambda:path/2015-03-31/functions/",
        {
         "Fn::GetAtt": [
          "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
          "Arn"
         ]
        },
        "/invocations"
       ]
      ]
     }
    },
    "RequestModels": {
     "application/json": {
      "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDisabledModuleRequestBodyModel89DD9638"
     }
    },
    "RequestValidatorId": {
     "Ref": "ApiConstructValidateRequestBodyRequestValidator2D2F5346"
    },
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesdisabledD8057B54"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesderegistered644C0E2B": {
   "Type": "AWS::ApiGateway::Resource",
   "Properties": {
    "ParentId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesF3CCE545"
    },
    "PathPart": "deregistered",
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesderegisteredOPTIONS99954752": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "ApiKeyRequired": false,
    "AuthorizationType": "NONE",
    "HttpMethod": "OPTIONS",
    "Integration": {
     "IntegrationResponses": [
      {
       "ResponseParameters": {
        "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-amz-user-agent'",
        "method.response.header.Access-Control-Allow-Origin": {
         "Fn::Join": [
          "",
          [
           "'https://",
           {
            "Fn::GetAtt": [
             "UIConstructWebCloudFrontDistribution517B16CD",
             "DomainName"
            ]
           },
           "'"
          ]
         ]
        },
        "method.response.header.Vary": "'Origin'",
        "method.response.header.Access-Control-Allow-Methods": "'GET,POST,PUT,DELETE'"
       },
       "StatusCode": "204"
      }
     ],
     "RequestTemplates": {
      "application/json": "{ statusCode: 200 }"
     },
     "Type": "MOCK"
    },
    "MethodResponses": [
     {
      "ResponseParameters": {
       "method.response.header.Access-Control-Allow-Headers": true,
       "method.response.header.Access-Control-Allow-Origin": true,
       "method.response.header.Vary": true,
       "method.response.header.Access-Control-Allow-Methods": true
      },
      "StatusCode": "204"
     }
    ],
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesderegistered644C0E2B"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesderegisteredPOSTApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPOSTmodulesderegistered38E64E79": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A"
       },
       "/POST/modules/deregistered"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesderegisteredPOSTApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPOSTmodulesderegistered1D91285C": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/test-invoke-stage/POST/modules/deregistered"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApimodulesderegisteredPOST70489E0A": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "AuthorizationType": "COGNITO_USER_POOLS",
    "AuthorizerId": {
     "Ref": "ApiConstructCognitoApiGatewayCognitoAuthorizer2B1FACFC"
    },
    "HttpMethod": "POST",
    "Integration": {
     "IntegrationHttpMethod": "POST",
     "Type": "AWS_PROXY",
     "Uri": {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":apigateway:",
        {
         "Ref": "AWS::Region"
        },
        ":lambda:path/2015-03-31/functions/",
        {
         "Fn::GetAtt": [
          "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
          "Arn"
         ]
        },
        "/invocations"
       ]
      ]
     }
    },
    "RequestModels": {
     "application/json": {
      "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeregisteredModuleRequestBodyModel7E02A8AD"
     }
    },
    "RequestValidatorId": {
     "Ref": "ApiConstructValidateRequestBodyRequestValidator2D2F5346"
    },
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApimodulesderegistered644C0E2B"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiregionsD8F039EF": {
   "Type": "AWS::ApiGateway::Resource",
   "Properties": {
    "ParentId": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B",
      "RootResourceId"
     ]
    },
    "PathPart": "regions",
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiregionsOPTIONS1FD7CD5B": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "ApiKeyRequired": false,
    "AuthorizationType": "NONE",
    "HttpMethod": "OPTIONS",
    "Integration": {
     "IntegrationResponses": [
      {
       "ResponseParameters": {
        "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-amz-user-agent'",
        "method.response.header.Access-Control-Allow-Origin": {
         "Fn::Join": [
          "",
          [
           "'https://",
           {
            "Fn::GetAtt": [
             "UIConstructWebCloudFrontDistribution517B16CD",
             "DomainName"
            ]
           },
           "'"
          ]
         ]
        },
        "method.response.header.Vary": "'Origin'",
        "method.response.header.Access-Control-Allow-Methods": "'GET,POST,PUT,DELETE'"
       },
       "StatusCode": "204"
      }
     ],
     "RequestTemplates": {
      "application/json": "{ statusCode: 200 }"
     },
     "Type": "MOCK"
    },
    "MethodResponses": [
     {
      "ResponseParameters": {
       "method.response.header.Access-Control-Allow-Headers": true,
       "method.response.header.Access-Control-Allow-Origin": true,
       "method.response.header.Vary": true,
       "method.response.header.Access-Control-Allow-Methods": true
      },
      "StatusCode": "204"
     }
    ],
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiregionsD8F039EF"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiregionsGETApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETregions970E88DF": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A"
       },
       "/GET/regions"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiregionsGETApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DGETregionsE3B1BF3A": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/test-invoke-stage/GET/regions"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiregionsGET9C3A43A6": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "AuthorizationType": "COGNITO_USER_POOLS",
    "AuthorizerId": {
     "Ref": "ApiConstructCognitoApiGatewayCognitoAuthorizer2B1FACFC"
    },
    "HttpMethod": "GET",
    "Integration": {
     "IntegrationHttpMethod": "POST",
     "Type": "AWS_PROXY",
     "Uri": {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":apigateway:",
        {
         "Ref": "AWS::Region"
        },
        ":lambda:path/2015-03-31/functions/",
        {
         "Fn::GetAtt": [
          "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
          "Arn"
         ]
        },
        "/invocations"
       ]
      ]
     }
    },
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiregionsD8F039EF"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiregionsPUTApiPermissionModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPUTregions540896AE": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A"
       },
       "/PUT/regions"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiregionsPUTApiPermissionTestModularCloudStudioOnAwsStackApiConstructCognitoApiGatewayLambdaRestApiC7FB8F3DPUTregionsBE60F794": {
   "Type": "AWS::Lambda::Permission",
   "Properties": {
    "Action": "lambda:InvokeFunction",
    "FunctionName": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
      "Arn"
     ]
    },
    "Principal": "apigateway.amazonaws.com",
    "SourceArn": {
     "Fn::Join": [
      "",
      [
       "arn:",
       {
        "Ref": "AWS::Partition"
       },
       ":execute-api:",
       {
        "Ref": "AWS::Region"
       },
       ":",
       {
        "Ref": "AWS::AccountId"
       },
       ":",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       "/test-invoke-stage/PUT/regions"
      ]
     ]
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiregionsPUT006033B3": {
   "Type": "AWS::ApiGateway::Method",
   "Properties": {
    "AuthorizationType": "COGNITO_USER_POOLS",
    "AuthorizerId": {
     "Ref": "ApiConstructCognitoApiGatewayCognitoAuthorizer2B1FACFC"
    },
    "HttpMethod": "PUT",
    "Integration": {
     "IntegrationHttpMethod": "POST",
     "Type": "AWS_PROXY",
     "Uri": {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":apigateway:",
        {
         "Ref": "AWS::Region"
        },
        ":lambda:path/2015-03-31/functions/",
        {
         "Fn::GetAtt": [
          "ApiConstructCognitoApiGatewayLambdaFunction825ACDA6",
          "Arn"
         ]
        },
        "/invocations"
       ]
      ]
     }
    },
    "RequestModels": {
     "application/json": {
      "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiRegionRequestBodyModel7B23A7BD"
     }
    },
    "RequestValidatorId": {
     "Ref": "ApiConstructValidateRequestBodyRequestValidator2D2F5346"
    },
    "ResourceId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiregionsD8F039EF"
    },
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiUsagePlan39BAEB2B": {
   "Type": "AWS::ApiGateway::UsagePlan",
   "Properties": {
    "ApiStages": [
     {
      "ApiId": {
       "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
      },
      "Stage": {
       "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A"
      },
      "Throttle": {}
     }
    ],
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiExternalModuleRegisterRequestBodyModelE9E7FA7D": {
   "Type": "AWS::ApiGateway::Model",
   "Properties": {
    "ContentType": "application/json",
    "Name": "ExternalModuleRegisterRequestBodyModel",
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    },
    "Schema": {
     "properties": {
      "params": {
       "properties": {
        "manifestUrl": {
         "type": "string"
        },
        "revision": {
         "pattern": "^[a-zA-Z0-9\\._-]+$",
         "type": "string"
        }
       },
       "required": [
        "manifestUrl",
        "revision"
       ],
       "$schema": "http://json-schema.org/draft-04/schema#",
       "type": "object"
      }
     },
     "required": [
      "params"
     ],
     "$schema": "http://json-schema.org/draft-04/schema#",
     "type": "object"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiEnabledModuleRequestBodyModelC9F3F90A": {
   "Type": "AWS::ApiGateway::Model",
   "Properties": {
    "ContentType": "application/json",
    "Name": "EnabledModuleRequestBodyModel",
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    },
    "Schema": {
     "properties": {
      "module": {
       "properties": {
        "name": {
         "pattern": "^[a-zA-Z0-9]+(?:\\s[a-zA-Z0-9]+)*$",
         "type": "string"
        },
        "version": {
         "pattern": "^[a-zA-Z0-9\\._-]+$",
         "type": "string"
        },
        "region": {
         "pattern": "^[a-z]+-[a-z]+-\\d+$",
         "type": "string"
        },
        "category": {
         "pattern": "^[A-Z][a-z]*(?:[A-Z][a-z]*)*$",
         "type": "string"
        },
        "regionType": {
         "pattern": "^(HUB|SPOKE|BOTH)$",
         "type": "string"
        }
       },
       "required": [
        "name",
        "version",
        "region",
        "category",
        "regionType"
       ],
       "$schema": "http://json-schema.org/draft-04/schema#",
       "type": "object"
      }
     },
     "required": [
      "module"
     ],
     "$schema": "http://json-schema.org/draft-04/schema#",
     "type": "object"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiDisabledModuleRequestBodyModel89DD9638": {
   "Type": "AWS::ApiGateway::Model",
   "Properties": {
    "ContentType": "application/json",
    "Name": "DisabledModuleRequestBodyModel",
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    },
    "Schema": {
     "properties": {
      "disable": {
       "properties": {
        "name": {
         "pattern": "^[a-zA-Z0-9]+(?:\\s[a-zA-Z0-9]+)*$",
         "type": "string"
        },
        "servicecatalogProvisionedProductId": {
         "pattern": "^[a-z0-9-]+$",
         "type": "string"
        },
        "moduleRegion": {
         "pattern": "^[a-z]+-[a-z]+-\\d+$",
         "type": "string"
        },
        "regionType": {
         "pattern": "^(HUB|SPOKE|BOTH)$",
         "type": "string"
        }
       },
       "required": [
        "name",
        "servicecatalogProvisionedProductId",
        "moduleRegion",
        "regionType"
       ],
       "$schema": "http://json-schema.org/draft-04/schema#",
       "type": "object"
      }
     },
     "required": [
      "disable"
     ],
     "$schema": "http://json-schema.org/draft-04/schema#",
     "type": "object"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiDeregisteredModuleRequestBodyModel7E02A8AD": {
   "Type": "AWS::ApiGateway::Model",
   "Properties": {
    "ContentType": "application/json",
    "Name": "DeregisteredModuleRequestBodyModel",
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    },
    "Schema": {
     "properties": {
      "module_name": {
       "pattern": "^[a-zA-Z0-9]+(?:\\s[a-zA-Z0-9]+)*$",
       "type": "string"
      }
     },
     "required": [
      "module_name"
     ],
     "$schema": "http://json-schema.org/draft-04/schema#",
     "type": "object"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiRegionRequestBodyModel7B23A7BD": {
   "Type": "AWS::ApiGateway::Model",
   "Properties": {
    "ContentType": "application/json",
    "Name": "RegionModuleRequestBodyModel",
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    },
    "Schema": {
     "properties": {
      "region": {
       "properties": {
        "name": {
         "pattern": "^[a-z]+-[a-z]+-\\d+$",
         "type": "string"
        },
        "enablementStatus": {
         "pattern": "^[A-Z ]+$",
         "type": "string"
        },
        "provisionedProductId": {
         "pattern": "^[a-z0-9-]+$",
         "type": "string"
        }
       },
       "required": [
        "name",
        "enablementStatus"
       ],
       "$schema": "http://json-schema.org/draft-04/schema#",
       "type": "object"
      }
     },
     "required": [
      "region"
     ],
     "$schema": "http://json-schema.org/draft-04/schema#",
     "type": "object"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiCloudWatchRoleA0B4C1C0": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "apigateway.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Policies": [
     {
      "PolicyDocument": {
       "Statement": [
        {
         "Action": [
          "logs:CreateLogGroup",
          "logs:CreateLogStream",
          "logs:DescribeLogGroups",
          "logs:DescribeLogStreams",
          "logs:FilterLogEvents",
          "logs:GetLogEvents",
          "logs:PutLogEvents"
         ],
         "Effect": "Allow",
         "Resource": {
          "Fn::Join": [
           "",
           [
            "arn:",
            {
             "Ref": "AWS::Partition"
            },
            ":logs:",
            {
             "Ref": "AWS::Region"
            },
            ":",
            {
             "Ref": "AWS::AccountId"
            },
            ":*"
           ]
          ]
         }
        }
       ],
       "Version": "2012-10-17"
      },
      "PolicyName": "LambdaRestApiCloudWatchRolePolicy"
     }
    ],
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "IAM_NO_INLINE_POLICY_CHECK"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayLambdaRestApiAccount65F2A074": {
   "Type": "AWS::ApiGateway::Account",
   "Properties": {
    "CloudWatchRoleArn": {
     "Fn::GetAtt": [
      "ApiConstructCognitoApiGatewayLambdaRestApiCloudWatchRoleA0B4C1C0",
      "Arn"
     ]
    }
   },
   "DependsOn": [
    "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
   ],
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayCognitoUserPool4127C806": {
   "Type": "AWS::Cognito::UserPool",
   "Properties": {
    "AccountRecoverySetting": {
     "RecoveryMechanisms": [
      {
       "Name": "verified_email",
       "Priority": 1
      }
     ]
    },
    "AdminCreateUserConfig": {
     "AllowAdminCreateUserOnly": true,
     "InviteMessageTemplate": {
      "EmailMessage": "Welcome to Modular Cloud Studio on AWS. <br><br> You will need this user name and temporary password\n                    to log in the first time. <br><br> Username: {username} <br> Password: {####}",
      "EmailSubject": "Welcome to Modular Cloud Studio on AWS",
      "SMSMessage": "Your username is {username} and temporary password is {####}"
     }
    },
    "AliasAttributes": [
     "email"
    ],
    "AutoVerifiedAttributes": [
     "email"
    ],
    "EmailVerificationMessage": "Your AWS console verification code is {####}",
    "EmailVerificationSubject": "Your AWS console verification code",
    "Policies": {
     "PasswordPolicy": {
      "MinimumLength": 8,
      "RequireNumbers": true,
      "RequireSymbols": true,
      "RequireUppercase": true
     }
    },
    "Schema": [
     {
      "Mutable": false,
      "Name": "email",
      "Required": true
     }
    ],
    "SmsVerificationMessage": "Your AWS console verification code is {####}",
    "UserPoolAddOns": {
     "AdvancedSecurityMode": "ENFORCED"
    },
    "UserPoolTags": {
     "awsApplication": {
      "Fn::GetAtt": [
       "MyApplications",
       "ApplicationTagValue"
      ]
     },
     "SolutionId": "SO0282"
    },
    "VerificationMessageTemplate": {
     "DefaultEmailOption": "CONFIRM_WITH_CODE",
     "EmailMessage": "Your AWS console verification code is {####}",
     "EmailSubject": "Your AWS console verification code",
     "SmsMessage": "Your AWS console verification code is {####}"
    }
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete",
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayCognitoUserPoolClient84249B30": {
   "Type": "AWS::Cognito::UserPoolClient",
   "Properties": {
    "AllowedOAuthFlows": [
     "implicit",
     "code"
    ],
    "AllowedOAuthFlowsUserPoolClient": true,
    "AllowedOAuthScopes": [
     "profile",
     "phone",
     "email",
     "openid",
     "aws.cognito.signin.user.admin"
    ],
    "CallbackURLs": [
     "https://example.com"
    ],
    "ExplicitAuthFlows": [
     "ALLOW_ADMIN_USER_PASSWORD_AUTH",
     "ALLOW_CUSTOM_AUTH",
     "ALLOW_USER_SRP_AUTH",
     "ALLOW_REFRESH_TOKEN_AUTH"
    ],
    "RefreshTokenValidity": 360,
    "SupportedIdentityProviders": [
     "COGNITO"
    ],
    "TokenValidityUnits": {
     "RefreshToken": "minutes"
    },
    "UserPoolId": {
     "Ref": "ApiConstructCognitoApiGatewayCognitoUserPool4127C806"
    }
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructCognitoApiGatewayCognitoAuthorizer2B1FACFC": {
   "Type": "AWS::ApiGateway::Authorizer",
   "Properties": {
    "IdentitySource": "method.request.header.Authorization",
    "Name": "authorizer",
    "ProviderARNs": [
     {
      "Fn::GetAtt": [
       "ApiConstructCognitoApiGatewayCognitoUserPool4127C806",
       "Arn"
      ]
     }
    ],
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    },
    "Type": "COGNITO_USER_POOLS"
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda IAM roles require wildcard permissions for logging, X-ray tracing, searching products, listing stack set instances, describing records",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The REST API does not require enabling WAF.",
       "id": "AwsSolutions-APIG3"
      },
      {
       "reason": "MFA is subjected to customer usecase.",
       "id": "AwsSolutions-COG2"
      },
      {
       "reason": "The API GW method does not use a Cognito user pool authorizer.",
       "id": "AwsSolutions-COG4"
      },
      {
       "reason": "The REST API does not have request validation enabled.",
       "id": "AwsSolutions-APIG2"
      },
      {
       "reason": "The REST API does not need authorization implemented. It is already implemented within that same object",
       "id": "AwsSolutions-APIG4"
      }
     ]
    }
   }
  },
  "ApiConstructApiLambdaPolicy6F9B66E9": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "dynamodb:BatchGetItem",
        "dynamodb:BatchWriteItem",
        "dynamodb:GetItem",
        "dynamodb:PutItem",
        "dynamodb:Query",
        "dynamodb:Scan",
        "dynamodb:UpdateItem"
       ],
       "Effect": "Allow",
       "Resource": [
        {
         "Fn::GetAtt": [
          "StorageConstructExternalModulesTable7BD8EF6F",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "StorageConstructMcsDynamoDbTableLock85A89D6F",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "StorageConstructMcsDynamoDbTableModulesMapping4D272082",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7",
          "Arn"
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "StorageConstructMcsDynamoDbTableEnabledModulesB5E59F94",
             "Arn"
            ]
           },
           "/*"
          ]
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7",
             "Arn"
            ]
           },
           "/*"
          ]
         ]
        }
       ],
       "Sid": "DynamoDBAccessStatement"
      },
      {
       "Action": [
        "cloudformation:TagResource",
        "cloudformation:ValidateTemplate"
       ],
       "Effect": "Allow",
       "Resource": "*",
       "Sid": "CloudFormationAccessStatement"
      },
      {
       "Action": "states:StartExecution",
       "Effect": "Allow",
       "Resource": [
        {
         "Ref": "DeregisterStateMachineC2A35F3D"
        },
        {
         "Ref": "PartnerModulesConstructStateMachineD146B721"
        },
        {
         "Ref": "RegisterStateMachineDAC291DA"
        }
       ],
       "Sid": "StepFunctionTriggerStatement"
      },
      {
       "Action": "states:ListExecutions",
       "Effect": "Allow",
       "Resource": {
        "Ref": "PartnerModulesConstructStateMachineD146B721"
       },
       "Sid": "StateMachineListExecutionStatement"
      },
      {
       "Action": "servicecatalog:SearchProductsAsAdmin",
       "Effect": "Allow",
       "Resource": {
        "Fn::Join": [
         "",
         [
          "arn:",
          {
           "Ref": "AWS::Partition"
          },
          ":servicecatalog:*:",
          {
           "Ref": "AWS::AccountId"
          },
          ":*/*"
         ]
        ]
       },
       "Sid": "ServiceCatalogSearchStatement"
      },
      {
       "Action": "servicecatalog:ListConstraintsForPortfolio",
       "Effect": "Allow",
       "Resource": {
        "Fn::Join": [
         "",
         [
          "arn:",
          {
           "Ref": "AWS::Partition"
          },
          ":catalog:",
          {
           "Ref": "AWS::Region"
          },
          ":",
          {
           "Ref": "AWS::AccountId"
          },
          ":portfolio/",
          {
           "Ref": "McsModulesServiceCatalogPortfolioCB9CECD1"
          }
         ]
        ]
       },
       "Sid": "ServiceCatalogListConstraintsStatement"
      },
      {
       "Action": "servicecatalog:DescribeConstraint",
       "Effect": "Allow",
       "Resource": [
        {
         "Fn::Join": [
          "",
          [
           "arn:",
           {
            "Ref": "AWS::Partition"
           },
           ":catalog:",
           {
            "Ref": "AWS::Region"
           },
           ":",
           {
            "Ref": "AWS::AccountId"
           },
           ":portfolio/",
           {
            "Ref": "McsModulesServiceCatalogPortfolioCB9CECD1"
           }
          ]
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           "arn:",
           {
            "Ref": "AWS::Partition"
           },
           ":catalog:",
           {
            "Ref": "AWS::Region"
           },
           ":",
           {
            "Ref": "AWS::AccountId"
           },
           ":product/*"
          ]
         ]
        }
       ],
       "Sid": "ServiceCatalogDescribeProductStatement"
      },
      {
       "Action": "cloudformation:DescribeStacks",
       "Effect": "Allow",
       "Resource": {
        "Ref": "AWS::StackId"
       },
       "Sid": "CloudFormationDescribeStack"
      },
      {
       "Action": "ssm:GetParameter",
       "Effect": "Allow",
       "Resource": {
        "Fn::Join": [
         "",
         [
          "arn:",
          {
           "Ref": "AWS::Partition"
          },
          ":ssm:*:",
          {
           "Ref": "AWS::AccountId"
          },
          ":parameter/*/Core/MyApplication/Tag"
         ]
        ]
       },
       "Sid": "SystemManagerGetParameterStatement"
      },
      {
       "Action": "cloudwatch:PutMetricData",
       "Effect": "Allow",
       "Resource": "*",
       "Sid": "CloudWatchAccessStatement"
      },
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "MCSApiLambdaLogs0F8081F9",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "ApiConstructApiLambdaPolicy6F9B66E9",
    "Roles": [
     {
      "Ref": "ApiConstructCognitoApiGatewayLambdaFunctionServiceRole2C4FFC9A"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Have to provide wildcard access for Cloudformation in order to validate templates. It also needs access to the service catalog data",
       "id": "AwsSolutions-IAM5"
      }
     ]
    }
   }
  },
  "ApiConstructAdminUser7FF34F11": {
   "Type": "AWS::Cognito::UserPoolUser",
   "Properties": {
    "DesiredDeliveryMediums": [
     "EMAIL"
    ],
    "ForceAliasCreation": false,
    "UserAttributes": [
     {
      "Name": "email",
      "Value": {
       "Ref": "AdminEmail"
      }
     },
     {
      "Name": "email_verified",
      "Value": "True"
     }
    ],
    "UserPoolId": {
     "Ref": "ApiConstructCognitoApiGatewayCognitoUserPool4127C806"
    },
    "Username": {
     "Fn::Select": [
      0,
      {
       "Fn::Split": [
        "@",
        {
         "Ref": "AdminEmail"
        }
       ]
      }
     ]
    }
   }
  },
  "ApiConstructValidateRequestParametersRequestValidator8597A856": {
   "Type": "AWS::ApiGateway::RequestValidator",
   "Properties": {
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    },
    "ValidateRequestParameters": true
   }
  },
  "ApiConstructValidateRequestBodyRequestValidator2D2F5346": {
   "Type": "AWS::ApiGateway::RequestValidator",
   "Properties": {
    "RestApiId": {
     "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
    },
    "ValidateRequestBody": true
   }
  },
  "MCSApiLambdaLogs0F8081F9": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/MCSApiLambda"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "MCSApiAccessLogs78256D33": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/MCSApiAccess"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "ApiUrlParameter": {
   "Type": "AWS::SSM::Parameter",
   "Properties": {
    "Description": "The value of the URL for the API Gateway from MCS",
    "Name": {
     "Fn::Join": [
      "",
      [
       "/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/Core/API/URL"
      ]
     ]
    },
    "Tags": {
     "awsApplication": {
      "Fn::GetAtt": [
       "MyApplications",
       "ApplicationTagValue"
      ]
     },
     "SolutionId": "SO0282"
    },
    "Type": "String",
    "Value": {
     "Fn::Join": [
      "",
      [
       "https://",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
       },
       ".execute-api.",
       {
        "Ref": "AWS::Region"
       },
       ".",
       {
        "Ref": "AWS::URLSuffix"
       },
       "/",
       {
        "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A"
       },
       "/"
      ]
     ]
    }
   }
  },
  "ServiceCatalogRegistrationConstructServiceCatalogSetupLambdaRole64D34C5C": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "lambda.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Policies": [
     {
      "PolicyDocument": {
       "Statement": [
        {
         "Action": [
          "iam:AttachRolePolicy",
          "iam:CreateRole",
          "iam:GetRole",
          "iam:PassRole",
          "iam:PutRolePolicy",
          "iam:UpdateAssumeRolePolicy"
         ],
         "Effect": "Allow",
         "Resource": {
          "Fn::GetAtt": [
           "ServiceCatalogExecutionRoleC180B941",
           "Arn"
          ]
         }
        },
        {
         "Action": [
          "logs:CreateLogGroup",
          "logs:CreateLogStream",
          "logs:PutLogEvents"
         ],
         "Effect": "Allow",
         "Resource": {
          "Fn::Join": [
           "",
           [
            "arn:",
            {
             "Ref": "AWS::Partition"
            },
            ":logs:",
            {
             "Ref": "AWS::Region"
            },
            ":",
            {
             "Ref": "AWS::AccountId"
            },
            ":log-group:/aws/lambda/*"
           ]
          ]
         }
        }
       ],
       "Version": "2012-10-17"
      },
      "PolicyName": "LambdaFunctionServiceRolePolicy"
     }
    ],
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "IAM_NO_INLINE_POLICY_CHECK"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Custom resource needs to be able to create any iam resource",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "CDK adds AWSLambdaBasicExecutionRole which just provides logging/x-ray access",
       "id": "AwsSolutions-IAM4"
      }
     ]
    }
   }
  },
  "UIBucketDeploymentuiCopyAssetsToS3FnServiceRole95E1B3B0": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "lambda.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Policies": [
     {
      "PolicyDocument": {
       "Statement": [
        {
         "Action": [
          "s3:Abort",
          "s3:DeleteObject",
          "s3:GetBucket",
          "s3:GetObject",
          "s3:List",
          "s3:PutObject"
         ],
         "Effect": "Allow",
         "Resource": [
          {
           "Fn::GetAtt": [
            "UIConstructWebS3Bucket53F62957",
            "Arn"
           ]
          },
          {
           "Fn::Join": [
            "",
            [
             {
              "Fn::GetAtt": [
               "UIConstructWebS3Bucket53F62957",
               "Arn"
              ]
             },
             "/*"
            ]
           ]
          }
         ]
        }
       ],
       "Version": "2012-10-17"
      },
      "PolicyName": "LambdaFunctionServiceRolePolicy"
     }
    ],
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "IAM_NO_INLINE_POLICY_CHECK"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The IAM entity contains wildcard permissions and does not have a cdk-nag rule suppression with evidence for those permission",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The non-container Lambda function is not configured to use the latest runtime version",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "UIBucketDeploymentuiCopyAssetsToS3FnServiceRoleDefaultPolicy1D3BFA93": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "s3:GetBucket*",
        "s3:GetObject*",
        "s3:List*"
       ],
       "Effect": "Allow",
       "Resource": [
        {
         "Fn::Join": [
          "",
          [
           "arn:",
           {
            "Ref": "AWS::Partition"
           },
           ":s3:::",
           {
            "Fn::Sub": "solutions-${AWS::Region}"
           },
           "/*"
          ]
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           "arn:",
           {
            "Ref": "AWS::Partition"
           },
           ":s3:::",
           {
            "Fn::Sub": "solutions-${AWS::Region}"
           }
          ]
         ]
        }
       ]
      },
      {
       "Action": [
        "s3:Abort*",
        "s3:DeleteObject*",
        "s3:GetBucket*",
        "s3:GetObject*",
        "s3:List*",
        "s3:PutObject",
        "s3:PutObjectLegalHold",
        "s3:PutObjectRetention",
        "s3:PutObjectTagging",
        "s3:PutObjectVersionTagging"
       ],
       "Effect": "Allow",
       "Resource": [
        {
         "Fn::GetAtt": [
          "UIConstructWebS3Bucket53F62957",
          "Arn"
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "UIConstructWebS3Bucket53F62957",
             "Arn"
            ]
           },
           "/*"
          ]
         ]
        }
       ]
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "UIBucketDeploymentuiCopyAssetsToS3FnServiceRoleDefaultPolicy1D3BFA93",
    "Roles": [
     {
      "Ref": "UIBucketDeploymentuiCopyAssetsToS3FnServiceRole95E1B3B0"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The IAM entity contains wildcard permissions and does not have a cdk-nag rule suppression with evidence for those permission",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "The non-container Lambda function is not configured to use the latest runtime version",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "UIBucketDeploymentDeployWebsiteAwsCliLayer18657DAE": {
   "Type": "AWS::Lambda::LayerVersion",
   "Properties": {
    "Content": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/1b2c92f2cd21c170884393633bd4c732676df6290562199b6e3ca5e2a1be7d18.zip"
    },
    "Description": "/opt/awscli/aws"
   }
  },
  "UIBucketDeploymentDeployWebsiteCustomResource06061288": {
   "Type": "Custom::CDKBucketDeployment",
   "Properties": {
    "ServiceToken": {
     "Fn::GetAtt": [
      "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536",
      "Arn"
     ]
    },
    "SourceBucketNames": [
     {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     {
      "Fn::Sub": "solutions-${AWS::Region}"
     }
    ],
    "SourceObjectKeys": [
     "modular-cloud-studio-on-aws/v1.1.0/dd00927aa08c9d9481ae4e5a7f4d17cfe38d8c90d0ce870f2e02e801d282d3b6.zip",
     "modular-cloud-studio-on-aws/v1.1.0/5d2aba6d09b0dee00d4fb1e691748541716ee6d734863e204579066c63dddd0f.zip"
    ],
    "SourceMarkers": [
     {},
     {
      "<<marker:0xbaba:0>>": {
       "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
      },
      "<<marker:0xbaba:1>>": {
       "Ref": "AWS::Region"
      },
      "<<marker:0xbaba:2>>": {
       "Ref": "AWS::URLSuffix"
      },
      "<<marker:0xbaba:3>>": {
       "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A"
      },
      "<<marker:0xbaba:4>>": {
       "Ref": "AWS::Region"
      },
      "<<marker:0xbaba:5>>": {
       "Ref": "ApiConstructCognitoApiGatewayCognitoUserPool4127C806"
      },
      "<<marker:0xbaba:6>>": {
       "Ref": "ApiConstructCognitoApiGatewayCognitoUserPoolClient84249B30"
      },
      "<<marker:0xbaba:7>>": {
       "Ref": "UIConstructWebS3Bucket53F62957"
      }
     }
    ],
    "SourceMarkersConfig": [
     {},
     {}
    ],
    "DestinationBucketName": {
     "Ref": "UIConstructWebS3Bucket53F62957"
    },
    "Prune": true,
    "OutputObjectKeys": true
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete"
  },
  "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/9a1fcb4a7ecba81ad70e9d3fb241f6794497da945dae5f25924e4dd002b65f2d.zip"
    },
    "Environment": {
     "Variables": {
      "AWS_CA_BUNDLE": "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem"
     }
    },
    "Handler": "index.handler",
    "Layers": [
     {
      "Ref": "UIBucketDeploymentDeployWebsiteAwsCliLayer18657DAE"
     }
    ],
    "Role": {
     "Fn::GetAtt": [
      "UIBucketDeploymentuiCopyAssetsToS3FnServiceRole95E1B3B0",
      "Arn"
     ]
    },
    "Runtime": "python3.11",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 900
   },
   "DependsOn": [
    "UIBucketDeploymentuiCopyAssetsToS3FnServiceRoleDefaultPolicy1D3BFA93",
    "UIBucketDeploymentuiCopyAssetsToS3FnServiceRole95E1B3B0"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_INSIDE_VPC",
      "LAMBDA_CONCURRENCY_CHECK"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "The non-container Lambda function is not configured to use the latest runtime version",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "InternalModuleRegistrationInternalModuleRegistrationLambdaRole8E5A8AC8": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "lambda.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Policies": [
     {
      "PolicyDocument": {
       "Statement": [
        {
         "Action": "states:StartExecution",
         "Effect": "Allow",
         "Resource": [
          {
           "Ref": "DeregisterStateMachineC2A35F3D"
          },
          {
           "Ref": "RegisterStateMachineDAC291DA"
          }
         ]
        },
        {
         "Action": "servicecatalog:SearchProductsAsAdmin",
         "Effect": "Allow",
         "Resource": {
          "Fn::Join": [
           "",
           [
            "arn:",
            {
             "Ref": "AWS::Partition"
            },
            ":servicecatalog:",
            {
             "Ref": "AWS::Region"
            },
            ":",
            {
             "Ref": "AWS::AccountId"
            },
            ":*/*"
           ]
          ]
         }
        },
        {
         "Action": "dynamodb:Query",
         "Effect": "Allow",
         "Resource": [
          {
           "Fn::GetAtt": [
            "StorageConstructMcsDynamoDbTableModulesMapping4D272082",
            "Arn"
           ]
          },
          {
           "Fn::GetAtt": [
            "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7",
            "Arn"
           ]
          },
          {
           "Fn::Join": [
            "",
            [
             {
              "Fn::GetAtt": [
               "StorageConstructMcsDynamoDbTableModulesMapping4D272082",
               "Arn"
              ]
             },
             "/*"
            ]
           ]
          },
          {
           "Fn::Join": [
            "",
            [
             {
              "Fn::GetAtt": [
               "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7",
               "Arn"
              ]
             },
             "/*"
            ]
           ]
          }
         ]
        }
       ],
       "Version": "2012-10-17"
      },
      "PolicyName": "InternalModuleRegistrationLambdaPolicy"
     }
    ],
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "IAM_NO_INLINE_POLICY_CHECK"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Custom resource needs to be able to create any iam resource",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "CDK adds AWSLambdaBasicExecutionRole which just provides logging/x-ray access",
       "id": "AwsSolutions-IAM4"
      }
     ]
    }
   }
  },
  "InternalModuleRegistrationModuleRegistrationmanagedidentity311A47E2": {
   "Type": "AWS::CloudFormation::CustomResource",
   "Properties": {
    "ServiceToken": {
     "Fn::GetAtt": [
      "InternalModuleRegistrationProviderframeworkonEvent786003AB",
      "Arn"
     ]
    },
    "ManifestContent": {
     "Fn::Join": [
      "",
      [
       "{\"$manifest\": \"Modular Cloud Studio on AWS\", \"$manifestVersion\": \"2024-01-23\", \"Name\": \"Managed Active Directory\", \"Description\": \"Deploys a Managed Active Directory into your MCS environment\", \"Owner\": \"Modular Cloud Studio Team\", \"Category\": \"Identity\", \"Revisions\": [{\"Revision\": \"1.0.0\", \"TemplateUrls\": {\"Hub\": \"",
       {
        "Fn::Sub": "https://solutions-${AWS::Region}.s3.amazonaws.com/modular-cloud-studio-on-aws/v1.1.0/"
       },
       "ManagedIdentityADStack.template\", \"Spoke\": \"",
       {
        "Fn::Sub": "https://solutions-${AWS::Region}.s3.amazonaws.com/modular-cloud-studio-on-aws/v1.1.0/"
       },
       "ManagedSpokeIdentityADStack.template\"}, \"SupportedRegions\": [\"us-east-1\", \"us-east-2\", \"us-west-1\", \"us-west-2\", \"eu-north-1\", \"eu-west-1\", \"eu-west-2\", \"eu-west-3\", \"eu-central-1\", \"ap-northeast-1\", \"ap-northeast-2\", \"ap-south-1\", \"ap-southeast-1\", \"ap-southeast-2\", \"ca-central-1\", \"sa-east-1\"], \"Compatibility\": {\"MinimumMcsVersion\": \"1.0.0\", \"MaximumMcsVersion\": \"1.0.0\"}}]}"
      ]
     ]
    },
    "ModuleVersion": "1.0.0"
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete"
  },
  "InternalModuleRegistrationModuleRegistrationunmanagedidentity5954B96C": {
   "Type": "AWS::CloudFormation::CustomResource",
   "Properties": {
    "ServiceToken": {
     "Fn::GetAtt": [
      "InternalModuleRegistrationProviderframeworkonEvent786003AB",
      "Arn"
     ]
    },
    "ManifestContent": {
     "Fn::Join": [
      "",
      [
       "{\"$manifest\": \"Modular Cloud Studio on AWS\", \"$manifestVersion\": \"2024-01-23\", \"Name\": \"Unmanaged Active Directory\", \"Description\": \"Deploys a Unmanaged Active Directory into your MCS environment\", \"Owner\": \"Modular Cloud Studio Team\", \"Category\": \"Identity\", \"Revisions\": [{\"Revision\": \"1.0.0\", \"TemplateUrl\": \"",
       {
        "Fn::Sub": "https://solutions-${AWS::Region}.s3.amazonaws.com/modular-cloud-studio-on-aws/v1.1.0/"
       },
       "UnmanagedIdentityADStack.template\", \"SupportedRegions\": [\"us-east-1\", \"us-east-2\", \"us-west-1\", \"us-west-2\", \"eu-north-1\", \"eu-west-1\", \"eu-west-2\", \"eu-west-3\", \"eu-central-1\", \"ap-northeast-1\", \"ap-northeast-2\", \"ap-south-1\", \"ap-southeast-1\", \"ap-southeast-2\", \"ca-central-1\", \"sa-east-1\"], \"Compatibility\": {\"MinimumMcsVersion\": \"1.0.0\", \"MaximumMcsVersion\": \"1.0.0\"}}]}"
      ]
     ]
    },
    "ModuleVersion": "1.0.0"
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete"
  },
  "InternalModuleRegistrationModuleRegistrationManagedVPC65B24730": {
   "Type": "AWS::CloudFormation::CustomResource",
   "Properties": {
    "ServiceToken": {
     "Fn::GetAtt": [
      "InternalModuleRegistrationProviderframeworkonEvent786003AB",
      "Arn"
     ]
    },
    "ManifestContent": {
     "Fn::Join": [
      "",
      [
       "{\"$manifest\":\"Modular Cloud Studio on AWS\",\"$manifestVersion\":\"2024-01-23\",\"Name\":\"Managed VPC\",\"Description\":\"Deploys a Managed VPC into your MCS environment\",\"Owner\":\"Modular Cloud Studio Team\",\"Category\":\"Network\",\"Revisions\":[{\"Revision\":\"1.0.0\",\"TemplateUrls\":{\"Hub\":\"",
       {
        "Fn::Sub": "https://solutions-${AWS::Region}.s3.amazonaws.com/modular-cloud-studio-on-aws/v1.1.0/"
       },
       "ManagedVpcStack.template\",\"Spoke\":\"",
       {
        "Fn::Sub": "https://solutions-${AWS::Region}.s3.amazonaws.com/modular-cloud-studio-on-aws/v1.1.0/"
       },
       "ManagedSpokeVpcStack.template\"},\"SupportedRegions\":[\"us-east-1\",\"us-east-2\",\"us-west-1\",\"us-west-2\",\"eu-north-1\",\"eu-west-1\",\"eu-west-2\",\"eu-west-3\",\"eu-central-1\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-south-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ca-central-1\",\"sa-east-1\"],\"Compatibility\":{\"MinimumMcsVersion\":\"1.0.0\",\"MaximumMcsVersion\":\"1.0.0\"}}]}"
      ]
     ]
    },
    "ModuleVersion": "1.0.0"
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete"
  },
  "InternalModuleRegistrationModuleRegistrationUnmanagedVPC9FB50AF2": {
   "Type": "AWS::CloudFormation::CustomResource",
   "Properties": {
    "ServiceToken": {
     "Fn::GetAtt": [
      "InternalModuleRegistrationProviderframeworkonEvent786003AB",
      "Arn"
     ]
    },
    "ManifestContent": {
     "Fn::Join": [
      "",
      [
       "{\"$manifest\":\"Modular Cloud Studio on AWS\",\"$manifestVersion\":\"2024-01-23\",\"Name\":\"Unmanaged VPC\",\"Description\":\"Deploys a Unmanaged VPC into your MCS environment\",\"Owner\":\"Modular Cloud Studio Team\",\"Category\":\"Network\",\"Revisions\":[{\"Revision\":\"1.0.0\",\"TemplateUrl\":\"",
       {
        "Fn::Sub": "https://solutions-${AWS::Region}.s3.amazonaws.com/modular-cloud-studio-on-aws/v1.1.0/"
       },
       "UnmanagedVpcStack.template\",\"SupportedRegions\":[\"us-east-1\",\"us-east-2\",\"us-west-1\",\"us-west-2\",\"eu-north-1\",\"eu-west-1\",\"eu-west-2\",\"eu-west-3\",\"eu-central-1\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-south-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ca-central-1\",\"sa-east-1\"],\"Compatibility\":{\"MinimumMcsVersion\":\"1.0.0\",\"MaximumMcsVersion\":\"1.0.0\"}}]}"
      ]
     ]
    },
    "ModuleVersion": "1.0.0"
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete"
  },
  "InternalModuleRegistrationModuleRegistrationspokeregion47BB083C": {
   "Type": "AWS::CloudFormation::CustomResource",
   "Properties": {
    "ServiceToken": {
     "Fn::GetAtt": [
      "InternalModuleRegistrationProviderframeworkonEvent786003AB",
      "Arn"
     ]
    },
    "ManifestContent": {
     "Fn::Join": [
      "",
      [
       "{\"$manifest\": \"Modular Cloud Studio on AWS\", \"$manifestVersion\": \"2024-01-23\", \"Name\": \"Spoke Region Infrastructure\", \"Description\": \"Deploys a Spoke Region Infrastructure into your MCS environment\", \"Owner\": \"Modular Cloud Studio Team\", \"Category\": \"SpokeRegionInfrastructure\", \"Revisions\": [{\"Revision\": \"1.0.0\", \"TemplateUrls\": {\"Spoke\": \"",
       {
        "Fn::Sub": "https://solutions-${AWS::Region}.s3.amazonaws.com/modular-cloud-studio-on-aws/v1.1.0/"
       },
       "SpokeRegionInfrastructureStack.template\"}, \"SupportedRegions\": [\"us-east-1\", \"us-east-2\", \"us-west-1\", \"us-west-2\", \"eu-north-1\", \"eu-west-1\", \"eu-west-2\", \"eu-west-3\", \"eu-central-1\", \"ap-northeast-1\", \"ap-northeast-2\", \"ap-south-1\", \"ap-southeast-1\", \"ap-southeast-2\", \"ca-central-1\", \"sa-east-1\"], \"Compatibility\": {\"MinimumMcsVersion\": \"1.0.0\", \"MaximumMcsVersion\": \"1.0.0\"}}]}"
      ]
     ]
    },
    "ModuleVersion": "1.0.0"
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete"
  },
  "InternalModuleRegistrationModuleRegistrationstoragelusture1440B20D": {
   "Type": "AWS::CloudFormation::CustomResource",
   "Properties": {
    "ServiceToken": {
     "Fn::GetAtt": [
      "InternalModuleRegistrationProviderframeworkonEvent786003AB",
      "Arn"
     ]
    },
    "ManifestContent": {
     "Fn::Join": [
      "",
      [
       "{\"$manifest\": \"Modular Cloud Studio on AWS\", \"$manifestVersion\": \"2024-01-23\", \"Name\": \"Amazon FSx for Lustre\", \"Description\": \"Deploys a Amazon FSx for Lustre into your MCS environment\", \"Owner\": \"Modular Cloud Studio Team\", \"Category\": \"Storage\", \"Revisions\": [{\"Revision\": \"1.0.0\", \"TemplateUrl\": \"",
       {
        "Fn::Sub": "https://solutions-${AWS::Region}.s3.amazonaws.com/modular-cloud-studio-on-aws/v1.1.0/"
       },
       "FsxForLustreStack.template\", \"SupportedRegions\": [\"us-east-1\", \"us-east-2\", \"us-west-1\", \"us-west-2\", \"eu-north-1\", \"eu-west-1\", \"eu-west-2\", \"eu-west-3\", \"eu-central-1\", \"ap-northeast-1\", \"ap-northeast-2\", \"ap-south-1\", \"ap-southeast-1\", \"ap-southeast-2\", \"ca-central-1\", \"sa-east-1\"], \"Compatibility\": {\"MinimumMcsVersion\": \"1.0.0\", \"MaximumMcsVersion\": \"1.0.0\"}}]}"
      ]
     ]
    },
    "ModuleVersion": "1.0.0"
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete"
  },
  "InternalModuleRegistrationModuleRegistrationstoragewindows6A537EBD": {
   "Type": "AWS::CloudFormation::CustomResource",
   "Properties": {
    "ServiceToken": {
     "Fn::GetAtt": [
      "InternalModuleRegistrationProviderframeworkonEvent786003AB",
      "Arn"
     ]
    },
    "ManifestContent": {
     "Fn::Join": [
      "",
      [
       "{\"$manifest\": \"Modular Cloud Studio on AWS\", \"$manifestVersion\": \"2024-01-23\", \"Name\": \"Amazon FSx for Windows File Server\", \"Description\": \"Deploys a Amazon FSx for Windows File Server into your MCS environment\", \"Owner\": \"Modular Cloud Studio Team\", \"Category\": \"Storage\", \"Revisions\": [{\"Revision\": \"1.0.0\", \"TemplateUrl\": \"",
       {
        "Fn::Sub": "https://solutions-${AWS::Region}.s3.amazonaws.com/modular-cloud-studio-on-aws/v1.1.0/"
       },
       "FsxForWindowsFileServerStack.template\", \"SupportedRegions\": [\"us-east-1\", \"us-east-2\", \"us-west-1\", \"us-west-2\", \"eu-north-1\", \"eu-west-1\", \"eu-west-2\", \"eu-west-3\", \"eu-central-1\", \"ap-northeast-1\", \"ap-northeast-2\", \"ap-south-1\", \"ap-southeast-1\", \"ap-southeast-2\", \"ca-central-1\", \"sa-east-1\"], \"Compatibility\": {\"MinimumMcsVersion\": \"1.0.0\", \"MaximumMcsVersion\": \"1.0.0\"}}]}"
      ]
     ]
    },
    "ModuleVersion": "1.0.0"
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete"
  },
  "InternalModuleRegistrationModuleRegistrationleostreambroker1F5BA9C5": {
   "Type": "AWS::CloudFormation::CustomResource",
   "Properties": {
    "ServiceToken": {
     "Fn::GetAtt": [
      "InternalModuleRegistrationProviderframeworkonEvent786003AB",
      "Arn"
     ]
    },
    "ManifestContent": {
     "Fn::Join": [
      "",
      [
       "{\"$manifest\": \"Modular Cloud Studio on AWS\", \"$manifestVersion\": \"2024-01-23\", \"Name\": \"Leostream Broker\", \"Description\": \"Deploys a Leostream Broker into your MCS environment\", \"Owner\": \"Modular Cloud Studio Team\", \"Category\": \"WorkstationManagement\", \"Revisions\": [{\"Revision\": \"1.0.0\", \"TemplateUrls\": {\"Hub\": \"",
       {
        "Fn::Sub": "https://solutions-${AWS::Region}.s3.amazonaws.com/modular-cloud-studio-on-aws/v1.1.0/"
       },
       "LeostreamBrokerStack.template\", \"Spoke\": \"",
       {
        "Fn::Sub": "https://solutions-${AWS::Region}.s3.amazonaws.com/modular-cloud-studio-on-aws/v1.1.0/"
       },
       "LeostreamBrokerSpokeStack.template\"}, \"SupportedRegions\": [\"us-east-1\", \"us-east-2\", \"us-west-1\", \"us-west-2\", \"eu-north-1\", \"eu-west-1\", \"eu-west-2\", \"eu-west-3\", \"eu-central-1\", \"ap-northeast-1\", \"ap-northeast-2\", \"ap-south-1\", \"ap-southeast-1\", \"ap-southeast-2\", \"ca-central-1\", \"sa-east-1\"], \"Compatibility\": {\"MinimumMcsVersion\": \"1.0.0\", \"MaximumMcsVersion\": \"1.0.0\"}}]}"
      ]
     ]
    },
    "ModuleVersion": "1.0.0"
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete"
  },
  "InternalModuleRegistrationModuleRegistrationpixelstreaming2F2F7979": {
   "Type": "AWS::CloudFormation::CustomResource",
   "Properties": {
    "ServiceToken": {
     "Fn::GetAtt": [
      "InternalModuleRegistrationProviderframeworkonEvent786003AB",
      "Arn"
     ]
    },
    "ManifestContent": {
     "Fn::Join": [
      "",
      [
       "{\"$manifest\": \"Modular Cloud Studio on AWS\", \"$manifestVersion\": \"2024-01-23\", \"Name\": \"Leostream Gateway with Amazon DCV\", \"Description\": \"Deploys a Leostream Gateway with Amazon DCV into your MCS environment\", \"Owner\": \"Modular Cloud Studio Team\", \"Category\": \"WorkstationManagement\", \"Revisions\": [{\"Revision\": \"1.0.0\", \"TemplateUrls\": {\"Hub\": \"",
       {
        "Fn::Sub": "https://solutions-${AWS::Region}.s3.amazonaws.com/modular-cloud-studio-on-aws/v1.1.0/"
       },
       "LeostreamAmazonDcvGatewayStack.template\", \"Spoke\": \"",
       {
        "Fn::Sub": "https://solutions-${AWS::Region}.s3.amazonaws.com/modular-cloud-studio-on-aws/v1.1.0/"
       },
       "LeostreamAmazonDcvGatewaySpokeStack.template\"}, \"SupportedRegions\": [\"us-east-1\", \"us-east-2\", \"us-west-1\", \"us-west-2\", \"eu-north-1\", \"eu-west-1\", \"eu-west-2\", \"eu-west-3\", \"eu-central-1\", \"ap-northeast-1\", \"ap-northeast-2\", \"ap-south-1\", \"ap-southeast-1\", \"ap-southeast-2\", \"ca-central-1\", \"sa-east-1\"], \"Compatibility\": {\"MinimumMcsVersion\": \"1.0.0\", \"MaximumMcsVersion\": \"1.0.0\"}}]}"
      ]
     ]
    },
    "ModuleVersion": "1.0.0"
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete"
  },
  "InternalModuleRegistrationOnEventLambdaLogsD1849893": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/InternalModuleRegistrationOnEventLambda"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "InternalModuleRegistrationOnEventLambda2706D47D": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/7063a78d587349769b9edb1151171c72df810f0cdced6f80a275e60c0434749d.zip"
    },
    "Description": "Handles internal module (de)registration events",
    "Environment": {
     "Variables": {
      "ACCOUNT_ID": {
       "Ref": "AWS::AccountId"
      },
      "SOLUTION_ID": "SO0282",
      "DEPLOYMENT_ID": {
       "Fn::Join": [
        "",
        [
         "mcs-",
         {
          "Fn::Select": [
           2,
           {
            "Fn::Split": [
             "/",
             {
              "Ref": "AWS::StackId"
             }
            ]
           }
          ]
         }
        ]
       ]
      },
      "REGISTERED_MODULE_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7"
      },
      "MODULES_MAPPING_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableModulesMapping4D272082"
      },
      "REGISTER_STEPFUNCTION_ARN": {
       "Ref": "RegisterStateMachineDAC291DA"
      },
      "DEREGISTER_STEPFUNCTION_ARN": {
       "Ref": "DeregisterStateMachineC2A35F3D"
      },
      "SERVICECATALOG_PORTFOLIO_ID": {
       "Ref": "McsModulesServiceCatalogPortfolioCB9CECD1"
      },
      "EXECUTION_ROLE_ARN": {
       "Fn::GetAtt": [
        "ServiceCatalogExecutionRoleC180B941",
        "Arn"
       ]
      },
      "EXECUTION_ROLE_NAME": {
       "Ref": "ServiceCatalogExecutionRoleC180B941"
      },
      "SUPPORTED_REGIONS": "us-east-1,us-east-2,us-west-1,us-west-2,eu-north-1,eu-west-1,eu-west-2,eu-west-3,eu-central-1,ap-northeast-1,ap-northeast-2,ap-south-1,ap-southeast-1,ap-southeast-2,ca-central-1,sa-east-1",
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0"
     }
    },
    "Handler": "on_event_handler.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "InternalModuleRegistrationOnEventLambdaLogsD1849893"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "InternalModuleRegistrationInternalModuleRegistrationLambdaRole8E5A8AC8",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "InternalModuleRegistrationInternalModuleRegistrationLambdaRole8E5A8AC8",
    "InternalModuleRegistrationOnEventLambdaLogsPolicy2E98C260"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "InternalModuleRegistrationOnEventLambdaLogsPolicy2E98C260": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "InternalModuleRegistrationOnEventLambdaLogsD1849893",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "InternalModuleRegistrationOnEventLambdaLogsPolicy2E98C260",
    "Roles": [
     {
      "Ref": "InternalModuleRegistrationInternalModuleRegistrationLambdaRole8E5A8AC8"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<InternalModuleRegistrationOnEventLambda2706D47D>:*"
       ]
      }
     ]
    }
   }
  },
  "InternalModuleRegistrationIsCompleteLambdaLogsBE1312CE": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/InternalModuleRegistrationIsCompleteLambda"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "InternalModuleRegistrationIsCompleteLambda2DDD31A8": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/7063a78d587349769b9edb1151171c72df810f0cdced6f80a275e60c0434749d.zip"
    },
    "Description": "Checks if module (de)registration is complete",
    "Environment": {
     "Variables": {
      "ACCOUNT_ID": {
       "Ref": "AWS::AccountId"
      },
      "SOLUTION_ID": "SO0282",
      "DEPLOYMENT_ID": {
       "Fn::Join": [
        "",
        [
         "mcs-",
         {
          "Fn::Select": [
           2,
           {
            "Fn::Split": [
             "/",
             {
              "Ref": "AWS::StackId"
             }
            ]
           }
          ]
         }
        ]
       ]
      },
      "REGISTERED_MODULE_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableRegisteredModulesBD86AEA7"
      },
      "MODULES_MAPPING_TABLE_NAME": {
       "Ref": "StorageConstructMcsDynamoDbTableModulesMapping4D272082"
      },
      "REGISTER_STEPFUNCTION_ARN": {
       "Ref": "RegisterStateMachineDAC291DA"
      },
      "DEREGISTER_STEPFUNCTION_ARN": {
       "Ref": "DeregisterStateMachineC2A35F3D"
      },
      "SERVICECATALOG_PORTFOLIO_ID": {
       "Ref": "McsModulesServiceCatalogPortfolioCB9CECD1"
      },
      "EXECUTION_ROLE_ARN": {
       "Fn::GetAtt": [
        "ServiceCatalogExecutionRoleC180B941",
        "Arn"
       ]
      },
      "EXECUTION_ROLE_NAME": {
       "Ref": "ServiceCatalogExecutionRoleC180B941"
      },
      "SUPPORTED_REGIONS": "us-east-1,us-east-2,us-west-1,us-west-2,eu-north-1,eu-west-1,eu-west-2,eu-west-3,eu-central-1,ap-northeast-1,ap-northeast-2,ap-south-1,ap-southeast-1,ap-southeast-2,ca-central-1,sa-east-1",
      "USER_AGENT_STRING": "AWSSOLUTION/SO0282/v1.1.0"
     }
    },
    "Handler": "is_complete_handler.handler",
    "Layers": [
     {
      "Ref": "MCSPythonLayerPythonLambdaLayerC6475430"
     }
    ],
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "InternalModuleRegistrationIsCompleteLambdaLogsBE1312CE"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "InternalModuleRegistrationInternalModuleRegistrationLambdaRole8E5A8AC8",
      "Arn"
     ]
    },
    "Runtime": "python3.12",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 60
   },
   "DependsOn": [
    "InternalModuleRegistrationInternalModuleRegistrationLambdaRole8E5A8AC8",
    "InternalModuleRegistrationIsCompleteLambdaLogsPolicy2A8894E2"
   ],
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "LAMBDA_CONCURRENCY_CHECK",
      "LAMBDA_INSIDE_VPC"
     ]
    },
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Will upgrade to Python 3.13 when it makes sense to",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "InternalModuleRegistrationIsCompleteLambdaLogsPolicy2A8894E2": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "InternalModuleRegistrationIsCompleteLambdaLogsBE1312CE",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "InternalModuleRegistrationIsCompleteLambdaLogsPolicy2A8894E2",
    "Roles": [
     {
      "Ref": "InternalModuleRegistrationInternalModuleRegistrationLambdaRole8E5A8AC8"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Lambda needs access to make logs; log streams are generated",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::arn:<AWS::Partition>:logs:<AWS::Region>:<AWS::AccountId>:log-group:/aws/lambda/<InternalModuleRegistrationIsCompleteLambda2DDD31A8>:*"
       ]
      }
     ]
    }
   }
  },
  "InternalModuleRegistrationProviderLogs89042602": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/lambda/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/InternalModuleRegistrationProvider"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "InternalModuleRegistrationProviderWaiterLogsE3CC7099": {
   "Type": "AWS::Logs::LogGroup",
   "Properties": {
    "LogGroupName": {
     "Fn::Join": [
      "",
      [
       "/aws/vendedlogs/states/modular-cloud-studio-on-aws/mcs-",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/",
       {
        "Fn::Select": [
         2,
         {
          "Fn::Split": [
           "/",
           {
            "Ref": "AWS::StackId"
           }
          ]
         }
        ]
       },
       "/ModularCloudStudioOnAwsStack/InternalModuleRegistrationProviderWaiter"
      ]
     ]
    },
    "RetentionInDays": 3653,
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "guard": {
     "SuppressedRules": [
      "CLOUDWATCH_LOG_GROUP_ENCRYPTED"
     ]
    }
   }
  },
  "InternalModuleRegistrationProviderframeworkonEventServiceRoleC4DF77D0": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "lambda.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "ManagedPolicyArns": [
     {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      ]
     }
    ],
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationOnEventLambda2706D47D.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationIsCompleteLambda2DDD31A8.Arn>:*"
       ]
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM4"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-SF2"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "InternalModuleRegistrationProviderframeworkonEventServiceRoleDefaultPolicy0AFFA39C": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": "lambda:InvokeFunction",
       "Effect": "Allow",
       "Resource": [
        {
         "Fn::GetAtt": [
          "InternalModuleRegistrationIsCompleteLambda2DDD31A8",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "InternalModuleRegistrationOnEventLambda2706D47D",
          "Arn"
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "InternalModuleRegistrationIsCompleteLambda2DDD31A8",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "InternalModuleRegistrationOnEventLambda2706D47D",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        }
       ]
      },
      {
       "Action": "lambda:GetFunction",
       "Effect": "Allow",
       "Resource": [
        {
         "Fn::GetAtt": [
          "InternalModuleRegistrationIsCompleteLambda2DDD31A8",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "InternalModuleRegistrationOnEventLambda2706D47D",
          "Arn"
         ]
        }
       ]
      },
      {
       "Action": "states:StartExecution",
       "Effect": "Allow",
       "Resource": {
        "Ref": "InternalModuleRegistrationProviderwaiterstatemachine2B1000CD"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "InternalModuleRegistrationProviderframeworkonEventServiceRoleDefaultPolicy0AFFA39C",
    "Roles": [
     {
      "Ref": "InternalModuleRegistrationProviderframeworkonEventServiceRoleC4DF77D0"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationOnEventLambda2706D47D.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationIsCompleteLambda2DDD31A8.Arn>:*"
       ]
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM4"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-SF2"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "InternalModuleRegistrationProviderframeworkonEvent786003AB": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca.zip"
    },
    "Description": "AWS CDK resource provider framework - onEvent (ModularCloudStudioOnAwsStack/InternalModuleRegistrationProvider)",
    "Environment": {
     "Variables": {
      "USER_ON_EVENT_FUNCTION_ARN": {
       "Fn::GetAtt": [
        "InternalModuleRegistrationOnEventLambda2706D47D",
        "Arn"
       ]
      },
      "USER_IS_COMPLETE_FUNCTION_ARN": {
       "Fn::GetAtt": [
        "InternalModuleRegistrationIsCompleteLambda2DDD31A8",
        "Arn"
       ]
      },
      "WAITER_STATE_MACHINE_ARN": {
       "Ref": "InternalModuleRegistrationProviderwaiterstatemachine2B1000CD"
      }
     }
    },
    "Handler": "framework.onEvent",
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "InternalModuleRegistrationProviderLogs89042602"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "InternalModuleRegistrationProviderframeworkonEventServiceRoleC4DF77D0",
      "Arn"
     ]
    },
    "Runtime": "nodejs22.x",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 900
   },
   "DependsOn": [
    "InternalModuleRegistrationProviderframeworkonEventServiceRoleDefaultPolicy0AFFA39C",
    "InternalModuleRegistrationProviderframeworkonEventServiceRoleC4DF77D0"
   ],
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationOnEventLambda2706D47D.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationIsCompleteLambda2DDD31A8.Arn>:*"
       ]
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM4"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-SF2"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-L1"
      }
     ]
    },
    "guard": {
     "SuppressedRules": [
      "LAMBDA_INSIDE_VPC",
      "LAMBDA_CONCURRENCY_CHECK"
     ]
    }
   }
  },
  "InternalModuleRegistrationProviderframeworkisCompleteServiceRole9BA03842": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "lambda.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "ManagedPolicyArns": [
     {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      ]
     }
    ],
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationOnEventLambda2706D47D.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationIsCompleteLambda2DDD31A8.Arn>:*"
       ]
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM4"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-SF2"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "InternalModuleRegistrationProviderframeworkisCompleteServiceRoleDefaultPolicy126D96B9": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": "lambda:InvokeFunction",
       "Effect": "Allow",
       "Resource": [
        {
         "Fn::GetAtt": [
          "InternalModuleRegistrationIsCompleteLambda2DDD31A8",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "InternalModuleRegistrationOnEventLambda2706D47D",
          "Arn"
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "InternalModuleRegistrationIsCompleteLambda2DDD31A8",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "InternalModuleRegistrationOnEventLambda2706D47D",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        }
       ]
      },
      {
       "Action": "lambda:GetFunction",
       "Effect": "Allow",
       "Resource": [
        {
         "Fn::GetAtt": [
          "InternalModuleRegistrationIsCompleteLambda2DDD31A8",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "InternalModuleRegistrationOnEventLambda2706D47D",
          "Arn"
         ]
        }
       ]
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "InternalModuleRegistrationProviderframeworkisCompleteServiceRoleDefaultPolicy126D96B9",
    "Roles": [
     {
      "Ref": "InternalModuleRegistrationProviderframeworkisCompleteServiceRole9BA03842"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationOnEventLambda2706D47D.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationIsCompleteLambda2DDD31A8.Arn>:*"
       ]
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM4"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-SF2"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "InternalModuleRegistrationProviderframeworkisComplete927D6186": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca.zip"
    },
    "Description": "AWS CDK resource provider framework - isComplete (ModularCloudStudioOnAwsStack/InternalModuleRegistrationProvider)",
    "Environment": {
     "Variables": {
      "USER_ON_EVENT_FUNCTION_ARN": {
       "Fn::GetAtt": [
        "InternalModuleRegistrationOnEventLambda2706D47D",
        "Arn"
       ]
      },
      "USER_IS_COMPLETE_FUNCTION_ARN": {
       "Fn::GetAtt": [
        "InternalModuleRegistrationIsCompleteLambda2DDD31A8",
        "Arn"
       ]
      }
     }
    },
    "Handler": "framework.isComplete",
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "InternalModuleRegistrationProviderLogs89042602"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "InternalModuleRegistrationProviderframeworkisCompleteServiceRole9BA03842",
      "Arn"
     ]
    },
    "Runtime": "nodejs22.x",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 900
   },
   "DependsOn": [
    "InternalModuleRegistrationProviderframeworkisCompleteServiceRoleDefaultPolicy126D96B9",
    "InternalModuleRegistrationProviderframeworkisCompleteServiceRole9BA03842"
   ],
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationOnEventLambda2706D47D.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationIsCompleteLambda2DDD31A8.Arn>:*"
       ]
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM4"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-SF2"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-L1"
      }
     ]
    },
    "guard": {
     "SuppressedRules": [
      "LAMBDA_INSIDE_VPC",
      "LAMBDA_CONCURRENCY_CHECK"
     ]
    }
   }
  },
  "InternalModuleRegistrationProviderframeworkonTimeoutServiceRole1DC28D13": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "lambda.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "ManagedPolicyArns": [
     {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      ]
     }
    ],
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationOnEventLambda2706D47D.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationIsCompleteLambda2DDD31A8.Arn>:*"
       ]
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM4"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-SF2"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "InternalModuleRegistrationProviderframeworkonTimeoutServiceRoleDefaultPolicyBFE43EBD": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": "lambda:InvokeFunction",
       "Effect": "Allow",
       "Resource": [
        {
         "Fn::GetAtt": [
          "InternalModuleRegistrationIsCompleteLambda2DDD31A8",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "InternalModuleRegistrationOnEventLambda2706D47D",
          "Arn"
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "InternalModuleRegistrationIsCompleteLambda2DDD31A8",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "InternalModuleRegistrationOnEventLambda2706D47D",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        }
       ]
      },
      {
       "Action": "lambda:GetFunction",
       "Effect": "Allow",
       "Resource": [
        {
         "Fn::GetAtt": [
          "InternalModuleRegistrationIsCompleteLambda2DDD31A8",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "InternalModuleRegistrationOnEventLambda2706D47D",
          "Arn"
         ]
        }
       ]
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "InternalModuleRegistrationProviderframeworkonTimeoutServiceRoleDefaultPolicyBFE43EBD",
    "Roles": [
     {
      "Ref": "InternalModuleRegistrationProviderframeworkonTimeoutServiceRole1DC28D13"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationOnEventLambda2706D47D.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationIsCompleteLambda2DDD31A8.Arn>:*"
       ]
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM4"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-SF2"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "InternalModuleRegistrationProviderframeworkonTimeoutEF0F01E9": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "solutions-${AWS::Region}"
     },
     "S3Key": "modular-cloud-studio-on-aws/v1.1.0/bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca.zip"
    },
    "Description": "AWS CDK resource provider framework - onTimeout (ModularCloudStudioOnAwsStack/InternalModuleRegistrationProvider)",
    "Environment": {
     "Variables": {
      "USER_ON_EVENT_FUNCTION_ARN": {
       "Fn::GetAtt": [
        "InternalModuleRegistrationOnEventLambda2706D47D",
        "Arn"
       ]
      },
      "USER_IS_COMPLETE_FUNCTION_ARN": {
       "Fn::GetAtt": [
        "InternalModuleRegistrationIsCompleteLambda2DDD31A8",
        "Arn"
       ]
      }
     }
    },
    "Handler": "framework.onTimeout",
    "LoggingConfig": {
     "LogGroup": {
      "Ref": "InternalModuleRegistrationProviderLogs89042602"
     }
    },
    "Role": {
     "Fn::GetAtt": [
      "InternalModuleRegistrationProviderframeworkonTimeoutServiceRole1DC28D13",
      "Arn"
     ]
    },
    "Runtime": "nodejs22.x",
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ],
    "Timeout": 900
   },
   "DependsOn": [
    "InternalModuleRegistrationProviderframeworkonTimeoutServiceRoleDefaultPolicyBFE43EBD",
    "InternalModuleRegistrationProviderframeworkonTimeoutServiceRole1DC28D13"
   ],
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationOnEventLambda2706D47D.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationIsCompleteLambda2DDD31A8.Arn>:*"
       ]
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM4"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-SF2"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-L1"
      }
     ]
    },
    "guard": {
     "SuppressedRules": [
      "LAMBDA_INSIDE_VPC",
      "LAMBDA_CONCURRENCY_CHECK"
     ]
    }
   }
  },
  "InternalModuleRegistrationProviderwaiterstatemachineRole87976507": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "states.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationOnEventLambda2706D47D.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationIsCompleteLambda2DDD31A8.Arn>:*"
       ]
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM4"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-SF2"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "InternalModuleRegistrationProviderwaiterstatemachineRoleDefaultPolicy918D7BAB": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": "lambda:InvokeFunction",
       "Effect": "Allow",
       "Resource": [
        {
         "Fn::GetAtt": [
          "InternalModuleRegistrationProviderframeworkisComplete927D6186",
          "Arn"
         ]
        },
        {
         "Fn::GetAtt": [
          "InternalModuleRegistrationProviderframeworkonTimeoutEF0F01E9",
          "Arn"
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "InternalModuleRegistrationProviderframeworkisComplete927D6186",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        },
        {
         "Fn::Join": [
          "",
          [
           {
            "Fn::GetAtt": [
             "InternalModuleRegistrationProviderframeworkonTimeoutEF0F01E9",
             "Arn"
            ]
           },
           ":*"
          ]
         ]
        }
       ]
      },
      {
       "Action": [
        "logs:CreateLogDelivery",
        "logs:CreateLogStream",
        "logs:DeleteLogDelivery",
        "logs:DescribeLogGroups",
        "logs:DescribeResourcePolicies",
        "logs:GetLogDelivery",
        "logs:ListLogDeliveries",
        "logs:PutLogEvents",
        "logs:PutResourcePolicy",
        "logs:UpdateLogDelivery"
       ],
       "Effect": "Allow",
       "Resource": "*"
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "InternalModuleRegistrationProviderwaiterstatemachineRoleDefaultPolicy918D7BAB",
    "Roles": [
     {
      "Ref": "InternalModuleRegistrationProviderwaiterstatemachineRole87976507"
     }
    ]
   },
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationOnEventLambda2706D47D.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationIsCompleteLambda2DDD31A8.Arn>:*"
       ]
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM4"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-SF2"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  },
  "InternalModuleRegistrationProviderwaiterstatemachine2B1000CD": {
   "Type": "AWS::StepFunctions::StateMachine",
   "Properties": {
    "DefinitionString": {
     "Fn::Join": [
      "",
      [
       "{\"StartAt\":\"framework-isComplete-task\",\"States\":{\"framework-isComplete-task\":{\"End\":true,\"Retry\":[{\"ErrorEquals\":[\"States.ALL\"],\"IntervalSeconds\":5,\"MaxAttempts\":60,\"BackoffRate\":1}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"Next\":\"framework-onTimeout-task\"}],\"Type\":\"Task\",\"Resource\":\"",
       {
        "Fn::GetAtt": [
         "InternalModuleRegistrationProviderframeworkisComplete927D6186",
         "Arn"
        ]
       },
       "\"},\"framework-onTimeout-task\":{\"End\":true,\"Type\":\"Task\",\"Resource\":\"",
       {
        "Fn::GetAtt": [
         "InternalModuleRegistrationProviderframeworkonTimeoutEF0F01E9",
         "Arn"
        ]
       },
       "\"}}}"
      ]
     ]
    },
    "LoggingConfiguration": {
     "Destinations": [
      {
       "CloudWatchLogsLogGroup": {
        "LogGroupArn": {
         "Fn::GetAtt": [
          "InternalModuleRegistrationProviderWaiterLogsE3CC7099",
          "Arn"
         ]
        }
       }
      }
     ],
     "IncludeExecutionData": false,
     "Level": "ALL"
    },
    "RoleArn": {
     "Fn::GetAtt": [
      "InternalModuleRegistrationProviderwaiterstatemachineRole87976507",
      "Arn"
     ]
    },
    "Tags": [
     {
      "Key": "awsApplication",
      "Value": {
       "Fn::GetAtt": [
        "MyApplications",
        "ApplicationTagValue"
       ]
      }
     },
     {
      "Key": "SolutionId",
      "Value": "SO0282"
     }
    ]
   },
   "DependsOn": [
    "InternalModuleRegistrationProviderwaiterstatemachineRoleDefaultPolicy918D7BAB",
    "InternalModuleRegistrationProviderwaiterstatemachineRole87976507"
   ],
   "Metadata": {
    "cdk_nag": {
     "rules_to_suppress": [
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM4",
       "applies_to": [
        "Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationOnEventLambda2706D47D.Arn>:*"
       ]
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-L1"
      },
      {
       "reason": "Cdk-Nag originating from Provider framework library implementation",
       "id": "AwsSolutions-IAM5",
       "applies_to": [
        "Resource::<InternalModuleRegistrationIsCompleteLambda2DDD31A8.Arn>:*"
       ]
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM4"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-IAM5"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-SF2"
      },
      {
       "reason": "Ignoring all these CDK errors because the infrastructure is supplied by CDK itself in this case",
       "id": "AwsSolutions-L1"
      }
     ]
    }
   }
  }
 },
 "Mappings": {
  "SolutionMappings": {
   "MyApplication": {
    "ApplicationName": "modular-cloud-studio-on-aws",
    "SolutionName": "Modular Cloud Studio on AWS",
    "ApplicationType": "AWS-Solutions"
   }
  },
  "OpsMetricsOptInParameter": {
   "SendAnonymizedData": {
    "Data": "Yes"
   }
  }
 },
 "Parameters": {
  "AdminEmail": {
   "Type": "String",
   "AllowedPattern": "^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$",
   "ConstraintDescription": "Must be a valid email address",
   "Description": "The admin email address to use for authorization",
   "MaxLength": 320,
   "MinLength": 7
  }
 },
 "Outputs": {
  "ApiConstructCognitoApiGatewayLambdaRestApiEndpointAB1D47E6": {
   "Value": {
    "Fn::Join": [
     "",
     [
      "https://",
      {
       "Ref": "ApiConstructCognitoApiGatewayLambdaRestApi2785AC4B"
      },
      ".execute-api.",
      {
       "Ref": "AWS::Region"
      },
      ".",
      {
       "Ref": "AWS::URLSuffix"
      },
      "/",
      {
       "Ref": "ApiConstructCognitoApiGatewayLambdaRestApiDeploymentStageprodDE3A1A7A"
      },
      "/"
     ]
    ]
   }
  },
  "UserPoolId": {
   "Value": {
    "Ref": "ApiConstructCognitoApiGatewayCognitoUserPool4127C806"
   }
  },
  "UserPoolClientId": {
   "Value": {
    "Ref": "ApiConstructCognitoApiGatewayCognitoUserPoolClient84249B30"
   }
  },
  "CloudFrontURL": {
   "Description": "The URL of CloudFront distribution",
   "Value": {
    "Fn::GetAtt": [
     "UIConstructWebCloudFrontDistribution517B16CD",
     "DomainName"
    ]
   }
  },
  "MCSDeploymentId": {
   "Value": {
    "Fn::Join": [
     "",
     [
      "mcs-",
      {
       "Fn::Select": [
        2,
        {
         "Fn::Split": [
          "/",
          {
           "Ref": "AWS::StackId"
          }
         ]
        }
       ]
      }
     ]
    ]
   }
  },
  "APIAccessLogGroup": {
   "Value": {
    "Ref": "MCSApiAccessLogs78256D33"
   }
  }
 }
}