{
  "Description": "(SO0143) DevOps Monitoring Dashboard on AWS - Main Template (Monitoring Account). Version: v1.8.13",
  "AWSTemplateFormatVersion": "2010-09-09",
  "Metadata": {
    "AWS::CloudFormation::Interface": {
      "ParameterGroups": [
        {
          "Label": {
            "default": "Metrics Configuration"
          },
          "Parameters": [
            "DataDuration",
            "CodeCommitRepo"
          ]
        },
        {
          "Label": {
            "default": "S3 Configuration"
          },
          "Parameters": [
            "S3TransitionDays"
          ]
        },
        {
          "Label": {
            "default": "QuickSight Configuration"
          },
          "Parameters": [
            "QuickSightPrincipalArn"
          ]
        },
        {
          "Label": {
            "default": "GitHub Configuration"
          },
          "Parameters": [
            "UseGitHub",
            "WebhookSecretToken",
            "AllowedIPs"
          ]
        },
        {
          "Label": {
            "default": "Multi-Account Configuration"
          },
          "Parameters": [
            "PrincipalType",
            "PrincipalList"
          ]
        },
        {
          "Label": {
            "default": "Tag Configuration"
          },
          "Parameters": [
            "TagsConfigCodeCommit",
            "TagsConfigCodeBuild",
            "TagsConfigCodePipeline"
          ]
        }
      ],
      "ParameterLabels": {
        "PrincipalType": {
          "default": "Principal Type"
        },
        "PrincipalList": {
          "default": "List of AWS Accounts or AWS Organization Ids"
        },
        "DataDuration": {
          "default": "Athena Query Data Duration (Days)"
        },
        "CodeCommitRepo": {
          "default": "AWS CodeCommit Repository List"
        },
        "QuickSightPrincipalArn": {
          "default": "Amazon Quicksight Principal ARN"
        },
        "S3TransitionDays": {
          "default": "S3 Transition Days"
        },
        "UseGitHub": {
          "default": "Use GitHub Repository"
        },
        "WebhookSecretToken": {
          "default": "Webhook Secret Token"
        },
        "AllowedIPs": {
          "default": "Allowed IP Addresses"
        },
        "TagsConfigCodeCommit": {
          "default": "Tag Configuration for filtering on CodeCommit Repositories"
        },
        "TagsConfigCodeBuild": {
          "default": "Tag Configuration for filtering on CodeBuild Projects"
        },
        "TagsConfigCodePipeline": {
          "default": "Tag Configuration for filtering on CodePipeline Pipelines"
        }
      }
    }
  },
  "Parameters": {
    "CodeCommitRepo": {
      "Type": "String",
      "Default": "'ALL'",
      "Description": "List of the names of AWS CodeCommit Repositories that will be monitored. Must be single-quoted and comma separated. For example, 'MyRepository1','MyRepository2'. To monitor all the repositories, leave default 'ALL' value."
    },
    "QuickSightPrincipalArn": {
      "Type": "String",
      "Default": "",
      "AllowedPattern": "^$|^arn:\\S+:quicksight:\\S+:\\d{12}:user/\\S+$",
      "ConstraintDescription": "Provide an arn matching an Amazon Quicksight User ARN. The input did not match the validation pattern.",
      "Description": "Provide a QuickSight ADMIN user ARN (arn:aws:quicksight:AWSRegion:AWSAccountId:user/default/QuickSightUserName) to automatically create QuickSight dashboards. QuickSight Enterprise edition must be enabled for the account. To disable QuickSight dashboards creation, leave it blank."
    },
    "DataDuration": {
      "Type": "Number",
      "Default": "90",
      "Description": "Enter a duration (days) that Athena query uses to retrieve data. By default Athena query retrieves data within the last 90 days. We recommend you to limit the duration for performance optimization and cost reduction."
    },
    "S3TransitionDays": {
      "Type": "Number",
      "Default": "365",
      "Description": "Enter the number of days after which you would like to transition Amazon S3 objects to Amazon S3 Glacier storage class. By default objects are transitioned to Glacier 365 days (one year) after creation."
    },
    "UseGitHub": {
      "Type": "String",
      "Default": "No",
      "AllowedValues": [
        "Yes",
        "No"
      ],
      "Description": "Select Yes if GitHub is used as code repository, otherwise leave it to No."
    },
    "WebhookSecretToken": {
      "Type": "String",
      "Default": "",
      "Description": "Enter a random string with high entropy to authenticate access to webhooks in GitHub. If a webhook payload header contains a matching secret, IP address authentication is bypassed. The string cannot contain commas (,), backward slashes (\\), or quotes (\"). It is highly recommended to use secret to secure your GitHub webhook. To turn off secret authentication, leave it blank. Ignore this field if GitHub is not used.",
      "NoEcho": true
    },
    "AllowedIPs": {
      "Type": "String",
      "Default": "192.30.252.0/22,185.199.108.0/22,140.82.112.0/20,143.55.64.0/20",
      "AllowedPattern": "^(?:((?!0\\d)(1?\\d?\\d|25[0-5]|2[0-4]\\d))\\.){3}((?!0\\d)(1?\\d?\\d|25[0-5]|2[0-4]\\d))(?:\\/([1-9]|[12]\\d|3[0-2]))?(?: *, *(?:((?!0\\d)(1?\\d?\\d|25[0-5]|2[0-4]\\d)){1,3}\\.){3}((?!0\\d)(1?\\d?\\d|25[0-5]|2[0-4]\\d))(?:\\/([1-9]|[12]\\d|3[0-2]))?)*$",
      "Description": "Enter a comma-separated list of allowed IPV4 CIDR blocks. By default GitHub IP ranges are used. Note that GitHub changes their IP addresses from time to time so we strongly encourage regular monitoring of their API. If API secret is used, IP address authentication is bypassed. Ignore this field if GitHub is not used."
    },
    "PrincipalType": {
      "Type": "String",
      "Default": "None",
      "AllowedValues": [
        "None",
        "AWS Account Number",
        "AWS Organization Id"
      ],
      "Description": "The solution can collect metrics from multiple AWS accounts. To turn on the multi-account feature, select either AWS Account Number or AWS Organization Id which your AWS accounts belong to. Leave it to None to turn off this feature. "
    },
    "PrincipalList": {
      "Type": "CommaDelimitedList",
      "Default": "",
      "Description": "If you selected List of AWS Account Numbers above, enter a comma separated AWS account numbers, e.g., 111111111111,222222222222. If you selected List of AWS Organization Ids, enter a comma separated AWS Organization Ids, e.g., o-xxxxxxxxxx,o-yyyyyyyyyy. Leave it blank if you don't use the multi-account feature."
    },
    "TagsConfigCodeCommit": {
      "Type": "String",
      "Description": "Enter a semicolon-separated list of tags, using a comma as a separator between the tag key and value (e.g. \"env,prod;anotherKey,anotherValue\"). Omitting a tag value will result in a filter that captures all values for that tag key. Only resources matching the combination of all the tags will be captured. Leave it blank if you do not use the tag feature."
    },
    "TagsConfigCodeBuild": {
      "Type": "String",
      "Description": "Enter a semicolon-separated list of tags, using a comma as a separator between the tag key and value (e.g. \"env,prod;anotherKey,anotherValue\"). Omitting a tag value will result in a filter that captures all values for that tag key. Only resources matching the combination of all the tags will be captured. Leave it blank if you do not use the tag feature."
    },
    "TagsConfigCodePipeline": {
      "Type": "String",
      "Description": "Enter a semicolon-separated list of tags, using a comma as a separator between the tag key and value (e.g. \"env,prod;anotherKey,anotherValue\"). Omitting a tag value will result in a filter that captures all values for that tag key. Only resources matching the combination of all the tags will be captured. Leave it blank if you do not use the tag feature."
    }
  },
  "Mappings": {
    "AnonymousData": {
      "SendAnonymousUsageData": {
        "Data": "Yes",
        "MetricsURL": "https://metrics.awssolutionsbuilder.com/generic"
      }
    },
    "UserAgentExtra": {
      "UserAgentExtra": {
        "Key": "AwsSolution/SO0143/v1.8.13"
      }
    },
    "LatestNodeRuntimeMap": {
      "af-south-1": {
        "value": "nodejs20.x"
      },
      "ap-east-1": {
        "value": "nodejs20.x"
      },
      "ap-northeast-1": {
        "value": "nodejs20.x"
      },
      "ap-northeast-2": {
        "value": "nodejs20.x"
      },
      "ap-northeast-3": {
        "value": "nodejs20.x"
      },
      "ap-south-1": {
        "value": "nodejs20.x"
      },
      "ap-south-2": {
        "value": "nodejs20.x"
      },
      "ap-southeast-1": {
        "value": "nodejs20.x"
      },
      "ap-southeast-2": {
        "value": "nodejs20.x"
      },
      "ap-southeast-3": {
        "value": "nodejs20.x"
      },
      "ap-southeast-4": {
        "value": "nodejs20.x"
      },
      "ap-southeast-5": {
        "value": "nodejs20.x"
      },
      "ap-southeast-7": {
        "value": "nodejs20.x"
      },
      "ca-central-1": {
        "value": "nodejs20.x"
      },
      "ca-west-1": {
        "value": "nodejs20.x"
      },
      "cn-north-1": {
        "value": "nodejs18.x"
      },
      "cn-northwest-1": {
        "value": "nodejs18.x"
      },
      "eu-central-1": {
        "value": "nodejs20.x"
      },
      "eu-central-2": {
        "value": "nodejs20.x"
      },
      "eu-isoe-west-1": {
        "value": "nodejs18.x"
      },
      "eu-north-1": {
        "value": "nodejs20.x"
      },
      "eu-south-1": {
        "value": "nodejs20.x"
      },
      "eu-south-2": {
        "value": "nodejs20.x"
      },
      "eu-west-1": {
        "value": "nodejs20.x"
      },
      "eu-west-2": {
        "value": "nodejs20.x"
      },
      "eu-west-3": {
        "value": "nodejs20.x"
      },
      "il-central-1": {
        "value": "nodejs20.x"
      },
      "me-central-1": {
        "value": "nodejs20.x"
      },
      "me-south-1": {
        "value": "nodejs20.x"
      },
      "mx-central-1": {
        "value": "nodejs20.x"
      },
      "sa-east-1": {
        "value": "nodejs20.x"
      },
      "us-east-1": {
        "value": "nodejs20.x"
      },
      "us-east-2": {
        "value": "nodejs20.x"
      },
      "us-gov-east-1": {
        "value": "nodejs18.x"
      },
      "us-gov-west-1": {
        "value": "nodejs18.x"
      },
      "us-iso-east-1": {
        "value": "nodejs18.x"
      },
      "us-iso-west-1": {
        "value": "nodejs18.x"
      },
      "us-isob-east-1": {
        "value": "nodejs18.x"
      },
      "us-west-1": {
        "value": "nodejs20.x"
      },
      "us-west-2": {
        "value": "nodejs20.x"
      }
    },
    "Solution": {
      "Data": {
        "ID": "SO0143",
        "Version": "v1.8.13",
        "AppRegistryApplicationName": "devops-monitoring-dashboard-on-aws",
        "SolutionName": "DevOps Monitoring Dashboard on AWS",
        "ApplicationType": "AWS-Solutions",
        "AttributeGroupName": "Solution-Metadata"
      }
    }
  },
  "Conditions": {
    "AnonymousDataToAWS": {
      "Fn::Equals": [
        {
          "Fn::FindInMap": [
            "AnonymousData",
            "SendAnonymousUsageData",
            "Data"
          ]
        },
        "Yes"
      ]
    },
    "QuickSightCondition": {
      "Fn::Not": [
        {
          "Fn::Equals": [
            {
              "Ref": "QuickSightPrincipalArn"
            },
            ""
          ]
        }
      ]
    },
    "GitHubCondition": {
      "Fn::Equals": [
        {
          "Ref": "UseGitHub"
        },
        "Yes"
      ]
    },
    "WebhookSecretTokenCondition": {
      "Fn::Not": [
        {
          "Fn::Equals": [
            {
              "Ref": "WebhookSecretToken"
            },
            ""
          ]
        }
      ]
    },
    "MultiAccountCondition": {
      "Fn::Not": [
        {
          "Fn::Equals": [
            {
              "Ref": "PrincipalType"
            },
            "None"
          ]
        }
      ]
    },
    "OrganizationCondition": {
      "Fn::Equals": [
        {
          "Ref": "PrincipalType"
        },
        "AWS Organization Id"
      ]
    },
    "TagQueryAnyTagConfigsCond060F5869": {
      "Fn::Not": [
        {
          "Fn::And": [
            {
              "Fn::Equals": [
                {
                  "Ref": "TagsConfigCodeCommit"
                },
                ""
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "TagsConfigCodeBuild"
                },
                ""
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "TagsConfigCodePipeline"
                },
                ""
              ]
            }
          ]
        }
      ]
    },
    "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-northeast-3"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-south-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-south-2"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-southeast-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-southeast-2"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-southeast-3"
              ]
            }
          ]
        },
        {
          "Fn::Or": [
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-southeast-4"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ca-central-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ca-west-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "cn-north-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "cn-northwest-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-central-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-central-2"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-north-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-south-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-south-2"
              ]
            }
          ]
        },
        {
          "Fn::Or": [
            {
              "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"
                },
                "il-central-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "me-central-1"
              ]
            },
            {
              "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::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "us-west-1"
              ]
            }
          ]
        },
        {
          "Fn::Equals": [
            {
              "Ref": "AWS::Region"
            },
            "us-west-2"
          ]
        }
      ]
    }
  },
  "Resources": {
    "SolutionHelperHelperRole142364AA": {
      "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": "CloudWatchLogsPolicy"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/SolutionHelper/HelperRole/Role/Resource",
        "cdk_nag": {
          "rules_to_suppress": [
            {
              "reason": "The policy is restricted to region, account and lambda resource.",
              "id": "AwsSolutions-IAM5"
            }
          ]
        }
      }
    },
    "SolutionHelper4825923B": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "aws-devops-monitoring-dashboard/v1.8.13/asset10f5c53cb73de6041c49e58aff6d3bc631651160e7e301d4ec755d0cbe228e8e.zip"
        },
        "Description": "DevOps Monitoring Dashboard on AWS solution - This function generates UUID for each deployment.",
        "Environment": {
          "Variables": {
            "UserAgentExtra": "AwsSolution/SO0143/v1.8.13"
          }
        },
        "Handler": "lambda_function.handler",
        "Role": {
          "Fn::GetAtt": [
            "SolutionHelperHelperRole142364AA",
            "Arn"
          ]
        },
        "Runtime": "python3.11",
        "Timeout": 300
      },
      "DependsOn": [
        "SolutionHelperHelperRole142364AA"
      ],
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/SolutionHelper/SolutionHelper/Resource",
        "aws:asset:path": "asset.10f5c53cb73de6041c49e58aff6d3bc631651160e7e301d4ec755d0cbe228e8e",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Code",
        "cfn_nag": {
          "rules_to_suppress": [
            {
              "id": "W89",
              "reason": "There is no need to run this lambda in a VPC"
            },
            {
              "id": "W92",
              "reason": "There is no need for Reserved Concurrency"
            }
          ]
        },
        "cdk_nag": {
          "rules_to_suppress": [
            {
              "reason": "Running Python 3.11.",
              "id": "AwsSolutions-L1"
            }
          ]
        }
      }
    },
    "SolutionHelperLogRetention92874000": {
      "Type": "Custom::LogRetention",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A",
            "Arn"
          ]
        },
        "LogGroupName": {
          "Fn::Join": [
            "",
            [
              "/aws/lambda/",
              {
                "Ref": "SolutionHelper4825923B"
              }
            ]
          ]
        },
        "RetentionInDays": 90
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/SolutionHelper/SolutionHelper/LogRetention/Resource"
      }
    },
    "SolutionHelperCreateUniqueIDAF03406A": {
      "Type": "Custom::CreateUUID",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "SolutionHelper4825923B",
            "Arn"
          ]
        },
        "Resource": "UUID"
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/SolutionHelper/CreateUniqueID/Default"
      }
    },
    "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB": {
      "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"
              ]
            ]
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/Resource",
        "cdk_nag": {
          "rules_to_suppress": [
            {
              "reason": "The managed policy is automatically generated by CDK itself to enable log retention.",
              "id": "AwsSolutions-IAM4"
            }
          ]
        }
      }
    },
    "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "logs:PutRetentionPolicy",
                "logs:DeleteRetentionPolicy"
              ],
              "Effect": "Allow",
              "Resource": "*"
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB",
        "Roles": [
          {
            "Ref": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/DefaultPolicy/Resource",
        "cfn_nag": {
          "rules_to_suppress": [
            {
              "id": "W12",
              "reason": "Resource * is required by the Lambda Execution role, so that the Lambda can add ResourcePolicies to all required resources."
            }
          ]
        },
        "cdk_nag": {
          "rules_to_suppress": [
            {
              "reason": "Resource * is required by the Lambda Execution role, so that the Lambda can add ResourcePolicies to all required resources.",
              "id": "AwsSolutions-IAM5"
            }
          ]
        }
      }
    },
    "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Handler": "index.handler",
        "Runtime": {
          "Fn::FindInMap": [
            "LatestNodeRuntimeMap",
            {
              "Ref": "AWS::Region"
            },
            "value"
          ]
        },
        "Timeout": 900,
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "aws-devops-monitoring-dashboard/v1.8.13/asset2819175352ad1ce0dae768e83fc328fb70fb5f10b4a8ff0ccbcb791f02b0716d.zip"
        },
        "Role": {
          "Fn::GetAtt": [
            "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB",
            "Arn"
          ]
        }
      },
      "DependsOn": [
        "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB",
        "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB"
      ],
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Resource",
        "aws:asset:path": "asset.2819175352ad1ce0dae768e83fc328fb70fb5f10b4a8ff0ccbcb791f02b0716d",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Code",
        "cfn_nag": {
          "rules_to_suppress": [
            {
              "id": "W58",
              "reason": "Lambda has the required permission to write CloudWatch Logs through a custom policy."
            },
            {
              "id": "W89",
              "reason": "There is no need to deploy this Lambda to a VPC."
            },
            {
              "id": "W92",
              "reason": "There is no need for Reserved Concurrency."
            }
          ]
        }
      }
    },
    "CodeCommitKinesisFirehoseToS3S3LoggingBucketEBB86ACF": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketEncryption": {
          "ServerSideEncryptionConfiguration": [
            {
              "ServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
              }
            }
          ]
        },
        "BucketName": {
          "Fn::Join": [
            "",
            [
              "aws-devops-metrics-logging-",
              {
                "Fn::GetAtt": [
                  "SolutionHelperCreateUniqueIDAF03406A",
                  "UUID"
                ]
              }
            ]
          ]
        },
        "PublicAccessBlockConfiguration": {
          "BlockPublicAcls": true,
          "BlockPublicPolicy": true,
          "IgnorePublicAcls": true,
          "RestrictPublicBuckets": true
        },
        "VersioningConfiguration": {
          "Status": "Enabled"
        }
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeCommit/KinesisFirehoseToS3/S3LoggingBucket/Resource",
        "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": "This S3 bucket is used as the access logging bucket for another bucket.",
              "id": "AwsSolutions-S1"
            }
          ]
        }
      }
    },
    "CodeCommitKinesisFirehoseToS3S3LoggingBucketPolicyA9B174C1": {
      "Type": "AWS::S3::BucketPolicy",
      "Properties": {
        "Bucket": {
          "Ref": "CodeCommitKinesisFirehoseToS3S3LoggingBucketEBB86ACF"
        },
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "s3:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "CodeCommitKinesisFirehoseToS3S3LoggingBucketEBB86ACF",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "CodeCommitKinesisFirehoseToS3S3LoggingBucketEBB86ACF",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "s3:PutObject",
              "Condition": {
                "ArnLike": {
                  "aws:SourceArn": {
                    "Fn::GetAtt": [
                      "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C",
                      "Arn"
                    ]
                  }
                },
                "StringEquals": {
                  "aws:SourceAccount": {
                    "Ref": "AWS::AccountId"
                  }
                }
              },
              "Effect": "Allow",
              "Principal": {
                "Service": "logging.s3.amazonaws.com"
              },
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    {
                      "Fn::GetAtt": [
                        "CodeCommitKinesisFirehoseToS3S3LoggingBucketEBB86ACF",
                        "Arn"
                      ]
                    },
                    "/*"
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        }
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeCommit/KinesisFirehoseToS3/S3LoggingBucket/Policy/Resource"
      }
    },
    "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketEncryption": {
          "ServerSideEncryptionConfiguration": [
            {
              "ServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
              }
            }
          ]
        },
        "BucketName": {
          "Fn::Join": [
            "",
            [
              "aws-devops-metrics-",
              {
                "Fn::GetAtt": [
                  "SolutionHelperCreateUniqueIDAF03406A",
                  "UUID"
                ]
              }
            ]
          ]
        },
        "LifecycleConfiguration": {
          "Rules": [
            {
              "NoncurrentVersionTransitions": [
                {
                  "StorageClass": "GLACIER",
                  "TransitionInDays": {
                    "Ref": "S3TransitionDays"
                  }
                }
              ],
              "Status": "Enabled"
            }
          ]
        },
        "LoggingConfiguration": {
          "DestinationBucketName": {
            "Ref": "CodeCommitKinesisFirehoseToS3S3LoggingBucketEBB86ACF"
          }
        },
        "OwnershipControls": {
          "Rules": [
            {
              "ObjectOwnership": "BucketOwnerEnforced"
            }
          ]
        },
        "PublicAccessBlockConfiguration": {
          "BlockPublicAcls": true,
          "BlockPublicPolicy": true,
          "IgnorePublicAcls": true,
          "RestrictPublicBuckets": true
        },
        "VersioningConfiguration": {
          "Status": "Enabled"
        }
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeCommit/KinesisFirehoseToS3/S3Bucket/Resource"
      }
    },
    "CodeCommitKinesisFirehoseToS3S3BucketPolicy4E0BD5BE": {
      "Type": "AWS::S3::BucketPolicy",
      "Properties": {
        "Bucket": {
          "Ref": "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C"
        },
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "s3:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        }
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeCommit/KinesisFirehoseToS3/S3Bucket/Policy/Resource"
      }
    },
    "CodeCommitKinesisFirehoseToS3firehoseloggroupD55CEEDC": {
      "Type": "AWS::Logs::LogGroup",
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeCommit/KinesisFirehoseToS3/firehose-log-group/Resource",
        "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)"
            }
          ]
        }
      }
    },
    "CodeCommitKinesisFirehoseToS3firehoseloggroupfirehoselogstreamC9CAC73D": {
      "Type": "AWS::Logs::LogStream",
      "Properties": {
        "LogGroupName": {
          "Ref": "CodeCommitKinesisFirehoseToS3firehoseloggroupD55CEEDC"
        }
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeCommit/KinesisFirehoseToS3/firehose-log-group/firehose-log-stream/Resource"
      }
    },
    "CodeCommitKinesisFirehoseToS3KinesisFirehoseRole1FE64272": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "firehose.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        }
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeCommit/KinesisFirehoseToS3/KinesisFirehoseRole/Resource"
      }
    },
    "CodeCommitKinesisFirehoseToS3KinesisFirehosePolicy7335C74C": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "s3:AbortMultipartUpload",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:PutObject"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "logs:PutLogEvents",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":logs:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":log-group:",
                    {
                      "Ref": "CodeCommitKinesisFirehoseToS3firehoseloggroupD55CEEDC"
                    },
                    ":log-stream:",
                    {
                      "Ref": "CodeCommitKinesisFirehoseToS3firehoseloggroupfirehoselogstreamC9CAC73D"
                    }
                  ]
                ]
              }
            },
            {
              "Action": [
                "lambda:InvokeFunction",
                "lambda:GetFunctionConfiguration"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "EventParserE8B3240E",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "EventParserE8B3240E",
                          "Arn"
                        ]
                      },
                      ":$LATEST"
                    ]
                  ]
                }
              ],
              "Sid": "InvokeLambda"
            },
            {
              "Action": [
                "glue:GetTable",
                "glue:GetTableVersion",
                "glue:GetTableVersions"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":glue:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":catalog"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":glue:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":database/",
                      {
                        "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":glue:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
                      },
                      "/",
                      {
                        "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueTable4661F2E1"
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":glue:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
                      },
                      "/*"
                    ]
                  ]
                }
              ],
              "Sid": "glueAccessPSForFirehose"
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "CodeCommitKinesisFirehoseToS3KinesisFirehosePolicy7335C74C",
        "Roles": [
          {
            "Ref": "CodeCommitKinesisFirehoseToS3KinesisFirehoseRole1FE64272"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeCommit/KinesisFirehoseToS3/KinesisFirehosePolicy/Resource",
        "cdk_nag": {
          "rules_to_suppress": [
            {
              "reason": "The policy is restricted to region, account and glue resource",
              "id": "AwsSolutions-IAM5"
            },
            {
              "reason": "The policy is restricted to S3 bucket or region, account and glue resource",
              "id": "AwsSolutions-IAM5"
            }
          ]
        }
      }
    },
    "CodeCommitKinesisFirehoseToS3KinesisFirehoseD3B823A8": {
      "Type": "AWS::KinesisFirehose::DeliveryStream",
      "Properties": {
        "DeliveryStreamEncryptionConfigurationInput": {
          "KeyType": "AWS_OWNED_CMK"
        },
        "DeliveryStreamName": "KinesisFirehoseawsdevopsmonitoriommitKinesisFirehoseToS35E16D5AA",
        "ExtendedS3DestinationConfiguration": {
          "BucketARN": {
            "Fn::GetAtt": [
              "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C",
              "Arn"
            ]
          },
          "BufferingHints": {
            "IntervalInSeconds": 300,
            "SizeInMBs": 128
          },
          "CloudWatchLoggingOptions": {
            "Enabled": true,
            "LogGroupName": {
              "Ref": "CodeCommitKinesisFirehoseToS3firehoseloggroupD55CEEDC"
            },
            "LogStreamName": {
              "Ref": "CodeCommitKinesisFirehoseToS3firehoseloggroupfirehoselogstreamC9CAC73D"
            }
          },
          "CompressionFormat": "UNCOMPRESSED",
          "DataFormatConversionConfiguration": {
            "Enabled": true,
            "InputFormatConfiguration": {
              "Deserializer": {
                "OpenXJsonSerDe": {
                  "CaseInsensitive": true
                }
              }
            },
            "OutputFormatConfiguration": {
              "Serializer": {
                "ParquetSerDe": {
                  "Compression": "SNAPPY"
                }
              }
            },
            "SchemaConfiguration": {
              "DatabaseName": {
                "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
              },
              "TableName": {
                "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueTable4661F2E1"
              },
              "RoleARN": {
                "Fn::GetAtt": [
                  "CodeCommitKinesisFirehoseToS3KinesisFirehoseRole1FE64272",
                  "Arn"
                ]
              },
              "VersionId": "LATEST"
            }
          },
          "EncryptionConfiguration": {
            "KMSEncryptionConfig": {
              "AWSKMSKeyARN": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":kms:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":alias/aws/s3"
                  ]
                ]
              }
            }
          },
          "ErrorOutputPrefix": "DevopsEventsProcessingErrorlogs/result=!{firehose:error-output-type}/created_at=!{timestamp:yyyy-MM-dd}/",
          "Prefix": "DevopsEvents/created_at=!{timestamp:yyyy-MM-dd}/",
          "ProcessingConfiguration": {
            "Enabled": true,
            "Processors": [
              {
                "Type": "Lambda",
                "Parameters": [
                  {
                    "ParameterName": "LambdaArn",
                    "ParameterValue": {
                      "Fn::GetAtt": [
                        "EventParserE8B3240E",
                        "Arn"
                      ]
                    }
                  }
                ]
              }
            ]
          },
          "RoleARN": {
            "Fn::GetAtt": [
              "CodeCommitKinesisFirehoseToS3KinesisFirehoseRole1FE64272",
              "Arn"
            ]
          }
        }
      },
      "DependsOn": [
        "CodeCommitKinesisFirehoseToS3KinesisFirehosePolicy7335C74C",
        "GlueAthenaDatabaseAWSDevopsMetricsGlueTable4661F2E1"
      ],
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeCommit/KinesisFirehoseToS3/KinesisFirehose"
      }
    },
    "CodeCommitEventsRuleInvokeKinesisFirehoseRole1CA10D3E": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "events.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Description": "Events Rule To Kinesis Firehose Role"
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeCommit/EventsRuleInvokeKinesisFirehoseRole/Resource"
      }
    },
    "CodeCommitEventsRuleInvokeKinesisFirehosePolicy1498E6F5": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "firehose:PutRecord",
                "firehose:PutRecordBatch"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "CodeCommitKinesisFirehoseToS3KinesisFirehoseD3B823A8",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "CodeCommitEventsRuleInvokeKinesisFirehosePolicy1498E6F5",
        "Roles": [
          {
            "Ref": "CodeCommitEventsRuleInvokeKinesisFirehoseRole1CA10D3E"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeCommit/EventsRuleInvokeKinesisFirehosePolicy/Resource"
      }
    },
    "CodeCommitEventsRule6F25533B": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "Description": "DevOps Monitoring Dashboard on AWS solution - Event rule for AWS CodeCommit",
        "EventPattern": {
          "detail-type": [
            "AWS API Call via CloudTrail"
          ],
          "source": [
            "aws.codecommit"
          ],
          "detail": {
            "eventName": [
              "PutFile",
              "DeleteFile",
              "UpdateFile",
              "GitPush"
            ]
          }
        },
        "State": "ENABLED",
        "Targets": [
          {
            "Arn": {
              "Fn::GetAtt": [
                "CodeCommitKinesisFirehoseToS3KinesisFirehoseD3B823A8",
                "Arn"
              ]
            },
            "Id": "Target0",
            "RoleArn": {
              "Fn::GetAtt": [
                "CodeCommitEventsRuleInvokeKinesisFirehoseRole1CA10D3E",
                "Arn"
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeCommit/EventsRule/Resource"
      }
    },
    "CanaryEventsCanaryEventsRule115776A2": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "Description": "DevOps Monitoring Dashboard on AWS solution - Event rule for Amazon CloudWatch Synthetics Canary Alarm",
        "EventPattern": {
          "source": [
            "aws.cloudwatch"
          ],
          "detail-type": [
            "CloudWatch Alarm State Change"
          ],
          "detail": {
            "state": {
              "value": [
                "OK"
              ]
            },
            "previousState": {
              "value": [
                "ALARM"
              ]
            },
            "configuration": {
              "metrics": {
                "metricStat": {
                  "metric": {
                    "namespace": [
                      "CloudWatchSynthetics"
                    ]
                  }
                }
              }
            }
          }
        },
        "State": "ENABLED",
        "Targets": [
          {
            "Arn": {
              "Fn::GetAtt": [
                "CodeCommitKinesisFirehoseToS3KinesisFirehoseD3B823A8",
                "Arn"
              ]
            },
            "Id": "Target0",
            "RoleArn": {
              "Fn::GetAtt": [
                "CodeCommitEventsRuleInvokeKinesisFirehoseRole1CA10D3E",
                "Arn"
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CanaryEvents/CanaryEventsRule/Resource"
      }
    },
    "CodePipelineAlarmEventsCodePipelineAlarmEventsRule89554585": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "Description": "DevOps Monitoring Dashboard on AWS solution - Event rule for AWS CodePipeline Alarm",
        "EventPattern": {
          "source": [
            "aws.cloudwatch"
          ],
          "detail-type": [
            "CloudWatch Alarm State Change"
          ],
          "detail": {
            "state": {
              "value": [
                "OK"
              ]
            },
            "previousState": {
              "value": [
                "ALARM"
              ]
            },
            "configuration": {
              "metrics": {
                "metricStat": {
                  "metric": {
                    "namespace": [
                      "CodePipeline/SO0143/Pipelines"
                    ]
                  }
                }
              }
            }
          }
        },
        "State": "ENABLED",
        "Targets": [
          {
            "Arn": {
              "Fn::GetAtt": [
                "CodeCommitKinesisFirehoseToS3KinesisFirehoseD3B823A8",
                "Arn"
              ]
            },
            "Id": "Target0",
            "RoleArn": {
              "Fn::GetAtt": [
                "CodeCommitEventsRuleInvokeKinesisFirehoseRole1CA10D3E",
                "Arn"
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodePipelineAlarmEvents/CodePipelineAlarmEventsRule/Resource"
      }
    },
    "CodeDeployEventsCodeDeployEventsRule9A7B5DEA": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "Description": "DevOps Monitoring Dashboard on AWS solution - Event rule for AWS CodeDeploy",
        "EventPattern": {
          "source": [
            "aws.codedeploy"
          ],
          "detail-type": [
            "CodeDeploy Deployment State-change Notification"
          ]
        },
        "State": "ENABLED",
        "Targets": [
          {
            "Arn": {
              "Fn::GetAtt": [
                "CodeCommitKinesisFirehoseToS3KinesisFirehoseD3B823A8",
                "Arn"
              ]
            },
            "Id": "Target0",
            "RoleArn": {
              "Fn::GetAtt": [
                "CodeCommitEventsRuleInvokeKinesisFirehoseRole1CA10D3E",
                "Arn"
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeDeployEvents/CodeDeployEventsRule/Resource"
      }
    },
    "CodePipelineEventsCodePipelineEventsRuleB5CD4C2A": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "Description": "DevOps Monitoring Dashboard on AWS solution - Event rule for AWS CodePipeline",
        "EventPattern": {
          "source": [
            "aws.codepipeline"
          ],
          "detail-type": [
            "CodePipeline Action Execution State Change"
          ]
        },
        "State": "ENABLED",
        "Targets": [
          {
            "Arn": {
              "Fn::GetAtt": [
                "CodeCommitKinesisFirehoseToS3KinesisFirehoseD3B823A8",
                "Arn"
              ]
            },
            "Id": "Target0",
            "RoleArn": {
              "Fn::GetAtt": [
                "CodeCommitEventsRuleInvokeKinesisFirehoseRole1CA10D3E",
                "Arn"
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodePipelineEvents/CodePipelineEventsRule/Resource"
      }
    },
    "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF": {
      "Type": "AWS::Glue::Database",
      "Properties": {
        "CatalogId": {
          "Ref": "AWS::AccountId"
        },
        "DatabaseInput": {
          "Name": "aws_devops_metrics_db_so0143"
        }
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/GlueAthenaDatabase/AWSDevopsMetricsGlueDatabase/Resource"
      }
    },
    "GlueAthenaDatabaseCodeBuildMetricsGlueTableE0ED7BB0": {
      "Type": "AWS::Glue::Table",
      "Properties": {
        "CatalogId": {
          "Ref": "AWS::AccountId"
        },
        "DatabaseName": {
          "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
        },
        "TableInput": {
          "Description": "DevOps Monitoring Dashboard on AWS solution - AWS CodeBuild Metrics Glue table",
          "Name": "aws_codebuild_metrics_table",
          "Parameters": {
            "classification": "parquet",
            "has_encrypted_data": true
          },
          "PartitionKeys": [
            {
              "Name": "created_at",
              "Type": "timestamp"
            }
          ],
          "StorageDescriptor": {
            "Columns": [
              {
                "Name": "metric_stream_name",
                "Type": "string"
              },
              {
                "Name": "account_id",
                "Type": "string"
              },
              {
                "Name": "region",
                "Type": "string"
              },
              {
                "Name": "namespace",
                "Type": "string"
              },
              {
                "Name": "metric_name",
                "Type": "string"
              },
              {
                "Name": "dimensions",
                "Type": "struct<ProjectName:string,BuildId:string,BuildNumber:int>"
              },
              {
                "Name": "timestamp",
                "Type": "bigint"
              },
              {
                "Comment": "struct<nested_column:datatype>",
                "Name": "value",
                "Type": "struct<count:double,sum:double,max:double,min:double>"
              },
              {
                "Name": "unit",
                "Type": "string"
              }
            ],
            "Compressed": false,
            "InputFormat": "org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat",
            "Location": {
              "Fn::Join": [
                "",
                [
                  "s3://",
                  {
                    "Ref": "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C"
                  },
                  "/CodeBuildEvents/"
                ]
              ]
            },
            "OutputFormat": "org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat",
            "SerdeInfo": {
              "SerializationLibrary": "org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe"
            },
            "StoredAsSubDirectories": true
          },
          "TableType": "EXTERNAL_TABLE"
        }
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/GlueAthenaDatabase/CodeBuildMetricsGlueTable/Table"
      }
    },
    "GlueAthenaDatabaseAWSDevopsMetricsGlueTable4661F2E1": {
      "Type": "AWS::Glue::Table",
      "Properties": {
        "CatalogId": {
          "Ref": "AWS::AccountId"
        },
        "DatabaseName": {
          "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
        },
        "TableInput": {
          "Description": "DevOps Monitoring Dashboard on AWS solution - AWS DevOps Metrics Glue table",
          "Name": "aws_devops_metrics_table",
          "Parameters": {
            "classification": "parquet",
            "has_encrypted_data": true
          },
          "PartitionKeys": [
            {
              "Name": "created_at",
              "Type": "timestamp"
            }
          ],
          "StorageDescriptor": {
            "Columns": [
              {
                "Name": "version",
                "Type": "string"
              },
              {
                "Name": "id",
                "Type": "string"
              },
              {
                "Name": "detail_type",
                "Type": "string"
              },
              {
                "Name": "source",
                "Type": "string"
              },
              {
                "Name": "account",
                "Type": "string"
              },
              {
                "Name": "time",
                "Type": "timestamp"
              },
              {
                "Name": "region",
                "Type": "string"
              },
              {
                "Comment": "array<string>",
                "Name": "resources",
                "Type": "array<string>"
              },
              {
                "Comment": "struct<nested_column:datatype>",
                "Name": "detail",
                "Type": "struct<eventName:string,repositoryName:string,branchName:string,authorName:string,commitId:string,canaryAlarmName:string,canaryAlarmAppName:string,canaryAlarmRepoName:string,canaryAlarmCurrState:string,canaryAlarmPrevState:string,canaryAlarmCurrStateTimeStamp:timestamp,canaryAlarmPrevStateTimeStamp:timestamp,recoveryDurationMinutes:int,deploymentState:string,deploymentId:string,deploymentApplication:string,pipelineName:string,executionId:string,stage:string,action:string,state:string,externalExecutionId:string,actionCategory:string,actionOwner:string,actionProvider:string,alarmType:string>"
              }
            ],
            "Compressed": false,
            "InputFormat": "org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat",
            "Location": {
              "Fn::Join": [
                "",
                [
                  "s3://",
                  {
                    "Ref": "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C"
                  },
                  "/DevopsEvents/"
                ]
              ]
            },
            "OutputFormat": "org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat",
            "SerdeInfo": {
              "SerializationLibrary": "org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe"
            },
            "StoredAsSubDirectories": true
          },
          "TableType": "EXTERNAL_TABLE"
        }
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/GlueAthenaDatabase/AWSDevopsMetricsGlueTable/Table"
      }
    },
    "GlueAthenaDatabaseCodeCommitTagsGlueTableB94ABA47": {
      "Type": "AWS::Glue::Table",
      "Properties": {
        "CatalogId": {
          "Ref": "AWS::AccountId"
        },
        "DatabaseName": {
          "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
        },
        "TableInput": {
          "Description": "DevOps Monitoring Dashboard on AWS solution - AWS CodeCommit Tags Glue table",
          "Name": "tagged_codecommit_table",
          "Parameters": {
            "classification": "json",
            "has_encrypted_data": true
          },
          "StorageDescriptor": {
            "Columns": [
              {
                "Name": "account_id",
                "Type": "string"
              },
              {
                "Name": "region",
                "Type": "string"
              },
              {
                "Name": "resource_type",
                "Type": "string"
              },
              {
                "Name": "resource_name",
                "Type": "string"
              },
              {
                "Name": "tag",
                "Type": "string"
              },
              {
                "Name": "create_time_stamp",
                "Type": "timestamp"
              }
            ],
            "Compressed": false,
            "InputFormat": "org.apache.hadoop.mapred.TextInputFormat",
            "Location": {
              "Fn::Join": [
                "",
                [
                  "s3://",
                  {
                    "Ref": "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C"
                  },
                  "/TaggedResources/CodeCommit/"
                ]
              ]
            },
            "OutputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
            "SerdeInfo": {
              "SerializationLibrary": "org.openx.data.jsonserde.JsonSerDe"
            },
            "StoredAsSubDirectories": true
          },
          "TableType": "EXTERNAL_TABLE"
        }
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/GlueAthenaDatabase/CodeCommitTagsGlueTable/Table"
      }
    },
    "GlueAthenaDatabaseCodeBuildTagsGlueTableD0907B43": {
      "Type": "AWS::Glue::Table",
      "Properties": {
        "CatalogId": {
          "Ref": "AWS::AccountId"
        },
        "DatabaseName": {
          "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
        },
        "TableInput": {
          "Description": "DevOps Monitoring Dashboard on AWS solution - AWS CodeBuild Tags Glue table",
          "Name": "tagged_codebuild_table",
          "Parameters": {
            "classification": "json",
            "has_encrypted_data": true
          },
          "StorageDescriptor": {
            "Columns": [
              {
                "Name": "account_id",
                "Type": "string"
              },
              {
                "Name": "region",
                "Type": "string"
              },
              {
                "Name": "resource_type",
                "Type": "string"
              },
              {
                "Name": "resource_name",
                "Type": "string"
              },
              {
                "Name": "tag",
                "Type": "string"
              },
              {
                "Name": "create_time_stamp",
                "Type": "timestamp"
              }
            ],
            "Compressed": false,
            "InputFormat": "org.apache.hadoop.mapred.TextInputFormat",
            "Location": {
              "Fn::Join": [
                "",
                [
                  "s3://",
                  {
                    "Ref": "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C"
                  },
                  "/TaggedResources/CodeBuild/"
                ]
              ]
            },
            "OutputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
            "SerdeInfo": {
              "SerializationLibrary": "org.openx.data.jsonserde.JsonSerDe"
            },
            "StoredAsSubDirectories": true
          },
          "TableType": "EXTERNAL_TABLE"
        }
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/GlueAthenaDatabase/CodeBuildTagsGlueTable/Table"
      }
    },
    "GlueAthenaDatabaseCodePipelineTagsGlueTable89916F9D": {
      "Type": "AWS::Glue::Table",
      "Properties": {
        "CatalogId": {
          "Ref": "AWS::AccountId"
        },
        "DatabaseName": {
          "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
        },
        "TableInput": {
          "Description": "DevOps Monitoring Dashboard on AWS solution - AWS CodePipeline Tags Glue table",
          "Name": "tagged_codepipeline_table",
          "Parameters": {
            "classification": "json",
            "has_encrypted_data": true
          },
          "StorageDescriptor": {
            "Columns": [
              {
                "Name": "account_id",
                "Type": "string"
              },
              {
                "Name": "region",
                "Type": "string"
              },
              {
                "Name": "resource_type",
                "Type": "string"
              },
              {
                "Name": "resource_name",
                "Type": "string"
              },
              {
                "Name": "tag",
                "Type": "string"
              },
              {
                "Name": "create_time_stamp",
                "Type": "timestamp"
              }
            ],
            "Compressed": false,
            "InputFormat": "org.apache.hadoop.mapred.TextInputFormat",
            "Location": {
              "Fn::Join": [
                "",
                [
                  "s3://",
                  {
                    "Ref": "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C"
                  },
                  "/TaggedResources/CodePipeline/"
                ]
              ]
            },
            "OutputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
            "SerdeInfo": {
              "SerializationLibrary": "org.openx.data.jsonserde.JsonSerDe"
            },
            "StoredAsSubDirectories": true
          },
          "TableType": "EXTERNAL_TABLE"
        }
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/GlueAthenaDatabase/CodePipelineTagsGlueTable/Table"
      }
    },
    "GlueAthenaDatabaseGitHubMetricsGlueTableE4E043BF": {
      "Type": "AWS::Glue::Table",
      "Properties": {
        "CatalogId": {
          "Ref": "AWS::AccountId"
        },
        "DatabaseName": {
          "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
        },
        "TableInput": {
          "Description": "DevOps Monitoring Dashboard on AWS solution - GitHub Metrics Glue table",
          "Name": "aws_github_metrics_table",
          "Parameters": {
            "classification": "parquet",
            "has_encrypted_data": true
          },
          "PartitionKeys": [
            {
              "Name": "created_at",
              "Type": "timestamp"
            }
          ],
          "StorageDescriptor": {
            "Columns": [
              {
                "Name": "repository_name",
                "Type": "string"
              },
              {
                "Name": "branch_name",
                "Type": "string"
              },
              {
                "Name": "author_name",
                "Type": "string"
              },
              {
                "Name": "event_name",
                "Type": "string"
              },
              {
                "Comment": "array<string>",
                "Name": "commit_id",
                "Type": "array<string>"
              },
              {
                "Name": "time",
                "Type": "timestamp"
              }
            ],
            "Compressed": false,
            "InputFormat": "org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat",
            "Location": {
              "Fn::Join": [
                "",
                [
                  "s3://",
                  {
                    "Ref": "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C"
                  },
                  "/GitHubEvents/"
                ]
              ]
            },
            "OutputFormat": "org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat",
            "SerdeInfo": {
              "SerializationLibrary": "org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe"
            },
            "StoredAsSubDirectories": true
          },
          "TableType": "EXTERNAL_TABLE"
        }
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/GlueAthenaDatabase/GitHubMetricsGlueTable/Table"
      }
    },
    "GlueAthenaDatabaseAWSDevOpsDashboardAthenaWorkGroupCA26D38C": {
      "Type": "AWS::Athena::WorkGroup",
      "Properties": {
        "Description": "DevOps Monitoring Dashboard on AWS solution Athena Work Group",
        "Name": {
          "Fn::Join": [
            "",
            [
              "AWSDevOpsDashboardWG-",
              {
                "Fn::GetAtt": [
                  "SolutionHelperCreateUniqueIDAF03406A",
                  "UUID"
                ]
              }
            ]
          ]
        },
        "RecursiveDeleteOption": true,
        "State": "ENABLED",
        "WorkGroupConfiguration": {
          "EngineVersion": {
            "SelectedEngineVersion": "Athena engine version 3"
          },
          "PublishCloudWatchMetricsEnabled": true,
          "ResultConfiguration": {
            "EncryptionConfiguration": {
              "EncryptionOption": "SSE_S3"
            },
            "OutputLocation": {
              "Fn::Join": [
                "",
                [
                  "s3://",
                  {
                    "Ref": "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C"
                  },
                  "/athena_query_output/"
                ]
              ]
            }
          }
        }
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/GlueAthenaDatabase/AWSDevOpsDashboardAthenaWorkGroup",
        "cdk_nag": {
          "rules_to_suppress": [
            {
              "reason": "The Athena query result is encrypted using SSE_S3.",
              "id": "AwsSolutions-ATH1"
            }
          ]
        }
      }
    },
    "CodeBuildEventsCodeBuildEventParserLambdaRole6077AACD": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Path": "/",
        "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": "CreateCWLogs"
                }
              ],
              "Version": "2012-10-17"
            },
            "PolicyName": {
              "Fn::Join": [
                "",
                [
                  "CodeBuildEventParserLambdaPolicy-",
                  {
                    "Fn::GetAtt": [
                      "SolutionHelperCreateUniqueIDAF03406A",
                      "UUID"
                    ]
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeBuildEvents/CodeBuildEventParserLambdaRole/Resource",
        "cdk_nag": {
          "rules_to_suppress": [
            {
              "reason": "The policy is restricted to region, account and lambda resource.",
              "id": "AwsSolutions-IAM5"
            }
          ]
        }
      }
    },
    "CodeBuildEventsCodeBuildEventParserBA00AD10": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "aws-devops-monitoring-dashboard/v1.8.13/asset0af54de9c59b50ccff1f2ecf43459c5cdc75866659b47b419e10eb50e4070e0b.zip"
        },
        "Description": "DevOps Monitoring Dashboard on AWS solution - This function performs lambda transformation within kinesis firehose. It parses CloudWatch metrics for CodeBuild, sends relevant data to S3 for downstream operation",
        "Environment": {
          "Variables": {
            "LOG_LEVEL": "INFO",
            "UserAgentExtra": {
              "Fn::FindInMap": [
                "UserAgentExtra",
                "UserAgentExtra",
                "Key"
              ]
            }
          }
        },
        "Handler": "codebuild_index.handler",
        "Role": {
          "Fn::GetAtt": [
            "CodeBuildEventsCodeBuildEventParserLambdaRole6077AACD",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Timeout": 900
      },
      "DependsOn": [
        "CodeBuildEventsCodeBuildEventParserLambdaRole6077AACD"
      ],
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeBuildEvents/CodeBuildEventParser/Resource",
        "aws:asset:path": "asset.0af54de9c59b50ccff1f2ecf43459c5cdc75866659b47b419e10eb50e4070e0b",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Code",
        "cfn_nag": {
          "rules_to_suppress": [
            {
              "id": "W89",
              "reason": "There is no need to run this lambda in a VPC"
            },
            {
              "id": "W92",
              "reason": "There is no need for Reserved Concurrency"
            }
          ]
        }
      }
    },
    "CodeBuildEventsCodeBuildEventParserLogRetention28A35144": {
      "Type": "Custom::LogRetention",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A",
            "Arn"
          ]
        },
        "LogGroupName": {
          "Fn::Join": [
            "",
            [
              "/aws/lambda/",
              {
                "Ref": "CodeBuildEventsCodeBuildEventParserBA00AD10"
              }
            ]
          ]
        },
        "RetentionInDays": 90
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeBuildEvents/CodeBuildEventParser/LogRetention/Resource"
      }
    },
    "CodeBuildEventsCodeBuildfirehoseloggroup37533DE5": {
      "Type": "AWS::Logs::LogGroup",
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeBuildEvents/CodeBuild/firehose-log-group/Resource",
        "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)"
            }
          ]
        }
      }
    },
    "CodeBuildEventsCodeBuildfirehoseloggroupfirehoselogstreamEEA2FA4F": {
      "Type": "AWS::Logs::LogStream",
      "Properties": {
        "LogGroupName": {
          "Ref": "CodeBuildEventsCodeBuildfirehoseloggroup37533DE5"
        }
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeBuildEvents/CodeBuild/firehose-log-group/firehose-log-stream/Resource"
      }
    },
    "CodeBuildEventsCodeBuildKinesisFirehoseRole28E73FBC": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "firehose.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        }
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeBuildEvents/CodeBuild/KinesisFirehoseRole/Resource"
      }
    },
    "CodeBuildEventsCodeBuildKinesisFirehosePolicy928AD09F": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "s3:AbortMultipartUpload",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:PutObject"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "logs:PutLogEvents",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":logs:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":log-group:",
                    {
                      "Ref": "CodeBuildEventsCodeBuildfirehoseloggroup37533DE5"
                    },
                    ":log-stream:",
                    {
                      "Ref": "CodeBuildEventsCodeBuildfirehoseloggroupfirehoselogstreamEEA2FA4F"
                    }
                  ]
                ]
              }
            },
            {
              "Action": [
                "lambda:InvokeFunction",
                "lambda:GetFunctionConfiguration"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "CodeBuildEventsCodeBuildEventParserBA00AD10",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "CodeBuildEventsCodeBuildEventParserBA00AD10",
                          "Arn"
                        ]
                      },
                      ":$LATEST"
                    ]
                  ]
                }
              ],
              "Sid": "InvokeLambda"
            },
            {
              "Action": [
                "glue:GetTable",
                "glue:GetTableVersion",
                "glue:GetTableVersions"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":glue:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":catalog"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":glue:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":database/",
                      {
                        "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":glue:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
                      },
                      "/",
                      {
                        "Ref": "GlueAthenaDatabaseCodeBuildMetricsGlueTableE0ED7BB0"
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":glue:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":table/",
                      {
                        "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
                      },
                      "/*"
                    ]
                  ]
                }
              ],
              "Sid": "glueAccessPSForCodeBuildEventsFirehose"
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "CodeBuildEventsCodeBuildKinesisFirehosePolicy928AD09F",
        "Roles": [
          {
            "Ref": "CodeBuildEventsCodeBuildKinesisFirehoseRole28E73FBC"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeBuildEvents/CodeBuild/KinesisFirehosePolicy/Resource",
        "cdk_nag": {
          "rules_to_suppress": [
            {
              "reason": "The policy is restricted to S3 bucket or region, account and glue resource",
              "id": "AwsSolutions-IAM5"
            }
          ]
        }
      }
    },
    "CodeBuildEventsCodeBuildKinesisFirehose48AE2746": {
      "Type": "AWS::KinesisFirehose::DeliveryStream",
      "Properties": {
        "DeliveryStreamEncryptionConfigurationInput": {
          "KeyType": "AWS_OWNED_CMK"
        },
        "DeliveryStreamName": "KinesisFirehoseawsdevopsmonitoriCodeBuildEventsCodeBuildD983BDA8",
        "ExtendedS3DestinationConfiguration": {
          "BucketARN": {
            "Fn::GetAtt": [
              "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C",
              "Arn"
            ]
          },
          "BufferingHints": {
            "IntervalInSeconds": 300,
            "SizeInMBs": 128
          },
          "CloudWatchLoggingOptions": {
            "Enabled": true,
            "LogGroupName": {
              "Ref": "CodeBuildEventsCodeBuildfirehoseloggroup37533DE5"
            },
            "LogStreamName": {
              "Ref": "CodeBuildEventsCodeBuildfirehoseloggroupfirehoselogstreamEEA2FA4F"
            }
          },
          "CompressionFormat": "UNCOMPRESSED",
          "DataFormatConversionConfiguration": {
            "Enabled": true,
            "InputFormatConfiguration": {
              "Deserializer": {
                "OpenXJsonSerDe": {
                  "CaseInsensitive": true
                }
              }
            },
            "OutputFormatConfiguration": {
              "Serializer": {
                "ParquetSerDe": {
                  "Compression": "SNAPPY"
                }
              }
            },
            "SchemaConfiguration": {
              "DatabaseName": {
                "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
              },
              "TableName": {
                "Ref": "GlueAthenaDatabaseCodeBuildMetricsGlueTableE0ED7BB0"
              },
              "RoleARN": {
                "Fn::GetAtt": [
                  "CodeBuildEventsCodeBuildKinesisFirehoseRole28E73FBC",
                  "Arn"
                ]
              }
            }
          },
          "ErrorOutputPrefix": "CodeBuildEventsProcessingErrorlogs/result=!{firehose:error-output-type}/created_at=!{timestamp:yyyy-MM-dd}/",
          "Prefix": "CodeBuildEvents/created_at=!{timestamp:yyyy-MM-dd}/",
          "ProcessingConfiguration": {
            "Enabled": true,
            "Processors": [
              {
                "Type": "Lambda",
                "Parameters": [
                  {
                    "ParameterName": "LambdaArn",
                    "ParameterValue": {
                      "Fn::GetAtt": [
                        "CodeBuildEventsCodeBuildEventParserBA00AD10",
                        "Arn"
                      ]
                    }
                  }
                ]
              }
            ]
          },
          "RoleARN": {
            "Fn::GetAtt": [
              "CodeBuildEventsCodeBuildKinesisFirehoseRole28E73FBC",
              "Arn"
            ]
          }
        }
      },
      "DependsOn": [
        "CodeBuildEventsCodeBuildKinesisFirehosePolicy928AD09F"
      ],
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeBuildEvents/CodeBuild/KinesisFirehose"
      }
    },
    "CodeBuildEventsCloudWatchMetricStreamRole047DA47A": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "streams.metrics.cloudwatch.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Path": "/",
        "Policies": [
          {
            "PolicyDocument": {
              "Statement": [
                {
                  "Action": [
                    "firehose:PutRecord",
                    "firehose:PutRecordBatch"
                  ],
                  "Effect": "Allow",
                  "Resource": {
                    "Fn::GetAtt": [
                      "CodeBuildEventsCodeBuildKinesisFirehose48AE2746",
                      "Arn"
                    ]
                  },
                  "Sid": "FirehosePutRecordPS"
                }
              ],
              "Version": "2012-10-17"
            },
            "PolicyName": {
              "Fn::Join": [
                "",
                [
                  "FirehosePutRecord-",
                  {
                    "Fn::GetAtt": [
                      "SolutionHelperCreateUniqueIDAF03406A",
                      "UUID"
                    ]
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeBuildEvents/CloudWatchMetricStreamRole/Resource"
      }
    },
    "CodeBuildEventsCloudWatchMetricStreamB26149A1": {
      "Type": "AWS::CloudWatch::MetricStream",
      "Properties": {
        "FirehoseArn": {
          "Fn::GetAtt": [
            "CodeBuildEventsCodeBuildKinesisFirehose48AE2746",
            "Arn"
          ]
        },
        "IncludeFilters": [
          {
            "Namespace": "AWS/CodeBuild"
          }
        ],
        "OutputFormat": "json",
        "RoleArn": {
          "Fn::GetAtt": [
            "CodeBuildEventsCloudWatchMetricStreamRole047DA47A",
            "Arn"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CodeBuildEvents/CloudWatchMetricStream"
      }
    },
    "EventParserLambdaRole3A607F90": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Path": "/",
        "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": "CreateCWLogs"
                }
              ],
              "Version": "2012-10-17"
            },
            "PolicyName": {
              "Fn::Join": [
                "",
                [
                  "EventParserLambdaPolicy-",
                  {
                    "Fn::GetAtt": [
                      "SolutionHelperCreateUniqueIDAF03406A",
                      "UUID"
                    ]
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/EventParserLambdaRole/Resource",
        "cdk_nag": {
          "rules_to_suppress": [
            {
              "reason": "The policy is restricted to region, account and lambda resource.",
              "id": "AwsSolutions-IAM5"
            }
          ]
        }
      }
    },
    "EventParserE8B3240E": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "aws-devops-monitoring-dashboard/v1.8.13/asset0af54de9c59b50ccff1f2ecf43459c5cdc75866659b47b419e10eb50e4070e0b.zip"
        },
        "Description": "DevOps Monitoring Dashboard on AWS solution - This function performs lambda transformation within kinesis firehose. It parses raw cloudwatch events, sends relevant data to S3 for downstream operation",
        "Environment": {
          "Variables": {
            "LOG_LEVEL": "INFO"
          }
        },
        "Handler": "index.handler",
        "Role": {
          "Fn::GetAtt": [
            "EventParserLambdaRole3A607F90",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Timeout": 900
      },
      "DependsOn": [
        "EventParserLambdaRole3A607F90"
      ],
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/EventParser/Resource",
        "aws:asset:path": "asset.0af54de9c59b50ccff1f2ecf43459c5cdc75866659b47b419e10eb50e4070e0b",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Code",
        "cfn_nag": {
          "rules_to_suppress": [
            {
              "id": "W89",
              "reason": "There is no need to run this lambda in a VPC"
            },
            {
              "id": "W92",
              "reason": "There is no need for Reserved Concurrency"
            }
          ]
        }
      }
    },
    "EventParserLogRetentionEE2D5A71": {
      "Type": "Custom::LogRetention",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A",
            "Arn"
          ]
        },
        "LogGroupName": {
          "Fn::Join": [
            "",
            [
              "/aws/lambda/",
              {
                "Ref": "EventParserE8B3240E"
              }
            ]
          ]
        },
        "RetentionInDays": 90
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/EventParser/LogRetention/Resource"
      }
    },
    "queryRunnerLambdaRoleB4DE757D": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Path": "/",
        "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": "CreateCWLogs"
                },
                {
                  "Action": [
                    "s3:GetBucketLocation",
                    "s3:GetObject",
                    "s3:ListBucket",
                    "s3:ListBucketMultipartUploads",
                    "s3:ListMultipartUploadParts",
                    "s3:AbortMultipartUpload",
                    "s3:CreateBucket",
                    "s3:PutObject"
                  ],
                  "Effect": "Allow",
                  "Resource": [
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":s3:::",
                          {
                            "Ref": "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C"
                          },
                          "/athena_results/*"
                        ]
                      ]
                    },
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":s3:::",
                          {
                            "Ref": "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C"
                          }
                        ]
                      ]
                    },
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":s3:::",
                          {
                            "Ref": "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C"
                          },
                          "/*"
                        ]
                      ]
                    },
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":s3:::aws-athena-query-results-*"
                        ]
                      ]
                    },
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":s3:::query-results-custom-bucket"
                        ]
                      ]
                    },
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":s3:::query-results-custom-bucket/*"
                        ]
                      ]
                    }
                  ],
                  "Sid": "s3AccessPSwAthena"
                },
                {
                  "Action": "athena:StartQueryExecution",
                  "Effect": "Allow",
                  "Resource": [
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":athena:",
                          {
                            "Ref": "AWS::Region"
                          },
                          ":",
                          {
                            "Ref": "AWS::AccountId"
                          },
                          ":workgroup/AWSDevOpsDashboard*"
                        ]
                      ]
                    },
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":athena:",
                          {
                            "Ref": "AWS::Region"
                          },
                          ":",
                          {
                            "Ref": "AWS::AccountId"
                          },
                          ":workgroup/primary"
                        ]
                      ]
                    }
                  ],
                  "Sid": "AthenaQueryExecutionPS"
                },
                {
                  "Action": [
                    "glue:GetTable",
                    "glue:GetPartitions",
                    "glue:GetDatabase",
                    "glue:CreateTable",
                    "glue:UpdateTable",
                    "glue:BatchCreatePartition",
                    "glue:DeleteTable",
                    "glue:DeletePartition"
                  ],
                  "Effect": "Allow",
                  "Resource": [
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":glue:",
                          {
                            "Ref": "AWS::Region"
                          },
                          ":",
                          {
                            "Ref": "AWS::AccountId"
                          },
                          ":catalog"
                        ]
                      ]
                    },
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":glue:",
                          {
                            "Ref": "AWS::Region"
                          },
                          ":",
                          {
                            "Ref": "AWS::AccountId"
                          },
                          ":database/",
                          {
                            "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
                          }
                        ]
                      ]
                    },
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":glue:",
                          {
                            "Ref": "AWS::Region"
                          },
                          ":",
                          {
                            "Ref": "AWS::AccountId"
                          },
                          ":table/",
                          {
                            "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
                          },
                          "/",
                          {
                            "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueTable4661F2E1"
                          }
                        ]
                      ]
                    },
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":glue:",
                          {
                            "Ref": "AWS::Region"
                          },
                          ":",
                          {
                            "Ref": "AWS::AccountId"
                          },
                          ":table/",
                          {
                            "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
                          },
                          "/*"
                        ]
                      ]
                    },
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":glue:",
                          {
                            "Ref": "AWS::Region"
                          },
                          ":",
                          {
                            "Ref": "AWS::AccountId"
                          },
                          ":table/",
                          {
                            "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
                          },
                          "/",
                          {
                            "Ref": "GlueAthenaDatabaseCodeBuildMetricsGlueTableE0ED7BB0"
                          }
                        ]
                      ]
                    }
                  ],
                  "Sid": "glueAccessPS"
                }
              ],
              "Version": "2012-10-17"
            },
            "PolicyName": {
              "Fn::Join": [
                "",
                [
                  "queryRunnerLambdaPolicy-",
                  {
                    "Fn::GetAtt": [
                      "SolutionHelperCreateUniqueIDAF03406A",
                      "UUID"
                    ]
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/queryRunnerLambdaRole/Resource",
        "cdk_nag": {
          "rules_to_suppress": [
            {
              "reason": "The policy is restricted to S3 bucket or region, account and glue resource",
              "id": "AwsSolutions-IAM5"
            }
          ]
        }
      }
    },
    "QueryRunner0586B77B": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "aws-devops-monitoring-dashboard/v1.8.13/asset69f2eade5330e1cc4326beb84d6c6827c255dd467ce9ceebcfe2eff4c6919bd6.zip"
        },
        "Description": "DevOps Monitoring Dashboard on AWS solution - This function runs Amazon Athena queries and creates views.",
        "Environment": {
          "Variables": {
            "LOG_LEVEL": "INFO"
          }
        },
        "Handler": "index.handler",
        "Role": {
          "Fn::GetAtt": [
            "queryRunnerLambdaRoleB4DE757D",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Timeout": 300
      },
      "DependsOn": [
        "queryRunnerLambdaRoleB4DE757D"
      ],
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/QueryRunner/Resource",
        "aws:asset:path": "asset.69f2eade5330e1cc4326beb84d6c6827c255dd467ce9ceebcfe2eff4c6919bd6",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Code",
        "cfn_nag": {
          "rules_to_suppress": [
            {
              "id": "W89",
              "reason": "There is no need to run this lambda in a VPC"
            },
            {
              "id": "W92",
              "reason": "There is no need for Reserved Concurrency"
            }
          ]
        }
      }
    },
    "QueryRunnerLogRetention4166B125": {
      "Type": "Custom::LogRetention",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A",
            "Arn"
          ]
        },
        "LogGroupName": {
          "Fn::Join": [
            "",
            [
              "/aws/lambda/",
              {
                "Ref": "QueryRunner0586B77B"
              }
            ]
          ]
        },
        "RetentionInDays": 90
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/QueryRunner/LogRetention/Resource"
      }
    },
    "CustomResourceQueryRunner": {
      "Type": "Custom::QueryRunner",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "QueryRunner0586B77B",
            "Arn"
          ]
        },
        "MetricsDBName": {
          "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
        },
        "MetricsTableName": {
          "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueTable4661F2E1"
        },
        "CodeBuildMetricsTableName": {
          "Ref": "GlueAthenaDatabaseCodeBuildMetricsGlueTableE0ED7BB0"
        },
        "GitHubMetricsTableName": {
          "Ref": "GlueAthenaDatabaseGitHubMetricsGlueTableE4E043BF"
        },
        "CodeCommitTagsGlueTableName": {
          "Ref": "GlueAthenaDatabaseCodeCommitTagsGlueTableB94ABA47"
        },
        "CodeBuildTagsGlueTableName": {
          "Ref": "GlueAthenaDatabaseCodeBuildTagsGlueTableD0907B43"
        },
        "CodePipelineTagsGlueTableName": {
          "Ref": "GlueAthenaDatabaseCodePipelineTagsGlueTable89916F9D"
        },
        "AthenaWorkGroup": {
          "Fn::Join": [
            "",
            [
              "AWSDevOpsDashboardWG-",
              {
                "Fn::GetAtt": [
                  "SolutionHelperCreateUniqueIDAF03406A",
                  "UUID"
                ]
              }
            ]
          ]
        },
        "RepositoryList": {
          "Ref": "CodeCommitRepo"
        },
        "DataDuration": {
          "Ref": "DataDuration"
        },
        "Version": "v1.8.13"
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CustomResourceQueryRunner/Default"
      }
    },
    "SendAnonymousUsageData": {
      "Type": "Custom::SendAnonymousUsageData",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "QueryRunner0586B77B",
            "Arn"
          ]
        },
        "SendAnonymousUsageData": {
          "Fn::FindInMap": [
            "AnonymousData",
            "SendAnonymousUsageData",
            "Data"
          ]
        },
        "SolutionId": "SO0143",
        "UUID": {
          "Fn::GetAtt": [
            "SolutionHelperCreateUniqueIDAF03406A",
            "UUID"
          ]
        },
        "Version": "v1.8.13",
        "Region": {
          "Ref": "AWS::Region"
        },
        "MetricsURL": {
          "Fn::FindInMap": [
            "AnonymousData",
            "SendAnonymousUsageData",
            "MetricsURL"
          ]
        },
        "QuickSightPrincipalArn": {
          "Ref": "QuickSightPrincipalArn"
        },
        "AthenaQueryDataDuration": {
          "Ref": "DataDuration"
        },
        "RepositoryList": {
          "Ref": "CodeCommitRepo"
        },
        "S3TransitionDays": {
          "Ref": "S3TransitionDays"
        },
        "UseGitHubRepository": {
          "Ref": "UseGitHub"
        },
        "UseWebhookSecret": {
          "Fn::If": [
            "WebhookSecretTokenCondition",
            "yes",
            "no"
          ]
        },
        "UseMultiAccount": {
          "Fn::If": [
            "MultiAccountCondition",
            "yes",
            "no"
          ]
        },
        "PrincipalType": {
          "Fn::If": [
            "OrganizationCondition",
            "Organization",
            "Account"
          ]
        },
        "PrincipalCount": 1
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/SendAnonymousUsageData/Default"
      },
      "Condition": "AnonymousDataToAWS"
    },
    "AddAthenaPartitionLambdaRoleA28EF3C7": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Path": "/",
        "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": "CreateCWLogs"
                },
                {
                  "Action": [
                    "s3:GetBucketLocation",
                    "s3:GetObject",
                    "s3:ListBucket",
                    "s3:ListBucketMultipartUploads",
                    "s3:ListMultipartUploadParts",
                    "s3:AbortMultipartUpload",
                    "s3:CreateBucket",
                    "s3:PutObject"
                  ],
                  "Effect": "Allow",
                  "Resource": [
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":s3:::",
                          {
                            "Ref": "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C"
                          },
                          "/athena_results/*"
                        ]
                      ]
                    },
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":s3:::",
                          {
                            "Ref": "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C"
                          }
                        ]
                      ]
                    },
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":s3:::",
                          {
                            "Ref": "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C"
                          },
                          "/*"
                        ]
                      ]
                    }
                  ],
                  "Sid": "S3AccessPS"
                },
                {
                  "Action": "athena:StartQueryExecution",
                  "Effect": "Allow",
                  "Resource": [
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":athena:",
                          {
                            "Ref": "AWS::Region"
                          },
                          ":",
                          {
                            "Ref": "AWS::AccountId"
                          },
                          ":workgroup/AWSDevOpsDashboard*"
                        ]
                      ]
                    },
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":athena:",
                          {
                            "Ref": "AWS::Region"
                          },
                          ":",
                          {
                            "Ref": "AWS::AccountId"
                          },
                          ":workgroup/primary"
                        ]
                      ]
                    }
                  ],
                  "Sid": "AthenaQueryExecutionPS"
                },
                {
                  "Action": [
                    "glue:GetTable",
                    "glue:GetPartitions",
                    "glue:GetDatabase",
                    "glue:CreateTable",
                    "glue:UpdateTable",
                    "glue:BatchCreatePartition"
                  ],
                  "Effect": "Allow",
                  "Resource": [
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":glue:",
                          {
                            "Ref": "AWS::Region"
                          },
                          ":",
                          {
                            "Ref": "AWS::AccountId"
                          },
                          ":catalog"
                        ]
                      ]
                    },
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":glue:",
                          {
                            "Ref": "AWS::Region"
                          },
                          ":",
                          {
                            "Ref": "AWS::AccountId"
                          },
                          ":database/",
                          {
                            "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
                          }
                        ]
                      ]
                    },
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":glue:",
                          {
                            "Ref": "AWS::Region"
                          },
                          ":",
                          {
                            "Ref": "AWS::AccountId"
                          },
                          ":table/",
                          {
                            "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
                          },
                          "/",
                          {
                            "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueTable4661F2E1"
                          }
                        ]
                      ]
                    },
                    {
                      "Fn::Join": [
                        "",
                        [
                          "arn:",
                          {
                            "Ref": "AWS::Partition"
                          },
                          ":glue:",
                          {
                            "Ref": "AWS::Region"
                          },
                          ":",
                          {
                            "Ref": "AWS::AccountId"
                          },
                          ":table/",
                          {
                            "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
                          },
                          "/*"
                        ]
                      ]
                    }
                  ],
                  "Sid": "glueAccessPS"
                },
                {
                  "Action": "cloudwatch:GetMetricStatistics",
                  "Effect": "Allow",
                  "Resource": "*",
                  "Sid": "cloudwatchAccessPS"
                }
              ],
              "Version": "2012-10-17"
            },
            "PolicyName": {
              "Fn::Join": [
                "",
                [
                  "AddAthenaPartitionPolicy-",
                  {
                    "Fn::GetAtt": [
                      "SolutionHelperCreateUniqueIDAF03406A",
                      "UUID"
                    ]
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/AddAthenaPartitionLambdaRole/Resource",
        "cfn_nag": {
          "rules_to_suppress": [
            {
              "id": "W11",
              "reason": "Resource * is required for cloudwatch:GetMetricStatistics as it does not support resource-level permissions."
            }
          ]
        },
        "cdk_nag": {
          "rules_to_suppress": [
            {
              "reason": "Resource * is either required by API or the policy has necessary restrictions like partition, region, account, S3, glue resource, etc.",
              "id": "AwsSolutions-IAM5"
            }
          ]
        }
      }
    },
    "AddAthenaPartitionLambdaRoleDefaultPolicyBA8B41CD": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "AddAthenaPartitionLambdaRoleDefaultPolicyBA8B41CD",
        "Roles": [
          {
            "Ref": "AddAthenaPartitionLambdaRoleA28EF3C7"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/AddAthenaPartitionLambdaRole/DefaultPolicy/Resource",
        "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 needs resource * to send trace data to X-Ray",
              "id": "AwsSolutions-IAM5"
            }
          ]
        }
      }
    },
    "AddAthenaPartitionLambdaFunctionServiceRole34D9F028": {
      "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"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/AddAthenaPartition/LambdaFunctionServiceRole/Resource",
        "cdk_nag": {
          "rules_to_suppress": [
            {
              "reason": "The policy is restricted to region, account and lambda resource.",
              "id": "AwsSolutions-IAM5"
            }
          ]
        }
      }
    },
    "AddAthenaPartitionLambdaFunction02003486": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "aws-devops-monitoring-dashboard/v1.8.13/asset69f2eade5330e1cc4326beb84d6c6827c255dd467ce9ceebcfe2eff4c6919bd6.zip"
        },
        "Description": "DevOps Monitoring Dashboard on AWS solution - This function runs on a daily schedule and adds a new partition to Amazon Athena table",
        "Environment": {
          "Variables": {
            "LOG_LEVEL": "INFO",
            "MetricsDBName": {
              "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
            },
            "MetricsTableName": {
              "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueTable4661F2E1"
            },
            "CodeBuildMetricsTableName": {
              "Ref": "GlueAthenaDatabaseCodeBuildMetricsGlueTableE0ED7BB0"
            },
            "GitHubMetricsTableName": {
              "Ref": "GlueAthenaDatabaseGitHubMetricsGlueTableE4E043BF"
            },
            "AthenaWorkGroup": {
              "Fn::Join": [
                "",
                [
                  "AWSDevOpsDashboardWG-",
                  {
                    "Fn::GetAtt": [
                      "SolutionHelperCreateUniqueIDAF03406A",
                      "UUID"
                    ]
                  }
                ]
              ]
            },
            "SolutionId": "SO0143",
            "UUID": {
              "Fn::GetAtt": [
                "SolutionHelperCreateUniqueIDAF03406A",
                "UUID"
              ]
            },
            "Region": {
              "Ref": "AWS::Region"
            },
            "Version": "v1.8.13",
            "SendAnonymousUsageData": {
              "Fn::FindInMap": [
                "AnonymousData",
                "SendAnonymousUsageData",
                "Data"
              ]
            },
            "MetricsURL": {
              "Fn::FindInMap": [
                "AnonymousData",
                "SendAnonymousUsageData",
                "MetricsURL"
              ]
            },
            "UserAgentExtra": {
              "Fn::FindInMap": [
                "UserAgentExtra",
                "UserAgentExtra",
                "Key"
              ]
            }
          }
        },
        "Handler": "add_athena_partition.handler",
        "Role": {
          "Fn::GetAtt": [
            "AddAthenaPartitionLambdaRoleA28EF3C7",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Timeout": 300,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "AddAthenaPartitionLambdaRoleDefaultPolicyBA8B41CD",
        "AddAthenaPartitionLambdaRoleA28EF3C7"
      ],
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/AddAthenaPartition/LambdaFunction/Resource",
        "aws:asset:path": "asset.69f2eade5330e1cc4326beb84d6c6827c255dd467ce9ceebcfe2eff4c6919bd6",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Code",
        "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"
            }
          ]
        }
      }
    },
    "AddAthenaPartitionLambdaFunctionAwsEventsLambdaInvokePermission19FEC65E3": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "AddAthenaPartitionLambdaFunction02003486",
            "Arn"
          ]
        },
        "Principal": "events.amazonaws.com",
        "SourceArn": {
          "Fn::GetAtt": [
            "AddAthenaPartitionEventsRule8E73AEE0",
            "Arn"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/AddAthenaPartition/LambdaFunction/AwsEventsLambdaInvokePermission-1"
      }
    },
    "AddAthenaPartitionEventsRule8E73AEE0": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "Description": "DevOps Monitoring Dashboard on AWS solution - Event rule for adding Athena partitions",
        "ScheduleExpression": "cron(0 0 * * ? *)",
        "State": "ENABLED",
        "Targets": [
          {
            "Arn": {
              "Fn::GetAtt": [
                "AddAthenaPartitionLambdaFunction02003486",
                "Arn"
              ]
            },
            "Id": "Target0"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/AddAthenaPartition/EventsRule/Resource"
      }
    },
    "QSDashboardNestedStackQSDashboardNestedStackResourceF5171359": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "Parameters": {
          "QuickSightSourceTemplateArn": "arn:aws:quicksight:us-east-1:898061675696:template/solutions_aws-devops-monitoring-dashboard_v1_8_13",
          "QuickSightPrincipalArn": {
            "Ref": "QuickSightPrincipalArn"
          },
          "SolutionID": "SO0143",
          "SolutionName": "DevOps Monitoring Dashboard on AWS",
          "SolutionVersion": "v1.8.13",
          "ParentStackName": {
            "Ref": "AWS::StackName"
          },
          "AthenaWorkGroupName": {
            "Fn::Join": [
              "",
              [
                "AWSDevOpsDashboardWG-",
                {
                  "Fn::GetAtt": [
                    "SolutionHelperCreateUniqueIDAF03406A",
                    "UUID"
                  ]
                }
              ]
            ]
          }
        },
        "TemplateURL": {
          "Fn::Join": [
            "",
            [
              "https://solutions-reference.s3.",
              {
                "Ref": "AWS::URLSuffix"
              },
              "/",
              "aws-devops-monitoring-dashboard/v1.8.13/awsdevopsmonitoringdashboardQSDashboardE60C2715.nested.template"
            ]
          ]
        }
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/QSDashboard.NestedStack/QSDashboard.NestedStackResource",
        "nestedStackFileName": "awsdevopsmonitoringdashboardQSDashboardE60C2715.nested.template",
        "aws:asset:path": "awsdevopsmonitoringdashboardQSDashboardE60C2715.nested.template.json",
        "aws:asset:property": "TemplateURL"
      },
      "Condition": "QuickSightCondition",
      "Description": "(SO0143)DevOps Monitoring Dashboard on AWS - Create QuickSight Template. Version: v1.8.13"
    },
    "GitHubStackNestedStackGitHubStackNestedStackResource3B60958E": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "Parameters": {
          "referencetoawsdevopsmonitoringdashboardWebhookSecretTokenC2669443Ref": {
            "Ref": "WebhookSecretToken"
          },
          "referencetoawsdevopsmonitoringdashboardSolutionHelperCreateUniqueID3A64E14FUUID": {
            "Fn::GetAtt": [
              "SolutionHelperCreateUniqueIDAF03406A",
              "UUID"
            ]
          },
          "referencetoawsdevopsmonitoringdashboardCodeCommitKinesisFirehoseToS3S3BucketEB027D40Arn": {
            "Fn::GetAtt": [
              "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C",
              "Arn"
            ]
          },
          "referencetoawsdevopsmonitoringdashboardGlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseEA06DB8CRef": {
            "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
          },
          "referencetoawsdevopsmonitoringdashboardGlueAthenaDatabaseGitHubMetricsGlueTable46424409Ref": {
            "Ref": "GlueAthenaDatabaseGitHubMetricsGlueTableE4E043BF"
          },
          "referencetoawsdevopsmonitoringdashboardAllowedIPsDA089C12Ref": {
            "Ref": "AllowedIPs"
          }
        },
        "TemplateURL": {
          "Fn::Join": [
            "",
            [
              "https://solutions-reference.s3.",
              {
                "Ref": "AWS::URLSuffix"
              },
              "/",
              "aws-devops-monitoring-dashboard/v1.8.13/awsdevopsmonitoringdashboardGitHubStack1DAEB799.nested.template"
            ]
          ]
        }
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/GitHubStack.NestedStack/GitHubStack.NestedStackResource",
        "nestedStackFileName": "awsdevopsmonitoringdashboardGitHubStack1DAEB799.nested.template",
        "aws:asset:path": "awsdevopsmonitoringdashboardGitHubStack1DAEB799.nested.template.json",
        "aws:asset:property": "TemplateURL"
      },
      "Condition": "GitHubCondition",
      "Description": "(SO0143)DevOps Monitoring Dashboard on AWS - Create AWS Resources needed to process GitHub events. Version: v1.8.13"
    },
    "monitoringAcctPermissionDevOpsCustomEventBus1C7F31BE": {
      "Type": "AWS::Events::EventBus",
      "Properties": {
        "Name": {
          "Fn::Join": [
            "",
            [
              "DevOpsCustomEventBus-",
              {
                "Fn::GetAtt": [
                  "SolutionHelperCreateUniqueIDAF03406A",
                  "UUID"
                ]
              }
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/monitoringAcctPermission/DevOpsCustomEventBus/Resource"
      },
      "Condition": "MultiAccountCondition"
    },
    "monitoringAcctPermissionMonitoringAcctPermissionLambdaRole06DC758F": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Path": "/",
        "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": "CreateCWLogs"
                },
                {
                  "Action": [
                    "events:DescribeEventBus",
                    "events:RemovePermission",
                    "events:PutPermission"
                  ],
                  "Effect": "Allow",
                  "Resource": {
                    "Fn::GetAtt": [
                      "monitoringAcctPermissionDevOpsCustomEventBus1C7F31BE",
                      "Arn"
                    ]
                  },
                  "Sid": "CWEventBus"
                },
                {
                  "Action": [
                    "s3:PutBucketPolicy",
                    "s3:GetBucketPolicy",
                    "s3:DeleteBucketPolicy"
                  ],
                  "Effect": "Allow",
                  "Resource": {
                    "Fn::Join": [
                      "",
                      [
                        "arn:",
                        {
                          "Ref": "AWS::Partition"
                        },
                        ":s3:::",
                        {
                          "Ref": "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C"
                        }
                      ]
                    ]
                  },
                  "Sid": "S3BucketPolicy"
                }
              ],
              "Version": "2012-10-17"
            },
            "PolicyName": {
              "Fn::Join": [
                "",
                [
                  "MonitoringAcctPermissionLambdaPolicy-",
                  {
                    "Fn::GetAtt": [
                      "SolutionHelperCreateUniqueIDAF03406A",
                      "UUID"
                    ]
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/monitoringAcctPermission/MonitoringAcctPermissionLambdaRole/Resource",
        "cdk_nag": {
          "rules_to_suppress": [
            {
              "reason": "The policy is restricted to partition, region, account and lambda resource.",
              "id": "AwsSolutions-IAM5"
            }
          ]
        }
      },
      "Condition": "MultiAccountCondition"
    },
    "monitoringAcctPermissionMonitoringAcctPermissionLambda78753D82": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "aws-devops-monitoring-dashboard/v1.8.13/assetb61945cf4c37f38f3c17139ff969c26754c21c8be7994a33e88eef665bbc929b.zip"
        },
        "Description": "DevOps Monitoring Dashboard on AWS solution - This function manages permissions in the central monitoring account that are required for processing metrics sent by other accounts.",
        "Environment": {
          "Variables": {
            "LOG_LEVEL": "INFO",
            "UserAgentExtra": {
              "Fn::FindInMap": [
                "UserAgentExtra",
                "UserAgentExtra",
                "Key"
              ]
            }
          }
        },
        "Handler": "monitoring_account_permission_index.handler",
        "Role": {
          "Fn::GetAtt": [
            "monitoringAcctPermissionMonitoringAcctPermissionLambdaRole06DC758F",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Timeout": 300
      },
      "DependsOn": [
        "monitoringAcctPermissionMonitoringAcctPermissionLambdaRole06DC758F"
      ],
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/monitoringAcctPermission/MonitoringAcctPermissionLambda/Resource",
        "aws:asset:path": "asset.b61945cf4c37f38f3c17139ff969c26754c21c8be7994a33e88eef665bbc929b",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Code",
        "cfn_nag": {
          "rules_to_suppress": [
            {
              "id": "W89",
              "reason": "There is no need to run this lambda in a VPC"
            },
            {
              "id": "W92",
              "reason": "There is no need for Reserved Concurrency"
            }
          ]
        }
      },
      "Condition": "MultiAccountCondition"
    },
    "monitoringAcctPermissionMonitoringAcctPermissionLambdaLogRetention671B7F77": {
      "Type": "Custom::LogRetention",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A",
            "Arn"
          ]
        },
        "LogGroupName": {
          "Fn::Join": [
            "",
            [
              "/aws/lambda/",
              {
                "Ref": "monitoringAcctPermissionMonitoringAcctPermissionLambda78753D82"
              }
            ]
          ]
        },
        "RetentionInDays": 90
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/monitoringAcctPermission/MonitoringAcctPermissionLambda/LogRetention/Resource"
      },
      "Condition": "MultiAccountCondition"
    },
    "monitoringAcctPermissionCustomResourceMonitoringAcctPermission235F99B0": {
      "Type": "Custom::MonitoringAcctPermission",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "monitoringAcctPermissionMonitoringAcctPermissionLambda78753D82",
            "Arn"
          ]
        },
        "PrincipalType": {
          "Fn::If": [
            "OrganizationCondition",
            "Organization",
            "Account"
          ]
        },
        "PrincipalList": {
          "Ref": "PrincipalList"
        },
        "EventBusName": {
          "Ref": "monitoringAcctPermissionDevOpsCustomEventBus1C7F31BE"
        },
        "MetricsBucketName": {
          "Ref": "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C"
        },
        "UUID": {
          "Fn::GetAtt": [
            "SolutionHelperCreateUniqueIDAF03406A",
            "UUID"
          ]
        },
        "version": "v1.8.13"
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/monitoringAcctPermission/CustomResourceMonitoringAcctPermission/Default"
      },
      "Condition": "MultiAccountCondition"
    },
    "monitoringAcctPermissionCanaryEventsForCustomEventBusCanaryEventsRule55E14CB5": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "Description": "DevOps Monitoring Dashboard on AWS solution - Event rule for Amazon CloudWatch Synthetics Canary Alarm",
        "EventBusName": {
          "Ref": "monitoringAcctPermissionDevOpsCustomEventBus1C7F31BE"
        },
        "EventPattern": {
          "source": [
            "aws.cloudwatch"
          ],
          "detail-type": [
            "CloudWatch Alarm State Change"
          ],
          "detail": {
            "state": {
              "value": [
                "OK"
              ]
            },
            "previousState": {
              "value": [
                "ALARM"
              ]
            },
            "configuration": {
              "metrics": {
                "metricStat": {
                  "metric": {
                    "namespace": [
                      "CloudWatchSynthetics"
                    ]
                  }
                }
              }
            }
          }
        },
        "State": "ENABLED",
        "Targets": [
          {
            "Arn": {
              "Fn::GetAtt": [
                "CodeCommitKinesisFirehoseToS3KinesisFirehoseD3B823A8",
                "Arn"
              ]
            },
            "Id": "Target0",
            "RoleArn": {
              "Fn::GetAtt": [
                "CodeCommitEventsRuleInvokeKinesisFirehoseRole1CA10D3E",
                "Arn"
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/monitoringAcctPermission/CanaryEventsForCustomEventBus/CanaryEventsRule/Resource"
      },
      "Condition": "MultiAccountCondition"
    },
    "monitoringAcctPermissionCodePipelineAlarmEventsForCustomEventBusCodePipelineAlarmEventsRuleBC90948D": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "Description": "DevOps Monitoring Dashboard on AWS solution - Event rule for AWS CodePipeline Alarm",
        "EventBusName": {
          "Ref": "monitoringAcctPermissionDevOpsCustomEventBus1C7F31BE"
        },
        "EventPattern": {
          "source": [
            "aws.cloudwatch"
          ],
          "detail-type": [
            "CloudWatch Alarm State Change"
          ],
          "detail": {
            "state": {
              "value": [
                "OK"
              ]
            },
            "previousState": {
              "value": [
                "ALARM"
              ]
            },
            "configuration": {
              "metrics": {
                "metricStat": {
                  "metric": {
                    "namespace": [
                      "CodePipeline/SO0143/Pipelines"
                    ]
                  }
                }
              }
            }
          }
        },
        "State": "ENABLED",
        "Targets": [
          {
            "Arn": {
              "Fn::GetAtt": [
                "CodeCommitKinesisFirehoseToS3KinesisFirehoseD3B823A8",
                "Arn"
              ]
            },
            "Id": "Target0",
            "RoleArn": {
              "Fn::GetAtt": [
                "CodeCommitEventsRuleInvokeKinesisFirehoseRole1CA10D3E",
                "Arn"
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/monitoringAcctPermission/CodePipelineAlarmEventsForCustomEventBus/CodePipelineAlarmEventsRule/Resource"
      },
      "Condition": "MultiAccountCondition"
    },
    "monitoringAcctPermissionCodeDeployEventsForCustomEventBusCodeDeployEventsRule32F696BE": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "Description": "DevOps Monitoring Dashboard on AWS solution - Event rule for AWS CodeDeploy",
        "EventBusName": {
          "Ref": "monitoringAcctPermissionDevOpsCustomEventBus1C7F31BE"
        },
        "EventPattern": {
          "source": [
            "aws.codedeploy"
          ],
          "detail-type": [
            "CodeDeploy Deployment State-change Notification"
          ]
        },
        "State": "ENABLED",
        "Targets": [
          {
            "Arn": {
              "Fn::GetAtt": [
                "CodeCommitKinesisFirehoseToS3KinesisFirehoseD3B823A8",
                "Arn"
              ]
            },
            "Id": "Target0",
            "RoleArn": {
              "Fn::GetAtt": [
                "CodeCommitEventsRuleInvokeKinesisFirehoseRole1CA10D3E",
                "Arn"
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/monitoringAcctPermission/CodeDeployEventsForCustomEventBus/CodeDeployEventsRule/Resource"
      },
      "Condition": "MultiAccountCondition"
    },
    "monitoringAcctPermissionCodePipelineEventsForCustomEventBusCodePipelineEventsRuleAA636427": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "Description": "DevOps Monitoring Dashboard on AWS solution - Event rule for AWS CodePipeline",
        "EventBusName": {
          "Ref": "monitoringAcctPermissionDevOpsCustomEventBus1C7F31BE"
        },
        "EventPattern": {
          "source": [
            "aws.codepipeline"
          ],
          "detail-type": [
            "CodePipeline Action Execution State Change"
          ]
        },
        "State": "ENABLED",
        "Targets": [
          {
            "Arn": {
              "Fn::GetAtt": [
                "CodeCommitKinesisFirehoseToS3KinesisFirehoseD3B823A8",
                "Arn"
              ]
            },
            "Id": "Target0",
            "RoleArn": {
              "Fn::GetAtt": [
                "CodeCommitEventsRuleInvokeKinesisFirehoseRole1CA10D3E",
                "Arn"
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/monitoringAcctPermission/CodePipelineEventsForCustomEventBus/CodePipelineEventsRule/Resource"
      },
      "Condition": "MultiAccountCondition"
    },
    "monitoringAcctPermissionCodeCommitEventsForCustomEventBusCodeCommitEventsRule992C6188": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "Description": "DevOps Monitoring Dashboard on AWS solution - Event rule for AWS CodeCommit",
        "EventBusName": {
          "Ref": "monitoringAcctPermissionDevOpsCustomEventBus1C7F31BE"
        },
        "EventPattern": {
          "detail-type": [
            "AWS API Call via CloudTrail"
          ],
          "source": [
            "aws.codecommit"
          ],
          "detail": {
            "eventName": [
              "PutFile",
              "DeleteFile",
              "UpdateFile",
              "GitPush"
            ]
          }
        },
        "State": "ENABLED",
        "Targets": [
          {
            "Arn": {
              "Fn::GetAtt": [
                "CodeCommitKinesisFirehoseToS3KinesisFirehoseD3B823A8",
                "Arn"
              ]
            },
            "Id": "Target0",
            "RoleArn": {
              "Fn::GetAtt": [
                "CodeCommitEventsRuleInvokeKinesisFirehoseRole1CA10D3E",
                "Arn"
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/monitoringAcctPermission/CodeCommitEventsForCustomEventBus/CodeCommitEventsRule/Resource"
      },
      "Condition": "MultiAccountCondition"
    },
    "TagQueryRoleA60A4D7B": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        }
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/TagQuery/Role/Resource"
      }
    },
    "TagQueryRoleDefaultPolicy7379AC5B": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "TagQueryRoleDefaultPolicy7379AC5B",
        "Roles": [
          {
            "Ref": "TagQueryRoleA60A4D7B"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/TagQuery/Role/DefaultPolicy/Resource",
        "cdk_nag": {
          "rules_to_suppress": [
            {
              "reason": "Wildcard permissions required for xray.",
              "id": "AwsSolutions-IAM5"
            }
          ]
        },
        "cfn_nag": {
          "rules_to_suppress": [
            {
              "id": "W12",
              "reason": "Wildcard permissions required for xray."
            }
          ]
        }
      }
    },
    "TagQueryPolicyDFB4C0BD": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "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": "LogsStatement"
            },
            {
              "Action": "tag:GetResources",
              "Effect": "Allow",
              "Resource": "*",
              "Sid": "TagStatement"
            },
            {
              "Action": [
                "s3:PutObject",
                "s3:DeleteObject"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    {
                      "Fn::GetAtt": [
                        "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C",
                        "Arn"
                      ]
                    },
                    "/TaggedResources/*"
                  ]
                ]
              },
              "Sid": "ReportStatement"
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "TagQueryPolicyDFB4C0BD",
        "Roles": [
          {
            "Ref": "TagQueryRoleA60A4D7B"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/TagQuery/Policy/Resource",
        "cdk_nag": {
          "rules_to_suppress": [
            {
              "reason": "Wildcard permissions required for logging, GetResources, and uploading to S3.",
              "id": "AwsSolutions-IAM5"
            }
          ]
        },
        "cfn_nag": {
          "rules_to_suppress": [
            {
              "id": "W12",
              "reason": "This lambda requires wildcard permissions to write logs, query tag information, and upload reports"
            }
          ]
        }
      }
    },
    "TagQueryE8AE49BA": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "aws-devops-monitoring-dashboard/v1.8.13/asset35cb0026564443c52aaa72870bcff03efb01ef7653a843e50847730b1b7134d9.zip"
        },
        "Description": "DevOps Monitoring Dashboard on AWS solution - This function queries CodeCommit, CodeBuild, and CodePipeline resources for tag information.",
        "Environment": {
          "Variables": {
            "LOG_LEVEL": "INFO",
            "USER_AGENT_EXTRA": {
              "Fn::FindInMap": [
                "UserAgentExtra",
                "UserAgentExtra",
                "Key"
              ]
            },
            "SOLUTION_UUID": {
              "Fn::GetAtt": [
                "SolutionHelperCreateUniqueIDAF03406A",
                "UUID"
              ]
            },
            "SOLUTION_VERSION": "v1.8.13",
            "SOLUTION_ID": "SO0143",
            "METRICS_URL": {
              "Fn::FindInMap": [
                "AnonymousData",
                "SendAnonymousUsageData",
                "MetricsURL"
              ]
            },
            "SEND_ANONYMOUS_USAGE_METRICS": {
              "Fn::FindInMap": [
                "AnonymousData",
                "SendAnonymousUsageData",
                "Data"
              ]
            },
            "STACK_TYPE": "monitoring"
          }
        },
        "Handler": "index.handler",
        "Role": {
          "Fn::GetAtt": [
            "TagQueryRoleA60A4D7B",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Timeout": 900,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "TagQueryRoleDefaultPolicy7379AC5B",
        "TagQueryRoleA60A4D7B"
      ],
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/TagQuery/TagQuery/Resource",
        "aws:asset:path": "asset.35cb0026564443c52aaa72870bcff03efb01ef7653a843e50847730b1b7134d9",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Code",
        "cfn_nag": {
          "rules_to_suppress": [
            {
              "id": "W58",
              "reason": "Lambda has the required permission to write CloudWatch Logs through a custom policy."
            },
            {
              "id": "W89",
              "reason": "This lambda does not need to be deployed inside a VPC"
            },
            {
              "id": "W92",
              "reason": "This lambda does not need reserved concurrent executions"
            }
          ]
        }
      }
    },
    "TagQueryInvokeTagQuery42CA6DAC": {
      "Type": "Custom::InvokeTagQuery",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "TagQueryE8AE49BA",
            "Arn"
          ]
        },
        "ReportBucket": {
          "Ref": "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C"
        },
        "CodeCommitTagConfig": {
          "Ref": "TagsConfigCodeCommit"
        },
        "CodeBuildTagConfig": {
          "Ref": "TagsConfigCodeBuild"
        },
        "CodePipelineTagConfig": {
          "Ref": "TagsConfigCodePipeline"
        }
      },
      "DependsOn": [
        "TagQueryPolicyDFB4C0BD"
      ],
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/TagQuery/InvokeTagQuery/Default"
      }
    },
    "TagQueryRule26FBA3FD": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "Description": "DevOps Monitoring Dashboard on AWS solution - Event rule for querying tag information",
        "ScheduleExpression": "rate(15 minutes)",
        "State": {
          "Fn::If": [
            "TagQueryAnyTagConfigsCond060F5869",
            "ENABLED",
            "DISABLED"
          ]
        },
        "Targets": [
          {
            "Arn": {
              "Fn::GetAtt": [
                "TagQueryE8AE49BA",
                "Arn"
              ]
            },
            "Id": "Target0",
            "Input": {
              "Fn::Join": [
                "",
                [
                  "{\"ReportBucket\":\"",
                  {
                    "Ref": "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C"
                  },
                  "\",\"CodeCommitTagConfig\":\"",
                  {
                    "Ref": "TagsConfigCodeCommit"
                  },
                  "\",\"CodeBuildTagConfig\":\"",
                  {
                    "Ref": "TagsConfigCodeBuild"
                  },
                  "\",\"CodePipelineTagConfig\":\"",
                  {
                    "Ref": "TagsConfigCodePipeline"
                  },
                  "\"}"
                ]
              ]
            },
            "RetryPolicy": {
              "MaximumRetryAttempts": 0
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/TagQuery/Rule/Resource"
      }
    },
    "TagQueryRuleAllowEventRuleawsdevopsmonitoringdashboardTagQueryD483EAD70122D34E": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "TagQueryE8AE49BA",
            "Arn"
          ]
        },
        "Principal": "events.amazonaws.com",
        "SourceArn": {
          "Fn::GetAtt": [
            "TagQueryRule26FBA3FD",
            "Arn"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/TagQuery/Rule/AllowEventRuleawsdevopsmonitoringdashboardTagQueryD483EAD7"
      }
    },
    "AppRegistry968496A3": {
      "Type": "AWS::ServiceCatalogAppRegistry::Application",
      "Properties": {
        "Description": "Service Catalog application to track and manage all your resources for the solution DevOps Monitoring Dashboard on AWS",
        "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": "aws-devops-monitoring-dashboard/AppRegistry/Resource"
      }
    },
    "AppRegistryAttributeGroupAssociation820806a1ce14733DF3F1": {
      "Type": "AWS::ServiceCatalogAppRegistry::AttributeGroupAssociation",
      "Properties": {
        "Application": {
          "Fn::GetAtt": [
            "AppRegistry968496A3",
            "Id"
          ]
        },
        "AttributeGroup": {
          "Fn::GetAtt": [
            "DefaultApplicationAttributesFC1CC26B",
            "Id"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/AppRegistry/AttributeGroupAssociation820806a1ce14"
      }
    },
    "AppRegistryResourceAssociation142839FB0": {
      "Type": "AWS::ServiceCatalogAppRegistry::ResourceAssociation",
      "Properties": {
        "Application": {
          "Fn::GetAtt": [
            "AppRegistry968496A3",
            "Id"
          ]
        },
        "Resource": {
          "Ref": "QSDashboardNestedStackQSDashboardNestedStackResourceF5171359"
        },
        "ResourceType": "CFN_STACK"
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/AppRegistry/ResourceAssociation1"
      },
      "Condition": "QuickSightCondition"
    },
    "AppRegistryResourceAssociation2BB1A3300": {
      "Type": "AWS::ServiceCatalogAppRegistry::ResourceAssociation",
      "Properties": {
        "Application": {
          "Fn::GetAtt": [
            "AppRegistry968496A3",
            "Id"
          ]
        },
        "Resource": {
          "Ref": "GitHubStackNestedStackGitHubStackNestedStackResource3B60958E"
        },
        "ResourceType": "CFN_STACK"
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/AppRegistry/ResourceAssociation2"
      },
      "Condition": "GitHubCondition"
    },
    "AppRegistryAssociation": {
      "Type": "AWS::ServiceCatalogAppRegistry::ResourceAssociation",
      "Properties": {
        "Application": {
          "Fn::GetAtt": [
            "AppRegistry968496A3",
            "Id"
          ]
        },
        "Resource": {
          "Ref": "AWS::StackId"
        },
        "ResourceType": "CFN_STACK"
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/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": "aws-devops-monitoring-dashboard/DefaultApplicationAttributes/Resource"
      }
    },
    "CDKMetadata": {
      "Type": "AWS::CDK::Metadata",
      "Properties": {
        "Analytics": "v2:deflate64:H4sIAAAAAAAA/3VSTY8aMQz9LXvPZGFp1R4L090eyqoIkHpceYJnyJJJRrEDQtH89yrzASxtT372s58dx08yTr9MZZw8wIkytTtkRhcybhjUQeSlXYGHGhl9cl6habStEsyd3WnWzgo40VvUUMu4dgYT19mVM1qdO4kOtcJAXexAxpdgVVeZl/YWr9DXmkg72wqavQERMsl5MoJmMi6COiAvgFD0MBUNqDfXnrd+K4yrSMalq9bIaLt+S1f98C40KfmCl67asEeoh2jvtOKgLZKmUnvcO0KZl/Y7Gn1Efx7y8YiWScZ1GFaQ7HMKLgKlwIhbUZmAMiYJYCjSa/LSbqEw2ArgPVpI+r+dP/RDKePC7gSs9in+iuy1GroS+qNWqIDBuAqaxmOlif250583jdEKxvXOmb0uAmMnOydySl/INZILXuFd+GNN24oxT3TfsmGohnu4EHkgdvXVLe3lln4FbgK3YpKBafYgJw/fhqN7TDamzQxUvCxnMxt289/HjiW3770fvBWfP439yJmQkihTzhL7oJj6AbpfLLzeVZjFu0/PaCafr/zW/ez5l4Hfus1sPPEPecsu9tcRJb1/SLStsG6H8p0ej08TOf0qpw/vpHXmg2Vdo1z39g/CvCb5uAMAAA=="
      },
      "Metadata": {
        "aws:cdk:path": "aws-devops-monitoring-dashboard/CDKMetadata/Default"
      },
      "Condition": "CDKMetadataAvailable"
    }
  },
  "Outputs": {
    "QSAnalysisURL": {
      "Description": "Amazon QuickSight Analysis URL for DevOps Monitoring Dashboard on AWS Solution",
      "Value": {
        "Fn::GetAtt": [
          "QSDashboardNestedStackQSDashboardNestedStackResourceF5171359",
          "Outputs.awsdevopsmonitoringdashboardQSDashboardQuicksightQuickSightResourcesC5BCF60Eanalysisurl"
        ]
      },
      "Condition": "QuickSightCondition"
    },
    "QSDashboardURL": {
      "Description": "Amazon QuickSight Dashboard URL for DevOps Monitoring Dashboard on AWS Solution",
      "Value": {
        "Fn::GetAtt": [
          "QSDashboardNestedStackQSDashboardNestedStackResourceF5171359",
          "Outputs.awsdevopsmonitoringdashboardQSDashboardQuicksightQuickSightResourcesC5BCF60Edashboardurl"
        ]
      },
      "Condition": "QuickSightCondition"
    },
    "APIEndpoint": {
      "Description": "Amazon API Endpoint to receive GitHub events for DevOps Monitoring Dashboard on AWS Solution",
      "Value": {
        "Fn::Join": [
          "",
          [
            "https://",
            {
              "Fn::GetAtt": [
                "GitHubStackNestedStackGitHubStackNestedStackResource3B60958E",
                "Outputs.awsdevopsmonitoringdashboardGitHubStackGitHubEventsDevOpsDashboardAPI5ADE046CRef"
              ]
            },
            ".execute-api.",
            {
              "Ref": "AWS::Region"
            },
            ".",
            {
              "Ref": "AWS::URLSuffix"
            },
            "/",
            {
              "Fn::GetAtt": [
                "GitHubStackNestedStackGitHubStackNestedStackResource3B60958E",
                "Outputs.awsdevopsmonitoringdashboardGitHubStackGitHubEventsDevOpsDashboardAPIDeploymentStageprod0BB0DD61Ref"
              ]
            },
            "/git"
          ]
        ]
      },
      "Condition": "GitHubCondition"
    },
    "DevOpsMetricsS3Bucket": {
      "Description": "DevOps Metrics S3 Bucket for DevOps Monitoring Dashboard on AWS solution",
      "Value": {
        "Fn::GetAtt": [
          "CodeCommitKinesisFirehoseToS3S3BucketDD1D151C",
          "Arn"
        ]
      },
      "Export": {
        "Name": "DevOpsMetricsS3Bucket"
      }
    },
    "SolutionVersion": {
      "Description": "Version for DevOps Monitoring Dashboard on AWS solution",
      "Value": "v1.8.13"
    },
    "CustomEventBusArn": {
      "Description": "ARN of custom event bus for DevOps Monitoring Dashboard on AWS Solution",
      "Value": {
        "Fn::GetAtt": [
          "monitoringAcctPermissionDevOpsCustomEventBus1C7F31BE",
          "Arn"
        ]
      },
      "Export": {
        "Name": "CustomEventBusArn"
      },
      "Condition": "MultiAccountCondition"
    },
    "DevOpsMetricsGlueDBName": {
      "Description": "Name of the DevOps metrics Glue database for DevOps Monitoring Dashboard on AWS Solution",
      "Value": {
        "Ref": "GlueAthenaDatabaseAWSDevopsMetricsGlueDatabaseB82980FF"
      },
      "Export": {
        "Name": "DevOpsMetricsGlueDBName"
      }
    },
    "CodeBuildMetricsGlueTableName": {
      "Description": "Name of CodeBuild metrics Glue table for DevOps Monitoring Dashboard on AWS Solution",
      "Value": {
        "Ref": "GlueAthenaDatabaseCodeBuildMetricsGlueTableE0ED7BB0"
      },
      "Export": {
        "Name": "CodeBuildMetricsGlueTableName"
      }
    },
    "SolutionUUID": {
      "Description": "UUID generated by the DevOps Monitoring Dashboard on AWS Solution",
      "Value": {
        "Fn::GetAtt": [
          "SolutionHelperCreateUniqueIDAF03406A",
          "UUID"
        ]
      },
      "Export": {
        "Name": "SolutionUUID"
      }
    }
  }
}