{
 "Resources": {
  "FastApiV2RepoE12788C7": {
   "Type": "AWS::ECR::Repository",
   "Properties": {
    "EmptyOnDelete": true,
    "RepositoryName": "codedeploy-workshop"
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete",
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/FastApiV2Repo/Resource"
   }
  },
  "WorkshopVpc225294A4": {
   "Type": "AWS::EC2::VPC",
   "Properties": {
    "CidrBlock": "10.0.0.0/16",
    "EnableDnsHostnames": true,
    "EnableDnsSupport": true,
    "InstanceTenancy": "default",
    "Tags": [
     {
      "Key": "Name",
      "Value": "CanaryBlueGreenWorkshopStack/WorkshopVpc"
     }
    ]
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/WorkshopVpc/Resource"
   }
  },
  "WorkshopVpcPublicSubnet1SubnetE45D3E70": {
   "Type": "AWS::EC2::Subnet",
   "Properties": {
    "AvailabilityZone": {
     "Fn::Select": [
      0,
      {
       "Fn::GetAZs": ""
      }
     ]
    },
    "CidrBlock": "10.0.0.0/24",
    "MapPublicIpOnLaunch": true,
    "Tags": [
     {
      "Key": "aws-cdk:subnet-name",
      "Value": "Public"
     },
     {
      "Key": "aws-cdk:subnet-type",
      "Value": "Public"
     },
     {
      "Key": "Name",
      "Value": "CanaryBlueGreenWorkshopStack/WorkshopVpc/PublicSubnet1"
     }
    ],
    "VpcId": {
     "Ref": "WorkshopVpc225294A4"
    }
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/WorkshopVpc/PublicSubnet1/Subnet"
   }
  },
  "WorkshopVpcPublicSubnet1RouteTable3FF2F875": {
   "Type": "AWS::EC2::RouteTable",
   "Properties": {
    "Tags": [
     {
      "Key": "Name",
      "Value": "CanaryBlueGreenWorkshopStack/WorkshopVpc/PublicSubnet1"
     }
    ],
    "VpcId": {
     "Ref": "WorkshopVpc225294A4"
    }
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/WorkshopVpc/PublicSubnet1/RouteTable"
   }
  },
  "WorkshopVpcPublicSubnet1RouteTableAssociation7E585217": {
   "Type": "AWS::EC2::SubnetRouteTableAssociation",
   "Properties": {
    "RouteTableId": {
     "Ref": "WorkshopVpcPublicSubnet1RouteTable3FF2F875"
    },
    "SubnetId": {
     "Ref": "WorkshopVpcPublicSubnet1SubnetE45D3E70"
    }
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/WorkshopVpc/PublicSubnet1/RouteTableAssociation"
   }
  },
  "WorkshopVpcPublicSubnet1DefaultRoute37DB6426": {
   "Type": "AWS::EC2::Route",
   "Properties": {
    "DestinationCidrBlock": "0.0.0.0/0",
    "GatewayId": {
     "Ref": "WorkshopVpcIGWAA708C99"
    },
    "RouteTableId": {
     "Ref": "WorkshopVpcPublicSubnet1RouteTable3FF2F875"
    }
   },
   "DependsOn": [
    "WorkshopVpcVPCGW083D1E14"
   ],
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/WorkshopVpc/PublicSubnet1/DefaultRoute"
   }
  },
  "WorkshopVpcPublicSubnet2Subnet4032CE5A": {
   "Type": "AWS::EC2::Subnet",
   "Properties": {
    "AvailabilityZone": {
     "Fn::Select": [
      1,
      {
       "Fn::GetAZs": ""
      }
     ]
    },
    "CidrBlock": "10.0.1.0/24",
    "MapPublicIpOnLaunch": true,
    "Tags": [
     {
      "Key": "aws-cdk:subnet-name",
      "Value": "Public"
     },
     {
      "Key": "aws-cdk:subnet-type",
      "Value": "Public"
     },
     {
      "Key": "Name",
      "Value": "CanaryBlueGreenWorkshopStack/WorkshopVpc/PublicSubnet2"
     }
    ],
    "VpcId": {
     "Ref": "WorkshopVpc225294A4"
    }
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/WorkshopVpc/PublicSubnet2/Subnet"
   }
  },
  "WorkshopVpcPublicSubnet2RouteTableB2D1FD20": {
   "Type": "AWS::EC2::RouteTable",
   "Properties": {
    "Tags": [
     {
      "Key": "Name",
      "Value": "CanaryBlueGreenWorkshopStack/WorkshopVpc/PublicSubnet2"
     }
    ],
    "VpcId": {
     "Ref": "WorkshopVpc225294A4"
    }
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/WorkshopVpc/PublicSubnet2/RouteTable"
   }
  },
  "WorkshopVpcPublicSubnet2RouteTableAssociationD7958FEB": {
   "Type": "AWS::EC2::SubnetRouteTableAssociation",
   "Properties": {
    "RouteTableId": {
     "Ref": "WorkshopVpcPublicSubnet2RouteTableB2D1FD20"
    },
    "SubnetId": {
     "Ref": "WorkshopVpcPublicSubnet2Subnet4032CE5A"
    }
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/WorkshopVpc/PublicSubnet2/RouteTableAssociation"
   }
  },
  "WorkshopVpcPublicSubnet2DefaultRoute8245B093": {
   "Type": "AWS::EC2::Route",
   "Properties": {
    "DestinationCidrBlock": "0.0.0.0/0",
    "GatewayId": {
     "Ref": "WorkshopVpcIGWAA708C99"
    },
    "RouteTableId": {
     "Ref": "WorkshopVpcPublicSubnet2RouteTableB2D1FD20"
    }
   },
   "DependsOn": [
    "WorkshopVpcVPCGW083D1E14"
   ],
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/WorkshopVpc/PublicSubnet2/DefaultRoute"
   }
  },
  "WorkshopVpcIGWAA708C99": {
   "Type": "AWS::EC2::InternetGateway",
   "Properties": {
    "Tags": [
     {
      "Key": "Name",
      "Value": "CanaryBlueGreenWorkshopStack/WorkshopVpc"
     }
    ]
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/WorkshopVpc/IGW"
   }
  },
  "WorkshopVpcVPCGW083D1E14": {
   "Type": "AWS::EC2::VPCGatewayAttachment",
   "Properties": {
    "InternetGatewayId": {
     "Ref": "WorkshopVpcIGWAA708C99"
    },
    "VpcId": {
     "Ref": "WorkshopVpc225294A4"
    }
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/WorkshopVpc/VPCGW"
   }
  },
  "WorkshopVpcRestrictDefaultSecurityGroupCustomResource47C994A7": {
   "Type": "Custom::VpcRestrictDefaultSG",
   "Properties": {
    "ServiceToken": {
     "Fn::GetAtt": [
      "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E",
      "Arn"
     ]
    },
    "DefaultSecurityGroupId": {
     "Fn::GetAtt": [
      "WorkshopVpc225294A4",
      "DefaultSecurityGroup"
     ]
    },
    "Account": {
     "Ref": "AWS::AccountId"
    }
   },
   "UpdateReplacePolicy": "Delete",
   "DeletionPolicy": "Delete",
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/WorkshopVpc/RestrictDefaultSecurityGroupCustomResource/Default"
   }
  },
  "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Version": "2012-10-17",
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "lambda.amazonaws.com"
       }
      }
     ]
    },
    "ManagedPolicyArns": [
     {
      "Fn::Sub": "arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
     }
    ],
    "Policies": [
     {
      "PolicyName": "Inline",
      "PolicyDocument": {
       "Version": "2012-10-17",
       "Statement": [
        {
         "Effect": "Allow",
         "Action": [
          "ec2:AuthorizeSecurityGroupIngress",
          "ec2:AuthorizeSecurityGroupEgress",
          "ec2:RevokeSecurityGroupIngress",
          "ec2:RevokeSecurityGroupEgress"
         ],
         "Resource": [
          {
           "Fn::Join": [
            "",
            [
             "arn:",
             {
              "Ref": "AWS::Partition"
             },
             ":ec2:",
             {
              "Ref": "AWS::Region"
             },
             ":",
             {
              "Ref": "AWS::AccountId"
             },
             ":security-group/",
             {
              "Fn::GetAtt": [
               "WorkshopVpc225294A4",
               "DefaultSecurityGroup"
              ]
             }
            ]
           ]
          }
         ]
        }
       ]
      }
     }
    ]
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/Custom::VpcRestrictDefaultSGCustomResourceProvider/Role"
   }
  },
  "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E": {
   "Type": "AWS::Lambda::Function",
   "Properties": {
    "Code": {
     "S3Bucket": {
      "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
     },
     "S3Key": "7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200.zip"
    },
    "Timeout": 900,
    "MemorySize": 128,
    "Handler": "__entrypoint__.handler",
    "Role": {
     "Fn::GetAtt": [
      "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0",
      "Arn"
     ]
    },
    "Runtime": "nodejs22.x",
    "Description": "Lambda function for removing all inbound/outbound rules from the VPC default security group"
   },
   "DependsOn": [
    "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0"
   ],
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/Custom::VpcRestrictDefaultSGCustomResourceProvider/Handler",
    "aws:asset:path": "asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200",
    "aws:asset:property": "Code"
   }
  },
  "WorkshopALB1B58C43A": {
   "Type": "AWS::ElasticLoadBalancingV2::LoadBalancer",
   "Properties": {
    "LoadBalancerAttributes": [
     {
      "Key": "deletion_protection.enabled",
      "Value": "false"
     }
    ],
    "Scheme": "internet-facing",
    "SecurityGroups": [
     {
      "Fn::GetAtt": [
       "WorkshopALBSecurityGroupA1758E97",
       "GroupId"
      ]
     }
    ],
    "Subnets": [
     {
      "Ref": "WorkshopVpcPublicSubnet1SubnetE45D3E70"
     },
     {
      "Ref": "WorkshopVpcPublicSubnet2Subnet4032CE5A"
     }
    ],
    "Type": "application"
   },
   "DependsOn": [
    "WorkshopVpcPublicSubnet1DefaultRoute37DB6426",
    "WorkshopVpcPublicSubnet1RouteTableAssociation7E585217",
    "WorkshopVpcPublicSubnet2DefaultRoute8245B093",
    "WorkshopVpcPublicSubnet2RouteTableAssociationD7958FEB"
   ],
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/WorkshopALB/Resource"
   }
  },
  "WorkshopALBSecurityGroupA1758E97": {
   "Type": "AWS::EC2::SecurityGroup",
   "Properties": {
    "GroupDescription": "Automatically created Security Group for ELB CanaryBlueGreenWorkshopStackWorkshopALBD7D727B2",
    "SecurityGroupIngress": [
     {
      "CidrIp": "0.0.0.0/0",
      "Description": "Allow from anyone on port 80",
      "FromPort": 80,
      "IpProtocol": "tcp",
      "ToPort": 80
     }
    ],
    "VpcId": {
     "Ref": "WorkshopVpc225294A4"
    }
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/WorkshopALB/SecurityGroup/Resource"
   }
  },
  "WorkshopALBSecurityGrouptoCanaryBlueGreenWorkshopStackFargateServiceSecurityGroupABC62F31807A0DF72C": {
   "Type": "AWS::EC2::SecurityGroupEgress",
   "Properties": {
    "Description": "Load balancer to target",
    "DestinationSecurityGroupId": {
     "Fn::GetAtt": [
      "FargateServiceSecurityGroup0A0E79CB",
      "GroupId"
     ]
    },
    "FromPort": 80,
    "GroupId": {
     "Fn::GetAtt": [
      "WorkshopALBSecurityGroupA1758E97",
      "GroupId"
     ]
    },
    "IpProtocol": "tcp",
    "ToPort": 80
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/WorkshopALB/SecurityGroup/to CanaryBlueGreenWorkshopStackFargateServiceSecurityGroupABC62F31:80"
   }
  },
  "WorkshopALBHttpListener67513081": {
   "Type": "AWS::ElasticLoadBalancingV2::Listener",
   "Properties": {
    "DefaultActions": [
     {
      "TargetGroupArn": {
       "Ref": "BlueTG7C058B2C"
      },
      "Type": "forward"
     }
    ],
    "LoadBalancerArn": {
     "Ref": "WorkshopALB1B58C43A"
    },
    "Port": 80,
    "Protocol": "HTTP"
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/WorkshopALB/HttpListener/Resource"
   }
  },
  "BlueTG7C058B2C": {
   "Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
   "Properties": {
    "HealthCheckPath": "/health",
    "Port": 80,
    "Protocol": "HTTP",
    "TargetGroupAttributes": [
     {
      "Key": "stickiness.enabled",
      "Value": "false"
     }
    ],
    "TargetType": "ip",
    "VpcId": {
     "Ref": "WorkshopVpc225294A4"
    }
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/BlueTG/Resource"
   }
  },
  "GreenTG71A27F2F": {
   "Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
   "Properties": {
    "HealthCheckPath": "/health",
    "Port": 80,
    "Protocol": "HTTP",
    "TargetGroupAttributes": [
     {
      "Key": "stickiness.enabled",
      "Value": "false"
     }
    ],
    "TargetType": "ip",
    "VpcId": {
     "Ref": "WorkshopVpc225294A4"
    }
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/GreenTG/Resource"
   }
  },
  "WorkshopClusterA2DCA37F": {
   "Type": "AWS::ECS::Cluster",
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/WorkshopCluster/Resource"
   }
  },
  "TaskDefTaskRole1EDB4A67": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "ecs-tasks.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    }
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/TaskDef/TaskRole/Resource"
   }
  },
  "TaskDef54694570": {
   "Type": "AWS::ECS::TaskDefinition",
   "Properties": {
    "ContainerDefinitions": [
     {
      "Essential": true,
      "Image": "lednierb/canary-workshop:v1",
      "LogConfiguration": {
       "LogDriver": "awslogs",
       "Options": {
        "awslogs-group": {
         "Ref": "TaskDefFastApiContainerLogGroup962E29A3"
        },
        "awslogs-stream-prefix": "fastapi-v1",
        "awslogs-region": {
         "Ref": "AWS::Region"
        }
       }
      },
      "Name": "fastapi-container",
      "PortMappings": [
       {
        "ContainerPort": 80,
        "Protocol": "tcp"
       }
      ]
     }
    ],
    "Cpu": "256",
    "ExecutionRoleArn": {
     "Fn::GetAtt": [
      "TaskDefExecutionRoleB4775C97",
      "Arn"
     ]
    },
    "Family": "CanaryBlueGreenWorkshopStackTaskDef5B42552A",
    "Memory": "512",
    "NetworkMode": "awsvpc",
    "RequiresCompatibilities": [
     "FARGATE"
    ],
    "TaskRoleArn": {
     "Fn::GetAtt": [
      "TaskDefTaskRole1EDB4A67",
      "Arn"
     ]
    }
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/TaskDef/Resource"
   }
  },
  "TaskDefFastApiContainerLogGroup962E29A3": {
   "Type": "AWS::Logs::LogGroup",
   "UpdateReplacePolicy": "Retain",
   "DeletionPolicy": "Retain",
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/TaskDef/FastApiContainer/LogGroup/Resource"
   }
  },
  "TaskDefExecutionRoleB4775C97": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "ecs-tasks.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    }
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/TaskDef/ExecutionRole/Resource"
   }
  },
  "TaskDefExecutionRoleDefaultPolicy0DBB737A": {
   "Type": "AWS::IAM::Policy",
   "Properties": {
    "PolicyDocument": {
     "Statement": [
      {
       "Action": [
        "logs:CreateLogStream",
        "logs:PutLogEvents"
       ],
       "Effect": "Allow",
       "Resource": {
        "Fn::GetAtt": [
         "TaskDefFastApiContainerLogGroup962E29A3",
         "Arn"
        ]
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "PolicyName": "TaskDefExecutionRoleDefaultPolicy0DBB737A",
    "Roles": [
     {
      "Ref": "TaskDefExecutionRoleB4775C97"
     }
    ]
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/TaskDef/ExecutionRole/DefaultPolicy/Resource"
   }
  },
  "FargateServiceAC2B3B85": {
   "Type": "AWS::ECS::Service",
   "Properties": {
    "Cluster": {
     "Ref": "WorkshopClusterA2DCA37F"
    },
    "DeploymentConfiguration": {
     "MaximumPercent": 200,
     "MinimumHealthyPercent": 50
    },
    "DeploymentController": {
     "Type": "CODE_DEPLOY"
    },
    "EnableECSManagedTags": false,
    "HealthCheckGracePeriodSeconds": 60,
    "LaunchType": "FARGATE",
    "LoadBalancers": [
     {
      "ContainerName": "fastapi-container",
      "ContainerPort": 80,
      "TargetGroupArn": {
       "Ref": "BlueTG7C058B2C"
      }
     }
    ],
    "NetworkConfiguration": {
     "AwsvpcConfiguration": {
      "AssignPublicIp": "ENABLED",
      "SecurityGroups": [
       {
        "Fn::GetAtt": [
         "FargateServiceSecurityGroup0A0E79CB",
         "GroupId"
        ]
       }
      ],
      "Subnets": [
       {
        "Ref": "WorkshopVpcPublicSubnet1SubnetE45D3E70"
       },
       {
        "Ref": "WorkshopVpcPublicSubnet2Subnet4032CE5A"
       }
      ]
     }
    },
    "ServiceName": "fastapi-service",
    "TaskDefinition": "CanaryBlueGreenWorkshopStackTaskDef5B42552A"
   },
   "DependsOn": [
    "TaskDefExecutionRoleDefaultPolicy0DBB737A",
    "TaskDefExecutionRoleB4775C97",
    "TaskDefFastApiContainerLogGroup962E29A3",
    "TaskDef54694570",
    "TaskDefTaskRole1EDB4A67",
    "WorkshopALBHttpListener67513081"
   ],
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/FargateService/Service"
   }
  },
  "FargateServiceSecurityGroup0A0E79CB": {
   "Type": "AWS::EC2::SecurityGroup",
   "Properties": {
    "GroupDescription": "CanaryBlueGreenWorkshopStack/FargateService/SecurityGroup",
    "SecurityGroupEgress": [
     {
      "CidrIp": "0.0.0.0/0",
      "Description": "Allow all outbound traffic by default",
      "IpProtocol": "-1"
     }
    ],
    "VpcId": {
     "Ref": "WorkshopVpc225294A4"
    }
   },
   "DependsOn": [
    "TaskDefExecutionRoleDefaultPolicy0DBB737A",
    "TaskDefExecutionRoleB4775C97",
    "TaskDefFastApiContainerLogGroup962E29A3",
    "TaskDef54694570",
    "TaskDefTaskRole1EDB4A67"
   ],
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/FargateService/SecurityGroup/Resource"
   }
  },
  "FargateServiceSecurityGroupfromCanaryBlueGreenWorkshopStackWorkshopALBSecurityGroupA6216818809B5856B7": {
   "Type": "AWS::EC2::SecurityGroupIngress",
   "Properties": {
    "Description": "Load balancer to target",
    "FromPort": 80,
    "GroupId": {
     "Fn::GetAtt": [
      "FargateServiceSecurityGroup0A0E79CB",
      "GroupId"
     ]
    },
    "IpProtocol": "tcp",
    "SourceSecurityGroupId": {
     "Fn::GetAtt": [
      "WorkshopALBSecurityGroupA1758E97",
      "GroupId"
     ]
    },
    "ToPort": 80
   },
   "DependsOn": [
    "TaskDefExecutionRoleDefaultPolicy0DBB737A",
    "TaskDefExecutionRoleB4775C97",
    "TaskDefFastApiContainerLogGroup962E29A3",
    "TaskDef54694570",
    "TaskDefTaskRole1EDB4A67"
   ],
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/FargateService/SecurityGroup/from CanaryBlueGreenWorkshopStackWorkshopALBSecurityGroupA6216818:80"
   }
  },
  "Http5xxAlarm2F844FC7": {
   "Type": "AWS::CloudWatch::Alarm",
   "Properties": {
    "AlarmDescription": "Triggers CodeDeploy rollback if v2 produces 5xx errors",
    "AlarmName": "fastapi-5xx-errors",
    "ComparisonOperator": "GreaterThanOrEqualToThreshold",
    "Dimensions": [
     {
      "Name": "LoadBalancer",
      "Value": {
       "Fn::GetAtt": [
        "WorkshopALB1B58C43A",
        "LoadBalancerFullName"
       ]
      }
     }
    ],
    "EvaluationPeriods": 1,
    "MetricName": "HTTPCode_Target_5XX_Count",
    "Namespace": "AWS/ApplicationELB",
    "Period": 60,
    "Statistic": "Sum",
    "Threshold": 5,
    "TreatMissingData": "notBreaching"
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/Http5xxAlarm/Resource"
   }
  },
  "CodeDeployApp86798C63": {
   "Type": "AWS::CodeDeploy::Application",
   "Properties": {
    "ApplicationName": "AppECS-workshop-cluster-fastapi-service",
    "ComputePlatform": "ECS"
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/CodeDeployApp/Resource"
   }
  },
  "CodeDeployGroupServiceRole50553EBF": {
   "Type": "AWS::IAM::Role",
   "Properties": {
    "AssumeRolePolicyDocument": {
     "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
        "Service": "codedeploy.amazonaws.com"
       }
      }
     ],
     "Version": "2012-10-17"
    },
    "ManagedPolicyArns": [
     {
      "Fn::Join": [
       "",
       [
        "arn:",
        {
         "Ref": "AWS::Partition"
        },
        ":iam::aws:policy/AWSCodeDeployRoleForECS"
       ]
      ]
     }
    ]
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/CodeDeployGroup/ServiceRole/Resource"
   }
  },
  "CodeDeployGroup58220FC8": {
   "Type": "AWS::CodeDeploy::DeploymentGroup",
   "Properties": {
    "AlarmConfiguration": {
     "Alarms": [
      {
       "Name": {
        "Ref": "Http5xxAlarm2F844FC7"
       }
      }
     ],
     "Enabled": true
    },
    "ApplicationName": {
     "Ref": "CodeDeployApp86798C63"
    },
    "AutoRollbackConfiguration": {
     "Enabled": true,
     "Events": [
      "DEPLOYMENT_FAILURE",
      "DEPLOYMENT_STOP_ON_ALARM"
     ]
    },
    "BlueGreenDeploymentConfiguration": {
     "DeploymentReadyOption": {
      "ActionOnTimeout": "CONTINUE_DEPLOYMENT",
      "WaitTimeInMinutes": 0
     },
     "TerminateBlueInstancesOnDeploymentSuccess": {
      "Action": "TERMINATE",
      "TerminationWaitTimeInMinutes": 0
     }
    },
    "DeploymentConfigName": "CodeDeployDefault.ECSCanary10Percent5Minutes",
    "DeploymentGroupName": "DgpECS-workshop-cluster-fastapi-service",
    "DeploymentStyle": {
     "DeploymentOption": "WITH_TRAFFIC_CONTROL",
     "DeploymentType": "BLUE_GREEN"
    },
    "ECSServices": [
     {
      "ClusterName": {
       "Ref": "WorkshopClusterA2DCA37F"
      },
      "ServiceName": {
       "Fn::GetAtt": [
        "FargateServiceAC2B3B85",
        "Name"
       ]
      }
     }
    ],
    "LoadBalancerInfo": {
     "TargetGroupPairInfoList": [
      {
       "ProdTrafficRoute": {
        "ListenerArns": [
         {
          "Ref": "WorkshopALBHttpListener67513081"
         }
        ]
       },
       "TargetGroups": [
        {
         "Name": {
          "Fn::GetAtt": [
           "BlueTG7C058B2C",
           "TargetGroupName"
          ]
         }
        },
        {
         "Name": {
          "Fn::GetAtt": [
           "GreenTG71A27F2F",
           "TargetGroupName"
          ]
         }
        }
       ]
      }
     ]
    },
    "ServiceRoleArn": {
     "Fn::GetAtt": [
      "CodeDeployGroupServiceRole50553EBF",
      "Arn"
     ]
    }
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/CodeDeployGroup/Resource"
   }
  },
  "CDKMetadata": {
   "Type": "AWS::CDK::Metadata",
   "Properties": {
    "Analytics": "v2:deflate64:H4sIAAAAAAAA/81WW28TOxD+LeTxaLsHgkCCt1wARSokaqM+UFVoYk83pl7b+JKcnCj/nfFlk22DBOKpD1Hiby6eGX8zk2E9fD2sX72Arbtg/OFCilW9v/bAHiqCvu2R2Xp/hUY74bXd3e4H9nj4Ai0O3g/+GVQEtnoDcqGlYDvCODpv9Y4k2Bq/m6spSvSk7W3Aw101uVcnp4cK2bDe3xhG7lv4b/S/K24V+E/gcQu7DnFhpdBPtLoXTbDghVaD92TGBLefwT0cDY+hZYvlzkRgEVYU4eBwl2O4WUyqDF0nLXIEGxASVkIKv/uqVedlY9iMl9/xrrHUrLusBZOdzMxcXUJQbJ0TrQbCbN5OnqiDc6JRM5KMOLfo3FxNLJZUSONQPZMonk0gzyOKTJlMlERgHTwuYSXxhJ+wkXOaieTgqBx/zJRHS5qF14WF5TTy1HnrFpWvrpEFS+l+sjoY4iXlWkKl3mJWmGNoFLyUejuSch78SgdFJbkH6TBVjvOZamJCV0FibhWgIKRQmJFcE6aVQhZ9dp0WlPgRsNQ3sSHCyfFd8fyh7zhKi1J0+cc6XWK/jLZn8Ojm32nlp+qX8AzIgZ3BxTPNJAnOCyY18BVIUEyoZkNjamQMsSo97CXJxkmGNgVBn3RzX1D1DYTzqE7KJ4Mi6CsvwTbEky743jEOTFfvJzKQle2RI+dd8OojWUCko3uY4r1QInrtX/0ohMdqFY1YD0QS28OKw2u0G8HwtrMs50MloKVloSXGOepcaJGPaRvsB8YKqp8BOWKMCOpPTUc60WDETp2WnvivrWkXEXJcTYUvS73onHQ76pYaOklTz+WOOMpiar8X/n2KeQMSWmWvmcLluqWOkrMozmHOaVN7jPPClYSS4+zzUEndEE0uddMNEUs7WJ3CKFxtCqmI64FvwbM1sVyCbeMzxu/eok/n6dkEatFb2qtUhy1YRZ3STZHueDPsnsevqb/WWnaDG+l/Q0iEX6AVmneWTLcGrHBazQ3Spte2CHycy58FDWzVTMEDwUr7MaFsTVBJKyVAOWmOHI3Uu3r/gbleex3p28MqUpkm7VjTXLV+jzyREVWv0OlgczP02okaULd9WfnLk4En8oXVG8HRjsFhRXsDPT1rQ6lEG5rpJvhDpSiR+rv7dzN8U7+rX7747oS4sEQ00WJ9lb9/ArrGGRjNCQAA"
   },
   "Metadata": {
    "aws:cdk:path": "CanaryBlueGreenWorkshopStack/CDKMetadata/Default"
   },
   "Condition": "CDKMetadataAvailable"
  }
 },
 "Outputs": {
  "LoadBalancerUrl": {
   "Description": "ALB URL — use this in your curl commands",
   "Value": {
    "Fn::Join": [
     "",
     [
      "http://",
      {
       "Fn::GetAtt": [
        "WorkshopALB1B58C43A",
        "DNSName"
       ]
      }
     ]
    ]
   }
  },
  "EcrRepositoryUri": {
   "Description": "Push your V2 Docker image here.",
   "Value": {
    "Fn::Join": [
     "",
     [
      {
       "Fn::Select": [
        4,
        {
         "Fn::Split": [
          ":",
          {
           "Fn::GetAtt": [
            "FastApiV2RepoE12788C7",
            "Arn"
           ]
          }
         ]
        }
       ]
      },
      ".dkr.ecr.",
      {
       "Fn::Select": [
        3,
        {
         "Fn::Split": [
          ":",
          {
           "Fn::GetAtt": [
            "FastApiV2RepoE12788C7",
            "Arn"
           ]
          }
         ]
        }
       ]
      },
      ".",
      {
       "Ref": "AWS::URLSuffix"
      },
      "/",
      {
       "Ref": "FastApiV2RepoE12788C7"
      }
     ]
    ]
   }
  },
  "CodeDeployAppName": {
   "Description": "Use this in --application-name",
   "Value": "AppECS-workshop-cluster-fastapi-service"
  },
  "CodeDeployGroupName": {
   "Description": "Use this in --deployment-group-name",
   "Value": "DgpECS-workshop-cluster-fastapi-service"
  }
 },
 "Conditions": {
  "CDKMetadataAvailable": {
   "Fn::Or": [
    {
     "Fn::Or": [
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "af-south-1"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "ap-east-1"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "ap-northeast-1"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "ap-northeast-2"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "ap-northeast-3"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "ap-south-1"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "ap-south-2"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "ap-southeast-1"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "ap-southeast-2"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "ap-southeast-3"
       ]
      }
     ]
    },
    {
     "Fn::Or": [
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "ap-southeast-4"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "ca-central-1"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "ca-west-1"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "cn-north-1"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "cn-northwest-1"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "eu-central-1"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "eu-central-2"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "eu-north-1"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "eu-south-1"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "eu-south-2"
       ]
      }
     ]
    },
    {
     "Fn::Or": [
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "eu-west-1"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "eu-west-2"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "eu-west-3"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "il-central-1"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "me-central-1"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "me-south-1"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "sa-east-1"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "us-east-1"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "us-east-2"
       ]
      },
      {
       "Fn::Equals": [
        {
         "Ref": "AWS::Region"
        },
        "us-west-1"
       ]
      }
     ]
    },
    {
     "Fn::Equals": [
      {
       "Ref": "AWS::Region"
      },
      "us-west-2"
     ]
    }
   ]
  }
 },
 "Parameters": {
  "BootstrapVersion": {
   "Type": "AWS::SSM::Parameter::Value<String>",
   "Default": "/cdk-bootstrap/hnb659fds/version",
   "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]"
  }
 },
 "Rules": {
  "CheckBootstrapVersion": {
   "Assertions": [
    {
     "Assert": {
      "Fn::Not": [
       {
        "Fn::Contains": [
         [
          "1",
          "2",
          "3",
          "4",
          "5"
         ],
         {
          "Ref": "BootstrapVersion"
         }
        ]
       }
      ]
     },
     "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI."
    }
   ]
  }
 }
}