'Deploy the API Gateway!
Return the deployed API URL.'

def deploy_api_gateway(self, api_id, stage_name, stage_description='', description='', cache_cluster_enabled=False, cache_cluster_size='0.5', variables=None, cloudwatch_log_level='OFF', cloudwatch_data_trace=False, cloudwatch_metrics_enabled=False, cache_cluster_ttl=300, cache_cluster_encrypted=False):

    print('Deploying    API    Gateway..')
    self.apigateway_client.create_deployment(restApiId=api_id, stageName=stage_name, stageDescription=stage_description, description=description, cacheClusterEnabled=cache_cluster_enabled, cacheClusterSize=cache_cluster_size, variables=(variables or {}))
    if (cloudwatch_log_level not in self.cloudwatch_log_levels):
        cloudwatch_log_level = 'OFF'
    self.apigateway_client.update_stage(restApiId=api_id, stageName=stage_name, patchOperations=[self.get_patch_op('logging/loglevel', cloudwatch_log_level), self.get_patch_op('logging/dataTrace', cloudwatch_data_trace), self.get_patch_op('metrics/enabled', cloudwatch_metrics_enabled), self.get_patch_op('caching/ttlInSeconds', str(cache_cluster_ttl)), self.get_patch_op('caching/dataEncrypted', cache_cluster_encrypted)])
    return 'https://{}.execute-api.{}.amazonaws.com/{}'.format(api_id, self.boto_session.region_name, stage_name)
