{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Conditions": {
    "AMPSUse0": {
      "Fn::Equals": [
        0,
        {
          "Ref": "AMPsPerSubpool"
        }
      ]
    },
    "DBTemporalEnabled": {
      "Fn::Equals": [
        {
          "Ref": "DBTemporal"
        },
        "yes"
      ]
    },
    "DBUseCapacityReservation": {
      "Fn::Not": [
        {
          "Fn::Equals": [
            {
              "Ref": "DBCapacityReservation"
            },
            ""
          ]
        }
      ]
    },
    "DBUseEBS12": {
      "Fn::Equals": [
        "EBS12",
        {
          "Fn::FindInMap": [
            "DBInstanceStorageTypes",
            {
              "Ref": "DBInstanceStorageType"
            },
            {
              "Fn::FindInMap": [
                "DBUnfoldConfigTypes",
                {
                  "Ref": "DBUnfoldConfigType"
                },
                "LaunchConfig"
              ]
            }
          ]
        }
      ]
    },
    "DBUseEBS3": {
      "Fn::Equals": [
        "EBS3",
        {
          "Fn::FindInMap": [
            "DBInstanceStorageTypes",
            {
              "Ref": "DBInstanceStorageType"
            },
            {
              "Fn::FindInMap": [
                "DBUnfoldConfigTypes",
                {
                  "Ref": "DBUnfoldConfigType"
                },
                "LaunchConfig"
              ]
            }
          ]
        }
      ]
    },
    "DBUseEBS6": {
      "Fn::Equals": [
        "EBS6",
        {
          "Fn::FindInMap": [
            "DBInstanceStorageTypes",
            {
              "Ref": "DBInstanceStorageType"
            },
            {
              "Fn::FindInMap": [
                "DBUnfoldConfigTypes",
                {
                  "Ref": "DBUnfoldConfigType"
                },
                "LaunchConfig"
              ]
            }
          ]
        }
      ]
    },
    "DBUseElasticIPs": {
      "Fn::Equals": [
        {
          "Ref": "DBElasticIPs"
        },
        "yes"
      ]
    },
    "DBUseEncryption": {
      "Fn::Equals": [
        {
          "Ref": "DBEBSEncryption"
        },
        "yes"
      ]
    },
    "DBUseVolume0": {
      "Fn::Equals": [
        0,
        {
          "Ref": "UserDefinedVolumeCount"
        }
      ]
    },
    "SubpoolUse0": {
      "Fn::Equals": [
        0,
        {
          "Ref": "SubpoolPerClique"
        }
      ]
    }
  },
  "Description": "Teradata Ecosystem - Test / Dev",
  "Mappings": {
    "DBAMIVersions": {
      "20.00": {
        "Version": "2000"
      }
    },
    "DBAMIs": {
      "af-south-1": {
        "2000": "ami-02ff95c01df34be39"
      },
      "ap-east-1": {
        "2000": "ami-01c26b89cf2236c21"
      },
      "ap-northeast-1": {
        "2000": "ami-04d58e038cab15092"
      },
      "ap-northeast-2": {
        "2000": "ami-0f266e0f608c90ab0"
      },
      "ap-northeast-3": {
        "2000": "ami-09701715f8cfa7750"
      },
      "ap-south-1": {
        "2000": "ami-03794990b85d79354"
      },
      "ap-southeast-1": {
        "2000": "ami-0591492db5df41e04"
      },
      "ap-southeast-2": {
        "2000": "ami-0f4807253d0e1e57d"
      },
      "ca-central-1": {
        "2000": "ami-0448e4d4ca0e89bef"
      },
      "eu-central-1": {
        "2000": "ami-042f4cd96e9f0a256"
      },
      "eu-central-2": {
        "2000": "ami-0566573fcbf9b3819"
      },
      "eu-north-1": {
        "2000": "ami-0edb2d4a17adea387"
      },
      "eu-south-1": {
        "2000": "ami-0b3475010b9e15456"
      },
      "eu-south-2": {
        "2000": ""
      },
      "eu-west-1": {
        "2000": "ami-0205aede31a8d3150"
      },
      "eu-west-2": {
        "2000": "ami-0a03549be13178ddf"
      },
      "eu-west-3": {
        "2000": "ami-081879f30a226a435"
      },
      "me-south-1": {
        "2000": "ami-0a41110f627e7c2ca"
      },
      "sa-east-1": {
        "2000": "ami-0a49bed9a9b465dee"
      },
      "us-east-1": {
        "2000": "ami-039473bd551e165cb"
      },
      "us-east-2": {
        "2000": "ami-0d661dc1b4375bf42"
      },
      "us-gov-east-1": {
        "2000": "ami-0b9f3e5d420cab615"
      },
      "us-gov-west-1": {
        "2000": "ami-09a7f25b62b9615a0"
      },
      "us-west-1": {
        "2000": "ami-064b7a7d3d8161123"
      },
      "us-west-2": {
        "2000": "ami-0a90a78bd8b0c3b0d"
      }
    },
    "DBInstanceStorageTypes": {
      "r5.4xlarge--EBS": {
        "DefaultVolumeCount": 12,
        "InstanceType": "r5.4xlarge",
        "LaunchConfig": "EBS12",
        "LaunchConfig2": "EBS6",
        "LaunchConfig4": "EBS3",
        "VolumeCountUnfold2": 6,
        "VolumeCountUnfold4": 3
      }
    },
    "DBStorageSizes": {
      "5": {
        "0": 0,
        "12": 389
      },
      "6": {
        "0": 0,
        "12": 466
      },
      "7": {
        "0": 0,
        "12": 544
      },
      "8": {
        "0": 0,
        "12": 621
      },
      "9": {
        "0": 0,
        "12": 699
      },
      "10": {
        "0": 0,
        "12": 777
      },
      "11": {
        "0": 0,
        "12": 854
      },
      "12": {
        "0": 0,
        "12": 932
      },
      "13": {
        "0": 0,
        "12": 1009
      },
      "14": {
        "0": 0,
        "12": 1087
      },
      "15": {
        "0": 0,
        "12": 1165
      },
      "16": {
        "0": 0,
        "12": 1242
      },
      "17": {
        "0": 0,
        "12": 1320
      },
      "18": {
        "0": 0,
        "12": 1397
      },
      "19": {
        "0": 0,
        "12": 1475
      },
      "20": {
        "0": 0,
        "12": 1553
      },
      "21": {
        "0": 0,
        "12": 1630
      },
      "22": {
        "0": 0,
        "12": 1708
      },
      "23": {
        "0": 0,
        "12": 1786
      },
      "24": {
        "0": 0,
        "12": 1863
      },
      "25": {
        "0": 0,
        "12": 1941
      },
      "26": {
        "0": 0,
        "12": 2018
      },
      "27": {
        "0": 0,
        "12": 2096
      },
      "28": {
        "0": 0,
        "12": 2174
      },
      "29": {
        "0": 0,
        "12": 2251
      },
      "30": {
        "0": 0,
        "12": 2329
      },
      "31": {
        "0": 0,
        "12": 2406
      },
      "32": {
        "0": 0,
        "12": 2484
      },
      "33": {
        "0": 0,
        "12": 2562
      },
      "34": {
        "0": 0,
        "12": 2639
      },
      "35": {
        "0": 0,
        "12": 2717
      },
      "36": {
        "0": 0,
        "12": 2794
      },
      "37": {
        "0": 0,
        "12": 2872
      },
      "38": {
        "0": 0,
        "12": 2950
      },
      "39": {
        "0": 0,
        "12": 3027
      },
      "40": {
        "0": 0,
        "12": 3105
      },
      "41": {
        "0": 0,
        "12": 3183
      },
      "42": {
        "0": 0,
        "12": 3260
      },
      "43": {
        "0": 0,
        "12": 3338
      },
      "44": {
        "0": 0,
        "12": 3415
      },
      "45": {
        "0": 0,
        "12": 3493
      },
      "46": {
        "0": 0,
        "12": 3571
      },
      "47": {
        "0": 0,
        "12": 3648
      },
      "48": {
        "0": 0,
        "12": 3726
      },
      "49": {
        "0": 0,
        "12": 3803
      },
      "50": {
        "0": 0,
        "12": 3881
      },
      "51": {
        "0": 0,
        "12": 3959
      },
      "52": {
        "0": 0,
        "12": 4036
      },
      "53": {
        "0": 0,
        "12": 4114
      },
      "54": {
        "0": 0,
        "12": 4191
      },
      "55": {
        "0": 0,
        "12": 4269
      },
      "56": {
        "0": 0,
        "12": 4347
      },
      "57": {
        "0": 0,
        "12": 4424
      },
      "58": {
        "0": 0,
        "12": 4502
      },
      "59": {
        "0": 0,
        "12": 4580
      },
      "60": {
        "0": 0,
        "12": 4657
      },
      "61": {
        "0": 0,
        "12": 4735
      },
      "62": {
        "0": 0,
        "12": 4812
      },
      "63": {
        "0": 0,
        "12": 4890
      },
      "64": {
        "0": 0,
        "12": 4968
      },
      "65": {
        "0": 0,
        "12": 5045
      },
      "66": {
        "0": 0,
        "12": 5123
      },
      "67": {
        "0": 0,
        "12": 5200
      },
      "68": {
        "0": 0,
        "12": 5278
      },
      "69": {
        "0": 0,
        "12": 5356
      },
      "70": {
        "0": 0,
        "12": 5433
      },
      "71": {
        "0": 0,
        "12": 5511
      },
      "72": {
        "0": 0,
        "12": 5588
      }
    },
    "DBUnfoldConfigTypes": {
      "None": {
        "LaunchConfig": "LaunchConfig",
        "UnfoldPosition": "0",
        "VolumeCount": "DefaultVolumeCount"
      },
      "Scale-Out-Ready": {
        "LaunchConfig": "LaunchConfig",
        "UnfoldPosition": "1",
        "VolumeCount": "DefaultVolumeCount"
      }
    },
    "PSIMAMIs": {
      "af-south-1": {
        "AMI": "ami-083ee93db9dfce5c9"
      },
      "ap-east-1": {
        "AMI": "ami-07e5a3d9c5442bf90"
      },
      "ap-northeast-1": {
        "AMI": "ami-029d1a40c1ffbace4"
      },
      "ap-northeast-2": {
        "AMI": "ami-0e226b4c0db5c6d76"
      },
      "ap-northeast-3": {
        "AMI": "ami-0e9855c16ce42397b"
      },
      "ap-south-1": {
        "AMI": "ami-0a62409ab7333d810"
      },
      "ap-southeast-1": {
        "AMI": "ami-072a73ecc094564f0"
      },
      "ap-southeast-2": {
        "AMI": "ami-014a7a8a0cf0d3bcf"
      },
      "ca-central-1": {
        "AMI": "ami-0092cb819098d87bf"
      },
      "eu-central-1": {
        "AMI": "ami-02c4cd74c490382ec"
      },
      "eu-central-2": {
        "AMI": "ami-090401c9a86234510"
      },
      "eu-north-1": {
        "AMI": "ami-06aed9d3a3307c723"
      },
      "eu-south-1": {
        "AMI": "ami-084c4177e490f4dd8"
      },
      "eu-south-2": {
        "AMI": "ami-0740fc7b92e1c1232"
      },
      "eu-west-1": {
        "AMI": "ami-0d7fc37e1b413d05d"
      },
      "eu-west-2": {
        "AMI": "ami-03b0c2504578d7173"
      },
      "eu-west-3": {
        "AMI": "ami-02ab8ad2860e0d1d9"
      },
      "me-south-1": {
        "AMI": "ami-0d16c5e3281aa3e67"
      },
      "sa-east-1": {
        "AMI": "ami-03330a851a25dc7a9"
      },
      "us-east-1": {
        "AMI": "ami-028a93416b57fc8f2"
      },
      "us-east-2": {
        "AMI": "ami-0eb8d3177604be561"
      },
      "us-gov-east-1": {
        "AMI": "ami-078550b210e710395"
      },
      "us-gov-west-1": {
        "AMI": "ami-04d936462a87736e6"
      },
      "us-west-1": {
        "AMI": "ami-02624c9461b23220c"
      },
      "us-west-2": {
        "AMI": "ami-0bdf962cdfeeb13e1"
      }
    },
    "VPAMIs": {
      "af-south-1": {
        "AMI": "ami-07802cff816838dcd"
      },
      "ap-east-1": {
        "AMI": "ami-08564c90e722f008e"
      },
      "ap-northeast-1": {
        "AMI": "ami-0fe6bd953203c1b26"
      },
      "ap-northeast-2": {
        "AMI": "ami-05c3e94f4e769a50c"
      },
      "ap-northeast-3": {
        "AMI": "ami-00517d4e0b542cdd7"
      },
      "ap-south-1": {
        "AMI": "ami-05fd04d2bfc7aad38"
      },
      "ap-southeast-1": {
        "AMI": "ami-034d01744e8e710ed"
      },
      "ap-southeast-2": {
        "AMI": "ami-0b11310ab0fe07b4d"
      },
      "ca-central-1": {
        "AMI": "ami-0e64963338635adef"
      },
      "eu-central-1": {
        "AMI": "ami-0090a84247d18f127"
      },
      "eu-central-2": {
        "AMI": "ami-086fea87b7d73660b"
      },
      "eu-north-1": {
        "AMI": "ami-0c2c20f87e15ca439"
      },
      "eu-south-1": {
        "AMI": "ami-0172a9648555fe511"
      },
      "eu-south-2": {
        "AMI": "ami-0db043a4e3a83db35"
      },
      "eu-west-1": {
        "AMI": "ami-0a4cc0c138bd74e65"
      },
      "eu-west-2": {
        "AMI": "ami-02f34bc20c2218bea"
      },
      "eu-west-3": {
        "AMI": "ami-00776ca04767c881c"
      },
      "me-south-1": {
        "AMI": "ami-072deba7b7aeab043"
      },
      "sa-east-1": {
        "AMI": "ami-03b491e6a9c3364f2"
      },
      "us-east-1": {
        "AMI": "ami-05232a91e1fec8506"
      },
      "us-east-2": {
        "AMI": "ami-07530a9a0235e65c0"
      },
      "us-gov-east-1": {
        "AMI": "ami-0ff2fd1a7f751e4c8"
      },
      "us-gov-west-1": {
        "AMI": "ami-0d36d7f973eef800d"
      },
      "us-west-1": {
        "AMI": "ami-0dfcd74bd5867e95d"
      },
      "us-west-2": {
        "AMI": "ami-038ce38b5339542bc"
      }
    }
  },
  "Metadata": {
    "AWS::CloudFormation::Interface": {
      "ParameterGroups": [
        {
          "Label": {
            "default": "Teradata Vantage"
          },
          "Parameters": [
            "DBVersion",
            "DBSystemName",
            "EcoVPSystemNickname",
            "DBSystemPassword",
            "DBNodeCount",
            "DBInstanceStorageType",
            "DBCapacityReservation",
            "DBUnfoldConfigType",
            "DBStorageSize",
            "SubpoolPerClique",
            "AMPsPerSubpool",
            "UserDefinedVolumeCount",
            "DBEBSEncryption",
            "DBKanjiSupport",
            "DBElasticIPs",
            "DBTemporal",
            "DBSecureZones",
            "DBRowLevelSecurity"
          ]
        },
        {
          "Label": {
            "default": "Date and Time"
          },
          "Parameters": [
            "NTPServers",
            "Timezone"
          ]
        },
        {
          "Label": {
            "default": "VPC/Network"
          },
          "Parameters": [
            "VPC",
            "PublicSubnet",
            "DBPlacementGroupParam"
          ]
        },
        {
          "Label": {
            "default": "Security Group"
          },
          "Parameters": [
            "SecurityGroupAccess"
          ]
        },
        {
          "Label": {
            "default": "Proxy Server Configuration"
          },
          "Parameters": [
            "ProxyServerURL"
          ]
        },
        {
          "Label": {
            "default": "Key Pair"
          },
          "Parameters": [
            "KeyName"
          ]
        },
        {
          "Label": {
            "default": "Teradata Server Management"
          },
          "Parameters": [
            "PSIMInstanceType",
            "PSIMNodeCount",
            "PSIMPassword",
            "PSIMRESTPassword",
            "PSIMSiteid"
          ]
        },
        {
          "Label": {
            "default": "Teradata Viewpoint"
          },
          "Parameters": [
            "VPInstanceType"
          ]
        },
        {
          "Label": {
            "default": "Custom Tags"
          },
          "Parameters": [
            "CustomTagParam"
          ]
        }
      ],
      "ParameterLabels": {
        "AMPsPerSubpool": {
          "default": "AMPs Per Subpool"
        },
        "CustomTagParam": {
          "default": "Custom Tags"
        },
        "DBCapacityReservation": {
          "default": "Capacity Reservation"
        },
        "DBEBSEncryption": {
          "default": "EBS Encryption"
        },
        "DBElasticIPs": {
          "default": "Elastic IPs"
        },
        "DBInstanceStorageType": {
          "default": "Instance and Storage Type"
        },
        "DBKanjiSupport": {
          "default": "Japanese Support"
        },
        "DBNodeCount": {
          "default": "Number of Nodes"
        },
        "DBPlacementGroupParam": {
          "default": "Database Placement Group"
        },
        "DBRowLevelSecurity": {
          "default": "Enable Row-Level Security"
        },
        "DBSecureZones": {
          "default": "Enable Secure Zones"
        },
        "DBStorageSize": {
          "default": "Data Storage"
        },
        "DBSystemName": {
          "default": "System Name"
        },
        "DBSystemPassword": {
          "default": "DBC Password"
        },
        "DBTemporal": {
          "default": "Enable Temporal"
        },
        "DBUnfoldConfigType": {
          "default": "Scale Out/In"
        },
        "DBVersion": {
          "default": "Version"
        },
        "EcoVPSystemNickname": {
          "default": "System Nickname"
        },
        "KeyName": {
          "default": "AWS Key Pair"
        },
        "NTPServers": {
          "default": "NTP Servers"
        },
        "PSIMInstanceType": {
          "default": "Instance Type"
        },
        "PSIMNodeCount": {
          "default": "Number of PSIMs"
        },
        "PSIMPassword": {
          "default": "Admin Password"
        },
        "PSIMRESTPassword": {
          "default": "Teradata Query Service Password"
        },
        "PSIMSiteid": {
          "default": "Site ID"
        },
        "ProxyServerURL": {
          "default": "Proxy Server Configuration"
        },
        "PublicSubnet": {
          "default": "Ecosystem Subnet"
        },
        "SMASiteid": {
          "default": "Site ID"
        },
        "SecurityGroupAccess": {
          "default": "Remote Access From"
        },
        "SubpoolPerClique": {
          "default": "Subpool Per Clique"
        },
        "Timezone": {
          "default": "System Timezone"
        },
        "UserDefinedVolumeCount": {
          "default": "User Defined Volume Count"
        },
        "VPC": {
          "default": "VPC"
        },
        "VPInstanceType": {
          "default": "Instance Type"
        }
      }
    }
  },
  "Parameters": {
    "AMPsPerSubpool": {
      "AllowedValues": [
        "0",
        "3",
        "4",
        "5",
        "6"
      ],
      "Default": "0",
      "Description": "Reference: docs.teradata.com > Teradata Vantage on AWS (DIY) Installation and Administration Guide > Before Deploying Vantage on AWS DIY > Supported Instance Types",
      "Type": "Number"
    },
    "CustomTagParam": {
      "Default": "",
      "Description": "Custom tags are added to all instances in the format key:value. For example, cloud:aws, dbs:teradata",
      "Type": "String"
    },
    "DBCapacityReservation": {
      "AllowedPattern": "(^cr-[a-zA-Z0-9]+)?",
      "Description": "Capacity Reservation ID. Required",
      "Type": "String"
    },
    "DBEBSEncryption": {
      "AllowedValues": [
        "no",
        "yes"
      ],
      "Default": "yes",
      "Description": "Encrypt attached EBS volumes",
      "Type": "String"
    },
    "DBElasticIPs": {
      "AllowedValues": [
        "no",
        "yes"
      ],
      "Default": "no",
      "Description": "Allocate an Elastic IP for each node. NOTE: These will not be deleted when the stack is removed.",
      "Type": "String"
    },
    "DBInstanceStorageType": {
      "AllowedValues": [
        "r5.4xlarge--EBS"
      ],
      "Default": "r5.4xlarge--EBS",
      "Description": "Storage sizes are per node. Default value will be overridden by AMPs Per Subpool, Subpool Per Clique and User Defined Volume Count",
      "Type": "String"
    },
    "DBKanjiSupport": {
      "AllowedValues": [
        "no",
        "yes"
      ],
      "Default": "no",
      "Description": "Japanese language support",
      "Type": "String"
    },
    "DBNodeCount": {
      "Default": "2",
      "Description": "Database node count (1-2)",
      "MaxValue": 2,
      "MinValue": 1,
      "Type": "Number"
    },
    "DBPlacementGroupParam": {
      "Description": "Existing Placement Group name",
      "MinLength": "1",
      "Type": "String"
    },
    "DBRowLevelSecurity": {
      "AllowedValues": [
        "no",
        "yes"
      ],
      "Default": "no",
      "Description": "",
      "Type": "String"
    },
    "DBSecureZones": {
      "AllowedValues": [
        "no",
        "yes"
      ],
      "Default": "no",
      "Description": "",
      "Type": "String"
    },
    "DBStorageSize": {
      "Default": "5",
      "Description": "Storage size, in TB, per node (5-72). Only applies to EBS instance types.",
      "MaxValue": 72,
      "MinValue": 5,
      "Type": "Number"
    },
    "DBSystemName": {
      "AllowedPattern": "[a-zA-Z0-9]+",
      "ConstraintDescription": "must only contain 1-15 alphanumeric characters",
      "Default": "mpp",
      "Description": "",
      "MaxLength": "15",
      "MinLength": "1",
      "Type": "String"
    },
    "DBSystemPassword": {
      "Description": "Database DBC Password",
      "MinLength": "1",
      "NoEcho": true,
      "Type": "String"
    },
    "DBTemporal": {
      "AllowedValues": [
        "no",
        "yes"
      ],
      "Default": "no",
      "Description": "When enabled, temporal data is stored in the Teradata file system and displayed in UTC time.\nIf using a time zone other than UTC or enabling daylight savings is required,\nthen Teradata Professional Services engagement will be required.",
      "Type": "String"
    },
    "DBUnfoldConfigType": {
      "AllowedValues": [
        "None",
        "Scale-Out-Ready"
      ],
      "Default": "None",
      "Description": "Initial scale out configuration and support",
      "Type": "String"
    },
    "DBVersion": {
      "AllowedValues": [
        "20.00"
      ],
      "Default": "20.00",
      "Description": "",
      "Type": "String"
    },
    "EcoVPSystemNickname": {
      "AllowedPattern": "[a-zA-Z0-9]+",
      "ConstraintDescription": "must only contain 1-8 alphanumeric characters",
      "Default": "mpp",
      "Description": "Name for monitored system in Viewpoint",
      "MaxLength": "8",
      "MinLength": "1",
      "Type": "String"
    },
    "KeyName": {
      "Description": "",
      "Type": "AWS::EC2::KeyPair::KeyName"
    },
    "NTPServers": {
      "Default": "169.254.169.123",
      "Description": "Comma-delimited Network Time Protocol (NTP) servers, default is to use the Amazon Time Sync Service local IP",
      "Type": "String"
    },
    "PSIMInstanceType": {
      "AllowedValues": [
        "m5.large"
      ],
      "Default": "m5.large",
      "Description": "",
      "Type": "String"
    },
    "PSIMNodeCount": {
      "Default": "1",
      "Description": "The number of PSIM instances to deploy (1-3). Each PSIM is capable of managing 70 database/node plugins; two PSIMs is the minimum for HA.",
      "MaxValue": 3,
      "MinValue": 1,
      "Type": "Number"
    },
    "PSIMPassword": {
      "AllowedPattern": "[a-zA-Z0-9]*",
      "ConstraintDescription": "must be 6-32 alphanumeric characters",
      "Description": "Password for Server Management Web interfaces",
      "MaxLength": "32",
      "MinLength": "6",
      "NoEcho": true,
      "Type": "String"
    },
    "PSIMRESTPassword": {
      "AllowedPattern": "[a-zA-Z0-9]*",
      "ConstraintDescription": "must be 6-32 alphanumeric characters",
      "Description": "Password for Server Management's Teradata Query Service interfaces",
      "MaxLength": "32",
      "MinLength": "6",
      "NoEcho": true,
      "Type": "String"
    },
    "PSIMSiteid": {
      "AllowedPattern": "[A-Z0-9]*",
      "ConstraintDescription": "must be up to 15 alpha-numeric characters (upper-case)",
      "Default": "",
      "Description": "Site identifier used when connecting to Teradata Vital Infrastructure (TVI)",
      "MaxLength": "15",
      "MinLength": "0",
      "Type": "String"
    },
    "ProxyServerURL": {
      "Default": "",
      "Description": "Optional. Authenticated Proxy Server URL. Proxy Server should be in same VPC Ex.: http://<username>:<password>@<proxy_server_private_ip>:<proxy_server_port>",
      "NoEcho": true,
      "Type": "String"
    },
    "PublicSubnet": {
      "Description": "",
      "Type": "AWS::EC2::Subnet::Id"
    },
    "SMASiteid": {
      "AllowedPattern": "[A-Z0-9]*",
      "ConstraintDescription": "must be up to 15 alpha-numeric characters (upper-case)",
      "Default": "",
      "Description": "Site identifier used when connecting to Teradata Vital Infrastructure (TVI)",
      "MaxLength": "15",
      "MinLength": "0",
      "Type": "String"
    },
    "SecurityGroupAccess": {
      "AllowedPattern": "\\d{1,3}([.]\\d{1,3}){3}/\\d{1,2}",
      "ConstraintDescription": "must be a CIDR block, e.g. 172.0.48.28/32",
      "Description": "CIDR block to lockdown SSH and database client access to the database nodes",
      "Type": "String"
    },
    "SubpoolPerClique": {
      "AllowedValues": [
        "0",
        "1",
        "2",
        "3",
        "4",
        "6",
        "8"
      ],
      "Default": "0",
      "Description": "Reference: docs.teradata.com > Teradata Vantage on AWS (DIY) Installation and Administration Guide > Before Deploying Vantage on AWS DIY > Supported Instance Types",
      "Type": "Number"
    },
    "Timezone": {
      "AllowedValues": [
        "",
        "Africa/Abidjan",
        "Africa/Accra",
        "Africa/Addis_Ababa",
        "Africa/Algiers",
        "Africa/Asmara",
        "Africa/Asmera",
        "Africa/Bamako",
        "Africa/Bangui",
        "Africa/Banjul",
        "Africa/Bissau",
        "Africa/Blantyre",
        "Africa/Brazzaville",
        "Africa/Bujumbura",
        "Africa/Cairo",
        "Africa/Casablanca",
        "Africa/Ceuta",
        "Africa/Conakry",
        "Africa/Dakar",
        "Africa/Dar_es_Salaam",
        "Africa/Djibouti",
        "Africa/Douala",
        "Africa/El_Aaiun",
        "Africa/Freetown",
        "Africa/Gaborone",
        "Africa/Harare",
        "Africa/Johannesburg",
        "Africa/Juba",
        "Africa/Kampala",
        "Africa/Khartoum",
        "Africa/Kigali",
        "Africa/Kinshasa",
        "Africa/Lagos",
        "Africa/Libreville",
        "Africa/Lome",
        "Africa/Luanda",
        "Africa/Lubumbashi",
        "Africa/Lusaka",
        "Africa/Malabo",
        "Africa/Maputo",
        "Africa/Maseru",
        "Africa/Mbabane",
        "Africa/Mogadishu",
        "Africa/Monrovia",
        "Africa/Nairobi",
        "Africa/Ndjamena",
        "Africa/Niamey",
        "Africa/Nouakchott",
        "Africa/Ouagadougou",
        "Africa/Porto-Novo",
        "Africa/Sao_Tome",
        "Africa/Timbuktu",
        "Africa/Tripoli",
        "Africa/Tunis",
        "Africa/Windhoek",
        "America/Adak",
        "America/Anchorage",
        "America/Anguilla",
        "America/Antigua",
        "America/Araguaina",
        "America/Argentina/Buenos_Aires",
        "America/Argentina/Catamarca",
        "America/Argentina/ComodRivadavia",
        "America/Argentina/Cordoba",
        "America/Argentina/Jujuy",
        "America/Argentina/La_Rioja",
        "America/Argentina/Mendoza",
        "America/Argentina/Rio_Gallegos",
        "America/Argentina/Salta",
        "America/Argentina/San_Juan",
        "America/Argentina/San_Luis",
        "America/Argentina/Tucuman",
        "America/Argentina/Ushuaia",
        "America/Aruba",
        "America/Asuncion",
        "America/Atikokan",
        "America/Atka",
        "America/Bahia",
        "America/Bahia_Banderas",
        "America/Barbados",
        "America/Belem",
        "America/Belize",
        "America/Blanc-Sablon",
        "America/Boa_Vista",
        "America/Bogota",
        "America/Boise",
        "America/Buenos_Aires",
        "America/Cambridge_Bay",
        "America/Campo_Grande",
        "America/Cancun",
        "America/Caracas",
        "America/Catamarca",
        "America/Cayenne",
        "America/Cayman",
        "America/Chicago",
        "America/Chihuahua",
        "America/Coral_Harbour",
        "America/Cordoba",
        "America/Costa_Rica",
        "America/Creston",
        "America/Cuiaba",
        "America/Curacao",
        "America/Danmarkshavn",
        "America/Dawson",
        "America/Dawson_Creek",
        "America/Denver",
        "America/Detroit",
        "America/Dominica",
        "America/Edmonton",
        "America/Eirunepe",
        "America/El_Salvador",
        "America/Ensenada",
        "America/Fortaleza",
        "America/Fort_Nelson",
        "America/Fort_Wayne",
        "America/Glace_Bay",
        "America/Godthab",
        "America/Goose_Bay",
        "America/Grand_Turk",
        "America/Grenada",
        "America/Guadeloupe",
        "America/Guatemala",
        "America/Guayaquil",
        "America/Guyana",
        "America/Halifax",
        "America/Havana",
        "America/Hermosillo",
        "America/Indiana/Indianapolis",
        "America/Indiana/Knox",
        "America/Indiana/Marengo",
        "America/Indiana/Petersburg",
        "America/Indianapolis",
        "America/Indiana/Tell_City",
        "America/Indiana/Vevay",
        "America/Indiana/Vincennes",
        "America/Indiana/Winamac",
        "America/Inuvik",
        "America/Iqaluit",
        "America/Jamaica",
        "America/Jujuy",
        "America/Juneau",
        "America/Kentucky/Louisville",
        "America/Kentucky/Monticello",
        "America/Knox_IN",
        "America/Kralendijk",
        "America/La_Paz",
        "America/Lima",
        "America/Los_Angeles",
        "America/Louisville",
        "America/Lower_Princes",
        "America/Maceio",
        "America/Managua",
        "America/Manaus",
        "America/Marigot",
        "America/Martinique",
        "America/Matamoros",
        "America/Mazatlan",
        "America/Mendoza",
        "America/Menominee",
        "America/Merida",
        "America/Metlakatla",
        "America/Mexico_City",
        "America/Miquelon",
        "America/Moncton",
        "America/Monterrey",
        "America/Montevideo",
        "America/Montreal",
        "America/Montserrat",
        "America/Nassau",
        "America/New_York",
        "America/Nipigon",
        "America/Nome",
        "America/Noronha",
        "America/North_Dakota/Beulah",
        "America/North_Dakota/Center",
        "America/North_Dakota/New_Salem",
        "America/Ojinaga",
        "America/Panama",
        "America/Pangnirtung",
        "America/Paramaribo",
        "America/Phoenix",
        "America/Port-au-Prince",
        "America/Porto_Acre",
        "America/Port_of_Spain",
        "America/Porto_Velho",
        "America/Puerto_Rico",
        "America/Rainy_River",
        "America/Rankin_Inlet",
        "America/Recife",
        "America/Regina",
        "America/Resolute",
        "America/Rio_Branco",
        "America/Rosario",
        "America/Santa_Isabel",
        "America/Santarem",
        "America/Santiago",
        "America/Santo_Domingo",
        "America/Sao_Paulo",
        "America/Scoresbysund",
        "America/Shiprock",
        "America/Sitka",
        "America/St_Barthelemy",
        "America/St_Johns",
        "America/St_Kitts",
        "America/St_Lucia",
        "America/St_Thomas",
        "America/St_Vincent",
        "America/Swift_Current",
        "America/Tegucigalpa",
        "America/Thule",
        "America/Thunder_Bay",
        "America/Tijuana",
        "America/Toronto",
        "America/Tortola",
        "America/Vancouver",
        "America/Virgin",
        "America/Whitehorse",
        "America/Winnipeg",
        "America/Yakutat",
        "America/Yellowknife",
        "Antarctica/Casey",
        "Antarctica/Davis",
        "Antarctica/DumontDUrville",
        "Antarctica/Macquarie",
        "Antarctica/Mawson",
        "Antarctica/McMurdo",
        "Antarctica/Palmer",
        "Antarctica/Rothera",
        "Antarctica/South_Pole",
        "Antarctica/Syowa",
        "Antarctica/Troll",
        "Antarctica/Vostok",
        "Arctic/Longyearbyen",
        "Asia/Aden",
        "Asia/Almaty",
        "Asia/Amman",
        "Asia/Anadyr",
        "Asia/Aqtau",
        "Asia/Aqtobe",
        "Asia/Ashgabat",
        "Asia/Ashkhabad",
        "Asia/Baghdad",
        "Asia/Bahrain",
        "Asia/Baku",
        "Asia/Bangkok",
        "Asia/Beijing",
        "Asia/Beirut",
        "Asia/Bishkek",
        "Asia/Brunei",
        "Asia/Calcutta",
        "Asia/Chita",
        "Asia/Choibalsan",
        "Asia/Chongqing",
        "Asia/Chungking",
        "Asia/Colombo",
        "Asia/Dacca",
        "Asia/Damascus",
        "Asia/Dhaka",
        "Asia/Dili",
        "Asia/Dubai",
        "Asia/Dushanbe",
        "Asia/Gaza",
        "Asia/Harbin",
        "Asia/Hebron",
        "Asia/Ho_Chi_Minh",
        "Asia/Hong_Kong",
        "Asia/Hovd",
        "Asia/Irkutsk",
        "Asia/Istanbul",
        "Asia/Jakarta",
        "Asia/Jayapura",
        "Asia/Jerusalem",
        "Asia/Kabul",
        "Asia/Kamchatka",
        "Asia/Karachi",
        "Asia/Kashgar",
        "Asia/Kathmandu",
        "Asia/Katmandu",
        "Asia/Khandyga",
        "Asia/Kolkata",
        "Asia/Krasnoyarsk",
        "Asia/Kuala_Lumpur",
        "Asia/Kuching",
        "Asia/Kuwait",
        "Asia/Macao",
        "Asia/Macau",
        "Asia/Magadan",
        "Asia/Makassar",
        "Asia/Manila",
        "Asia/Muscat",
        "Asia/Nicosia",
        "Asia/Novokuznetsk",
        "Asia/Novosibirsk",
        "Asia/Omsk",
        "Asia/Oral",
        "Asia/Phnom_Penh",
        "Asia/Pontianak",
        "Asia/Pyongyang",
        "Asia/Qatar",
        "Asia/Qyzylorda",
        "Asia/Rangoon",
        "Asia/Riyadh",
        "Asia/Saigon",
        "Asia/Sakhalin",
        "Asia/Samarkand",
        "Asia/Seoul",
        "Asia/Shanghai",
        "Asia/Singapore",
        "Asia/Srednekolymsk",
        "Asia/Taipei",
        "Asia/Tashkent",
        "Asia/Tbilisi",
        "Asia/Tehran",
        "Asia/Tel_Aviv",
        "Asia/Thimbu",
        "Asia/Thimphu",
        "Asia/Tokyo",
        "Asia/Ujung_Pandang",
        "Asia/Ulaanbaatar",
        "Asia/Ulan_Bator",
        "Asia/Urumqi",
        "Asia/Ust-Nera",
        "Asia/Vientiane",
        "Asia/Vladivostok",
        "Asia/Yakutsk",
        "Asia/Yekaterinburg",
        "Asia/Yerevan",
        "Atlantic/Azores",
        "Atlantic/Bermuda",
        "Atlantic/Canary",
        "Atlantic/Cape_Verde",
        "Atlantic/Faeroe",
        "Atlantic/Faroe",
        "Atlantic/Jan_Mayen",
        "Atlantic/Madeira",
        "Atlantic/Reykjavik",
        "Atlantic/South_Georgia",
        "Atlantic/Stanley",
        "Atlantic/St_Helena",
        "Australia/ACT",
        "Australia/Adelaide",
        "Australia/Brisbane",
        "Australia/Broken_Hill",
        "Australia/Canberra",
        "Australia/Currie",
        "Australia/Darwin",
        "Australia/Eucla",
        "Australia/Hobart",
        "Australia/LHI",
        "Australia/Lindeman",
        "Australia/Lord_Howe",
        "Australia/Melbourne",
        "Australia/North",
        "Australia/NSW",
        "Australia/Perth",
        "Australia/Queensland",
        "Australia/South",
        "Australia/Sydney",
        "Australia/Tasmania",
        "Australia/Victoria",
        "Australia/West",
        "Australia/Yancowinna",
        "Brazil/Acre",
        "Brazil/DeNoronha",
        "Brazil/East",
        "Brazil/West",
        "Canada/Atlantic",
        "Canada/Central",
        "Canada/Eastern",
        "Canada/East-Saskatchewan",
        "Canada/Mountain",
        "Canada/Newfoundland",
        "Canada/Pacific",
        "Canada/Saskatchewan",
        "Canada/Yukon",
        "CET",
        "Chile/Continental",
        "Chile/EasterIsland",
        "CST6CDT",
        "Cuba",
        "EET",
        "Egypt",
        "Eire",
        "EST",
        "EST5EDT",
        "Etc/GMT",
        "Etc/GMT0",
        "Etc/GMT-12",
        "Etc/GMT-11",
        "Etc/GMT-10",
        "Etc/GMT-9",
        "Etc/GMT-8",
        "Etc/GMT-7",
        "Etc/GMT-6",
        "Etc/GMT-5",
        "Etc/GMT-4",
        "Etc/GMT-3",
        "Etc/GMT-2",
        "Etc/GMT-1",
        "Etc/GMT-0",
        "Etc/GMT+0",
        "Etc/GMT+1",
        "Etc/GMT+2",
        "Etc/GMT+3",
        "Etc/GMT+4",
        "Etc/GMT+5",
        "Etc/GMT+6",
        "Etc/GMT+7",
        "Etc/GMT+8",
        "Etc/GMT+9",
        "Etc/GMT+10",
        "Etc/GMT+11",
        "Etc/GMT+12",
        "Etc/GMT-13",
        "Etc/GMT-14",
        "Etc/Greenwich",
        "Etc/UCT",
        "Etc/Universal",
        "Etc/UTC",
        "Etc/Zulu",
        "Europe/Amsterdam",
        "Europe/Andorra",
        "Europe/Athens",
        "Europe/Belfast",
        "Europe/Belgrade",
        "Europe/Berlin",
        "Europe/Bratislava",
        "Europe/Brussels",
        "Europe/Bucharest",
        "Europe/Budapest",
        "Europe/Busingen",
        "Europe/Chisinau",
        "Europe/Copenhagen",
        "Europe/Dublin",
        "Europe/Gibraltar",
        "Europe/Guernsey",
        "Europe/Helsinki",
        "Europe/Isle_of_Man",
        "Europe/Istanbul",
        "Europe/Jersey",
        "Europe/Kaliningrad",
        "Europe/Kiev",
        "Europe/Lisbon",
        "Europe/Ljubljana",
        "Europe/London",
        "Europe/Luxembourg",
        "Europe/Madrid",
        "Europe/Malta",
        "Europe/Mariehamn",
        "Europe/Minsk",
        "Europe/Monaco",
        "Europe/Moscow",
        "Europe/Nicosia",
        "Europe/Oslo",
        "Europe/Paris",
        "Europe/Podgorica",
        "Europe/Prague",
        "Europe/Riga",
        "Europe/Rome",
        "Europe/Samara",
        "Europe/San_Marino",
        "Europe/Sarajevo",
        "Europe/Simferopol",
        "Europe/Skopje",
        "Europe/Sofia",
        "Europe/Stockholm",
        "Europe/Tallinn",
        "Europe/Tirane",
        "Europe/Tiraspol",
        "Europe/Uzhgorod",
        "Europe/Vaduz",
        "Europe/Vatican",
        "Europe/Vienna",
        "Europe/Vilnius",
        "Europe/Volgograd",
        "Europe/Warsaw",
        "Europe/Zagreb",
        "Europe/Zaporozhye",
        "Europe/Zurich",
        "Factory",
        "GB",
        "GB-Eire",
        "GMT",
        "GMT0",
        "GMT-0",
        "GMT+0",
        "Greenwich",
        "Hongkong",
        "HST",
        "Iceland",
        "Indian/Antananarivo",
        "Indian/Chagos",
        "Indian/Christmas",
        "Indian/Cocos",
        "Indian/Comoro",
        "Indian/Kerguelen",
        "Indian/Mahe",
        "Indian/Maldives",
        "Indian/Mauritius",
        "Indian/Mayotte",
        "Indian/Reunion",
        "Iran",
        "Israel",
        "Jamaica",
        "Japan",
        "Kwajalein",
        "Libya",
        "MET",
        "Mexico/BajaNorte",
        "Mexico/BajaSur",
        "Mexico/General",
        "MST",
        "MST7MDT",
        "Navajo",
        "NZ",
        "NZ-CHAT",
        "Pacific/Apia",
        "Pacific/Auckland",
        "Pacific/Bougainville",
        "Pacific/Chatham",
        "Pacific/Chuuk",
        "Pacific/Easter",
        "Pacific/Efate",
        "Pacific/Enderbury",
        "Pacific/Fakaofo",
        "Pacific/Fiji",
        "Pacific/Funafuti",
        "Pacific/Galapagos",
        "Pacific/Gambier",
        "Pacific/Guadalcanal",
        "Pacific/Guam",
        "Pacific/Honolulu",
        "Pacific/Johnston",
        "Pacific/Kiritimati",
        "Pacific/Kosrae",
        "Pacific/Kwajalein",
        "Pacific/Majuro",
        "Pacific/Marquesas",
        "Pacific/Midway",
        "Pacific/Nauru",
        "Pacific/Niue",
        "Pacific/Norfolk",
        "Pacific/Noumea",
        "Pacific/Pago_Pago",
        "Pacific/Palau",
        "Pacific/Pitcairn",
        "Pacific/Pohnpei",
        "Pacific/Ponape",
        "Pacific/Port_Moresby",
        "Pacific/Rarotonga",
        "Pacific/Saipan",
        "Pacific/Samoa",
        "Pacific/Tahiti",
        "Pacific/Tarawa",
        "Pacific/Tongatapu",
        "Pacific/Truk",
        "Pacific/Wake",
        "Pacific/Wallis",
        "Pacific/Yap",
        "Poland",
        "Portugal",
        "PRC",
        "PST8PDT",
        "ROC",
        "ROK",
        "Singapore",
        "Turkey",
        "UCT",
        "Universal",
        "US/Alaska",
        "US/Aleutian",
        "US/Arizona",
        "US/Central",
        "US/Eastern",
        "US/East-Indiana",
        "US/Hawaii",
        "US/Indiana-Starke",
        "US/Michigan",
        "US/Mountain",
        "US/Pacific",
        "US/Pacific-New",
        "US/Samoa",
        "UTC",
        "WET",
        "W-SU",
        "Zulu"
      ],
      "Default": "",
      "Description": "Optional. Default: AWS region's timezone",
      "Type": "String"
    },
    "UserDefinedVolumeCount": {
      "AllowedValues": [
        0
      ],
      "Default": "0",
      "Description": "User Defined Volume Count",
      "Type": "Number"
    },
    "VPC": {
      "Description": "VPC must have internet access (with Internet Gateway or Virtual Private Gateway)",
      "Type": "AWS::EC2::VPC::Id"
    },
    "VPInstanceType": {
      "AllowedValues": [
        "m5.2xlarge"
      ],
      "Default": "m5.2xlarge",
      "Description": "",
      "Type": "String"
    }
  },
  "Resources": {
    "CustomTagIamRole": {
      "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"
                  ],
                  "Effect": "Allow",
                  "Resource": "*"
                }
              ],
              "Version": "2012-10-17"
            },
            "PolicyName": "CustomTagLambdaPolicy"
          }
        ]
      },
      "Type": "AWS::IAM::Role"
    },
    "DBAutoscalingGroup": {
      "CreationPolicy": {
        "ResourceSignal": {
          "Count": {
            "Ref": "DBNodeCount"
          },
          "Timeout": "PT2H"
        }
      },
      "DependsOn": [
        "DBStackCleanupFunction"
      ],
      "Properties": {
        "DesiredCapacity": {
          "Ref": "DBNodeCount"
        },
        "HealthCheckGracePeriod": 3600,
        "LaunchTemplate": {
          "LaunchTemplateId": {
            "Ref": "DBLaunchTemplate"
          },
          "Version": {
            "Fn::GetAtt": [
              "DBLaunchTemplate",
              "LatestVersionNumber"
            ]
          }
        },
        "MaxSize": {
          "Ref": "DBNodeCount"
        },
        "MinSize": {
          "Ref": "DBNodeCount"
        },
        "PlacementGroup": {
          "Ref": "DBPlacementGroupParam"
        },
        "Tags": {
          "Fn::GetAtt": [
            "ParseTagsLambdaExecutionTpaAsg",
            "autoscaling_tags"
          ]
        },
        "VPCZoneIdentifier": [
          {
            "Ref": "PublicSubnet"
          }
        ]
      },
      "Type": "AWS::AutoScaling::AutoScalingGroup"
    },
    "DBCPWDEncrypt": {
      "DependsOn": [
        "DBStackCleanupFunction"
      ],
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "DBCPWDEncryptFunction",
            "Arn"
          ]
        },
        "action": "encrypt",
        "pwd": {
          "Ref": "DBSystemPassword"
        },
        "region": {
          "Ref": "AWS::Region"
        }
      },
      "Type": "AWS::CloudFormation::CustomResource"
    },
    "DBCPWDEncryptFunction": {
      "Properties": {
        "Code": {
          "ZipFile": "import cfnresponse\nimport bz2\nimport base64\nexec(bz2.decompress(base64.b64decode('QlpoOTFBWSZTWU++UvUAAiHfgEAyQuf/2j///oq////qUAVZpYaWrF67HGOujbCUSMgmJoMjU9CNMCT2qfqaT1NM0aBA0AJRAE0yNJTPUnqNNPSNGgaAPUAAAaCREIJppNNJ4pjRMU0GTJ6mjZIxGT1NAyHGTJpphMjIGBGJowRhBo0wACCSUEwTCGSbImmRkGmQAAAAAwISGxtjBg0NDaY0mMbBygR3bli/xhQN86gIlnPL2bM6Xxufd+9Pjhj4P9YZ8rp/R12vJxI+9fwfFWDYsEPvGUP64cLladHxdLwTeKSUXCtO7CZ8GHyuG6cRyLs+/qU+Vntv/DYVugw9G5TlSYtj7rfQ+7Xtvjl1buGHPTg8fgvPyS2EkTLIklxVz9KROfhfn7rVc5bNwwwri1qOGR7DL3MeW45wMZZWeWx23oMlGOxjGwjnD+Hra+KO96jv7dyvXlF8DizjExZrT05eUZE2Lr4Neue3qa0uK4i1OZzRs5ncEPogy1XJdverQ9qdDcRlh8x26a78pFSLXQ3ZkabdirqW/djXnJHMmQxEDANL85tYP1F+Z5t+PAzieeyw1Wdr2/SqzeieMfOOgO/ZmS+nQ8aIcHHNBDabfq+M9NfdbfejreoNLXU8oY49FTXHbatWFhtnnaWuzFrwYdtEGyA311/OgneNWK2nIyc0Ur8LsbuppLLJffz1t68+yqqs7HFb+AsbRfD7pp3WIPeKfVPZURjzCtHbCBWp4IK4r0F6dJ330doVixJ4C4xSY4dOhDxmLyvMKj4DSDlxlHI4UxEebUklFn7ZNmotKfXnalHQZAUaz7SeY7b4JLq8y+F2f8Pe/sE/maNWOpuAZdnUhx74K1t6UjmsotK/KriUu+SocmtfpVkOAVepsm9XckEzBU7qD1dziPwBWwIi5HJY2BRtymQSLq3cjLcLJ9yL8TdwJmjyj05XrjeYqdnJgdylCXKmIq4pNBT/irSBjV8Ok4nvaJkIREnPBiwt1o/phDfCqNgS2EWmTHpLJZkxJ+hOScTCqeqhrvVVVE/b0ohfdFIDvRgdG/s8tbxVyuvINEMgiwXxLkNCmJ6aZsZQUHVAPxwBRG5qckeY3mTCcxbHNHIf58Ey4Urzlhy8BBl8kKkplDPmXi3ddTpcyfVTyWfCyG50twTMAfWhqy0GG8O9hf01tlBFx6sniAmYysMx0PbcSc98FmGvmLSySkQxcL4ikqNJCxPDbtlyqubAVWxSpJsISj7aI5wIELt69zKYQuKykXYl3JMF5FYz1YsYEEREZ33n8zJMU52LpC8k6jUgjCFcql58r1sTBM/0LiEOYlWqvOo2WjvV5eWfGDpsKr3Km8qAaY7yTkT4id1d0hx1Y6iYp1KwUYxc2WYMmasVMhu6fSQpuARlooq4Sd/DnpLvB8lopYzHgllo0yt2k6O2b6hzXKVxeWcaIxShKWI7T+hYbx1RgyLy40QAUWGXHwuQFUmKzeYdmkBwP19Zsy5V0HmoNoeivkyTGk2ngcEBgl1WM9jiGQ6rraMS1i1ENxoaeZcd5pprrgIEhIrNJAqJHXa0MAGaCIhw01yocrLLasurAVBVH715i0EMo+BDISDJO39ayxHPcTNCmINTK6IkBxSV+AYGdhHWrnQqTvlmmQ2l2HPRiY0m0yll4tnzqN3os0BDDltQyNvjOPm1ri8UQOXjHFyZle+g2Q4GyuoGeOyRHfQiAckptt6zG89jRlu9NWWVHS+2lLK0UYi3gGZcsmSnGExMeYYiXQ6J2h0hmnaItVAifTQCzU5jFHQiIdvl6ktFoNpMkXUzrBlZ1a24SgTWfZITY3LWcYw/4VPV/4u5IpwoSCffKXqA')))"
        },
        "Environment": {
          "Variables": {
            "commit_id": "66b1cf49df9dff6fe193e42cdd7ee8ae2de87e93\n"
          }
        },
        "Handler": "index.handler",
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "DBMppRole",
            "Arn"
          ]
        },
        "Runtime": "python3.11",
        "Timeout": 300
      },
      "Type": "AWS::Lambda::Function"
    },
    "DBCPWDEncryptKeyDelete": {
      "DependsOn": [
        "DBAutoscalingGroup"
      ],
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "DBCPWDEncryptFunction",
            "Arn"
          ]
        },
        "action": "delete_key",
        "key": {
          "Fn::GetAtt": [
            "DBCPWDEncrypt",
            "key_id"
          ]
        }
      },
      "Type": "AWS::CloudFormation::CustomResource"
    },
    "DBLaunchTemplate": {
      "Properties": {
        "LaunchTemplateData": {
          "BlockDeviceMappings": {
            "Fn::If": [
              "DBUseEBS3",
              [
                {
                  "DeviceName": "/dev/sda1",
                  "Ebs": {
                    "DeleteOnTermination": true,
                    "VolumeSize": "550",
                    "VolumeType": "gp3"
                  }
                },
                {
                  "DeviceName": "/dev/xvdba",
                  "Ebs": {
                    "DeleteOnTermination": true,
                    "Encrypted": {
                      "Fn::If": [
                        "DBUseEncryption",
                        true,
                        false
                      ]
                    },
                    "VolumeSize": {
                      "Fn::FindInMap": [
                        "DBStorageSizes",
                        {
                          "Ref": "DBStorageSize"
                        },
                        {
                          "Fn::FindInMap": [
                            "DBInstanceStorageTypes",
                            {
                              "Ref": "DBInstanceStorageType"
                            },
                            "DefaultVolumeCount"
                          ]
                        }
                      ]
                    },
                    "VolumeType": "gp3"
                  }
                },
                {
                  "DeviceName": "/dev/xvdbb",
                  "Ebs": {
                    "DeleteOnTermination": true,
                    "Encrypted": {
                      "Fn::If": [
                        "DBUseEncryption",
                        true,
                        false
                      ]
                    },
                    "VolumeSize": {
                      "Fn::FindInMap": [
                        "DBStorageSizes",
                        {
                          "Ref": "DBStorageSize"
                        },
                        {
                          "Fn::FindInMap": [
                            "DBInstanceStorageTypes",
                            {
                              "Ref": "DBInstanceStorageType"
                            },
                            "DefaultVolumeCount"
                          ]
                        }
                      ]
                    },
                    "VolumeType": "gp3"
                  }
                },
                {
                  "DeviceName": "/dev/xvdbc",
                  "Ebs": {
                    "DeleteOnTermination": true,
                    "Encrypted": {
                      "Fn::If": [
                        "DBUseEncryption",
                        true,
                        false
                      ]
                    },
                    "VolumeSize": {
                      "Fn::FindInMap": [
                        "DBStorageSizes",
                        {
                          "Ref": "DBStorageSize"
                        },
                        {
                          "Fn::FindInMap": [
                            "DBInstanceStorageTypes",
                            {
                              "Ref": "DBInstanceStorageType"
                            },
                            "DefaultVolumeCount"
                          ]
                        }
                      ]
                    },
                    "VolumeType": "gp3"
                  }
                }
              ],
              {
                "Fn::If": [
                  "DBUseEBS6",
                  [
                    {
                      "DeviceName": "/dev/sda1",
                      "Ebs": {
                        "DeleteOnTermination": true,
                        "VolumeSize": "550",
                        "VolumeType": "gp3"
                      }
                    },
                    {
                      "DeviceName": "/dev/xvdba",
                      "Ebs": {
                        "DeleteOnTermination": true,
                        "Encrypted": {
                          "Fn::If": [
                            "DBUseEncryption",
                            true,
                            false
                          ]
                        },
                        "VolumeSize": {
                          "Fn::FindInMap": [
                            "DBStorageSizes",
                            {
                              "Ref": "DBStorageSize"
                            },
                            {
                              "Fn::FindInMap": [
                                "DBInstanceStorageTypes",
                                {
                                  "Ref": "DBInstanceStorageType"
                                },
                                "DefaultVolumeCount"
                              ]
                            }
                          ]
                        },
                        "VolumeType": "gp3"
                      }
                    },
                    {
                      "DeviceName": "/dev/xvdbb",
                      "Ebs": {
                        "DeleteOnTermination": true,
                        "Encrypted": {
                          "Fn::If": [
                            "DBUseEncryption",
                            true,
                            false
                          ]
                        },
                        "VolumeSize": {
                          "Fn::FindInMap": [
                            "DBStorageSizes",
                            {
                              "Ref": "DBStorageSize"
                            },
                            {
                              "Fn::FindInMap": [
                                "DBInstanceStorageTypes",
                                {
                                  "Ref": "DBInstanceStorageType"
                                },
                                "DefaultVolumeCount"
                              ]
                            }
                          ]
                        },
                        "VolumeType": "gp3"
                      }
                    },
                    {
                      "DeviceName": "/dev/xvdbc",
                      "Ebs": {
                        "DeleteOnTermination": true,
                        "Encrypted": {
                          "Fn::If": [
                            "DBUseEncryption",
                            true,
                            false
                          ]
                        },
                        "VolumeSize": {
                          "Fn::FindInMap": [
                            "DBStorageSizes",
                            {
                              "Ref": "DBStorageSize"
                            },
                            {
                              "Fn::FindInMap": [
                                "DBInstanceStorageTypes",
                                {
                                  "Ref": "DBInstanceStorageType"
                                },
                                "DefaultVolumeCount"
                              ]
                            }
                          ]
                        },
                        "VolumeType": "gp3"
                      }
                    },
                    {
                      "DeviceName": "/dev/xvdbd",
                      "Ebs": {
                        "DeleteOnTermination": true,
                        "Encrypted": {
                          "Fn::If": [
                            "DBUseEncryption",
                            true,
                            false
                          ]
                        },
                        "VolumeSize": {
                          "Fn::FindInMap": [
                            "DBStorageSizes",
                            {
                              "Ref": "DBStorageSize"
                            },
                            {
                              "Fn::FindInMap": [
                                "DBInstanceStorageTypes",
                                {
                                  "Ref": "DBInstanceStorageType"
                                },
                                "DefaultVolumeCount"
                              ]
                            }
                          ]
                        },
                        "VolumeType": "gp3"
                      }
                    },
                    {
                      "DeviceName": "/dev/xvdbe",
                      "Ebs": {
                        "DeleteOnTermination": true,
                        "Encrypted": {
                          "Fn::If": [
                            "DBUseEncryption",
                            true,
                            false
                          ]
                        },
                        "VolumeSize": {
                          "Fn::FindInMap": [
                            "DBStorageSizes",
                            {
                              "Ref": "DBStorageSize"
                            },
                            {
                              "Fn::FindInMap": [
                                "DBInstanceStorageTypes",
                                {
                                  "Ref": "DBInstanceStorageType"
                                },
                                "DefaultVolumeCount"
                              ]
                            }
                          ]
                        },
                        "VolumeType": "gp3"
                      }
                    },
                    {
                      "DeviceName": "/dev/xvdbf",
                      "Ebs": {
                        "DeleteOnTermination": true,
                        "Encrypted": {
                          "Fn::If": [
                            "DBUseEncryption",
                            true,
                            false
                          ]
                        },
                        "VolumeSize": {
                          "Fn::FindInMap": [
                            "DBStorageSizes",
                            {
                              "Ref": "DBStorageSize"
                            },
                            {
                              "Fn::FindInMap": [
                                "DBInstanceStorageTypes",
                                {
                                  "Ref": "DBInstanceStorageType"
                                },
                                "DefaultVolumeCount"
                              ]
                            }
                          ]
                        },
                        "VolumeType": "gp3"
                      }
                    }
                  ],
                  [
                    {
                      "DeviceName": "/dev/sda1",
                      "Ebs": {
                        "DeleteOnTermination": true,
                        "VolumeSize": "550",
                        "VolumeType": "gp3"
                      }
                    },
                    {
                      "DeviceName": "/dev/xvdba",
                      "Ebs": {
                        "DeleteOnTermination": true,
                        "Encrypted": {
                          "Fn::If": [
                            "DBUseEncryption",
                            true,
                            false
                          ]
                        },
                        "VolumeSize": {
                          "Fn::FindInMap": [
                            "DBStorageSizes",
                            {
                              "Ref": "DBStorageSize"
                            },
                            {
                              "Fn::FindInMap": [
                                "DBInstanceStorageTypes",
                                {
                                  "Ref": "DBInstanceStorageType"
                                },
                                "DefaultVolumeCount"
                              ]
                            }
                          ]
                        },
                        "VolumeType": "gp3"
                      }
                    },
                    {
                      "DeviceName": "/dev/xvdbb",
                      "Ebs": {
                        "DeleteOnTermination": true,
                        "Encrypted": {
                          "Fn::If": [
                            "DBUseEncryption",
                            true,
                            false
                          ]
                        },
                        "VolumeSize": {
                          "Fn::FindInMap": [
                            "DBStorageSizes",
                            {
                              "Ref": "DBStorageSize"
                            },
                            {
                              "Fn::FindInMap": [
                                "DBInstanceStorageTypes",
                                {
                                  "Ref": "DBInstanceStorageType"
                                },
                                "DefaultVolumeCount"
                              ]
                            }
                          ]
                        },
                        "VolumeType": "gp3"
                      }
                    },
                    {
                      "DeviceName": "/dev/xvdbc",
                      "Ebs": {
                        "DeleteOnTermination": true,
                        "Encrypted": {
                          "Fn::If": [
                            "DBUseEncryption",
                            true,
                            false
                          ]
                        },
                        "VolumeSize": {
                          "Fn::FindInMap": [
                            "DBStorageSizes",
                            {
                              "Ref": "DBStorageSize"
                            },
                            {
                              "Fn::FindInMap": [
                                "DBInstanceStorageTypes",
                                {
                                  "Ref": "DBInstanceStorageType"
                                },
                                "DefaultVolumeCount"
                              ]
                            }
                          ]
                        },
                        "VolumeType": "gp3"
                      }
                    },
                    {
                      "DeviceName": "/dev/xvdbd",
                      "Ebs": {
                        "DeleteOnTermination": true,
                        "Encrypted": {
                          "Fn::If": [
                            "DBUseEncryption",
                            true,
                            false
                          ]
                        },
                        "VolumeSize": {
                          "Fn::FindInMap": [
                            "DBStorageSizes",
                            {
                              "Ref": "DBStorageSize"
                            },
                            {
                              "Fn::FindInMap": [
                                "DBInstanceStorageTypes",
                                {
                                  "Ref": "DBInstanceStorageType"
                                },
                                "DefaultVolumeCount"
                              ]
                            }
                          ]
                        },
                        "VolumeType": "gp3"
                      }
                    },
                    {
                      "DeviceName": "/dev/xvdbe",
                      "Ebs": {
                        "DeleteOnTermination": true,
                        "Encrypted": {
                          "Fn::If": [
                            "DBUseEncryption",
                            true,
                            false
                          ]
                        },
                        "VolumeSize": {
                          "Fn::FindInMap": [
                            "DBStorageSizes",
                            {
                              "Ref": "DBStorageSize"
                            },
                            {
                              "Fn::FindInMap": [
                                "DBInstanceStorageTypes",
                                {
                                  "Ref": "DBInstanceStorageType"
                                },
                                "DefaultVolumeCount"
                              ]
                            }
                          ]
                        },
                        "VolumeType": "gp3"
                      }
                    },
                    {
                      "DeviceName": "/dev/xvdbf",
                      "Ebs": {
                        "DeleteOnTermination": true,
                        "Encrypted": {
                          "Fn::If": [
                            "DBUseEncryption",
                            true,
                            false
                          ]
                        },
                        "VolumeSize": {
                          "Fn::FindInMap": [
                            "DBStorageSizes",
                            {
                              "Ref": "DBStorageSize"
                            },
                            {
                              "Fn::FindInMap": [
                                "DBInstanceStorageTypes",
                                {
                                  "Ref": "DBInstanceStorageType"
                                },
                                "DefaultVolumeCount"
                              ]
                            }
                          ]
                        },
                        "VolumeType": "gp3"
                      }
                    },
                    {
                      "DeviceName": "/dev/xvdbg",
                      "Ebs": {
                        "DeleteOnTermination": true,
                        "Encrypted": {
                          "Fn::If": [
                            "DBUseEncryption",
                            true,
                            false
                          ]
                        },
                        "VolumeSize": {
                          "Fn::FindInMap": [
                            "DBStorageSizes",
                            {
                              "Ref": "DBStorageSize"
                            },
                            {
                              "Fn::FindInMap": [
                                "DBInstanceStorageTypes",
                                {
                                  "Ref": "DBInstanceStorageType"
                                },
                                "DefaultVolumeCount"
                              ]
                            }
                          ]
                        },
                        "VolumeType": "gp3"
                      }
                    },
                    {
                      "DeviceName": "/dev/xvdbh",
                      "Ebs": {
                        "DeleteOnTermination": true,
                        "Encrypted": {
                          "Fn::If": [
                            "DBUseEncryption",
                            true,
                            false
                          ]
                        },
                        "VolumeSize": {
                          "Fn::FindInMap": [
                            "DBStorageSizes",
                            {
                              "Ref": "DBStorageSize"
                            },
                            {
                              "Fn::FindInMap": [
                                "DBInstanceStorageTypes",
                                {
                                  "Ref": "DBInstanceStorageType"
                                },
                                "DefaultVolumeCount"
                              ]
                            }
                          ]
                        },
                        "VolumeType": "gp3"
                      }
                    },
                    {
                      "DeviceName": "/dev/xvdbi",
                      "Ebs": {
                        "DeleteOnTermination": true,
                        "Encrypted": {
                          "Fn::If": [
                            "DBUseEncryption",
                            true,
                            false
                          ]
                        },
                        "VolumeSize": {
                          "Fn::FindInMap": [
                            "DBStorageSizes",
                            {
                              "Ref": "DBStorageSize"
                            },
                            {
                              "Fn::FindInMap": [
                                "DBInstanceStorageTypes",
                                {
                                  "Ref": "DBInstanceStorageType"
                                },
                                "DefaultVolumeCount"
                              ]
                            }
                          ]
                        },
                        "VolumeType": "gp3"
                      }
                    },
                    {
                      "DeviceName": "/dev/xvdbj",
                      "Ebs": {
                        "DeleteOnTermination": true,
                        "Encrypted": {
                          "Fn::If": [
                            "DBUseEncryption",
                            true,
                            false
                          ]
                        },
                        "VolumeSize": {
                          "Fn::FindInMap": [
                            "DBStorageSizes",
                            {
                              "Ref": "DBStorageSize"
                            },
                            {
                              "Fn::FindInMap": [
                                "DBInstanceStorageTypes",
                                {
                                  "Ref": "DBInstanceStorageType"
                                },
                                "DefaultVolumeCount"
                              ]
                            }
                          ]
                        },
                        "VolumeType": "gp3"
                      }
                    },
                    {
                      "DeviceName": "/dev/xvdbk",
                      "Ebs": {
                        "DeleteOnTermination": true,
                        "Encrypted": {
                          "Fn::If": [
                            "DBUseEncryption",
                            true,
                            false
                          ]
                        },
                        "VolumeSize": {
                          "Fn::FindInMap": [
                            "DBStorageSizes",
                            {
                              "Ref": "DBStorageSize"
                            },
                            {
                              "Fn::FindInMap": [
                                "DBInstanceStorageTypes",
                                {
                                  "Ref": "DBInstanceStorageType"
                                },
                                "DefaultVolumeCount"
                              ]
                            }
                          ]
                        },
                        "VolumeType": "gp3"
                      }
                    },
                    {
                      "DeviceName": "/dev/xvdbl",
                      "Ebs": {
                        "DeleteOnTermination": true,
                        "Encrypted": {
                          "Fn::If": [
                            "DBUseEncryption",
                            true,
                            false
                          ]
                        },
                        "VolumeSize": {
                          "Fn::FindInMap": [
                            "DBStorageSizes",
                            {
                              "Ref": "DBStorageSize"
                            },
                            {
                              "Fn::FindInMap": [
                                "DBInstanceStorageTypes",
                                {
                                  "Ref": "DBInstanceStorageType"
                                },
                                "DefaultVolumeCount"
                              ]
                            }
                          ]
                        },
                        "VolumeType": "gp3"
                      }
                    }
                  ]
                ]
              }
            ]
          },
          "CapacityReservationSpecification": {
            "CapacityReservationTarget": {
              "CapacityReservationId": {
                "Fn::If": [
                  "DBUseCapacityReservation",
                  {
                    "Ref": "DBCapacityReservation"
                  },
                  {
                    "Ref": "AWS::NoValue"
                  }
                ]
              }
            }
          },
          "IamInstanceProfile": {
            "Arn": {
              "Fn::GetAtt": [
                "DBMppInstanceProfile",
                "Arn"
              ]
            }
          },
          "ImageId": {
            "Fn::FindInMap": [
              "DBAMIs",
              {
                "Ref": "AWS::Region"
              },
              {
                "Fn::FindInMap": [
                  "DBAMIVersions",
                  {
                    "Ref": "DBVersion"
                  },
                  "Version"
                ]
              }
            ]
          },
          "InstanceType": {
            "Fn::FindInMap": [
              "DBInstanceStorageTypes",
              {
                "Ref": "DBInstanceStorageType"
              },
              "InstanceType"
            ]
          },
          "KeyName": {
            "Ref": "KeyName"
          },
          "SecurityGroupIds": [
            {
              "Fn::GetAtt": [
                "DBSecurityGroup",
                "GroupId"
              ]
            },
            {
              "Fn::GetAtt": [
                "EcosystemSecurityGroup",
                "GroupId"
              ]
            }
          ],
          "UserData": {
            "Fn::Base64": {
              "Fn::Join": [
                "",
                [
                  "#!/bin/bash\n",
                  "PROXYSERVER=",
                  {
                    "Ref": "ProxyServerURL"
                  },
                  "\n",
                  "[[ -n $PROXYSERVER ]] && CFNPARAM=\" --http-proxy $PROXYSERVER --https-proxy $PROXYSERVER\" || CFNPARAM= \n",
                  "[[ -n $PROXYSERVER ]] && echo 'Configuring System to use Proxy Server...[RUNNING]' || echo 'Skipping Proxy Server Configuration...[DONE]' \n",
                  "[[ -n $PROXYSERVER ]] && echo \"OK\" | yast2 proxy set {http,https,ftp}=$PROXYSERVER noproxy=localhost,127.0.0.1,169.254.169.254,169.254.169.123,169.254.170.2 \n",
                  "[[ -n $PROXYSERVER ]] && echo \"OK\" | yast2 proxy enable \n",
                  "source /etc/profile\n",
                  "SLESVERSION=\n",
                  "if [ -e /etc/SuSE-release ]; then\n",
                  "    SLESVERSION=$(cat /etc/SuSE-release | grep VERSION | awk '{print $3}')\n",
                  "elif [ -e /etc/os-release ]; then\n",
                  "    SLESVERSION=$(source /etc/os-release; echo ${VERSION:0:2})\n",
                  "else\n",
                  "    echo \"Unknown OS\"\n",
                  "    exit 1\n",
                  "fi\n",
                  "\n",
                  "check_error_signal()\n",
                  "{\n",
                  "    RC=$?\n",
                  "    if [ ${RC} -ne 0 ]; then\n",
                  "    ",
                  "file=\"/usr/local/bin/imdsv2\"\n\n",
                  "# Check if the directory exists\n",
                  "if [ -e \"${file}\" ]; then ",
                  "\n",
                  "    export command=${file}\n",
                  "else",
                  "\n",
                  "    export command=\"curl -s\"\n",
                  "fi",
                  "\n",
                  "instance_id=$(${command} http://169.254.169.254/latest/meta-data/instance-id; echo)\n",
                  "    tdc-log",
                  " --file /var/log/cloud-init-output.log",
                  " --region ",
                  {
                    "Ref": "AWS::Region"
                  },
                  " --group Teradata/DBS/",
                  {
                    "Ref": "AWS::StackName"
                  },
                  " --stream cloud-init-output.log.error",
                  "-",
                  "${instance_id}",
                  "\n",
                  "    ",
                  "if command -v tdc-cfn-signal &> /dev/null\n",
                  "then\n",
                  "tdc-cfn-signal -e ${RC}",
                  " --stack ",
                  {
                    "Ref": "AWS::StackName"
                  },
                  " --region ",
                  {
                    "Ref": "AWS::Region"
                  },
                  " --resource ",
                  "DBAutoscalingGroup",
                  "\nelse\n",
                  "cfn-signal -e ${RC}",
                  " --stack ",
                  {
                    "Ref": "AWS::StackName"
                  },
                  " --region ",
                  {
                    "Ref": "AWS::Region"
                  },
                  " --resource ",
                  "DBAutoscalingGroup",
                  "\nfi\n",
                  "        exit ${RC}\n",
                  "    fi\n",
                  "}\n",
                  "tdc-log --init",
                  " --region ",
                  {
                    "Ref": "AWS::Region"
                  },
                  " --group Teradata/DBS/",
                  {
                    "Ref": "AWS::StackName"
                  },
                  "\n",
                  "if [ -n '",
                  {
                    "Ref": "Timezone"
                  },
                  "' ]; then\n    tdc-timezone '",
                  {
                    "Ref": "Timezone"
                  },
                  "'\n",
                  "fi\n",
                  "/usr/local/bin/tdc-info -updateMOTD short\n",
                  "\n",
                  "tdc-disable-autoscale\n",
                  "check_error_signal\n",
                  "\n",
                  "\n",
                  "tdc-network-configure",
                  " --nodes ",
                  {
                    "Ref": "DBNodeCount"
                  },
                  "",
                  " --systemname '",
                  {
                    "Ref": "DBSystemName"
                  },
                  "'",
                  {
                    "Fn::If": [
                      "DBUseElasticIPs",
                      " --elastic",
                      ""
                    ]
                  },
                  " --unfoldposition ",
                  {
                    "Fn::FindInMap": [
                      "DBUnfoldConfigTypes",
                      {
                        "Ref": "DBUnfoldConfigType"
                      },
                      "UnfoldPosition"
                    ]
                  },
                  "",
                  "\n",
                  "check_error_signal\n",
                  "\n",
                  "PMAID=$(blmd -p)\n",
                  "tdc-ntp -s '",
                  {
                    "Ref": "NTPServers"
                  },
                  "'",
                  "\n",
                  "\n",
                  "tdc-init",
                  " --system_name '",
                  {
                    "Ref": "DBSystemName"
                  },
                  "'",
                  " --dbc_password '",
                  {
                    "Fn::GetAtt": [
                      "DBCPWDEncrypt",
                      "pwd"
                    ]
                  },
                  "'",
                  " --pwd_aws_encrypted",
                  " --force_config",
                  " --kanji_support ",
                  {
                    "Ref": "DBKanjiSupport"
                  },
                  " -g -p -t",
                  "",
                  "",
                  {
                    "Fn::If": [
                      "AMPSUse0",
                      "",
                      {
                        "Fn::Join": [
                          " ",
                          [
                            " --amps_per_subpool",
                            {
                              "Ref": "AMPsPerSubpool"
                            }
                          ]
                        ]
                      }
                    ]
                  },
                  {
                    "Fn::If": [
                      "SubpoolUse0",
                      "",
                      {
                        "Fn::Join": [
                          " ",
                          [
                            " --subpools_per_node",
                            {
                              "Ref": "SubpoolPerClique"
                            }
                          ]
                        ]
                      }
                    ]
                  },
                  {
                    "Fn::If": [
                      "DBTemporalEnabled",
                      " --enable_temporal",
                      ""
                    ]
                  },
                  "\n",
                  "check_error_signal\n",
                  "\n",
                  "\n",
                  "if [ $PMAID = '33' ]; then\n",
                  "    /usr/tdbms/bin/dbscontrol << EOD\n",
                  "m n 1 = t\n",
                  "wr\n",
                  "q\n",
                  "EOD\n",
                  "tpareset -y enable NOS\n",
                  "fi\n",
                  "check_error_signal\n",
                  "\n",
                  "\n",
                  "/usr/local/bin/tdc-nodestart-init --update-file\n",
                  "check_error_signal\n",
                  "\n",
                  "if [ $PMAID = '33' ]; then\n",
                  "    psh /usr/local/bin/tdc-info -updateMOTD short\n",
                  "    if [ '",
                  {
                    "Ref": "DBRowLevelSecurity"
                  },
                  "' = 'yes' ]; then\n",
                  "        tdc-rlsecurity -n\n",
                  "    fi\n",
                  "    if [ '",
                  {
                    "Ref": "DBSecureZones"
                  },
                  "' = 'yes' ]; then\n",
                  "        tdc-securezones -n -p '",
                  {
                    "Fn::GetAtt": [
                      "DBCPWDEncrypt",
                      "pwd"
                    ]
                  },
                  "'",
                  " --pwd_aws_encrypted",
                  "\n",
                  "    fi\n",
                  "    if [ '",
                  0,
                  "' != '0' ]; then\n",
                  "        tdc-feature tim enable --force --tim-size ",
                  0,
                  "\n",
                  "    fi\n",
                  "fi\n",
                  "/usr/local/bin/tdc-ecosystem-ssh --enable\n",
                  "tdc-log --file /var/log/cloud-init-output.log",
                  " --region ",
                  {
                    "Ref": "AWS::Region"
                  },
                  " --group Teradata/DBS/",
                  {
                    "Ref": "AWS::StackName"
                  },
                  " --stream cloud-init-output.log",
                  "-",
                  "$PMAID",
                  "\n",
                  "if [ $PMAID = '33' ]; then\n",
                  "   tdc-log  --file /etc/motd",
                  " --region ",
                  {
                    "Ref": "AWS::Region"
                  },
                  " --group Teradata/DBS/",
                  {
                    "Ref": "AWS::StackName"
                  },
                  " --stream tdc-info",
                  "\nfi\n",
                  "if [ $PMAID = '33' ]; then\n",
                  "\n",
                  "tdc-configssh",
                  " enable",
                  " --user ec2-user\n",
                  "check_error_signal\n",
                  "\n",
                  "fi\n",
                  "if [ -f /usr/lib/python2.7/site-packages/diy_attr/update_ua.pyc ]; then\n",
                  "     python /usr/lib/python2.7/site-packages/diy_attr/update_ua.pyc",
                  " QVBOLzEuMCBUZXJhZGF0YS8xLjAgVmFudGFnZQ==\n",
                  "fi\n",
                  "$CLIENTHANDLER_ROOT/setS3UAString.sh \"APN/1.0 Teradata/1.0 Vantage\"\n",
                  "if command -v tdc-cfn-signal &> /dev/null\n",
                  "then\n",
                  "tdc-cfn-signal -e 0",
                  " --stack ",
                  {
                    "Ref": "AWS::StackName"
                  },
                  " --region ",
                  {
                    "Ref": "AWS::Region"
                  },
                  " --resource ",
                  "DBAutoscalingGroup",
                  "\nelse\n",
                  "cfn-signal -e 0",
                  " --stack ",
                  {
                    "Ref": "AWS::StackName"
                  },
                  " --region ",
                  {
                    "Ref": "AWS::Region"
                  },
                  " --resource ",
                  "DBAutoscalingGroup",
                  "\nfi\n"
                ]
              ]
            }
          }
        },
        "LaunchTemplateName": {
          "Fn::Join": [
            "-",
            [
              {
                "Ref": "AWS::StackName"
              },
              "DBLaunchTemplate"
            ]
          ]
        }
      },
      "Type": "AWS::EC2::LaunchTemplate"
    },
    "DBMppInstanceProfile": {
      "Properties": {
        "Path": "/",
        "Roles": [
          {
            "Ref": "DBMppRole"
          }
        ]
      },
      "Type": "AWS::IAM::InstanceProfile"
    },
    "DBMppRole": {
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": [
                "sts:AssumeRole"
              ],
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "ec2.amazonaws.com",
                  "lambda.amazonaws.com",
                  {
                    "Fn::Join": [
                      ".",
                      [
                        "states",
                        {
                          "Ref": "AWS::Region"
                        },
                        "amazonaws.com"
                      ]
                    ]
                  }
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Policies": [
          {
            "PolicyDocument": {
              "Statement": [
                {
                  "Action": [
                    "ec2:DescribeNetworkInterfaces",
                    "ec2:DescribeSubnets",
                    "ec2:CreateNetworkInterface",
                    "ec2:AttachNetworkInterface",
                    "ec2:DetachNetworkInterface",
                    "ec2:DescribeLaunchTemplateVersions",
                    "ec2:CreateLaunchTemplateVersion",
                    "ec2:DeleteLaunchTemplateVersions",
                    "ec2:DeleteLaunchTemplate",
                    "ec2:CreateLaunchTemplate",
                    "ec2:DescribeLaunchTemplates",
                    "ec2:ModifyLaunchTemplate",
                    "ec2:ModifyNetworkInterfaceAttribute",
                    "ec2:AssignPrivateIpAddresses",
                    "ec2:UnassignPrivateIpAddresses",
                    "ec2:AllocateAddress",
                    "ec2:AssociateAddress",
                    "ec2:DisassociateAddress",
                    "ec2:CreateTags",
                    "ec2:DeleteTags",
                    "ec2:DescribeTags",
                    "ec2:CreateVolume",
                    "ec2:ModifyVolume",
                    "ec2:DescribeVolumes",
                    "ec2:DescribeVolumeAttribute",
                    "ec2:DescribeVolumeStatus",
                    "ec2:DescribeInstances",
                    "ec2:DescribeInstanceStatus",
                    "ec2:ModifyInstanceAttribute",
                    "ec2:CreateImage",
                    "ec2:CopyImage",
                    "ec2:DeregisterImage",
                    "ec2:DescribeImages",
                    "ec2:DeleteSnapshot",
                    "ec2:DescribeSnapshots",
                    "ec2:RunInstances",
                    "ec2:StopInstances",
                    "ec2:StartInstances",
                    "ec2:ReleaseAddress",
                    "ec2:DeleteNetworkInterface",
                    "ec2:CreatePlacementGroup",
                    "ec2:DescribePlacementGroups",
                    "ec2:DeletePlacementGroup",
                    "ec2:CreateSnapshot",
                    "ec2:RegisterImage",
                    "cloudformation:DescribeStacks",
                    "iam:GetRole",
                    "states:StartExecution",
                    "states:StopExecution",
                    "lambda:CreateFunction",
                    "lambda:DeleteFunction",
                    "states:CreateStateMachine",
                    "states:DeleteStateMachine",
                    "states:ListStateMachines",
                    "lambda:InvokeFunction",
                    "autoscaling:DescribeAutoScalingGroups",
                    "autoscaling:DetachInstances",
                    "autoscaling:DescribeLaunchConfigurations",
                    "autoscaling:AttachInstances",
                    "autoscaling:SuspendProcesses",
                    "autoscaling:UpdateAutoScalingGroup",
                    "autoscaling:CreateAutoScalingGroup",
                    "autoscaling:CreateLaunchConfiguration",
                    "autoscaling:DeleteLaunchConfiguration",
                    "autoscaling:DeleteAutoScalingGroup",
                    "autoscaling:DescribeTags",
                    "kms:CreateKey",
                    "kms:Decrypt",
                    "kms:Encrypt",
                    "kms:DisableKey",
                    "kms:CreateAlias",
                    "kms:ListAliases",
                    "kms:ScheduleKeyDeletion",
                    "tag:GetResources",
                    "s3:HeadBucket",
                    "s3:ListAllMyBuckets",
                    "s3:ListBucket",
                    "s3:GetObject",
                    "s3:GetBucketTagging",
                    "s3:GetBucketLocation",
                    "ssm:GetParametersByPath",
                    "ssm:PutParameter",
                    "cloudwatch:PutMetricAlarm",
                    "cloudwatch:DescribeAlarms",
                    "cloudwatch:DeleteAlarms"
                  ],
                  "Effect": "Allow",
                  "Resource": "*"
                },
                {
                  "Action": "sts:AssumeRole",
                  "Effect": "Allow",
                  "NotResource": {
                    "Fn::Join": [
                      "",
                      [
                        "arn:",
                        {
                          "Ref": "AWS::Partition"
                        },
                        ":iam::",
                        {
                          "Ref": "AWS::AccountId"
                        },
                        ":role/*"
                      ]
                    ]
                  }
                },
                {
                  "Action": "cloudformation:SignalResource",
                  "Effect": "Allow",
                  "Resource": {
                    "Fn::Join": [
                      "",
                      [
                        "arn:",
                        {
                          "Ref": "AWS::Partition"
                        },
                        ":cloudformation:",
                        {
                          "Ref": "AWS::Region"
                        },
                        ":",
                        {
                          "Ref": "AWS::AccountId"
                        },
                        ":stack/",
                        {
                          "Ref": "AWS::StackName"
                        },
                        "/*"
                      ]
                    ]
                  }
                },
                {
                  "Action": [
                    "ec2:AttachVolume",
                    "ec2:DetachVolume",
                    "ec2:DeleteVolume"
                  ],
                  "Condition": {
                    "StringEquals": {
                      "ec2:ResourceTag/teradata:stack": {
                        "Ref": "AWS::StackName"
                      }
                    }
                  },
                  "Effect": "Allow",
                  "Resource": "*"
                },
                {
                  "Action": [
                    "logs:DescribeLogGroups",
                    "logs:DescribeLogStreams",
                    "logs:CreateLogGroup",
                    "logs:CreateLogStream",
                    "logs:PutLogEvents"
                  ],
                  "Effect": "Allow",
                  "Resource": {
                    "Fn::Join": [
                      ":",
                      [
                        "arn",
                        {
                          "Ref": "AWS::Partition"
                        },
                        "logs",
                        "*",
                        "*",
                        "*"
                      ]
                    ]
                  }
                },
                {
                  "Action": [
                    "iam:PassRole"
                  ],
                  "Effect": "Allow",
                  "Resource": {
                    "Fn::Join": [
                      "",
                      [
                        "arn:",
                        {
                          "Ref": "AWS::Partition"
                        },
                        ":iam::",
                        {
                          "Ref": "AWS::AccountId"
                        },
                        ":role/",
                        {
                          "Fn::Join": [
                            "-",
                            [
                              {
                                "Ref": "AWS::StackName"
                              },
                              "DBMppRole"
                            ]
                          ]
                        }
                      ]
                    ]
                  }
                },
                {
                  "Action": "ec2:TerminateInstances",
                  "Condition": {
                    "StringEquals": {
                      "ec2:ResourceTag/teradata:stack": {
                        "Ref": "AWS::StackName"
                      }
                    }
                  },
                  "Effect": "Allow",
                  "Resource": "arn:aws:ec2:*:*:instance/*"
                }
              ],
              "Version": "2012-10-17"
            },
            "PolicyName": "tdmpp"
          }
        ],
        "RoleName": {
          "Fn::Join": [
            "-",
            [
              {
                "Ref": "AWS::StackName"
              },
              "DBMppRole"
            ]
          ]
        }
      },
      "Type": "AWS::IAM::Role"
    },
    "DBSecurityGroup": {
      "Properties": {
        "GroupDescription": "Security group for Teradata Vantage",
        "SecurityGroupIngress": [
          {
            "CidrIp": {
              "Ref": "SecurityGroupAccess"
            },
            "FromPort": "22",
            "IpProtocol": "tcp",
            "ToPort": "22"
          },
          {
            "CidrIp": {
              "Ref": "SecurityGroupAccess"
            },
            "FromPort": "1025",
            "IpProtocol": "tcp",
            "ToPort": "1025"
          }
        ],
        "VpcId": {
          "Ref": "VPC"
        }
      },
      "Type": "AWS::EC2::SecurityGroup"
    },
    "DBSecurityGroupSelfRule": {
      "Properties": {
        "GroupId": {
          "Fn::GetAtt": [
            "DBSecurityGroup",
            "GroupId"
          ]
        },
        "IpProtocol": "-1",
        "SourceSecurityGroupId": {
          "Fn::GetAtt": [
            "DBSecurityGroup",
            "GroupId"
          ]
        }
      },
      "Type": "AWS::EC2::SecurityGroupIngress"
    },
    "DBStackCleanUp": {
      "Properties": {
        "Environment": {
          "Variables": {
            "security_group": {
              "Ref": "DBSecurityGroup"
            },
            "td_stack_name": {
              "Ref": "AWS::StackName"
            }
          }
        },
        "Region": {
          "Ref": "AWS::Region"
        },
        "ServiceToken": {
          "Fn::GetAtt": [
            "DBStackCleanupFunction",
            "Arn"
          ]
        }
      },
      "Type": "AWS::CloudFormation::CustomResource"
    },
    "DBStackCleanupFunction": {
      "Properties": {
        "Code": {
          "ZipFile": "import cfnresponse\nimport bz2\nimport base64\nexec(bz2.decompress(base64.b64decode('QlpoOTFBWSZTWZm8bTsABC/fgAAycuf4Gj//34q////6YAqcHd13Wz553trd72jzvejpnvdyinqjQFejQcJTSRoRT9TDJNppqnhGQaT1DaCZDQeoAGmiBDU9NTFT9U8QnqbTUZHqZGgBp6gAA0NCTISGhpqME9RmoG1AMaaRkAMEmokI0jUnkaZJ6m1MBqPUPUBppm1I00AHMCYmgwmTJkyMJgmmmRiYAhgEiRBoE0aCZJ6aTTaiekw0p6TaIyD1BsiQRUIsEZBYMFRUFRBAYjFUjFFFBFEqEhOWa7R7ktDxIVEYp+LQMnaz/rA92ygtNjjw5/HBXPXVtp3DJQbj4lPVWG+LP4YrULTKe3P4kqUipQUXdLx1DDdUKXRWmJ3d2jw0u6xehp+947Ow00mb70d1waBZ5EvgJB/0ilcIxstjRYRQQaOchz+TgMvSWjh2uRwLvFTlDrqurfe/I2mIgwi2k5OePUb33TFE1HFOyljHJCWZkjLHN19VzG0BEwvF6BIXLdOwi/zzr1ixjHVfoqJewU92jK4cJdSANZnyLHi/mgrxaCNXM8JTVeRosqlEaIlFNFqMptStLu2VBSU1tpG/YFYCjDbqK4eBAo/kMaGazZDMq7vlxQ3cr47wWpVILVMb+XKF/B8HHizHLjLPKhl1mVfBHlLVsW6LhEtAMRBXEgslkmkyp+IyfPpPX0fL1zo1031j03TCOWinvp7FAkSgbVprFHsHvvgpqUNutwMio2bGFHB234xAJHarBnOLYy4CjTuJc5U585lhWjkbIMyFEPZZczEc1mdeH627jCdk9K8seuNk/gXr2DzH8ngPdY/f4Dkw+JBrefLVBoHDa1OCAvsCuPI2CpgjZemg1M6TEEkIVJfuRDS/HvO3Z0sbwOw54Nu87dvER0HNbkgZMeuJG0GrkSuO89c05ufRfph48eEboDy88t4HZoDQNUBuy3b8MDSKyQsWBzLTzHAOqV6cep3obtGgyq23b2XnlVd7K8uSswV510qbGkCTEvNLm76n35yyw3z5YXstrlFHNNhY6UF3LmRRvNOnHK8Z7c1ysgMge9NKPfFbos9FZRe967jVhGYBkzUUj7TshTHItNc97Din1ZLcWs6AI8UdbM/Ag/dL9AQQOGMWloeA8fXs4btXtqse8UbExxuh1JooOYRi1hkyigqMnWiVU225lGV1JwXFLb7lDrdQaOKCwIdg1mH3A4gJrgMOl22JeDw4sFyB6rkaCaRo4o6YuqATYo3/JeyeggwoJoJgU2D6pfiARPxrHtk5wy0ZcXE+z04lROMzOVpOVUOhR7lIs+QnKUg+UjCDsyIs8MV3jXuR6RTWNWK86qCQSSk9J+JoyxTG0Pvq00koYucJDVhg8bQ+htvgWXGQn3S7u0xE1nqu2Z2BVAa8jEilx6LU4v2E5p0MiYAFMAOnSEKTRxbUNI2JNWY/Vgvy+VpWsAUfWPmi5u1d3B0L3JxHU7ybil4Mkz6VZSSkxmFMaCYHIK84PeJDu+m1p0UI+2dZ2SrFSuuDdRwQ5catmXMMonpCgXRugzYw5h8PfPI+jzcArGCui7G8wcnkKqhYs0KsNfRd4YIaOS+SPyQz8SoVRIVUocEI8j6V1Orz2P4Q0LiV6D03ZVS7N2RLnYQrSZnEZFFapOL1/sFAkuE3zn1LA3zVhX1P9+Wtmh3B/AkJrneg5ZprPYqxIIxmnz4OG6ExOaTGp+RntG98x/Jx/ANWy+1jZGDcZ2TeEDFyViiOY6aYsfLOmYY86d7NqozwtQrT1mEBPeP0jpRRs9vs5g2chSUHmh1kZJ+eDiHvhVDVZxsP9kI0irY36ti1yETgYYJnsYtWfpLUc1tU1JG43EygbANoZJtnz5QiBDkmQL7Qa1mto6GYft8EE01LtI2MyOVFk8KiNIUACzo+MBUXyv5A7c23X93TjCUQtVfQoUVzFLKLM/Q1HWqSg5FpJS4wBCBtbDOG1UMMuGRV7ZmSihg+YK49SZR/V3BvvXfXfTt+8a5TkM2erbrKGIlkcdkj1tjBM2HcisLz40eZqcrbjfrSgarIgJLtChhetiQmQc/QcTCG4PkSG97auzo12dLR0u1irFe9NgGAsRDZVWeTLErmJWGQIsEuw9yaJHl49PX65cl6BHr5dRPpYQoXEMiX6HeHRI6NNDaG09BD0EcU0l9NXzZCaxYWXoM8xXU6OGHJkML6RFW1cGFDrGEoECgrC4LJ8xINFAOB2cI1NYEFqQrQ0JE0NioYN3houA0HtRYEjBzO4ickozFIuMtnh8H4J95wQUNH1aQ4VOM1o3InzuMuciMZdojgVBRXU6TM2xMqjuSVRkmatuU5aBAkTpS+GJjVoLRgWMNAlMK2YsHZS1DzW6LAuz3iBcCATGk1VRU8kwUmreGywpSKi3yOIsD6VdhT616hIyNRRCpOQhY4niaz/HXxXmbfSa1UVNVNtg3dHCqU8sdr1BBAb8oCXmmEkGRE0C5A1/RlSqzoFi2ZKsvcwbbIJXQVmYwMqgFlMlIF4K9U1ms5vEwmZ5p3GAWITENO8ISuorUQIrEhVFXWzrw4XKgg23DTGwuLhiRMkTGNqAkjM64e+A36JJwnKZIA5sOzn4ned/wsQNoE/M1ZHHWMaQ4CIYGV6WCkHqEpC93nmaJHBovhjfusDd7BFYi5WdQoI4Kxa2b0nuwxEjQOAdnchtXsbEPmvzWa6ayfTrUUC8SvWvvG8USgVSSUxA2DMRtpBDFdOsJsGGewsVeBbGK7/KV6buZzIcFdefXQ3TKNkh0ga75vkESE1CRby7g4B7UH6iYxr8gtVF46SwEuxd31XGt6DEisoCevqjIk9RiyiXNKwOblXQ9Q5CEJRYVIjOsmE7tKkzO+sR6BFQEtVKNtQDQa/R4Wc9vcmLYLvWrt5+Aa5fx9qDeAgaegxjbPSWGb/vohe/ZabTkUtLOza2OFpxVIlkocDcM1IK5k5+bSykcGwDGFluGhyMGKhM5HqCztYbz7e3bwzHFLBK0HcFKt1a51QJtBjkW6UchG7mQG3pqIeDd9z3IMW2mhtlSNyrAGFZAjcZSWxkvYB82XrKnkse4dSQ0MRqWnos7dofcPEPI6sLxFlj3sA5jRxBh7VPpvSXFy1Y32bRQhF5oY4BCDcF128jARUkeQwFsYUURADu7SNj63LGsrvBYm1mskMJI56H2ZkkdvwMvk5/xdyRThQkJm8bTs')))"
        },
        "Environment": {
          "Variables": {
            "commit_id": "66b1cf49df9dff6fe193e42cdd7ee8ae2de87e93\n",
            "security_group": {
              "Ref": "DBSecurityGroup"
            },
            "td_stack_name": {
              "Ref": "AWS::StackName"
            }
          }
        },
        "Handler": "index.handler",
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "DBMppRole",
            "Arn"
          ]
        },
        "Runtime": "python3.11",
        "Timeout": 300
      },
      "Type": "AWS::Lambda::Function"
    },
    "EcosystemSecurityGroup": {
      "Properties": {
        "GroupDescription": "Security group for Teradata Ecosystem",
        "SecurityGroupIngress": [],
        "VpcId": {
          "Ref": "VPC"
        }
      },
      "Type": "AWS::EC2::SecurityGroup"
    },
    "EcosystemSecurityGroupSelfRule": {
      "Properties": {
        "GroupId": {
          "Fn::GetAtt": [
            "EcosystemSecurityGroup",
            "GroupId"
          ]
        },
        "IpProtocol": "-1",
        "SourceSecurityGroupId": {
          "Fn::GetAtt": [
            "EcosystemSecurityGroup",
            "GroupId"
          ]
        }
      },
      "Type": "AWS::EC2::SecurityGroupIngress"
    },
    "PSIMAutoscalingGroup": {
      "CreationPolicy": {
        "ResourceSignal": {
          "Count": {
            "Ref": "PSIMNodeCount"
          },
          "Timeout": "PT30M"
        }
      },
      "Properties": {
        "DesiredCapacity": {
          "Ref": "PSIMNodeCount"
        },
        "HealthCheckGracePeriod": 3600,
        "LaunchTemplate": {
          "LaunchTemplateId": {
            "Ref": "PSIMLaunchTemplate"
          },
          "Version": {
            "Fn::GetAtt": [
              "PSIMLaunchTemplate",
              "LatestVersionNumber"
            ]
          }
        },
        "MaxSize": {
          "Ref": "PSIMNodeCount"
        },
        "MinSize": {
          "Ref": "PSIMNodeCount"
        },
        "Tags": {
          "Fn::GetAtt": [
            "ParseTagsLambdaExecutionPsimAsg",
            "autoscaling_tags"
          ]
        },
        "VPCZoneIdentifier": [
          {
            "Ref": "PublicSubnet"
          }
        ]
      },
      "Type": "AWS::AutoScaling::AutoScalingGroup"
    },
    "PSIMInstanceProfile": {
      "Properties": {
        "Path": "/",
        "Roles": [
          {
            "Ref": "PSIMRole"
          }
        ]
      },
      "Type": "AWS::IAM::InstanceProfile"
    },
    "PSIMLaunchTemplate": {
      "Properties": {
        "LaunchTemplateData": {
          "BlockDeviceMappings": [
            {
              "DeviceName": "/dev/sda1",
              "Ebs": {
                "VolumeType": "gp3"
              }
            }
          ],
          "IamInstanceProfile": {
            "Arn": {
              "Fn::GetAtt": [
                "PSIMInstanceProfile",
                "Arn"
              ]
            }
          },
          "ImageId": {
            "Fn::FindInMap": [
              "PSIMAMIs",
              {
                "Ref": "AWS::Region"
              },
              "AMI"
            ]
          },
          "InstanceType": {
            "Ref": "PSIMInstanceType"
          },
          "KeyName": {
            "Ref": "KeyName"
          },
          "SecurityGroupIds": [
            {
              "Fn::GetAtt": [
                "PSIMSecurityGroup",
                "GroupId"
              ]
            },
            {
              "Fn::GetAtt": [
                "EcosystemSecurityGroup",
                "GroupId"
              ]
            }
          ],
          "UserData": {
            "Fn::Base64": {
              "Fn::Join": [
                "",
                [
                  "#!/bin/bash\n",
                  "PROXYSERVER=",
                  {
                    "Ref": "ProxyServerURL"
                  },
                  "\n",
                  "[[ -n $PROXYSERVER ]] && CFNPARAM=\" --http-proxy $PROXYSERVER --https-proxy $PROXYSERVER\" || CFNPARAM= \n",
                  "[[ -n $PROXYSERVER ]] && echo 'Configuring System to use Proxy Server...[RUNNING]' || echo 'Skipping Proxy Server Configuration...[DONE]' \n",
                  "[[ -n $PROXYSERVER ]] && echo \"OK\" | yast2 proxy set {http,https,ftp}=$PROXYSERVER noproxy=localhost,127.0.0.1,169.254.169.254,169.254.169.123,169.254.170.2 \n",
                  "[[ -n $PROXYSERVER ]] && echo \"OK\" | yast2 proxy enable \n",
                  "source /etc/profile\n",
                  "\n",
                  "region=`curl -k http://169.254.169.254/latest/dynamic/instance-identity/document | python -c 'import json,sys;obj=json.load(sys.stdin);print(obj[\"region\"]);'`\n",
                  "psim_tag=`python -c \"import boto3;ec2 = boto3.client('ec2', '${region}');tags = ec2.describe_instances(Filters=[{'Name': 'tag:teradata:type','Values': ['psim',],},],);count=1;\n",
                  "for instances in tags['Reservations']:\n",
                  "   for i in instances['Instances']:\n",
                  "      state=i['State']\n",
                  "      instance_state=state['Name']\n",
                  "      instance_id=i['InstanceId']\n",
                  "      for t in i['Tags']:\n",
                  "          if t['Key']=='Name' and instance_state == 'running':\n",
                  "              instance_name=t['Value']\n",
                  "              print(instance_name)\n",
                  "              if '-PSIM-01' in instance_name or '-PSIM-02' in instance_name:\n",
                  "                  continue\n",
                  "              instance_name=instance_name+'-0'+str(count)\n",
                  "              result=ec2.create_tags(Resources=[instance_id,],Tags=[{'Key': 'Name','Value': instance_name}])\n",
                  "              print(result)\n",
                  "              count=count+1\"`\n",
                  "/usr/local/bin/tdc-disable-autoscale\n",
                  "/usr/local/bin/tdc-ecosystem-ssh --enable\n",
                  "if command -v tdc-cfn-signal &> /dev/null\n",
                  "then\n",
                  "tdc-cfn-signal -e 0",
                  " --stack ",
                  {
                    "Ref": "AWS::StackName"
                  },
                  " --region ",
                  {
                    "Ref": "AWS::Region"
                  },
                  " --resource ",
                  "PSIMAutoscalingGroup",
                  "\nelse\n",
                  "cfn-signal -e 0",
                  " --stack ",
                  {
                    "Ref": "AWS::StackName"
                  },
                  " --region ",
                  {
                    "Ref": "AWS::Region"
                  },
                  " --resource ",
                  "PSIMAutoscalingGroup",
                  "\nfi\n"
                ]
              ]
            }
          }
        },
        "LaunchTemplateName": {
          "Fn::Join": [
            "-",
            [
              {
                "Ref": "AWS::StackName"
              },
              "PSIMLaunchTemplate"
            ]
          ]
        }
      },
      "Type": "AWS::EC2::LaunchTemplate"
    },
    "PSIMRole": {
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": [
                "sts:AssumeRole"
              ],
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "ec2.amazonaws.com"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Policies": [
          {
            "PolicyDocument": {
              "Statement": [
                {
                  "Action": [
                    "ec2:DescribeNetworkInterfaces",
                    "ec2:CreateTags",
                    "ec2:DescribeTags",
                    "ec2:CreateVolume",
                    "ec2:DescribeInstances",
                    "ec2:DescribeInstanceStatus",
                    "ec2:ModifyInstanceAttribute",
                    "ec2:CreateImage",
                    "ec2:DeregisterImage",
                    "ec2:DescribeImages",
                    "ec2:RunInstances",
                    "ec2:TerminateInstances",
                    "ec2:StopInstances",
                    "ec2:StartInstances",
                    "iam:PassRole",
                    "autoscaling:DescribeAutoScalingGroups",
                    "autoscaling:DescribeLaunchConfigurations",
                    "autoscaling:DetachInstances",
                    "autoscaling:AttachInstances",
                    "autoscaling:SuspendProcesses",
                    "autoscaling:UpdateAutoscalingGroup",
                    "cloudformation:SignalResource"
                  ],
                  "Effect": "Allow",
                  "Resource": "*"
                }
              ],
              "Version": "2012-10-17"
            },
            "PolicyName": "smmpp"
          }
        ]
      },
      "Type": "AWS::IAM::Role"
    },
    "PSIMSecurityGroup": {
      "Properties": {
        "GroupDescription": "Security group for Teradata PSIM",
        "SecurityGroupIngress": [
          {
            "CidrIp": {
              "Ref": "SecurityGroupAccess"
            },
            "FromPort": "22",
            "IpProtocol": "tcp",
            "ToPort": "22"
          },
          {
            "CidrIp": {
              "Ref": "SecurityGroupAccess"
            },
            "FromPort": "1080",
            "IpProtocol": "tcp",
            "ToPort": "1080"
          },
          {
            "CidrIp": {
              "Ref": "SecurityGroupAccess"
            },
            "FromPort": "1443",
            "IpProtocol": "tcp",
            "ToPort": "1443"
          },
          {
            "CidrIp": {
              "Ref": "SecurityGroupAccess"
            },
            "FromPort": "5988",
            "IpProtocol": "tcp",
            "ToPort": "5999"
          },
          {
            "CidrIp": {
              "Ref": "SecurityGroupAccess"
            },
            "FromPort": "7700",
            "IpProtocol": "tcp",
            "ToPort": "7730"
          },
          {
            "CidrIp": {
              "Ref": "SecurityGroupAccess"
            },
            "FromPort": "7754",
            "IpProtocol": "tcp",
            "ToPort": "7759"
          },
          {
            "CidrIp": {
              "Ref": "SecurityGroupAccess"
            },
            "FromPort": "7759",
            "IpProtocol": "udp",
            "ToPort": "7759"
          },
          {
            "CidrIp": {
              "Ref": "SecurityGroupAccess"
            },
            "FromPort": "9981",
            "IpProtocol": "tcp",
            "ToPort": "9981"
          },
          {
            "CidrIp": {
              "Ref": "SecurityGroupAccess"
            },
            "FromPort": "61618",
            "IpProtocol": "tcp",
            "ToPort": "61618"
          }
        ],
        "VpcId": {
          "Ref": "VPC"
        }
      },
      "Type": "AWS::EC2::SecurityGroup"
    },
    "PSIMSecurityGroupSelfRule": {
      "Properties": {
        "GroupId": {
          "Fn::GetAtt": [
            "PSIMSecurityGroup",
            "GroupId"
          ]
        },
        "IpProtocol": "-1",
        "SourceSecurityGroupId": {
          "Fn::GetAtt": [
            "PSIMSecurityGroup",
            "GroupId"
          ]
        }
      },
      "Type": "AWS::EC2::SecurityGroupIngress"
    },
    "ParseTagsLambda": {
      "Properties": {
        "Code": {
          "ZipFile": "import os\nimport re\nimport logging\nfrom time import sleep\nimport urllib3\nimport json\n\nhttp = urllib3.PoolManager()\n\nSUCCESS = \"SUCCESS\"\nFAILED = \"FAILED\"\n\n\ndef retry_cfn_response(logger, event, context, responseStatus, responseData, physicalResourceId=None, noEcho=False, reason=None):\n    responseUrl = event['ResponseURL']\n\n    logger.info(responseUrl)\n\n    responseBody = {\n        'Status' : responseStatus,\n        'Reason' : reason or \"See the details in CloudWatch Log Stream: {}\".format(context.log_stream_name),\n        'PhysicalResourceId' : physicalResourceId or context.log_stream_name,\n        'StackId' : event['StackId'],\n        'RequestId' : event['RequestId'],\n        'LogicalResourceId' : event['LogicalResourceId'],\n        'NoEcho' : noEcho,\n        'Data' : responseData\n    }\n\n    json_responseBody = json.dumps(responseBody)\n\n    logger.info(\"Response body:\")\n    logger.info(json_responseBody)\n\n    headers = {\n        'content-type' : '',\n        'content-length' : str(len(json_responseBody))\n    }\n\n    tries = 10\n    while tries:\n        try:\n            response = http.request('PUT', responseUrl, headers=headers, body=json_responseBody)\n            status = response.status\n            logger.info(\"Status code: %s\", status)\n            if 200 == status:\n                return True\n        except Exception as e:\n            logger.exception(\"Failed executing HTTP request\")\n            sleep(10)\n        tries -= 1\n    return False\n\n\n\n_TAG_PARAM_STRING_EVENT_KEY = \"tags_param\"\n_EXISTING_TAGS_EVENT_KEY = \"existing_tags\"\n\n_RESPONSE_AUTOSCALING_TAG_KEY = \"autoscaling_tags\"\n_RESPONSE_INSTANCE_TAG_KEY = \"instance_tags\"\n\n\ndef handler(event, context):\n    response_dict = {}\n\n    logger = logging.getLogger()\n    logger.setLevel(logging.INFO)\n\n    try:\n        if event.get('RequestType') == 'Delete':\n            retry_cfn_response(logger, event, context, SUCCESS, responseData={})\n            return\n\n        logger.info(\"event {0}\".format(event))\n        response_dict = {\n            _RESPONSE_AUTOSCALING_TAG_KEY: [],\n            _RESPONSE_INSTANCE_TAG_KEY: []\n        }\n\n        try:\n            existing_tags = event['ResourceProperties'][_EXISTING_TAGS_EVENT_KEY]\n            for tag_dict in existing_tags:\n                response_dict[_RESPONSE_AUTOSCALING_TAG_KEY].append(tag_dict)\n                response_dict[_RESPONSE_INSTANCE_TAG_KEY].append(tag_dict)\n        except:\n            logger.exception(\"exception hit adding existing tags\")\n\n        tags_string = os.environ.get(_TAG_PARAM_STRING_EVENT_KEY, \"\")\n\n        # parse custom key string and generate list of key value pairs\n        result = re.findall(\"\\s*([^,]+)\\s*:\\s*([^,]+)\\s*\", tags_string)\n\n        # generate autoscaling and instance tag dicts\n        for key, value in result:\n            response_dict[_RESPONSE_AUTOSCALING_TAG_KEY].append(\n                {\n                    \"Key\": key,\n                    \"Value\": value,\n                    \"PropagateAtLaunch\": \"true\"\n                }\n            )\n            response_dict[_RESPONSE_INSTANCE_TAG_KEY].append(\n                {\n                    \"Key\": key,\n                    \"Value\": value,\n                }\n            )\n\n    finally:\n        logger.info(\"response dict {0}\".format(response_dict))\n        retry_cfn_response(logger, event, context, SUCCESS, responseData=response_dict)"
        },
        "Environment": {
          "Variables": {
            "tags_param": {
              "Ref": "CustomTagParam"
            }
          }
        },
        "Handler": "index.handler",
        "Role": {
          "Fn::GetAtt": [
            "CustomTagIamRole",
            "Arn"
          ]
        },
        "Runtime": "python3.11",
        "Timeout": 30
      },
      "Type": "AWS::Lambda::Function"
    },
    "ParseTagsLambdaExecutionPsimAsg": {
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "ParseTagsLambda",
            "Arn"
          ]
        },
        "existing_tags": [
          {
            "Key": "Name",
            "PropagateAtLaunch": "true",
            "Value": {
              "Fn::Join": [
                "-",
                [
                  {
                    "Ref": "AWS::StackName"
                  },
                  "PSIM"
                ]
              ]
            }
          },
          {
            "Key": "teradata:stack",
            "PropagateAtLaunch": "true",
            "Value": {
              "Ref": "AWS::StackName"
            }
          },
          {
            "Key": "teradata:type",
            "PropagateAtLaunch": "true",
            "Value": "psim"
          }
        ]
      },
      "Type": "AWS::CloudFormation::CustomResource"
    },
    "ParseTagsLambdaExecutionTpaAsg": {
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "ParseTagsLambda",
            "Arn"
          ]
        },
        "existing_tags": [
          {
            "Key": "Name",
            "PropagateAtLaunch": "true",
            "Value": {
              "Fn::Join": [
                "-",
                [
                  {
                    "Ref": "AWS::StackName"
                  },
                  "DBS"
                ]
              ]
            }
          },
          {
            "Key": "teradata:stack",
            "PropagateAtLaunch": "true",
            "Value": {
              "Ref": "AWS::StackName"
            }
          },
          {
            "Key": "teradata:type",
            "PropagateAtLaunch": "true",
            "Value": "tpa"
          }
        ]
      },
      "Type": "AWS::CloudFormation::CustomResource"
    },
    "ParseTagsLambdaExecutionVp": {
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "ParseTagsLambda",
            "Arn"
          ]
        },
        "existing_tags": [
          {
            "Key": "Name",
            "Value": {
              "Fn::Join": [
                "-",
                [
                  {
                    "Ref": "AWS::StackName"
                  },
                  "Viewpoint"
                ]
              ]
            }
          },
          {
            "Key": "teradata:stack",
            "Value": {
              "Ref": "AWS::StackName"
            }
          },
          {
            "Key": "teradata:type",
            "Value": "vp"
          }
        ]
      },
      "Type": "AWS::CloudFormation::CustomResource"
    },
    "VPInstance": {
      "CreationPolicy": {
        "ResourceSignal": {
          "Count": 1,
          "Timeout": "PT1H"
        }
      },
      "DependsOn": [
        "DBAutoscalingGroup",
        "PSIMAutoscalingGroup"
      ],
      "Properties": {
        "BlockDeviceMappings": [
          {
            "DeviceName": "/dev/sda1",
            "Ebs": {
              "VolumeType": "gp3"
            }
          },
          {
            "DeviceName": "/dev/sdb",
            "Ebs": {
              "VolumeType": "gp3"
            }
          }
        ],
        "IamInstanceProfile": {
          "Ref": "DBMppInstanceProfile"
        },
        "ImageId": {
          "Fn::FindInMap": [
            "VPAMIs",
            {
              "Ref": "AWS::Region"
            },
            "AMI"
          ]
        },
        "InstanceType": {
          "Ref": "VPInstanceType"
        },
        "KeyName": {
          "Ref": "KeyName"
        },
        "Monitoring": true,
        "SecurityGroupIds": [
          {
            "Ref": "VPSecurityGroup"
          },
          {
            "Ref": "EcosystemSecurityGroup"
          }
        ],
        "SubnetId": {
          "Ref": "PublicSubnet"
        },
        "Tags": {
          "Fn::GetAtt": [
            "ParseTagsLambdaExecutionVp",
            "instance_tags"
          ]
        },
        "UserData": {
          "Fn::Base64": {
            "Fn::Join": [
              "",
              [
                "#!/bin/bash\n",
                "PROXYSERVER=",
                {
                  "Ref": "ProxyServerURL"
                },
                "\n",
                "[[ -n $PROXYSERVER ]] && CFNPARAM=\" --http-proxy $PROXYSERVER --https-proxy $PROXYSERVER\" || CFNPARAM= \n",
                "[[ -n $PROXYSERVER ]] && echo 'Configuring System to use Proxy Server...[RUNNING]' || echo 'Skipping Proxy Server Configuration...[DONE]' \n",
                "[[ -n $PROXYSERVER ]] && echo \"OK\" | yast2 proxy set {http,https,ftp}=$PROXYSERVER noproxy=localhost,127.0.0.1,169.254.169.254,169.254.169.123,169.254.170.2 \n",
                "[[ -n $PROXYSERVER ]] && echo \"OK\" | yast2 proxy enable \n",
                "source /etc/profile\n",
                "if [ -n '",
                {
                  "Ref": "Timezone"
                },
                "' ]; then\n    tdc-timezone '",
                {
                  "Ref": "Timezone"
                },
                "'\n",
                "fi\n",
                "/usr/local/bin/tdc-ecosystem-ssh --enable\n",
                "check_error_signal()\n",
                "{\n",
                "    RC=$?\n",
                "    if [ ${RC} -ne 0 ]; then\n",
                "    ",
                "file=\"/usr/local/bin/imdsv2\"\n\n",
                "# Check if the directory exists\n",
                "if [ -e \"${file}\" ]; then ",
                "\n",
                "    export command=${file}\n",
                "else",
                "\n",
                "    export command=\"curl -s\"\n",
                "fi",
                "\n",
                "instance_id=$(${command} http://169.254.169.254/latest/meta-data/instance-id; echo)\n",
                "    tdc-log-base",
                " --file /var/log/cloud-init-output.log",
                " --region ",
                {
                  "Ref": "AWS::Region"
                },
                " --group Teradata/DBS/",
                {
                  "Ref": "AWS::StackName"
                },
                " --stream cloud-init-output.log.error",
                "-",
                "${instance_id}",
                "\n",
                "    ",
                "if command -v tdc-cfn-signal &> /dev/null\n",
                "then\n",
                "tdc-cfn-signal -e ${RC}",
                " --stack ",
                {
                  "Ref": "AWS::StackName"
                },
                " --region ",
                {
                  "Ref": "AWS::Region"
                },
                " --resource ",
                "VPInstance",
                "\nelse\n",
                "cfn-signal -e ${RC}",
                " --stack ",
                {
                  "Ref": "AWS::StackName"
                },
                " --region ",
                {
                  "Ref": "AWS::Region"
                },
                " --resource ",
                "VPInstance",
                "\nfi\n",
                "        exit ${RC}\n",
                "    fi\n",
                "}\n",
                "SLESVERSION=\n",
                "if [ -e /etc/SuSE-release ]; then\n",
                "    SLESVERSION=$(cat /etc/SuSE-release | grep VERSION | awk '{print $3}')\n",
                "elif [ -e /etc/os-release ]; then\n",
                "    SLESVERSION=$(source /etc/os-release; echo ${VERSION:0:2})\n",
                "else\n",
                "    echo \"Unknown OS\"\n",
                "    exit 1\n",
                "fi\n",
                "\n",
                "if [ \"${SLESVERSION}\" = \"15\" ]; then python_cmd=\"python3.11\"; else python_cmd=\"python3\"; fi\n",
                "cd /var/opt/teradata/tdc-orchestration || exit 1\n",
                "/usr/bin/env ${python_cmd} aws_generate_inventory.py",
                "\n",
                "check_error_signal\n",
                "\n",
                "/usr/bin/env ${python_cmd} aws_generate_facts.py",
                " --inventory hosts --output group_vars/all\n",
                "check_error_signal\n",
                "\n",
                "sed -i \"s/version: \\\"{{ tdversion }}\\\"/version: \\\"16.20\\\"/g\" /var/opt/teradata/tdc-orchestration/roles/configure_vp_tpa/tasks/main.yml\n",
                "sed -i \"s/60/180/g\" /var/opt/teradata/tdc-orchestration/roles/configure_vp_vp/tasks/main.yml\n",
                "sed -i.bak -e '26,29d' /var/opt/teradata/tdc-orchestration/cleanup.yml \n",
                "sed -i.bak \"s/retries = 6/retries = 30/g\" /var/opt/teradata/tdc-orchestration/ansible.cfg \n",
                "ansible-playbook  -i hosts site.yml",
                " -e system_name='",
                {
                  "Ref": "DBSystemName"
                },
                "'",
                " -e dbc_pass='",
                {
                  "Fn::GetAtt": [
                    "VPPWDEncrypt",
                    "db_dbc_pwd"
                  ]
                },
                "'",
                " -e ntp_server_list='",
                {
                  "Ref": "NTPServers"
                },
                "'",
                " -e system_nickname='",
                {
                  "Ref": "EcoVPSystemNickname"
                },
                "'",
                " -e sm_admin_pass='",
                {
                  "Fn::GetAtt": [
                    "VPPWDEncrypt",
                    "cm_pwd"
                  ]
                },
                "'",
                " -e sm_rest_pass='",
                {
                  "Fn::GetAtt": [
                    "VPPWDEncrypt",
                    "cm_rest_pwd"
                  ]
                },
                "'",
                " -e siteid='",
                {
                  "Ref": "PSIMSiteid"
                },
                "'",
                " -e encrypted_passwords='True'",
                "\n",
                "if command -v tdc-cfn-signal &> /dev/null\n",
                "then\n",
                "tdc-cfn-signal -e $?",
                " --stack ",
                {
                  "Ref": "AWS::StackName"
                },
                " --region ",
                {
                  "Ref": "AWS::Region"
                },
                " --resource ",
                "VPInstance",
                "\nelse\n",
                "cfn-signal -e $?",
                " --stack ",
                {
                  "Ref": "AWS::StackName"
                },
                " --region ",
                {
                  "Ref": "AWS::Region"
                },
                " --resource ",
                "VPInstance",
                "\nfi\n"
              ]
            ]
          }
        }
      },
      "Type": "AWS::EC2::Instance"
    },
    "VPPWDEncrypt": {
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "VPPWDEncryptFunction",
            "Arn"
          ]
        },
        "action": "encrypt",
        "cm_pwd": {
          "Ref": "PSIMPassword"
        },
        "cm_rest_pwd": {
          "Ref": "PSIMRESTPassword"
        },
        "db_dbc_pwd": {
          "Ref": "DBSystemPassword"
        },
        "region": {
          "Ref": "AWS::Region"
        }
      },
      "Type": "AWS::CloudFormation::CustomResource"
    },
    "VPPWDEncryptFunction": {
      "Properties": {
        "Code": {
          "ZipFile": "import cfnresponse\nimport bz2\nimport base64\nexec(bz2.decompress(base64.b64decode('QlpoOTFBWSZTWU++UvUAAiHfgEAyQuf/2j///oq////qUAVZpYaWrF67HGOujbCUSMgmJoMjU9CNMCT2qfqaT1NM0aBA0AJRAE0yNJTPUnqNNPSNGgaAPUAAAaCREIJppNNJ4pjRMU0GTJ6mjZIxGT1NAyHGTJpphMjIGBGJowRhBo0wACCSUEwTCGSbImmRkGmQAAAAAwISGxtjBg0NDaY0mMbBygR3bli/xhQN86gIlnPL2bM6Xxufd+9Pjhj4P9YZ8rp/R12vJxI+9fwfFWDYsEPvGUP64cLladHxdLwTeKSUXCtO7CZ8GHyuG6cRyLs+/qU+Vntv/DYVugw9G5TlSYtj7rfQ+7Xtvjl1buGHPTg8fgvPyS2EkTLIklxVz9KROfhfn7rVc5bNwwwri1qOGR7DL3MeW45wMZZWeWx23oMlGOxjGwjnD+Hra+KO96jv7dyvXlF8DizjExZrT05eUZE2Lr4Neue3qa0uK4i1OZzRs5ncEPogy1XJdverQ9qdDcRlh8x26a78pFSLXQ3ZkabdirqW/djXnJHMmQxEDANL85tYP1F+Z5t+PAzieeyw1Wdr2/SqzeieMfOOgO/ZmS+nQ8aIcHHNBDabfq+M9NfdbfejreoNLXU8oY49FTXHbatWFhtnnaWuzFrwYdtEGyA311/OgneNWK2nIyc0Ur8LsbuppLLJffz1t68+yqqs7HFb+AsbRfD7pp3WIPeKfVPZURjzCtHbCBWp4IK4r0F6dJ330doVixJ4C4xSY4dOhDxmLyvMKj4DSDlxlHI4UxEebUklFn7ZNmotKfXnalHQZAUaz7SeY7b4JLq8y+F2f8Pe/sE/maNWOpuAZdnUhx74K1t6UjmsotK/KriUu+SocmtfpVkOAVepsm9XckEzBU7qD1dziPwBWwIi5HJY2BRtymQSLq3cjLcLJ9yL8TdwJmjyj05XrjeYqdnJgdylCXKmIq4pNBT/irSBjV8Ok4nvaJkIREnPBiwt1o/phDfCqNgS2EWmTHpLJZkxJ+hOScTCqeqhrvVVVE/b0ohfdFIDvRgdG/s8tbxVyuvINEMgiwXxLkNCmJ6aZsZQUHVAPxwBRG5qckeY3mTCcxbHNHIf58Ey4Urzlhy8BBl8kKkplDPmXi3ddTpcyfVTyWfCyG50twTMAfWhqy0GG8O9hf01tlBFx6sniAmYysMx0PbcSc98FmGvmLSySkQxcL4ikqNJCxPDbtlyqubAVWxSpJsISj7aI5wIELt69zKYQuKykXYl3JMF5FYz1YsYEEREZ33n8zJMU52LpC8k6jUgjCFcql58r1sTBM/0LiEOYlWqvOo2WjvV5eWfGDpsKr3Km8qAaY7yTkT4id1d0hx1Y6iYp1KwUYxc2WYMmasVMhu6fSQpuARlooq4Sd/DnpLvB8lopYzHgllo0yt2k6O2b6hzXKVxeWcaIxShKWI7T+hYbx1RgyLy40QAUWGXHwuQFUmKzeYdmkBwP19Zsy5V0HmoNoeivkyTGk2ngcEBgl1WM9jiGQ6rraMS1i1ENxoaeZcd5pprrgIEhIrNJAqJHXa0MAGaCIhw01yocrLLasurAVBVH715i0EMo+BDISDJO39ayxHPcTNCmINTK6IkBxSV+AYGdhHWrnQqTvlmmQ2l2HPRiY0m0yll4tnzqN3os0BDDltQyNvjOPm1ri8UQOXjHFyZle+g2Q4GyuoGeOyRHfQiAckptt6zG89jRlu9NWWVHS+2lLK0UYi3gGZcsmSnGExMeYYiXQ6J2h0hmnaItVAifTQCzU5jFHQiIdvl6ktFoNpMkXUzrBlZ1a24SgTWfZITY3LWcYw/4VPV/4u5IpwoSCffKXqA')))"
        },
        "Environment": {
          "Variables": {
            "commit_id": "66b1cf49df9dff6fe193e42cdd7ee8ae2de87e93\n"
          }
        },
        "Handler": "index.handler",
        "MemorySize": 1024,
        "Role": {
          "Fn::GetAtt": [
            "DBMppRole",
            "Arn"
          ]
        },
        "Runtime": "python3.11",
        "Timeout": 300
      },
      "Type": "AWS::Lambda::Function"
    },
    "VPPWDEncryptKeyDelete": {
      "DependsOn": [
        "VPInstance"
      ],
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "VPPWDEncryptFunction",
            "Arn"
          ]
        },
        "action": "delete_key",
        "key": {
          "Fn::GetAtt": [
            "VPPWDEncrypt",
            "key_id"
          ]
        }
      },
      "Type": "AWS::CloudFormation::CustomResource"
    },
    "VPSecurityGroup": {
      "Properties": {
        "GroupDescription": "Security group for Teradata Viewpoint",
        "SecurityGroupIngress": [
          {
            "CidrIp": {
              "Ref": "SecurityGroupAccess"
            },
            "FromPort": "22",
            "IpProtocol": "tcp",
            "ToPort": "22"
          },
          {
            "CidrIp": {
              "Ref": "SecurityGroupAccess"
            },
            "FromPort": "80",
            "IpProtocol": "tcp",
            "ToPort": "80"
          },
          {
            "CidrIp": {
              "Ref": "SecurityGroupAccess"
            },
            "FromPort": "443",
            "IpProtocol": "tcp",
            "ToPort": "443"
          },
          {
            "CidrIp": {
              "Ref": "SecurityGroupAccess"
            },
            "FromPort": "5432",
            "IpProtocol": "tcp",
            "ToPort": "5432"
          },
          {
            "CidrIp": {
              "Ref": "SecurityGroupAccess"
            },
            "FromPort": "61616",
            "IpProtocol": "tcp",
            "ToPort": "61616"
          }
        ],
        "VpcId": {
          "Ref": "VPC"
        }
      },
      "Type": "AWS::EC2::SecurityGroup"
    },
    "ViewPointInstanceProfile": {
      "Properties": {
        "Path": "/",
        "Roles": [
          {
            "Ref": "ViewPointInstanceRole"
          }
        ]
      },
      "Type": "AWS::IAM::InstanceProfile"
    },
    "ViewPointInstanceRole": {
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": [
                "sts:AssumeRole"
              ],
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "ec2.amazonaws.com",
                  {
                    "Fn::Join": [
                      ".",
                      [
                        "states",
                        {
                          "Ref": "AWS::Region"
                        },
                        "amazonaws.com"
                      ]
                    ]
                  },
                  "lambda.amazonaws.com"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Policies": [
          {
            "PolicyDocument": {
              "Statement": [
                {
                  "Action": [
                    "ec2:DescribeSubnets",
                    "ec2:DescribeNetworkInterfaces",
                    "ec2:CreateNetworkInterface",
                    "ec2:AttachNetworkInterface",
                    "ec2:DetachNetworkInterface",
                    "ec2:ModifyNetworkInterfaceAttribute",
                    "ec2:AllocateAddress",
                    "ec2:AssociateAddress",
                    "ec2:DisassociateAddress",
                    "ec2:DeleteTags",
                    "ec2:DescribeTags",
                    "ec2:CreateTags",
                    "ec2:DescribeInstances",
                    "ec2:DescribeInstanceStatus",
                    "ec2:ReleaseAddress",
                    "ec2:DeleteNetworkInterface",
                    "tag:GetResources",
                    "s3:HeadBucket",
                    "s3:ListAllMyBuckets",
                    "s3:ListBucket",
                    "s3:GetObject",
                    "s3:GetBucketTagging",
                    "ec2:DescribeInstances",
                    "lambda:CreateFunction",
                    "lambda:DeleteFunction",
                    "lambda:InvokeFunction",
                    "secretsmanager:GetSecretValue",
                    "iam:GetRole",
                    "iam:PassRole",
                    "cloudformation:SignalResource",
                    "ssm:GetParametersByPath"
                  ],
                  "Effect": "Allow",
                  "Resource": "*"
                }
              ],
              "Version": "2012-10-17"
            },
            "PolicyName": "RestInstancePolicy"
          }
        ]
      },
      "Type": "AWS::IAM::Role"
    }
  }
}