{
  "Description": "(SO0158) - AWS CloudFormation template for deployment of the application-monitoring-with-amazon-cloudwatch. Version v1.2.6",
  "AWSTemplateFormatVersion": "2010-09-09",
  "Metadata": {
    "AWS::CloudFormation::Interface": {
      "ParameterGroups": [
        {
          "Label": {
            "default": "Do you want to deploy CloudWatch dashboard to monitor Apache workload?"
          },
          "Parameters": [
            "ApacheTagSchema",
            "ApacheDemoInstance"
          ]
        },
        {
          "Label": {
            "default": "Do you want to deploy CloudWatch dashboard to monitor Puma workload?"
          },
          "Parameters": [
            "PumaTagSchema",
            "PumaDemoInstance"
          ]
        },
        {
          "Label": {
            "default": "Do you want to deploy CloudWatch dashboard to monitor Nginx workload?"
          },
          "Parameters": [
            "NginxTagSchema",
            "NginxDemoInstance"
          ]
        }
      ],
      "ParameterLabels": {
        "ApacheTagSchema": {
          "default": "Apache Tagging Schema"
        },
        "ApacheDemoInstance": {
          "default": "Apache Demo Instance"
        },
        "PumaTagSchema": {
          "default": "Puma Tagging Schema"
        },
        "PumaDemoInstance": {
          "default": "Puma Demo Instance"
        },
        "NginxTagSchema": {
          "default": "Nginx Tagging Schema"
        },
        "NginxDemoInstance": {
          "default": "Nginx Demo Instance"
        }
      }
    }
  },
  "Parameters": {
    "ApacheTagSchema": {
      "Type": "String",
      "Default": "{\"Key\":\"CW-Dashboard\",\"Value\":\"Apache\"}",
      "AllowedPattern": "^$|^[{]\"Key\":\"[A-Za-z0-9-$#@*]*\",\"Value\":\"[A-Za-z0-9-$#@*]*\"}$",
      "ConstraintDescription": "Must match AllowedPattern",
      "Description": "Tagging Schema to identify apache workload instances. Leave empty if you don't want to monitor apache workload."
    },
    "ApacheDemoInstance": {
      "Type": "String",
      "Default": "Yes",
      "AllowedValues": [
        "Yes",
        "No"
      ],
      "Description": "Do you want to deploy apache workload demo instance?"
    },
    "PumaTagSchema": {
      "Type": "String",
      "Default": "{\"Key\":\"CW-Dashboard\",\"Value\":\"Puma\"}",
      "AllowedPattern": "^$|^[{]\"Key\":\"[A-Za-z0-9-$#@*]*\",\"Value\":\"[A-Za-z0-9-$#@*]*\"}$",
      "ConstraintDescription": "Must match AllowedPattern",
      "Description": "Tagging Schema to identify puma workload instances. Leave empty if you don't want to monitor puma workload."
    },
    "PumaDemoInstance": {
      "Type": "String",
      "Default": "Yes",
      "AllowedValues": [
        "Yes",
        "No"
      ],
      "Description": "Do you want to deploy puma workload demo instance?"
    },
    "NginxTagSchema": {
      "Type": "String",
      "Default": "{\"Key\":\"CW-Dashboard\",\"Value\":\"Nginx\"}",
      "AllowedPattern": "^$|^[{]\"Key\":\"[A-Za-z0-9-$#@*]*\",\"Value\":\"[A-Za-z0-9-$#@*]*\"}$",
      "ConstraintDescription": "Must match AllowedPattern",
      "Description": "Tagging Schema to identify nginx workload instances. Leave empty if you don't want to monitor nginx workload."
    },
    "NginxDemoInstance": {
      "Type": "String",
      "Default": "Yes",
      "AllowedValues": [
        "Yes",
        "No"
      ],
      "Description": "Do you want to deploy nginx workload demo instance?"
    }
  },
  "Conditions": {
    "ApacheDeployCheck": {
      "Fn::Not": [
        {
          "Fn::Equals": [
            {
              "Ref": "ApacheTagSchema"
            },
            ""
          ]
        }
      ]
    },
    "apacheDemoCheck": {
      "Fn::And": [
        {
          "Fn::Equals": [
            {
              "Ref": "ApacheDemoInstance"
            },
            "Yes"
          ]
        },
        {
          "Condition": "ApacheDeployCheck"
        }
      ]
    },
    "PumaDeployCheck": {
      "Fn::Not": [
        {
          "Fn::Equals": [
            {
              "Ref": "PumaTagSchema"
            },
            ""
          ]
        }
      ]
    },
    "PumaDemoCheck": {
      "Fn::And": [
        {
          "Fn::Equals": [
            {
              "Ref": "PumaDemoInstance"
            },
            "Yes"
          ]
        },
        {
          "Condition": "PumaDeployCheck"
        }
      ]
    },
    "NginxDeployCheck": {
      "Fn::Not": [
        {
          "Fn::Equals": [
            {
              "Ref": "NginxTagSchema"
            },
            ""
          ]
        }
      ]
    },
    "NginxDemoCheck": {
      "Fn::And": [
        {
          "Fn::Equals": [
            {
              "Ref": "NginxDemoInstance"
            },
            "Yes"
          ]
        },
        {
          "Condition": "NginxDeployCheck"
        }
      ]
    },
    "CDKMetadataAvailable": {
      "Fn::Or": [
        {
          "Fn::Or": [
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "af-south-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-east-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-northeast-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-northeast-2"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-south-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-southeast-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-southeast-2"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ca-central-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "cn-north-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "cn-northwest-1"
              ]
            }
          ]
        },
        {
          "Fn::Or": [
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-central-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-north-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-south-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-west-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-west-2"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-west-3"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "me-south-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "sa-east-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "us-east-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "us-east-2"
              ]
            }
          ]
        },
        {
          "Fn::Or": [
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "us-west-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "us-west-2"
              ]
            }
          ]
        }
      ]
    }
  },
  "Resources": {
    "AppRegistry968496A3": {
      "Type": "AWS::ServiceCatalogAppRegistry::Application",
      "Properties": {
        "Description": {
          "Fn::Join": [
            "",
            [
              "Service Catalog application to track and manage all your resources for the solution ",
              {
                "Fn::FindInMap": [
                  "Solution",
                  "Data",
                  "SolutionName"
                ]
              }
            ]
          ]
        },
        "Name": {
          "Fn::Join": [
            "-",
            [
              {
                "Fn::FindInMap": [
                  "Solution",
                  "Data",
                  "AppRegistryApplicationName"
                ]
              },
              {
                "Ref": "AWS::Region"
              },
              {
                "Ref": "AWS::AccountId"
              }
            ]
          ]
        },
        "Tags": {
          "Solutions:ApplicationType": {
            "Fn::FindInMap": [
              "Solution",
              "Data",
              "ApplicationType"
            ]
          },
          "Solutions:SolutionID": {
            "Fn::FindInMap": [
              "Solution",
              "Data",
              "ID"
            ]
          },
          "Solutions:SolutionName": {
            "Fn::FindInMap": [
              "Solution",
              "Data",
              "SolutionName"
            ]
          },
          "Solutions:SolutionVersion": {
            "Fn::FindInMap": [
              "Solution",
              "Data",
              "Version"
            ]
          }
        }
      },
      "Metadata": {
        "aws:cdk:path": "CW-Monitoring-Framework-Stack/AppRegistry/Resource"
      }
    },
    "AppRegistryResourceAssociation0BF2027D0": {
      "Type": "AWS::ServiceCatalogAppRegistry::ResourceAssociation",
      "Properties": {
        "Application": {
          "Fn::GetAtt": [
            "AppRegistry968496A3",
            "Id"
          ]
        },
        "Resource": {
          "Ref": "ApacheStack"
        },
        "ResourceType": "CFN_STACK"
      },
      "Metadata": {
        "aws:cdk:path": "CW-Monitoring-Framework-Stack/AppRegistry/ResourceAssociation0"
      },
      "Condition": "ApacheDeployCheck"
    },
    "AppRegistryResourceAssociation142839FB0": {
      "Type": "AWS::ServiceCatalogAppRegistry::ResourceAssociation",
      "Properties": {
        "Application": {
          "Fn::GetAtt": [
            "AppRegistry968496A3",
            "Id"
          ]
        },
        "Resource": {
          "Ref": "NginxStack"
        },
        "ResourceType": "CFN_STACK"
      },
      "Metadata": {
        "aws:cdk:path": "CW-Monitoring-Framework-Stack/AppRegistry/ResourceAssociation1"
      },
      "Condition": "NginxDeployCheck"
    },
    "AppRegistryResourceAssociation2BB1A3300": {
      "Type": "AWS::ServiceCatalogAppRegistry::ResourceAssociation",
      "Properties": {
        "Application": {
          "Fn::GetAtt": [
            "AppRegistry968496A3",
            "Id"
          ]
        },
        "Resource": {
          "Ref": "PumaStack"
        },
        "ResourceType": "CFN_STACK"
      },
      "Metadata": {
        "aws:cdk:path": "CW-Monitoring-Framework-Stack/AppRegistry/ResourceAssociation2"
      },
      "Condition": "PumaDeployCheck"
    },
    "AppRegistryResourceAssociation3BEAC7BB7": {
      "Type": "AWS::ServiceCatalogAppRegistry::ResourceAssociation",
      "Properties": {
        "Application": {
          "Fn::GetAtt": [
            "AppRegistry968496A3",
            "Id"
          ]
        },
        "Resource": {
          "Ref": "ApacheDemoStack"
        },
        "ResourceType": "CFN_STACK"
      },
      "Metadata": {
        "aws:cdk:path": "CW-Monitoring-Framework-Stack/AppRegistry/ResourceAssociation3"
      },
      "Condition": "apacheDemoCheck"
    },
    "AppRegistryResourceAssociation46F7B9873": {
      "Type": "AWS::ServiceCatalogAppRegistry::ResourceAssociation",
      "Properties": {
        "Application": {
          "Fn::GetAtt": [
            "AppRegistry968496A3",
            "Id"
          ]
        },
        "Resource": {
          "Ref": "NginxDemoStack"
        },
        "ResourceType": "CFN_STACK"
      },
      "Metadata": {
        "aws:cdk:path": "CW-Monitoring-Framework-Stack/AppRegistry/ResourceAssociation4"
      },
      "Condition": "NginxDemoCheck"
    },
    "AppRegistryResourceAssociation5FAA30631": {
      "Type": "AWS::ServiceCatalogAppRegistry::ResourceAssociation",
      "Properties": {
        "Application": {
          "Fn::GetAtt": [
            "AppRegistry968496A3",
            "Id"
          ]
        },
        "Resource": {
          "Ref": "PumaDemoStack"
        },
        "ResourceType": "CFN_STACK"
      },
      "Metadata": {
        "aws:cdk:path": "CW-Monitoring-Framework-Stack/AppRegistry/ResourceAssociation5"
      },
      "Condition": "PumaDemoCheck"
    },
    "AppRegistryAssociation": {
      "Type": "AWS::ServiceCatalogAppRegistry::ResourceAssociation",
      "Properties": {
        "Application": {
          "Fn::GetAtt": [
            "AppRegistry968496A3",
            "Id"
          ]
        },
        "Resource": {
          "Ref": "AWS::StackId"
        },
        "ResourceType": "CFN_STACK"
      },
      "Metadata": {
        "aws:cdk:path": "CW-Monitoring-Framework-Stack/AppRegistryAssociation"
      }
    },
    "DefaultApplicationAttributesFC1CC26B": {
      "Type": "AWS::ServiceCatalogAppRegistry::AttributeGroup",
      "Properties": {
        "Attributes": {
          "applicationType": {
            "Fn::FindInMap": [
              "Solution",
              "Data",
              "ApplicationType"
            ]
          },
          "version": {
            "Fn::FindInMap": [
              "Solution",
              "Data",
              "Version"
            ]
          },
          "solutionID": {
            "Fn::FindInMap": [
              "Solution",
              "Data",
              "ID"
            ]
          },
          "solutionName": {
            "Fn::FindInMap": [
              "Solution",
              "Data",
              "SolutionName"
            ]
          }
        },
        "Description": "Attribute group for solution information",
        "Name": {
          "Fn::FindInMap": [
            "Solution",
            "Data",
            "AttributeGroupName"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "CW-Monitoring-Framework-Stack/DefaultApplicationAttributes/Resource"
      }
    },
    "DefaultApplicationAttributesApplicationAttributeGroupAssociation95fca68184c859DD6A07": {
      "Type": "AWS::ServiceCatalogAppRegistry::AttributeGroupAssociation",
      "Properties": {
        "Application": {
          "Fn::GetAtt": [
            "AppRegistry968496A3",
            "Id"
          ]
        },
        "AttributeGroup": {
          "Fn::GetAtt": [
            "DefaultApplicationAttributesFC1CC26B",
            "Id"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "CW-Monitoring-Framework-Stack/DefaultApplicationAttributes/ApplicationAttributeGroupAssociation95fca68184c8"
      }
    },
    "CDKMetadata": {
      "Type": "AWS::CDK::Metadata",
      "Properties": {
        "Analytics": "v2:deflate64:H4sIAAAAAAAA/3VPQU7DQAx8S+6JG8oBuBHlwAmBygOQu3GD23TXsr2tUJS/o4hSBSFO4xmNxjNreLiDsS7wbFXoDtXAWxjfHMOhbHfxFRWP5KQzaVPs2DnFmVwtL9kl+3w9owjHvsSzvRvpiQMFdBxSjyJKPZvrJ4ztLjYiAwf8ydqQpayBGrMU+Co37srb7PSkKctfZWGfljFTWVc4yAdCXTxedq1m/LfUxT4ue/3+NU1lTB3B3lanm3tY13Bb7I250hydjwSbb/wCZIRx9k8BAAA="
      },
      "Metadata": {
        "aws:cdk:path": "CW-Monitoring-Framework-Stack/CDKMetadata/Default"
      },
      "Condition": "CDKMetadataAvailable"
    },
    "ApacheStack": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "Parameters": {
          "WorkloadName": "Apache",
          "TagSchema": {
            "Ref": "ApacheTagSchema"
          },
          "DashboardName": "ApacheDashboard",
          "AccessLogGroup": "/cw-monitoring-framework/apache/access",
          "SSMParameterName": "/cw-monitoring-framework/ApacheInstances"
        },
        "TemplateURL": "https://solutions-reference.s3.amazonaws.com/application-monitoring-with-amazon-cloudwatch/v1.2.6/workload.template"
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "CW-Monitoring-Framework-Stack/Apache-Stack.NestedStack/Apache-Stack.NestedStackResource",
        "aws:asset:path": "CWMonitoringFrameworkStackApacheStack962EBFEA.nested.template.json",
        "aws:asset:property": "TemplateURL"
      },
      "Condition": "ApacheDeployCheck"
    },
    "ApacheDemoStack": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "TemplateURL": "https://solutions-reference.s3.amazonaws.com/application-monitoring-with-amazon-cloudwatch/v1.2.6/apache-demo.template"
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "CW-Monitoring-Framework-Stack/Apache-Demo-Stack.NestedStack/Apache-Demo-Stack.NestedStackResource",
        "aws:asset:path": "CWMonitoringFrameworkStackApacheDemoStack52F492D6.nested.template.json",
        "aws:asset:property": "TemplateURL"
      },
      "Condition": "apacheDemoCheck"
    },
    "NginxStack": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "Parameters": {
          "WorkloadName": "Nginx",
          "TagSchema": {
            "Ref": "NginxTagSchema"
          },
          "DashboardName": "NginxDashboard",
          "AccessLogGroup": "/cw-monitoring-framework/nginx/access",
          "SSMParameterName": "/cw-monitoring-framework/NginxInstances"
        },
        "TemplateURL": "https://solutions-reference.s3.amazonaws.com/application-monitoring-with-amazon-cloudwatch/v1.2.6/workload.template"
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "CW-Monitoring-Framework-Stack/Nginx-Stack.NestedStack/Nginx-Stack.NestedStackResource",
        "aws:asset:path": "CWMonitoringFrameworkStackNginxStack5EF711DE.nested.template.json",
        "aws:asset:property": "TemplateURL"
      },
      "Condition": "NginxDeployCheck"
    },
    "NginxDemoStack": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "TemplateURL": "https://solutions-reference.s3.amazonaws.com/application-monitoring-with-amazon-cloudwatch/v1.2.6/nginx-demo.template"
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "CW-Monitoring-Framework-Stack/Nginx-Demo-Stack.NestedStack/Nginx-Demo-Stack.NestedStackResource",
        "aws:asset:path": "CWMonitoringFrameworkStackNginxDemoStackCA51ED7D.nested.template.json",
        "aws:asset:property": "TemplateURL"
      },
      "Condition": "NginxDemoCheck"
    },
    "PumaStack": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "Parameters": {
          "WorkloadName": "Puma",
          "TagSchema": {
            "Ref": "PumaTagSchema"
          },
          "DashboardName": "PumaDashboard",
          "AccessLogGroup": "/cw-monitoring-framework/puma/access",
          "SSMParameterName": "/cw-monitoring-framework/PumaInstances"
        },
        "TemplateURL": "https://solutions-reference.s3.amazonaws.com/application-monitoring-with-amazon-cloudwatch/v1.2.6/workload.template"
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "CW-Monitoring-Framework-Stack/Puma-Stack.NestedStack/Puma-Stack.NestedStackResource",
        "aws:asset:path": "CWMonitoringFrameworkStackPumaStack28B711F6.nested.template.json",
        "aws:asset:property": "TemplateURL"
      },
      "Condition": "PumaDeployCheck"
    },
    "PumaDemoStack": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "TemplateURL": "https://solutions-reference.s3.amazonaws.com/application-monitoring-with-amazon-cloudwatch/v1.2.6/puma-demo.template"
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "CW-Monitoring-Framework-Stack/Puma-Demo-Stack.NestedStack/Puma-Demo-Stack.NestedStackResource",
        "aws:asset:path": "CWMonitoringFrameworkStackPumaDemoStack9920F281.nested.template.json",
        "aws:asset:property": "TemplateURL"
      },
      "Condition": "PumaDemoCheck"
    }
  },
  "Outputs": {
    "DeployApache": {
      "Description": "Should the framework deploy dashboard for Apache workload?",
      "Value": "Yes",
      "Condition": "ApacheDeployCheck"
    },
    "DeployPuma": {
      "Description": "Should the framework deploy dashboard for Puma workload?",
      "Value": "Yes",
      "Condition": "PumaDeployCheck"
    },
    "DeployNginx": {
      "Description": "Should the framework deploy dashboard for Nginx workload?",
      "Value": "Yes",
      "Condition": "NginxDeployCheck"
    }
  },
  "Mappings": {
    "Solution": {
      "Data": {
        "ID": "SO0158",
        "Version": "v1.2.6",
        "AppRegistryApplicationName": "cloudwatch-monitoring-on-aws",
        "SolutionName": "application-monitoring-with-amazon-cloudwatch",
        "ApplicationType": "AWS-Solutions",
        "AttributeGroupName": "Solution-Metadata"
      }
    }
  }
}