{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "",

    "Parameters": {
        "FrontendCluster": {
            "Type": "AWS::SSM::Parameter::Value<String>",
            "Default": "/CloudMosaic/FrontendCluster"
        },

        "FrontendExecutionRole": {
            "Type": "AWS::SSM::Parameter::Value<String>",
            "Default": "/CloudMosaic/FrontendExecutionRole"
        },

        "FrontendTaskRole": {
            "Type": "AWS::SSM::Parameter::Value<String>",
            "Default": "/CloudMosaic/FrontendTaskRole"
        },

        "FrontendTag": {
            "Type": "AWS::SSM::Parameter::Value<String>",
            "Default": "/CloudMosaic/FrontendTag"
        },

        "ECSSecurityGroup": {
            "Type": "AWS::SSM::Parameter::Value<String>",
            "Default": "/CloudMosaic/ECSSecurityGroup"
        },

        "SubnetA": {
            "Type": "AWS::SSM::Parameter::Value<String>",
            "Default": "/CloudMosaic/SubnetA"
        },

        "SubnetB": {
            "Type": "AWS::SSM::Parameter::Value<String>",
            "Default": "/CloudMosaic/SubnetB"
        },

        "SubnetC": {
            "Type": "AWS::SSM::Parameter::Value<String>",
            "Default": "/CloudMosaic/SubnetC"
        },

        "LoadBalancerName": {
            "Type": "AWS::SSM::Parameter::Value<String>",
            "Default": "/CloudMosaic/LoadBalancerName"
        },

        "TargetGroupArn": {
            "Type": "AWS::SSM::Parameter::Value<String>",
            "Default": "/CloudMosaic/TargetGroupArn"
        }

    },
    "Resources": {

        "FrontendLogGroup": {
            "Type": "AWS::Logs::LogGroup",
            "Properties": {
                "LogGroupName": {
                    "Fn::Join": [
                        "",
                        [
                            "/ecs/",
                            {
                                "Fn::Join": [
                                    "",
                                    [
                                        {
                                            "Ref": "AWS::StackName"
                                        },
                                        "-CloudMosaicFrontend"
                                    ]
                                ]
                            },
                            "CloudMosaicFrontend"
                        ]
                    ]
                }
            }
        },

        "FrontendTaskDefinition": {
            "Type": "AWS::ECS::TaskDefinition",
            "Properties": {
                "Family": {
                    "Fn::Join": [
                        "",
                        [
                            {
                                "Ref": "AWS::StackName"
                            },
                            "-CloudMosaicFrontend"
                        ]
                    ]
                },
                "ContainerDefinitions": [
                    {
                        "Name": "CloudMosaicFrontend",
                        "Image": {
                            "Fn::Join": [
                                "",
                                [
                                    {
                                        "Ref": "AWS::AccountId"
                                    },
                                    ".dkr.ecr.",
                                    {
                                        "Ref": "AWS::Region"
                                    },
                                    ".amazonaws.com/",
                                    {
                                        "Ref": "FrontendTag"
                                    }
                                ]
                            ]
                        },
                        "PortMappings": [
                            {
                                "Protocol": "tcp",
                                "HostPort": 80,
                                "ContainerPort": 80
                            }
                        ],
                        "LogConfiguration": {
                            "LogDriver": "awslogs",
                            "Options": {
                                "awslogs-group": {
                                    "Ref": "FrontendLogGroup"
                                },
                                "awslogs-region": {
                                    "Ref": "AWS::Region"
                                },
                                "awslogs-stream-prefix": "ecs"
                            }
                        },
                        "Environment": [
                            {
                                "Name": "ASPNETCORE_ENVIRONMENT",
                                "Value": "Production"
                            }
                        ]
                    }
                ],
                "RequiresCompatibilities": [
                    "FARGATE",
                    "EC2"
                ],
                "Cpu": "2048",
                "Memory": "4GB",
                "NetworkMode": "awsvpc",
                "ExecutionRoleArn": {
                    "Ref": "FrontendExecutionRole"
                },
                "TaskRoleArn": {
                    "Ref": "FrontendTaskRole"
                },
                "Volumes": []
            }
        },

        "FrontendService": {
            "Type": "AWS::ECS::Service",
            "Properties": {
                "TaskDefinition": {
                    "Ref": "FrontendTaskDefinition"
                },
                "Cluster": {
                    "Ref": "FrontendCluster"
                },
                "LaunchType": "FARGATE",
                "ServiceName": "Frontend",
                "DesiredCount": 2,
                "NetworkConfiguration": {
                    "AwsvpcConfiguration": {
                        "AssignPublicIp": "ENABLED",
                        "SecurityGroups": [
                            {
                                "Ref": "ECSSecurityGroup"
                            }
                        ],
                        "Subnets": [
                            {
                                "Ref": "SubnetA"
                            },
                            {
                                "Ref": "SubnetB"
                            },
                            {
                                "Ref": "SubnetC"
                            }
                        ]
                    }
                },
                "DeploymentConfiguration": {
                    "MaximumPercent": 200,
                    "MinimumHealthyPercent": 50
                },
                "LoadBalancers": [
                    {
                        "TargetGroupArn": {
                            "Ref": "TargetGroupArn"
                        },
                        "ContainerPort": 80,
                        "ContainerName": "CloudMosaicFrontend"
                    }
                ]
            }
        }

    },
    "Outputs": {}
}