@SdkInternalApi
    final UpdateGameServerGroupResult executeUpdateGameServerGroup(UpdateGameServerGroupRequest updateGameServerGroupRequest) {

        ExecutionContext executionContext = createExecutionContext(updateGameServerGroupRequest);
        AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics();
        awsRequestMetrics.startEvent(Field.ClientExecuteTime);
        Request<UpdateGameServerGroupRequest> request = null;
        Response<UpdateGameServerGroupResult> response = null;

        try {
            awsRequestMetrics.startEvent(Field.RequestMarshallTime);
            try {
                request = new UpdateGameServerGroupRequestProtocolMarshaller(protocolFactory).marshall(super.beforeMarshalling(updateGameServerGroupRequest));
                // Binds the request metrics to the current request.
                request.setAWSRequestMetrics(awsRequestMetrics);
                request.addHandlerContext(HandlerContextKey.CLIENT_ENDPOINT, endpoint);
                request.addHandlerContext(HandlerContextKey.ENDPOINT_OVERRIDDEN, isEndpointOverridden());
                request.addHandlerContext(HandlerContextKey.SIGNING_REGION, getSigningRegion());
                request.addHandlerContext(HandlerContextKey.SERVICE_ID, "GameLift");
                request.addHandlerContext(HandlerContextKey.OPERATION_NAME, "UpdateGameServerGroup");
                request.addHandlerContext(HandlerContextKey.ADVANCED_CONFIG, advancedConfig);

            } finally {
                awsRequestMetrics.endEvent(Field.RequestMarshallTime);
            }

            HttpResponseHandler<AmazonWebServiceResponse<UpdateGameServerGroupResult>> responseHandler = protocolFactory
                    .createResponseHandler(new JsonOperationMetadata().withPayloadJson(true).withHasStreamingSuccessResponse(false),
                            new UpdateGameServerGroupResultJsonUnmarshaller());
            response = invoke(request, responseHandler, executionContext);

            return response.getAwsResponse();

        } finally {

            endClientExecution(awsRequestMetrics, request, response);
        }
    }
<p>
<b>This operation is used with the Amazon GameLift FleetIQ solution and game server groups.</b>
</p>
<p>
Updates Amazon GameLift FleetIQ-specific properties for a game server group. Many Auto Scaling group properties
are updated on the Auto Scaling group directly, including the launch template, Auto Scaling policies, and
maximum/minimum/desired instance counts.
</p>
<p>
To update the game server group, specify the game server group ID and provide the updated values. Before applying
the updates, the new values are validated to ensure that Amazon GameLift FleetIQ can continue to perform instance
balancing activity. If successful, a <code>GameServerGroup</code> object is returned.
</p>
<p>
<b>Learn more</b>
</p>
<p>
<a href="https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html">Amazon GameLift FleetIQ
Guide</a>
</p>

@param updateGameServerGroupRequest
@return Result of the UpdateGameServerGroup operation returned by the service.
@throws InvalidRequestException
        One or more parameter values in the request are invalid. Correct the invalid parameter values before
        retrying.
@throws NotFoundException
        THe requested resources was not found. The resource was either not created yet or deleted.
@throws UnauthorizedException
        The client failed authentication. Clients should not retry such requests.
@throws InternalServiceException
        The service encountered an unrecoverable internal failure while processing the request. Clients can retry
        such requests immediately or after a waiting period.
@sample AmazonGameLift.UpdateGameServerGroup
@see <a href="http://docs.aws.amazon.com/goto/WebAPI/gamelift-2015-10-01/UpdateGameServerGroup" target="_top">AWS
     API Documentation</a>
aws-java-sdk-gamelift/src/main/java/com/amazonaws/services/gamelift/AmazonGameLiftClient.java