{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--aws-gamelift-gameservergroup.json",
  "title": "AWSGameLiftGameServerGroupProperties",
  "description": "The AWS::GameLift::GameServerGroup resource creates an Amazon GameLift (GameLift) GameServerGroup.. Source:- <https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-gamelift.git>",
  "x-lintel": {
    "source": "https://raw.githubusercontent.com/lalcebo/json-schema/master/serverless/resources/cloudformation-modified/aws-gamelift-gameservergroup.json",
    "sourceSha256": "47c8aeb6937fb86010b20921467219bf640c452690c9a10e6aba4d332b8ec220"
  },
  "type": "object",
  "properties": {
    "AutoScalingPolicy": {
      "description": "Configuration settings to define a scaling policy for the Auto Scaling group that is optimized for game hosting",
      "$ref": "#/$defs/AutoScalingPolicy"
    },
    "BalancingStrategy": {
      "description": "The fallback balancing method to use for the game server group when Spot Instances in a Region become unavailable or are not viable for game hosting.",
      "$ref": "#/$defs/BalancingStrategy"
    },
    "DeleteOption": {
      "description": "The type of delete to perform.",
      "$ref": "#/$defs/DeleteOption"
    },
    "GameServerGroupName": {
      "description": "An identifier for the new game server group.",
      "$ref": "#/$defs/GameServerGroupName"
    },
    "GameServerProtectionPolicy": {
      "description": "A flag that indicates whether instances in the game server group are protected from early termination.",
      "$ref": "#/$defs/GameServerProtectionPolicy"
    },
    "InstanceDefinitions": {
      "description": "A set of EC2 instance types to use when creating instances in the group.",
      "$ref": "#/$defs/InstanceDefinitions"
    },
    "LaunchTemplate": {
      "description": "The EC2 launch template that contains configuration settings and game server code to be deployed to all instances in the game server group.",
      "$ref": "#/$defs/LaunchTemplate"
    },
    "MaxSize": {
      "description": "The maximum number of instances allowed in the EC2 Auto Scaling group.",
      "$ref": "#/$defs/MaxSize"
    },
    "MinSize": {
      "description": "The minimum number of instances allowed in the EC2 Auto Scaling group.",
      "$ref": "#/$defs/MinSize"
    },
    "RoleArn": {
      "description": "The Amazon Resource Name (ARN) for an IAM role that allows Amazon GameLift to access your EC2 Auto Scaling groups.",
      "$ref": "#/$defs/RoleArn"
    },
    "Tags": {
      "description": "A list of labels to assign to the new game server group resource.",
      "$ref": "#/$defs/Tags"
    },
    "VpcSubnets": {
      "description": "A list of virtual private cloud (VPC) subnets to use with instances in the game server group.",
      "$ref": "#/$defs/VpcSubnets"
    }
  },
  "taggable": true,
  "typeName": "AWS::GameLift::GameServerGroup",
  "primaryIdentifier": [
    "/properties/GameServerGroupArn"
  ],
  "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-gamelift.git",
  "additionalProperties": false,
  "writeOnlyProperties": [
    "/properties/DeleteOption",
    "/properties/LaunchTemplate",
    "/properties/MinSize",
    "/properties/MaxSize",
    "/properties/AutoScalingPolicy",
    "/properties/VpcSubnets",
    "/properties/Tags"
  ],
  "required": [
    "GameServerGroupName",
    "InstanceDefinitions",
    "RoleArn"
  ],
  "$defs": {
    "AutoScalingPolicy": {
      "type": "object",
      "description": "Configuration settings to define a scaling policy for the Auto Scaling group that is optimized for game hosting",
      "properties": {
        "EstimatedInstanceWarmup": {
          "$ref": "#/$defs/EstimatedInstanceWarmup"
        },
        "TargetTrackingConfiguration": {
          "$ref": "#/$defs/TargetTrackingConfiguration"
        }
      },
      "required": [
        "TargetTrackingConfiguration"
      ],
      "title": "AWSGameLiftGameServerGroupAutoScalingPolicyDefinition",
      "additionalProperties": false
    },
    "EstimatedInstanceWarmup": {
      "type": "number",
      "description": "Length of time, in seconds, it takes for a new instance to start new game server processes and register with GameLift FleetIQ.",
      "title": "AWSGameLiftGameServerGroupEstimatedInstanceWarmupDefinition"
    },
    "TargetTrackingConfiguration": {
      "type": "object",
      "description": "Settings for a target-based scaling policy applied to Auto Scaling group.",
      "properties": {
        "TargetValue": {
          "$ref": "#/$defs/TargetValue"
        }
      },
      "required": [
        "TargetValue"
      ],
      "title": "AWSGameLiftGameServerGroupTargetTrackingConfigurationDefinition",
      "additionalProperties": false
    },
    "TargetValue": {
      "type": "number",
      "description": "Desired value to use with a game server group target-based scaling policy.",
      "title": "AWSGameLiftGameServerGroupTargetValueDefinition"
    },
    "BalancingStrategy": {
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "SPOT_ONLY",
            "SPOT_PREFERRED",
            "ON_DEMAND_ONLY"
          ]
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "The fallback balancing method to use for the game server group when Spot Instances in a Region become unavailable or are not viable for game hosting.",
      "title": "AWSGameLiftGameServerGroupBalancingStrategyDefinition"
    },
    "DeleteOption": {
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "SAFE_DELETE",
            "FORCE_DELETE",
            "RETAIN"
          ]
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "The type of delete to perform.",
      "title": "AWSGameLiftGameServerGroupDeleteOptionDefinition"
    },
    "GameServerGroupName": {
      "oneOf": [
        {
          "type": "string",
          "pattern": "[a-zA-Z0-9-\\.]+",
          "minLength": 1,
          "maxLength": 128
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "An identifier for the new game server group.",
      "title": "AWSGameLiftGameServerGroupGameServerGroupNameDefinition"
    },
    "GameServerProtectionPolicy": {
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "NO_PROTECTION",
            "FULL_PROTECTION"
          ]
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "A flag that indicates whether instances in the game server group are protected from early termination.",
      "title": "AWSGameLiftGameServerGroupGameServerProtectionPolicyDefinition"
    },
    "GameServerGroupArn": {
      "oneOf": [
        {
          "type": "string",
          "pattern": "^arn:.*:gameservergroup\\/[a-zA-Z0-9-\\.]*",
          "minLength": 1,
          "maxLength": 256
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "A generated unique ID for the game server group.",
      "title": "AWSGameLiftGameServerGroupGameServerGroupArnDefinition"
    },
    "InstanceDefinitions": {
      "type": "array",
      "description": "A set of EC2 instance types to use when creating instances in the group.",
      "items": {
        "$ref": "#/$defs/InstanceDefinition"
      },
      "maxItems": 20,
      "minItems": 2,
      "insertionOrder": false,
      "title": "AWSGameLiftGameServerGroupInstanceDefinitionsDefinition"
    },
    "InstanceDefinition": {
      "type": "object",
      "description": "An allowed instance type for your game server group.",
      "properties": {
        "InstanceType": {
          "$ref": "#/$defs/InstanceType"
        },
        "WeightedCapacity": {
          "$ref": "#/$defs/WeightedCapacity"
        }
      },
      "required": [
        "InstanceType"
      ],
      "title": "AWSGameLiftGameServerGroupInstanceDefinition",
      "additionalProperties": false
    },
    "InstanceType": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "An EC2 instance type designation.",
      "title": "AWSGameLiftGameServerGroupInstanceTypeDefinition"
    },
    "WeightedCapacity": {
      "oneOf": [
        {
          "type": "string",
          "pattern": "^[\\u0031-\\u0039][\\u0030-\\u0039]{0,2}$"
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "Instance weighting that indicates how much this instance type contributes to the total capacity of a game server group.",
      "title": "AWSGameLiftGameServerGroupWeightedCapacityDefinition"
    },
    "LaunchTemplate": {
      "type": "object",
      "description": "The EC2 launch template that contains configuration settings and game server code to be deployed to all instances in the game server group.",
      "properties": {
        "LaunchTemplateId": {
          "$ref": "#/$defs/LaunchTemplateId"
        },
        "LaunchTemplateName": {
          "$ref": "#/$defs/LaunchTemplateName"
        },
        "Version": {
          "$ref": "#/$defs/Version"
        }
      },
      "title": "AWSGameLiftGameServerGroupLaunchTemplateDefinition",
      "additionalProperties": false
    },
    "LaunchTemplateId": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "A unique identifier for an existing EC2 launch template.",
      "title": "AWSGameLiftGameServerGroupLaunchTemplateIdDefinition"
    },
    "LaunchTemplateName": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "A readable identifier for an existing EC2 launch template.",
      "title": "AWSGameLiftGameServerGroupLaunchTemplateNameDefinition"
    },
    "Version": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "The version of the EC2 launch template to use.",
      "title": "AWSGameLiftGameServerGroupVersionDefinition"
    },
    "MaxSize": {
      "type": "number",
      "description": "The maximum number of instances allowed in the EC2 Auto Scaling group.",
      "minimum": 1,
      "title": "AWSGameLiftGameServerGroupMaxSizeDefinition"
    },
    "MinSize": {
      "type": "number",
      "description": "The minimum number of instances allowed in the EC2 Auto Scaling group.",
      "minimum": 0,
      "title": "AWSGameLiftGameServerGroupMinSizeDefinition"
    },
    "RoleArn": {
      "oneOf": [
        {
          "type": "string",
          "pattern": "^arn:.*:role\\/[\\w+=,.@-]+",
          "minLength": 1,
          "maxLength": 256
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "The Amazon Resource Name (ARN) for an IAM role that allows Amazon GameLift to access your EC2 Auto Scaling groups.",
      "title": "AWSGameLiftGameServerGroupRoleArnDefinition"
    },
    "Tags": {
      "type": "array",
      "description": "A list of labels to assign to the new game server group resource.",
      "items": {
        "$ref": "#/$defs/Tag"
      },
      "minItems": 0,
      "maxItems": 200,
      "insertionOrder": false,
      "title": "AWSGameLiftGameServerGroupTagsDefinition"
    },
    "Tag": {
      "type": "object",
      "properties": {
        "Key": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
            }
          ],
          "description": "The key for a developer-defined key:value pair for tagging an AWS resource."
        },
        "Value": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
            }
          ],
          "description": "The value for a developer-defined key:value pair for tagging an AWS resource."
        }
      },
      "title": "AWSGameLiftGameServerGroupTagDefinition",
      "additionalProperties": false
    },
    "VpcSubnets": {
      "type": "array",
      "description": "A list of virtual private cloud (VPC) subnets to use with instances in the game server group.",
      "items": {
        "type": "string",
        "pattern": "^subnet-[0-9a-z]+$",
        "minLength": 15,
        "maxLength": 24
      },
      "minItems": 1,
      "maxItems": 20,
      "insertionOrder": false,
      "title": "AWSGameLiftGameServerGroupVpcSubnetsDefinition"
    },
    "GameServerGroup": {
      "type": "object",
      "description": "Properties that describe a game server group resource. A game server group manages certain properties of a corresponding EC2 Auto Scaling group.",
      "properties": {
        "AutoScalingGroupArn": {
          "$ref": "#/$defs/AutoScalingGroupArn"
        },
        "BalancingStrategy": {
          "$ref": "#/$defs/BalancingStrategy"
        },
        "CreationTime": {
          "$ref": "#/$defs/CreationTime"
        },
        "GameServerGroupArn": {
          "$ref": "#/$defs/GameServerGroupArn"
        },
        "GameServerGroupName": {
          "$ref": "#/$defs/GameServerGroupName"
        },
        "GameServerProtectionPolicy": {
          "$ref": "#/$defs/GameServerProtectionPolicy"
        },
        "InstanceDefinitions": {
          "$ref": "#/$defs/InstanceDefinitions"
        },
        "LastUpdatedTime": {
          "$ref": "#/$defs/LastUpdatedTime"
        },
        "RoleArn": {
          "$ref": "#/$defs/RoleArn"
        },
        "Status": {
          "$ref": "#/$defs/Status"
        },
        "StatusReason": {
          "$ref": "#/$defs/StatusReason"
        },
        "SuspendedActions": {
          "$ref": "#/$defs/SuspendedActions"
        }
      },
      "title": "AWSGameLiftGameServerGroupGameServerGroupDefinition",
      "additionalProperties": false
    },
    "AutoScalingGroupArn": {
      "oneOf": [
        {
          "type": "string",
          "minLength": 0,
          "maxLength": 256,
          "pattern": "[ -퟿-�𐀀-􏿿\r\n\t]*"
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "A generated unique ID for the EC2 Auto Scaling group that is associated with this game server group.",
      "title": "AWSGameLiftGameServerGroupAutoScalingGroupArnDefinition"
    },
    "CreationTime": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "A timestamp that indicates when this data object was created.",
      "title": "AWSGameLiftGameServerGroupCreationTimeDefinition"
    },
    "LastUpdatedTime": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "A timestamp that indicates when this game server group was last updated.",
      "title": "AWSGameLiftGameServerGroupLastUpdatedTimeDefinition"
    },
    "Status": {
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "NEW",
            "ACTIVATING",
            "ACTIVE",
            "DELETE_SCHEDULED",
            "DELETING",
            "DELETED",
            "ERROR"
          ]
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "The current status of the game server group.",
      "title": "AWSGameLiftGameServerGroupStatusDefinition"
    },
    "StatusReason": {
      "oneOf": [
        {
          "type": "string",
          "minLength": 1,
          "maxLength": 1024
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "description": "Additional information about the current game server group status.",
      "title": "AWSGameLiftGameServerGroupStatusReasonDefinition"
    },
    "SuspendedActions": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "REPLACE_INSTANCE_TYPES"
        ]
      },
      "title": "AWSGameLiftGameServerGroupSuspendedActionsDefinition"
    }
  },
  "readOnlyProperties": [
    "/properties/GameServerGroupArn",
    "/properties/AutoScalingGroupArn"
  ]
}
