// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.

package ecs

import (
	"fmt"
	"time"

	"k8s.io/autoscaler/cluster-autoscaler/cloudprovider/aws/aws-sdk-go/aws"
	"k8s.io/autoscaler/cluster-autoscaler/cloudprovider/aws/aws-sdk-go/aws/awsutil"
	"k8s.io/autoscaler/cluster-autoscaler/cloudprovider/aws/aws-sdk-go/aws/request"
	"k8s.io/autoscaler/cluster-autoscaler/cloudprovider/aws/aws-sdk-go/private/protocol"
	"k8s.io/autoscaler/cluster-autoscaler/cloudprovider/aws/aws-sdk-go/private/protocol/jsonrpc"
)

const opCreateCapacityProvider = "CreateCapacityProvider"

// CreateCapacityProviderRequest generates a "aws/request.Request" representing the
// client's request for the CreateCapacityProvider operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See CreateCapacityProvider for more information on using the CreateCapacityProvider
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the CreateCapacityProviderRequest method.
//	req, resp := client.CreateCapacityProviderRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/CreateCapacityProvider
func (c *ECS) CreateCapacityProviderRequest(input *CreateCapacityProviderInput) (req *request.Request, output *CreateCapacityProviderOutput) {
	op := &request.Operation{
		Name:       opCreateCapacityProvider,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateCapacityProviderInput{}
	}

	output = &CreateCapacityProviderOutput{}
	req = c.newRequest(op, input, output)
	return
}

// CreateCapacityProvider API operation for Amazon EC2 Container Service.
//
// Creates a new capacity provider. Capacity providers are associated with an
// Amazon ECS cluster and are used in capacity provider strategies to facilitate
// cluster auto scaling.
//
// Only capacity providers that use an Auto Scaling group can be created. Amazon
// ECS tasks on Fargate use the FARGATE and FARGATE_SPOT capacity providers.
// These providers are available to all accounts in the Amazon Web Services
// Regions that Fargate supports.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation CreateCapacityProvider for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - LimitExceededException
//     The limit for the resource was exceeded.
//
//   - UpdateInProgressException
//     There's already a current Amazon ECS container agent update in progress on
//     the container instance that's specified. If the container agent becomes disconnected
//     while it's in a transitional stage, such as PENDING or STAGING, the update
//     process can get stuck in that state. However, when the agent reconnects,
//     it resumes where it stopped previously.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/CreateCapacityProvider
func (c *ECS) CreateCapacityProvider(input *CreateCapacityProviderInput) (*CreateCapacityProviderOutput, error) {
	req, out := c.CreateCapacityProviderRequest(input)
	return out, req.Send()
}

// CreateCapacityProviderWithContext is the same as CreateCapacityProvider with the addition of
// the ability to pass a context and additional request options.
//
// See CreateCapacityProvider for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) CreateCapacityProviderWithContext(ctx aws.Context, input *CreateCapacityProviderInput, opts ...request.Option) (*CreateCapacityProviderOutput, error) {
	req, out := c.CreateCapacityProviderRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opCreateCluster = "CreateCluster"

// CreateClusterRequest generates a "aws/request.Request" representing the
// client's request for the CreateCluster operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See CreateCluster for more information on using the CreateCluster
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the CreateClusterRequest method.
//	req, resp := client.CreateClusterRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/CreateCluster
func (c *ECS) CreateClusterRequest(input *CreateClusterInput) (req *request.Request, output *CreateClusterOutput) {
	op := &request.Operation{
		Name:       opCreateCluster,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateClusterInput{}
	}

	output = &CreateClusterOutput{}
	req = c.newRequest(op, input, output)
	return
}

// CreateCluster API operation for Amazon EC2 Container Service.
//
// Creates a new Amazon ECS cluster. By default, your account receives a default
// cluster when you launch your first container instance. However, you can create
// your own cluster with a unique name with the CreateCluster action.
//
// When you call the CreateCluster API operation, Amazon ECS attempts to create
// the Amazon ECS service-linked role for your account. This is so that it can
// manage required resources in other Amazon Web Services services on your behalf.
// However, if the user that makes the call doesn't have permissions to create
// the service-linked role, it isn't created. For more information, see Using
// service-linked roles for Amazon ECS (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using-service-linked-roles.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation CreateCluster for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - NamespaceNotFoundException
//     The specified namespace wasn't found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/CreateCluster
func (c *ECS) CreateCluster(input *CreateClusterInput) (*CreateClusterOutput, error) {
	req, out := c.CreateClusterRequest(input)
	return out, req.Send()
}

// CreateClusterWithContext is the same as CreateCluster with the addition of
// the ability to pass a context and additional request options.
//
// See CreateCluster for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) CreateClusterWithContext(ctx aws.Context, input *CreateClusterInput, opts ...request.Option) (*CreateClusterOutput, error) {
	req, out := c.CreateClusterRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opCreateService = "CreateService"

// CreateServiceRequest generates a "aws/request.Request" representing the
// client's request for the CreateService operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See CreateService for more information on using the CreateService
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the CreateServiceRequest method.
//	req, resp := client.CreateServiceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/CreateService
func (c *ECS) CreateServiceRequest(input *CreateServiceInput) (req *request.Request, output *CreateServiceOutput) {
	op := &request.Operation{
		Name:       opCreateService,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateServiceInput{}
	}

	output = &CreateServiceOutput{}
	req = c.newRequest(op, input, output)
	return
}

// CreateService API operation for Amazon EC2 Container Service.
//
// Runs and maintains your desired number of tasks from a specified task definition.
// If the number of tasks running in a service drops below the desiredCount,
// Amazon ECS runs another copy of the task in the specified cluster. To update
// an existing service, see the UpdateService action.
//
// Starting April 15, 2023, Amazon Web Services will not onboard new customers
// to Amazon Elastic Inference (EI), and will help current customers migrate
// their workloads to options that offer better price and performance. After
// April 15, 2023, new customers will not be able to launch instances with Amazon
// EI accelerators in Amazon SageMaker, Amazon ECS, or Amazon EC2. However,
// customers who have used Amazon EI at least once during the past 30-day period
// are considered current customers and will be able to continue using the service.
//
// In addition to maintaining the desired count of tasks in your service, you
// can optionally run your service behind one or more load balancers. The load
// balancers distribute traffic across the tasks that are associated with the
// service. For more information, see Service load balancing (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-load-balancing.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// Tasks for services that don't use a load balancer are considered healthy
// if they're in the RUNNING state. Tasks for services that use a load balancer
// are considered healthy if they're in the RUNNING state and are reported as
// healthy by the load balancer.
//
// There are two service scheduler strategies available:
//
//   - REPLICA - The replica scheduling strategy places and maintains your
//     desired number of tasks across your cluster. By default, the service scheduler
//     spreads tasks across Availability Zones. You can use task placement strategies
//     and constraints to customize task placement decisions. For more information,
//     see Service scheduler concepts (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html)
//     in the Amazon Elastic Container Service Developer Guide.
//
//   - DAEMON - The daemon scheduling strategy deploys exactly one task on
//     each active container instance that meets all of the task placement constraints
//     that you specify in your cluster. The service scheduler also evaluates
//     the task placement constraints for running tasks. It also stops tasks
//     that don't meet the placement constraints. When using this strategy, you
//     don't need to specify a desired number of tasks, a task placement strategy,
//     or use Service Auto Scaling policies. For more information, see Service
//     scheduler concepts (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html)
//     in the Amazon Elastic Container Service Developer Guide.
//
// You can optionally specify a deployment configuration for your service. The
// deployment is initiated by changing properties. For example, the deployment
// might be initiated by the task definition or by your desired count of a service.
// This is done with an UpdateService operation. The default value for a replica
// service for minimumHealthyPercent is 100%. The default value for a daemon
// service for minimumHealthyPercent is 0%.
//
// If a service uses the ECS deployment controller, the minimum healthy percent
// represents a lower limit on the number of tasks in a service that must remain
// in the RUNNING state during a deployment. Specifically, it represents it
// as a percentage of your desired number of tasks (rounded up to the nearest
// integer). This happens when any of your container instances are in the DRAINING
// state if the service contains tasks using the EC2 launch type. Using this
// parameter, you can deploy without using additional cluster capacity. For
// example, if you set your service to have desired number of four tasks and
// a minimum healthy percent of 50%, the scheduler might stop two existing tasks
// to free up cluster capacity before starting two new tasks. If they're in
// the RUNNING state, tasks for services that don't use a load balancer are
// considered healthy . If they're in the RUNNING state and reported as healthy
// by the load balancer, tasks for services that do use a load balancer are
// considered healthy . The default value for minimum healthy percent is 100%.
//
// If a service uses the ECS deployment controller, the maximum percent parameter
// represents an upper limit on the number of tasks in a service that are allowed
// in the RUNNING or PENDING state during a deployment. Specifically, it represents
// it as a percentage of the desired number of tasks (rounded down to the nearest
// integer). This happens when any of your container instances are in the DRAINING
// state if the service contains tasks using the EC2 launch type. Using this
// parameter, you can define the deployment batch size. For example, if your
// service has a desired number of four tasks and a maximum percent value of
// 200%, the scheduler may start four new tasks before stopping the four older
// tasks (provided that the cluster resources required to do this are available).
// The default value for maximum percent is 200%.
//
// If a service uses either the CODE_DEPLOY or EXTERNAL deployment controller
// types and tasks that use the EC2 launch type, the minimum healthy percent
// and maximum percent values are used only to define the lower and upper limit
// on the number of the tasks in the service that remain in the RUNNING state.
// This is while the container instances are in the DRAINING state. If the tasks
// in the service use the Fargate launch type, the minimum healthy percent and
// maximum percent values aren't used. This is the case even if they're currently
// visible when describing your service.
//
// When creating a service that uses the EXTERNAL deployment controller, you
// can specify only parameters that aren't controlled at the task set level.
// The only required parameter is the service name. You control your services
// using the CreateTaskSet operation. For more information, see Amazon ECS deployment
// types (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// When the service scheduler launches new tasks, it determines task placement.
// For information about task placement and task placement strategies, see Amazon
// ECS task placement (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation CreateService for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - UnsupportedFeatureException
//     The specified task isn't supported in this Region.
//
//   - PlatformUnknownException
//     The specified platform version doesn't exist.
//
//   - PlatformTaskDefinitionIncompatibilityException
//     The specified platform version doesn't satisfy the required capabilities
//     of the task definition.
//
//   - AccessDeniedException
//     You don't have authorization to perform the requested action.
//
//   - NamespaceNotFoundException
//     The specified namespace wasn't found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/CreateService
func (c *ECS) CreateService(input *CreateServiceInput) (*CreateServiceOutput, error) {
	req, out := c.CreateServiceRequest(input)
	return out, req.Send()
}

// CreateServiceWithContext is the same as CreateService with the addition of
// the ability to pass a context and additional request options.
//
// See CreateService for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) CreateServiceWithContext(ctx aws.Context, input *CreateServiceInput, opts ...request.Option) (*CreateServiceOutput, error) {
	req, out := c.CreateServiceRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opCreateTaskSet = "CreateTaskSet"

// CreateTaskSetRequest generates a "aws/request.Request" representing the
// client's request for the CreateTaskSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See CreateTaskSet for more information on using the CreateTaskSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the CreateTaskSetRequest method.
//	req, resp := client.CreateTaskSetRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/CreateTaskSet
func (c *ECS) CreateTaskSetRequest(input *CreateTaskSetInput) (req *request.Request, output *CreateTaskSetOutput) {
	op := &request.Operation{
		Name:       opCreateTaskSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateTaskSetInput{}
	}

	output = &CreateTaskSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// CreateTaskSet API operation for Amazon EC2 Container Service.
//
// Create a task set in the specified cluster and service. This is used when
// a service uses the EXTERNAL deployment controller type. For more information,
// see Amazon ECS deployment types (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation CreateTaskSet for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - UnsupportedFeatureException
//     The specified task isn't supported in this Region.
//
//   - PlatformUnknownException
//     The specified platform version doesn't exist.
//
//   - PlatformTaskDefinitionIncompatibilityException
//     The specified platform version doesn't satisfy the required capabilities
//     of the task definition.
//
//   - AccessDeniedException
//     You don't have authorization to perform the requested action.
//
//   - ServiceNotFoundException
//     The specified service wasn't found. You can view your available services
//     with ListServices. Amazon ECS services are cluster specific and Region specific.
//
//   - ServiceNotActiveException
//     The specified service isn't active. You can't update a service that's inactive.
//     If you have previously deleted a service, you can re-create it with CreateService.
//
//   - NamespaceNotFoundException
//     The specified namespace wasn't found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/CreateTaskSet
func (c *ECS) CreateTaskSet(input *CreateTaskSetInput) (*CreateTaskSetOutput, error) {
	req, out := c.CreateTaskSetRequest(input)
	return out, req.Send()
}

// CreateTaskSetWithContext is the same as CreateTaskSet with the addition of
// the ability to pass a context and additional request options.
//
// See CreateTaskSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) CreateTaskSetWithContext(ctx aws.Context, input *CreateTaskSetInput, opts ...request.Option) (*CreateTaskSetOutput, error) {
	req, out := c.CreateTaskSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteAccountSetting = "DeleteAccountSetting"

// DeleteAccountSettingRequest generates a "aws/request.Request" representing the
// client's request for the DeleteAccountSetting operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeleteAccountSetting for more information on using the DeleteAccountSetting
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the DeleteAccountSettingRequest method.
//	req, resp := client.DeleteAccountSettingRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DeleteAccountSetting
func (c *ECS) DeleteAccountSettingRequest(input *DeleteAccountSettingInput) (req *request.Request, output *DeleteAccountSettingOutput) {
	op := &request.Operation{
		Name:       opDeleteAccountSetting,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteAccountSettingInput{}
	}

	output = &DeleteAccountSettingOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeleteAccountSetting API operation for Amazon EC2 Container Service.
//
// Disables an account setting for a specified user, role, or the root user
// for an account.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation DeleteAccountSetting for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DeleteAccountSetting
func (c *ECS) DeleteAccountSetting(input *DeleteAccountSettingInput) (*DeleteAccountSettingOutput, error) {
	req, out := c.DeleteAccountSettingRequest(input)
	return out, req.Send()
}

// DeleteAccountSettingWithContext is the same as DeleteAccountSetting with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteAccountSetting for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) DeleteAccountSettingWithContext(ctx aws.Context, input *DeleteAccountSettingInput, opts ...request.Option) (*DeleteAccountSettingOutput, error) {
	req, out := c.DeleteAccountSettingRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteAttributes = "DeleteAttributes"

// DeleteAttributesRequest generates a "aws/request.Request" representing the
// client's request for the DeleteAttributes operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeleteAttributes for more information on using the DeleteAttributes
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the DeleteAttributesRequest method.
//	req, resp := client.DeleteAttributesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DeleteAttributes
func (c *ECS) DeleteAttributesRequest(input *DeleteAttributesInput) (req *request.Request, output *DeleteAttributesOutput) {
	op := &request.Operation{
		Name:       opDeleteAttributes,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteAttributesInput{}
	}

	output = &DeleteAttributesOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeleteAttributes API operation for Amazon EC2 Container Service.
//
// Deletes one or more custom attributes from an Amazon ECS resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation DeleteAttributes for usage and error information.
//
// Returned Error Types:
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - TargetNotFoundException
//     The specified target wasn't found. You can view your available container
//     instances with ListContainerInstances. Amazon ECS container instances are
//     cluster-specific and Region-specific.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DeleteAttributes
func (c *ECS) DeleteAttributes(input *DeleteAttributesInput) (*DeleteAttributesOutput, error) {
	req, out := c.DeleteAttributesRequest(input)
	return out, req.Send()
}

// DeleteAttributesWithContext is the same as DeleteAttributes with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteAttributes for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) DeleteAttributesWithContext(ctx aws.Context, input *DeleteAttributesInput, opts ...request.Option) (*DeleteAttributesOutput, error) {
	req, out := c.DeleteAttributesRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteCapacityProvider = "DeleteCapacityProvider"

// DeleteCapacityProviderRequest generates a "aws/request.Request" representing the
// client's request for the DeleteCapacityProvider operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeleteCapacityProvider for more information on using the DeleteCapacityProvider
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the DeleteCapacityProviderRequest method.
//	req, resp := client.DeleteCapacityProviderRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DeleteCapacityProvider
func (c *ECS) DeleteCapacityProviderRequest(input *DeleteCapacityProviderInput) (req *request.Request, output *DeleteCapacityProviderOutput) {
	op := &request.Operation{
		Name:       opDeleteCapacityProvider,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteCapacityProviderInput{}
	}

	output = &DeleteCapacityProviderOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeleteCapacityProvider API operation for Amazon EC2 Container Service.
//
// Deletes the specified capacity provider.
//
// The FARGATE and FARGATE_SPOT capacity providers are reserved and can't be
// deleted. You can disassociate them from a cluster using either the PutClusterCapacityProviders
// API or by deleting the cluster.
//
// Prior to a capacity provider being deleted, the capacity provider must be
// removed from the capacity provider strategy from all services. The UpdateService
// API can be used to remove a capacity provider from a service's capacity provider
// strategy. When updating a service, the forceNewDeployment option can be used
// to ensure that any tasks using the Amazon EC2 instance capacity provided
// by the capacity provider are transitioned to use the capacity from the remaining
// capacity providers. Only capacity providers that aren't associated with a
// cluster can be deleted. To remove a capacity provider from a cluster, you
// can either use PutClusterCapacityProviders or delete the cluster.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation DeleteCapacityProvider for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DeleteCapacityProvider
func (c *ECS) DeleteCapacityProvider(input *DeleteCapacityProviderInput) (*DeleteCapacityProviderOutput, error) {
	req, out := c.DeleteCapacityProviderRequest(input)
	return out, req.Send()
}

// DeleteCapacityProviderWithContext is the same as DeleteCapacityProvider with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteCapacityProvider for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) DeleteCapacityProviderWithContext(ctx aws.Context, input *DeleteCapacityProviderInput, opts ...request.Option) (*DeleteCapacityProviderOutput, error) {
	req, out := c.DeleteCapacityProviderRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteCluster = "DeleteCluster"

// DeleteClusterRequest generates a "aws/request.Request" representing the
// client's request for the DeleteCluster operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeleteCluster for more information on using the DeleteCluster
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the DeleteClusterRequest method.
//	req, resp := client.DeleteClusterRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DeleteCluster
func (c *ECS) DeleteClusterRequest(input *DeleteClusterInput) (req *request.Request, output *DeleteClusterOutput) {
	op := &request.Operation{
		Name:       opDeleteCluster,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteClusterInput{}
	}

	output = &DeleteClusterOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeleteCluster API operation for Amazon EC2 Container Service.
//
// Deletes the specified cluster. The cluster transitions to the INACTIVE state.
// Clusters with an INACTIVE status might remain discoverable in your account
// for a period of time. However, this behavior is subject to change in the
// future. We don't recommend that you rely on INACTIVE clusters persisting.
//
// You must deregister all container instances from this cluster before you
// may delete it. You can list the container instances in a cluster with ListContainerInstances
// and deregister them with DeregisterContainerInstance.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation DeleteCluster for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - ClusterContainsContainerInstancesException
//     You can't delete a cluster that has registered container instances. First,
//     deregister the container instances before you can delete the cluster. For
//     more information, see DeregisterContainerInstance.
//
//   - ClusterContainsServicesException
//     You can't delete a cluster that contains services. First, update the service
//     to reduce its desired task count to 0, and then delete the service. For more
//     information, see UpdateService and DeleteService.
//
//   - ClusterContainsTasksException
//     You can't delete a cluster that has active tasks.
//
//   - UpdateInProgressException
//     There's already a current Amazon ECS container agent update in progress on
//     the container instance that's specified. If the container agent becomes disconnected
//     while it's in a transitional stage, such as PENDING or STAGING, the update
//     process can get stuck in that state. However, when the agent reconnects,
//     it resumes where it stopped previously.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DeleteCluster
func (c *ECS) DeleteCluster(input *DeleteClusterInput) (*DeleteClusterOutput, error) {
	req, out := c.DeleteClusterRequest(input)
	return out, req.Send()
}

// DeleteClusterWithContext is the same as DeleteCluster with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteCluster for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) DeleteClusterWithContext(ctx aws.Context, input *DeleteClusterInput, opts ...request.Option) (*DeleteClusterOutput, error) {
	req, out := c.DeleteClusterRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteService = "DeleteService"

// DeleteServiceRequest generates a "aws/request.Request" representing the
// client's request for the DeleteService operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeleteService for more information on using the DeleteService
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the DeleteServiceRequest method.
//	req, resp := client.DeleteServiceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DeleteService
func (c *ECS) DeleteServiceRequest(input *DeleteServiceInput) (req *request.Request, output *DeleteServiceOutput) {
	op := &request.Operation{
		Name:       opDeleteService,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteServiceInput{}
	}

	output = &DeleteServiceOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeleteService API operation for Amazon EC2 Container Service.
//
// Deletes a specified service within a cluster. You can delete a service if
// you have no running tasks in it and the desired task count is zero. If the
// service is actively maintaining tasks, you can't delete it, and you must
// update the service to a desired task count of zero. For more information,
// see UpdateService.
//
// When you delete a service, if there are still running tasks that require
// cleanup, the service status moves from ACTIVE to DRAINING, and the service
// is no longer visible in the console or in the ListServices API operation.
// After all tasks have transitioned to either STOPPING or STOPPED status, the
// service status moves from DRAINING to INACTIVE. Services in the DRAINING
// or INACTIVE status can still be viewed with the DescribeServices API operation.
// However, in the future, INACTIVE services may be cleaned up and purged from
// Amazon ECS record keeping, and DescribeServices calls on those services return
// a ServiceNotFoundException error.
//
// If you attempt to create a new service with the same name as an existing
// service in either ACTIVE or DRAINING status, you receive an error.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation DeleteService for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - ServiceNotFoundException
//     The specified service wasn't found. You can view your available services
//     with ListServices. Amazon ECS services are cluster specific and Region specific.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DeleteService
func (c *ECS) DeleteService(input *DeleteServiceInput) (*DeleteServiceOutput, error) {
	req, out := c.DeleteServiceRequest(input)
	return out, req.Send()
}

// DeleteServiceWithContext is the same as DeleteService with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteService for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) DeleteServiceWithContext(ctx aws.Context, input *DeleteServiceInput, opts ...request.Option) (*DeleteServiceOutput, error) {
	req, out := c.DeleteServiceRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteTaskDefinitions = "DeleteTaskDefinitions"

// DeleteTaskDefinitionsRequest generates a "aws/request.Request" representing the
// client's request for the DeleteTaskDefinitions operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeleteTaskDefinitions for more information on using the DeleteTaskDefinitions
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the DeleteTaskDefinitionsRequest method.
//	req, resp := client.DeleteTaskDefinitionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DeleteTaskDefinitions
func (c *ECS) DeleteTaskDefinitionsRequest(input *DeleteTaskDefinitionsInput) (req *request.Request, output *DeleteTaskDefinitionsOutput) {
	op := &request.Operation{
		Name:       opDeleteTaskDefinitions,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteTaskDefinitionsInput{}
	}

	output = &DeleteTaskDefinitionsOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeleteTaskDefinitions API operation for Amazon EC2 Container Service.
//
// Deletes one or more task definitions.
//
// You must deregister a task definition revision before you delete it. For
// more information, see DeregisterTaskDefinition (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DeregisterTaskDefinition.html).
//
// When you delete a task definition revision, it is immediately transitions
// from the INACTIVE to DELETE_IN_PROGRESS. Existing tasks and services that
// reference a DELETE_IN_PROGRESS task definition revision continue to run without
// disruption. Existing services that reference a DELETE_IN_PROGRESS task definition
// revision can still scale up or down by modifying the service's desired count.
//
// You can't use a DELETE_IN_PROGRESS task definition revision to run new tasks
// or create new services. You also can't update an existing service to reference
// a DELETE_IN_PROGRESS task definition revision.
//
// A task definition revision will stay in DELETE_IN_PROGRESS status until all
// the associated tasks and services have been terminated.
//
// When you delete all INACTIVE task definition revisions, the task definition
// name is not displayed in the console and not returned in the API. If a task
// definition revisions are in the DELETE_IN_PROGRESS state, the task definition
// name is displayed in the console and returned in the API. The task definition
// name is retained by Amazon ECS and the revision is incremented the next time
// you create a task definition with that name.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation DeleteTaskDefinitions for usage and error information.
//
// Returned Error Types:
//
//   - AccessDeniedException
//     You don't have authorization to perform the requested action.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DeleteTaskDefinitions
func (c *ECS) DeleteTaskDefinitions(input *DeleteTaskDefinitionsInput) (*DeleteTaskDefinitionsOutput, error) {
	req, out := c.DeleteTaskDefinitionsRequest(input)
	return out, req.Send()
}

// DeleteTaskDefinitionsWithContext is the same as DeleteTaskDefinitions with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteTaskDefinitions for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) DeleteTaskDefinitionsWithContext(ctx aws.Context, input *DeleteTaskDefinitionsInput, opts ...request.Option) (*DeleteTaskDefinitionsOutput, error) {
	req, out := c.DeleteTaskDefinitionsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteTaskSet = "DeleteTaskSet"

// DeleteTaskSetRequest generates a "aws/request.Request" representing the
// client's request for the DeleteTaskSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeleteTaskSet for more information on using the DeleteTaskSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the DeleteTaskSetRequest method.
//	req, resp := client.DeleteTaskSetRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DeleteTaskSet
func (c *ECS) DeleteTaskSetRequest(input *DeleteTaskSetInput) (req *request.Request, output *DeleteTaskSetOutput) {
	op := &request.Operation{
		Name:       opDeleteTaskSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteTaskSetInput{}
	}

	output = &DeleteTaskSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeleteTaskSet API operation for Amazon EC2 Container Service.
//
// Deletes a specified task set within a service. This is used when a service
// uses the EXTERNAL deployment controller type. For more information, see Amazon
// ECS deployment types (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation DeleteTaskSet for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - UnsupportedFeatureException
//     The specified task isn't supported in this Region.
//
//   - AccessDeniedException
//     You don't have authorization to perform the requested action.
//
//   - ServiceNotFoundException
//     The specified service wasn't found. You can view your available services
//     with ListServices. Amazon ECS services are cluster specific and Region specific.
//
//   - ServiceNotActiveException
//     The specified service isn't active. You can't update a service that's inactive.
//     If you have previously deleted a service, you can re-create it with CreateService.
//
//   - TaskSetNotFoundException
//     The specified task set wasn't found. You can view your available task sets
//     with DescribeTaskSets. Task sets are specific to each cluster, service and
//     Region.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DeleteTaskSet
func (c *ECS) DeleteTaskSet(input *DeleteTaskSetInput) (*DeleteTaskSetOutput, error) {
	req, out := c.DeleteTaskSetRequest(input)
	return out, req.Send()
}

// DeleteTaskSetWithContext is the same as DeleteTaskSet with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteTaskSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) DeleteTaskSetWithContext(ctx aws.Context, input *DeleteTaskSetInput, opts ...request.Option) (*DeleteTaskSetOutput, error) {
	req, out := c.DeleteTaskSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeregisterContainerInstance = "DeregisterContainerInstance"

// DeregisterContainerInstanceRequest generates a "aws/request.Request" representing the
// client's request for the DeregisterContainerInstance operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeregisterContainerInstance for more information on using the DeregisterContainerInstance
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the DeregisterContainerInstanceRequest method.
//	req, resp := client.DeregisterContainerInstanceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DeregisterContainerInstance
func (c *ECS) DeregisterContainerInstanceRequest(input *DeregisterContainerInstanceInput) (req *request.Request, output *DeregisterContainerInstanceOutput) {
	op := &request.Operation{
		Name:       opDeregisterContainerInstance,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeregisterContainerInstanceInput{}
	}

	output = &DeregisterContainerInstanceOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeregisterContainerInstance API operation for Amazon EC2 Container Service.
//
// Deregisters an Amazon ECS container instance from the specified cluster.
// This instance is no longer available to run tasks.
//
// If you intend to use the container instance for some other purpose after
// deregistration, we recommend that you stop all of the tasks running on the
// container instance before deregistration. That prevents any orphaned tasks
// from consuming resources.
//
// Deregistering a container instance removes the instance from a cluster, but
// it doesn't terminate the EC2 instance. If you are finished using the instance,
// be sure to terminate it in the Amazon EC2 console to stop billing.
//
// If you terminate a running container instance, Amazon ECS automatically deregisters
// the instance from your cluster (stopped container instances or instances
// with disconnected agents aren't automatically deregistered when terminated).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation DeregisterContainerInstance for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DeregisterContainerInstance
func (c *ECS) DeregisterContainerInstance(input *DeregisterContainerInstanceInput) (*DeregisterContainerInstanceOutput, error) {
	req, out := c.DeregisterContainerInstanceRequest(input)
	return out, req.Send()
}

// DeregisterContainerInstanceWithContext is the same as DeregisterContainerInstance with the addition of
// the ability to pass a context and additional request options.
//
// See DeregisterContainerInstance for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) DeregisterContainerInstanceWithContext(ctx aws.Context, input *DeregisterContainerInstanceInput, opts ...request.Option) (*DeregisterContainerInstanceOutput, error) {
	req, out := c.DeregisterContainerInstanceRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeregisterTaskDefinition = "DeregisterTaskDefinition"

// DeregisterTaskDefinitionRequest generates a "aws/request.Request" representing the
// client's request for the DeregisterTaskDefinition operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DeregisterTaskDefinition for more information on using the DeregisterTaskDefinition
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the DeregisterTaskDefinitionRequest method.
//	req, resp := client.DeregisterTaskDefinitionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DeregisterTaskDefinition
func (c *ECS) DeregisterTaskDefinitionRequest(input *DeregisterTaskDefinitionInput) (req *request.Request, output *DeregisterTaskDefinitionOutput) {
	op := &request.Operation{
		Name:       opDeregisterTaskDefinition,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeregisterTaskDefinitionInput{}
	}

	output = &DeregisterTaskDefinitionOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DeregisterTaskDefinition API operation for Amazon EC2 Container Service.
//
// Deregisters the specified task definition by family and revision. Upon deregistration,
// the task definition is marked as INACTIVE. Existing tasks and services that
// reference an INACTIVE task definition continue to run without disruption.
// Existing services that reference an INACTIVE task definition can still scale
// up or down by modifying the service's desired count. If you want to delete
// a task definition revision, you must first deregister the task definition
// revision.
//
// You can't use an INACTIVE task definition to run new tasks or create new
// services, and you can't update an existing service to reference an INACTIVE
// task definition. However, there may be up to a 10-minute window following
// deregistration where these restrictions have not yet taken effect.
//
// At this time, INACTIVE task definitions remain discoverable in your account
// indefinitely. However, this behavior is subject to change in the future.
// We don't recommend that you rely on INACTIVE task definitions persisting
// beyond the lifecycle of any associated tasks and services.
//
// You must deregister a task definition revision before you delete it. For
// more information, see DeleteTaskDefinitions (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DeleteTaskDefinitions.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation DeregisterTaskDefinition for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DeregisterTaskDefinition
func (c *ECS) DeregisterTaskDefinition(input *DeregisterTaskDefinitionInput) (*DeregisterTaskDefinitionOutput, error) {
	req, out := c.DeregisterTaskDefinitionRequest(input)
	return out, req.Send()
}

// DeregisterTaskDefinitionWithContext is the same as DeregisterTaskDefinition with the addition of
// the ability to pass a context and additional request options.
//
// See DeregisterTaskDefinition for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) DeregisterTaskDefinitionWithContext(ctx aws.Context, input *DeregisterTaskDefinitionInput, opts ...request.Option) (*DeregisterTaskDefinitionOutput, error) {
	req, out := c.DeregisterTaskDefinitionRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDescribeCapacityProviders = "DescribeCapacityProviders"

// DescribeCapacityProvidersRequest generates a "aws/request.Request" representing the
// client's request for the DescribeCapacityProviders operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DescribeCapacityProviders for more information on using the DescribeCapacityProviders
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the DescribeCapacityProvidersRequest method.
//	req, resp := client.DescribeCapacityProvidersRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DescribeCapacityProviders
func (c *ECS) DescribeCapacityProvidersRequest(input *DescribeCapacityProvidersInput) (req *request.Request, output *DescribeCapacityProvidersOutput) {
	op := &request.Operation{
		Name:       opDescribeCapacityProviders,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeCapacityProvidersInput{}
	}

	output = &DescribeCapacityProvidersOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DescribeCapacityProviders API operation for Amazon EC2 Container Service.
//
// Describes one or more of your capacity providers.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation DescribeCapacityProviders for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DescribeCapacityProviders
func (c *ECS) DescribeCapacityProviders(input *DescribeCapacityProvidersInput) (*DescribeCapacityProvidersOutput, error) {
	req, out := c.DescribeCapacityProvidersRequest(input)
	return out, req.Send()
}

// DescribeCapacityProvidersWithContext is the same as DescribeCapacityProviders with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeCapacityProviders for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) DescribeCapacityProvidersWithContext(ctx aws.Context, input *DescribeCapacityProvidersInput, opts ...request.Option) (*DescribeCapacityProvidersOutput, error) {
	req, out := c.DescribeCapacityProvidersRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDescribeClusters = "DescribeClusters"

// DescribeClustersRequest generates a "aws/request.Request" representing the
// client's request for the DescribeClusters operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DescribeClusters for more information on using the DescribeClusters
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the DescribeClustersRequest method.
//	req, resp := client.DescribeClustersRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DescribeClusters
func (c *ECS) DescribeClustersRequest(input *DescribeClustersInput) (req *request.Request, output *DescribeClustersOutput) {
	op := &request.Operation{
		Name:       opDescribeClusters,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeClustersInput{}
	}

	output = &DescribeClustersOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DescribeClusters API operation for Amazon EC2 Container Service.
//
// Describes one or more of your clusters.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation DescribeClusters for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DescribeClusters
func (c *ECS) DescribeClusters(input *DescribeClustersInput) (*DescribeClustersOutput, error) {
	req, out := c.DescribeClustersRequest(input)
	return out, req.Send()
}

// DescribeClustersWithContext is the same as DescribeClusters with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeClusters for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) DescribeClustersWithContext(ctx aws.Context, input *DescribeClustersInput, opts ...request.Option) (*DescribeClustersOutput, error) {
	req, out := c.DescribeClustersRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDescribeContainerInstances = "DescribeContainerInstances"

// DescribeContainerInstancesRequest generates a "aws/request.Request" representing the
// client's request for the DescribeContainerInstances operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DescribeContainerInstances for more information on using the DescribeContainerInstances
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the DescribeContainerInstancesRequest method.
//	req, resp := client.DescribeContainerInstancesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DescribeContainerInstances
func (c *ECS) DescribeContainerInstancesRequest(input *DescribeContainerInstancesInput) (req *request.Request, output *DescribeContainerInstancesOutput) {
	op := &request.Operation{
		Name:       opDescribeContainerInstances,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeContainerInstancesInput{}
	}

	output = &DescribeContainerInstancesOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DescribeContainerInstances API operation for Amazon EC2 Container Service.
//
// Describes one or more container instances. Returns metadata about each container
// instance requested.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation DescribeContainerInstances for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DescribeContainerInstances
func (c *ECS) DescribeContainerInstances(input *DescribeContainerInstancesInput) (*DescribeContainerInstancesOutput, error) {
	req, out := c.DescribeContainerInstancesRequest(input)
	return out, req.Send()
}

// DescribeContainerInstancesWithContext is the same as DescribeContainerInstances with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeContainerInstances for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) DescribeContainerInstancesWithContext(ctx aws.Context, input *DescribeContainerInstancesInput, opts ...request.Option) (*DescribeContainerInstancesOutput, error) {
	req, out := c.DescribeContainerInstancesRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDescribeServices = "DescribeServices"

// DescribeServicesRequest generates a "aws/request.Request" representing the
// client's request for the DescribeServices operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DescribeServices for more information on using the DescribeServices
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the DescribeServicesRequest method.
//	req, resp := client.DescribeServicesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DescribeServices
func (c *ECS) DescribeServicesRequest(input *DescribeServicesInput) (req *request.Request, output *DescribeServicesOutput) {
	op := &request.Operation{
		Name:       opDescribeServices,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeServicesInput{}
	}

	output = &DescribeServicesOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DescribeServices API operation for Amazon EC2 Container Service.
//
// Describes the specified services running in your cluster.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation DescribeServices for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DescribeServices
func (c *ECS) DescribeServices(input *DescribeServicesInput) (*DescribeServicesOutput, error) {
	req, out := c.DescribeServicesRequest(input)
	return out, req.Send()
}

// DescribeServicesWithContext is the same as DescribeServices with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeServices for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) DescribeServicesWithContext(ctx aws.Context, input *DescribeServicesInput, opts ...request.Option) (*DescribeServicesOutput, error) {
	req, out := c.DescribeServicesRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDescribeTaskDefinition = "DescribeTaskDefinition"

// DescribeTaskDefinitionRequest generates a "aws/request.Request" representing the
// client's request for the DescribeTaskDefinition operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DescribeTaskDefinition for more information on using the DescribeTaskDefinition
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the DescribeTaskDefinitionRequest method.
//	req, resp := client.DescribeTaskDefinitionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DescribeTaskDefinition
func (c *ECS) DescribeTaskDefinitionRequest(input *DescribeTaskDefinitionInput) (req *request.Request, output *DescribeTaskDefinitionOutput) {
	op := &request.Operation{
		Name:       opDescribeTaskDefinition,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeTaskDefinitionInput{}
	}

	output = &DescribeTaskDefinitionOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DescribeTaskDefinition API operation for Amazon EC2 Container Service.
//
// Describes a task definition. You can specify a family and revision to find
// information about a specific task definition, or you can simply specify the
// family to find the latest ACTIVE revision in that family.
//
// You can only describe INACTIVE task definitions while an active task or service
// references them.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation DescribeTaskDefinition for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DescribeTaskDefinition
func (c *ECS) DescribeTaskDefinition(input *DescribeTaskDefinitionInput) (*DescribeTaskDefinitionOutput, error) {
	req, out := c.DescribeTaskDefinitionRequest(input)
	return out, req.Send()
}

// DescribeTaskDefinitionWithContext is the same as DescribeTaskDefinition with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeTaskDefinition for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) DescribeTaskDefinitionWithContext(ctx aws.Context, input *DescribeTaskDefinitionInput, opts ...request.Option) (*DescribeTaskDefinitionOutput, error) {
	req, out := c.DescribeTaskDefinitionRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDescribeTaskSets = "DescribeTaskSets"

// DescribeTaskSetsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeTaskSets operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DescribeTaskSets for more information on using the DescribeTaskSets
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the DescribeTaskSetsRequest method.
//	req, resp := client.DescribeTaskSetsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DescribeTaskSets
func (c *ECS) DescribeTaskSetsRequest(input *DescribeTaskSetsInput) (req *request.Request, output *DescribeTaskSetsOutput) {
	op := &request.Operation{
		Name:       opDescribeTaskSets,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeTaskSetsInput{}
	}

	output = &DescribeTaskSetsOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DescribeTaskSets API operation for Amazon EC2 Container Service.
//
// Describes the task sets in the specified cluster and service. This is used
// when a service uses the EXTERNAL deployment controller type. For more information,
// see Amazon ECS Deployment Types (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation DescribeTaskSets for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - UnsupportedFeatureException
//     The specified task isn't supported in this Region.
//
//   - AccessDeniedException
//     You don't have authorization to perform the requested action.
//
//   - ServiceNotFoundException
//     The specified service wasn't found. You can view your available services
//     with ListServices. Amazon ECS services are cluster specific and Region specific.
//
//   - ServiceNotActiveException
//     The specified service isn't active. You can't update a service that's inactive.
//     If you have previously deleted a service, you can re-create it with CreateService.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DescribeTaskSets
func (c *ECS) DescribeTaskSets(input *DescribeTaskSetsInput) (*DescribeTaskSetsOutput, error) {
	req, out := c.DescribeTaskSetsRequest(input)
	return out, req.Send()
}

// DescribeTaskSetsWithContext is the same as DescribeTaskSets with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeTaskSets for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) DescribeTaskSetsWithContext(ctx aws.Context, input *DescribeTaskSetsInput, opts ...request.Option) (*DescribeTaskSetsOutput, error) {
	req, out := c.DescribeTaskSetsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDescribeTasks = "DescribeTasks"

// DescribeTasksRequest generates a "aws/request.Request" representing the
// client's request for the DescribeTasks operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DescribeTasks for more information on using the DescribeTasks
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the DescribeTasksRequest method.
//	req, resp := client.DescribeTasksRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DescribeTasks
func (c *ECS) DescribeTasksRequest(input *DescribeTasksInput) (req *request.Request, output *DescribeTasksOutput) {
	op := &request.Operation{
		Name:       opDescribeTasks,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeTasksInput{}
	}

	output = &DescribeTasksOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DescribeTasks API operation for Amazon EC2 Container Service.
//
// Describes a specified task or tasks.
//
// Currently, stopped tasks appear in the returned results for at least one
// hour.
//
// If you have tasks with tags, and then delete the cluster, the tagged tasks
// are returned in the response. If you create a new cluster with the same name
// as the deleted cluster, the tagged tasks are not included in the response.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation DescribeTasks for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DescribeTasks
func (c *ECS) DescribeTasks(input *DescribeTasksInput) (*DescribeTasksOutput, error) {
	req, out := c.DescribeTasksRequest(input)
	return out, req.Send()
}

// DescribeTasksWithContext is the same as DescribeTasks with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeTasks for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) DescribeTasksWithContext(ctx aws.Context, input *DescribeTasksInput, opts ...request.Option) (*DescribeTasksOutput, error) {
	req, out := c.DescribeTasksRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDiscoverPollEndpoint = "DiscoverPollEndpoint"

// DiscoverPollEndpointRequest generates a "aws/request.Request" representing the
// client's request for the DiscoverPollEndpoint operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DiscoverPollEndpoint for more information on using the DiscoverPollEndpoint
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the DiscoverPollEndpointRequest method.
//	req, resp := client.DiscoverPollEndpointRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DiscoverPollEndpoint
func (c *ECS) DiscoverPollEndpointRequest(input *DiscoverPollEndpointInput) (req *request.Request, output *DiscoverPollEndpointOutput) {
	op := &request.Operation{
		Name:       opDiscoverPollEndpoint,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DiscoverPollEndpointInput{}
	}

	output = &DiscoverPollEndpointOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DiscoverPollEndpoint API operation for Amazon EC2 Container Service.
//
// This action is only used by the Amazon ECS agent, and it is not intended
// for use outside of the agent.
//
// Returns an endpoint for the Amazon ECS agent to poll for updates.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation DiscoverPollEndpoint for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/DiscoverPollEndpoint
func (c *ECS) DiscoverPollEndpoint(input *DiscoverPollEndpointInput) (*DiscoverPollEndpointOutput, error) {
	req, out := c.DiscoverPollEndpointRequest(input)
	return out, req.Send()
}

// DiscoverPollEndpointWithContext is the same as DiscoverPollEndpoint with the addition of
// the ability to pass a context and additional request options.
//
// See DiscoverPollEndpoint for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) DiscoverPollEndpointWithContext(ctx aws.Context, input *DiscoverPollEndpointInput, opts ...request.Option) (*DiscoverPollEndpointOutput, error) {
	req, out := c.DiscoverPollEndpointRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opExecuteCommand = "ExecuteCommand"

// ExecuteCommandRequest generates a "aws/request.Request" representing the
// client's request for the ExecuteCommand operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ExecuteCommand for more information on using the ExecuteCommand
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the ExecuteCommandRequest method.
//	req, resp := client.ExecuteCommandRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ExecuteCommand
func (c *ECS) ExecuteCommandRequest(input *ExecuteCommandInput) (req *request.Request, output *ExecuteCommandOutput) {
	op := &request.Operation{
		Name:       opExecuteCommand,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ExecuteCommandInput{}
	}

	output = &ExecuteCommandOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ExecuteCommand API operation for Amazon EC2 Container Service.
//
// Runs a command remotely on a container within a task.
//
// If you use a condition key in your IAM policy to refine the conditions for
// the policy statement, for example limit the actions to a specific cluster,
// you receive an AccessDeniedException when there is a mismatch between the
// condition key value and the corresponding parameter value.
//
// For information about required permissions and considerations, see Using
// Amazon ECS Exec for debugging (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html)
// in the Amazon ECS Developer Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation ExecuteCommand for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - AccessDeniedException
//     You don't have authorization to perform the requested action.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - TargetNotConnectedException
//     The execute command cannot run. This error can be caused by any of the following
//     configuration issues:
//
//   - Incorrect IAM permissions
//
//   - The SSM agent is not installed or is not running
//
//   - There is an interface Amazon VPC endpoint for Amazon ECS, but there
//     is not one for Systems Manager Session Manager
//
//     For information about how to troubleshoot the issues, see Troubleshooting
//     issues with ECS Exec (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html)
//     in the Amazon Elastic Container Service Developer Guide.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ExecuteCommand
func (c *ECS) ExecuteCommand(input *ExecuteCommandInput) (*ExecuteCommandOutput, error) {
	req, out := c.ExecuteCommandRequest(input)
	return out, req.Send()
}

// ExecuteCommandWithContext is the same as ExecuteCommand with the addition of
// the ability to pass a context and additional request options.
//
// See ExecuteCommand for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) ExecuteCommandWithContext(ctx aws.Context, input *ExecuteCommandInput, opts ...request.Option) (*ExecuteCommandOutput, error) {
	req, out := c.ExecuteCommandRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetTaskProtection = "GetTaskProtection"

// GetTaskProtectionRequest generates a "aws/request.Request" representing the
// client's request for the GetTaskProtection operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GetTaskProtection for more information on using the GetTaskProtection
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the GetTaskProtectionRequest method.
//	req, resp := client.GetTaskProtectionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/GetTaskProtection
func (c *ECS) GetTaskProtectionRequest(input *GetTaskProtectionInput) (req *request.Request, output *GetTaskProtectionOutput) {
	op := &request.Operation{
		Name:       opGetTaskProtection,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetTaskProtectionInput{}
	}

	output = &GetTaskProtectionOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GetTaskProtection API operation for Amazon EC2 Container Service.
//
// Retrieves the protection status of tasks in an Amazon ECS service.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation GetTaskProtection for usage and error information.
//
// Returned Error Types:
//
//   - AccessDeniedException
//     You don't have authorization to perform the requested action.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ResourceNotFoundException
//     The specified resource wasn't found.
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - UnsupportedFeatureException
//     The specified task isn't supported in this Region.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/GetTaskProtection
func (c *ECS) GetTaskProtection(input *GetTaskProtectionInput) (*GetTaskProtectionOutput, error) {
	req, out := c.GetTaskProtectionRequest(input)
	return out, req.Send()
}

// GetTaskProtectionWithContext is the same as GetTaskProtection with the addition of
// the ability to pass a context and additional request options.
//
// See GetTaskProtection for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) GetTaskProtectionWithContext(ctx aws.Context, input *GetTaskProtectionInput, opts ...request.Option) (*GetTaskProtectionOutput, error) {
	req, out := c.GetTaskProtectionRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opListAccountSettings = "ListAccountSettings"

// ListAccountSettingsRequest generates a "aws/request.Request" representing the
// client's request for the ListAccountSettings operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListAccountSettings for more information on using the ListAccountSettings
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the ListAccountSettingsRequest method.
//	req, resp := client.ListAccountSettingsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ListAccountSettings
func (c *ECS) ListAccountSettingsRequest(input *ListAccountSettingsInput) (req *request.Request, output *ListAccountSettingsOutput) {
	op := &request.Operation{
		Name:       opListAccountSettings,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListAccountSettingsInput{}
	}

	output = &ListAccountSettingsOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListAccountSettings API operation for Amazon EC2 Container Service.
//
// Lists the account settings for a specified principal.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation ListAccountSettings for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ListAccountSettings
func (c *ECS) ListAccountSettings(input *ListAccountSettingsInput) (*ListAccountSettingsOutput, error) {
	req, out := c.ListAccountSettingsRequest(input)
	return out, req.Send()
}

// ListAccountSettingsWithContext is the same as ListAccountSettings with the addition of
// the ability to pass a context and additional request options.
//
// See ListAccountSettings for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) ListAccountSettingsWithContext(ctx aws.Context, input *ListAccountSettingsInput, opts ...request.Option) (*ListAccountSettingsOutput, error) {
	req, out := c.ListAccountSettingsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// ListAccountSettingsPages iterates over the pages of a ListAccountSettings operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListAccountSettings method for more information on how to use this operation.
//
// Note: This operation can generate multiple requests to a service.
//
//	// Example iterating over at most 3 pages of a ListAccountSettings operation.
//	pageNum := 0
//	err := client.ListAccountSettingsPages(params,
//	    func(page *ecs.ListAccountSettingsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *ECS) ListAccountSettingsPages(input *ListAccountSettingsInput, fn func(*ListAccountSettingsOutput, bool) bool) error {
	return c.ListAccountSettingsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListAccountSettingsPagesWithContext same as ListAccountSettingsPages except
// it takes a Context and allows setting request options on the pages.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) ListAccountSettingsPagesWithContext(ctx aws.Context, input *ListAccountSettingsInput, fn func(*ListAccountSettingsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListAccountSettingsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListAccountSettingsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

	for p.Next() {
		if !fn(p.Page().(*ListAccountSettingsOutput), !p.HasNextPage()) {
			break
		}
	}

	return p.Err()
}

const opListAttributes = "ListAttributes"

// ListAttributesRequest generates a "aws/request.Request" representing the
// client's request for the ListAttributes operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListAttributes for more information on using the ListAttributes
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the ListAttributesRequest method.
//	req, resp := client.ListAttributesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ListAttributes
func (c *ECS) ListAttributesRequest(input *ListAttributesInput) (req *request.Request, output *ListAttributesOutput) {
	op := &request.Operation{
		Name:       opListAttributes,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListAttributesInput{}
	}

	output = &ListAttributesOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListAttributes API operation for Amazon EC2 Container Service.
//
// Lists the attributes for Amazon ECS resources within a specified target type
// and cluster. When you specify a target type and cluster, ListAttributes returns
// a list of attribute objects, one for each attribute on each resource. You
// can filter the list of results to a single attribute name to only return
// results that have that name. You can also filter the results by attribute
// name and value. You can do this, for example, to see which container instances
// in a cluster are running a Linux AMI (ecs.os-type=linux).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation ListAttributes for usage and error information.
//
// Returned Error Types:
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ListAttributes
func (c *ECS) ListAttributes(input *ListAttributesInput) (*ListAttributesOutput, error) {
	req, out := c.ListAttributesRequest(input)
	return out, req.Send()
}

// ListAttributesWithContext is the same as ListAttributes with the addition of
// the ability to pass a context and additional request options.
//
// See ListAttributes for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) ListAttributesWithContext(ctx aws.Context, input *ListAttributesInput, opts ...request.Option) (*ListAttributesOutput, error) {
	req, out := c.ListAttributesRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// ListAttributesPages iterates over the pages of a ListAttributes operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListAttributes method for more information on how to use this operation.
//
// Note: This operation can generate multiple requests to a service.
//
//	// Example iterating over at most 3 pages of a ListAttributes operation.
//	pageNum := 0
//	err := client.ListAttributesPages(params,
//	    func(page *ecs.ListAttributesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *ECS) ListAttributesPages(input *ListAttributesInput, fn func(*ListAttributesOutput, bool) bool) error {
	return c.ListAttributesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListAttributesPagesWithContext same as ListAttributesPages except
// it takes a Context and allows setting request options on the pages.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) ListAttributesPagesWithContext(ctx aws.Context, input *ListAttributesInput, fn func(*ListAttributesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListAttributesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListAttributesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

	for p.Next() {
		if !fn(p.Page().(*ListAttributesOutput), !p.HasNextPage()) {
			break
		}
	}

	return p.Err()
}

const opListClusters = "ListClusters"

// ListClustersRequest generates a "aws/request.Request" representing the
// client's request for the ListClusters operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListClusters for more information on using the ListClusters
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the ListClustersRequest method.
//	req, resp := client.ListClustersRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ListClusters
func (c *ECS) ListClustersRequest(input *ListClustersInput) (req *request.Request, output *ListClustersOutput) {
	op := &request.Operation{
		Name:       opListClusters,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListClustersInput{}
	}

	output = &ListClustersOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListClusters API operation for Amazon EC2 Container Service.
//
// Returns a list of existing clusters.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation ListClusters for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ListClusters
func (c *ECS) ListClusters(input *ListClustersInput) (*ListClustersOutput, error) {
	req, out := c.ListClustersRequest(input)
	return out, req.Send()
}

// ListClustersWithContext is the same as ListClusters with the addition of
// the ability to pass a context and additional request options.
//
// See ListClusters for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) ListClustersWithContext(ctx aws.Context, input *ListClustersInput, opts ...request.Option) (*ListClustersOutput, error) {
	req, out := c.ListClustersRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// ListClustersPages iterates over the pages of a ListClusters operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListClusters method for more information on how to use this operation.
//
// Note: This operation can generate multiple requests to a service.
//
//	// Example iterating over at most 3 pages of a ListClusters operation.
//	pageNum := 0
//	err := client.ListClustersPages(params,
//	    func(page *ecs.ListClustersOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *ECS) ListClustersPages(input *ListClustersInput, fn func(*ListClustersOutput, bool) bool) error {
	return c.ListClustersPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListClustersPagesWithContext same as ListClustersPages except
// it takes a Context and allows setting request options on the pages.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) ListClustersPagesWithContext(ctx aws.Context, input *ListClustersInput, fn func(*ListClustersOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListClustersInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListClustersRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

	for p.Next() {
		if !fn(p.Page().(*ListClustersOutput), !p.HasNextPage()) {
			break
		}
	}

	return p.Err()
}

const opListContainerInstances = "ListContainerInstances"

// ListContainerInstancesRequest generates a "aws/request.Request" representing the
// client's request for the ListContainerInstances operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListContainerInstances for more information on using the ListContainerInstances
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the ListContainerInstancesRequest method.
//	req, resp := client.ListContainerInstancesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ListContainerInstances
func (c *ECS) ListContainerInstancesRequest(input *ListContainerInstancesInput) (req *request.Request, output *ListContainerInstancesOutput) {
	op := &request.Operation{
		Name:       opListContainerInstances,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListContainerInstancesInput{}
	}

	output = &ListContainerInstancesOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListContainerInstances API operation for Amazon EC2 Container Service.
//
// Returns a list of container instances in a specified cluster. You can filter
// the results of a ListContainerInstances operation with cluster query language
// statements inside the filter parameter. For more information, see Cluster
// Query Language (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-query-language.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation ListContainerInstances for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ListContainerInstances
func (c *ECS) ListContainerInstances(input *ListContainerInstancesInput) (*ListContainerInstancesOutput, error) {
	req, out := c.ListContainerInstancesRequest(input)
	return out, req.Send()
}

// ListContainerInstancesWithContext is the same as ListContainerInstances with the addition of
// the ability to pass a context and additional request options.
//
// See ListContainerInstances for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) ListContainerInstancesWithContext(ctx aws.Context, input *ListContainerInstancesInput, opts ...request.Option) (*ListContainerInstancesOutput, error) {
	req, out := c.ListContainerInstancesRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// ListContainerInstancesPages iterates over the pages of a ListContainerInstances operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListContainerInstances method for more information on how to use this operation.
//
// Note: This operation can generate multiple requests to a service.
//
//	// Example iterating over at most 3 pages of a ListContainerInstances operation.
//	pageNum := 0
//	err := client.ListContainerInstancesPages(params,
//	    func(page *ecs.ListContainerInstancesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *ECS) ListContainerInstancesPages(input *ListContainerInstancesInput, fn func(*ListContainerInstancesOutput, bool) bool) error {
	return c.ListContainerInstancesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListContainerInstancesPagesWithContext same as ListContainerInstancesPages except
// it takes a Context and allows setting request options on the pages.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) ListContainerInstancesPagesWithContext(ctx aws.Context, input *ListContainerInstancesInput, fn func(*ListContainerInstancesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListContainerInstancesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListContainerInstancesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

	for p.Next() {
		if !fn(p.Page().(*ListContainerInstancesOutput), !p.HasNextPage()) {
			break
		}
	}

	return p.Err()
}

const opListServices = "ListServices"

// ListServicesRequest generates a "aws/request.Request" representing the
// client's request for the ListServices operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListServices for more information on using the ListServices
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the ListServicesRequest method.
//	req, resp := client.ListServicesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ListServices
func (c *ECS) ListServicesRequest(input *ListServicesInput) (req *request.Request, output *ListServicesOutput) {
	op := &request.Operation{
		Name:       opListServices,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListServicesInput{}
	}

	output = &ListServicesOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListServices API operation for Amazon EC2 Container Service.
//
// Returns a list of services. You can filter the results by cluster, launch
// type, and scheduling strategy.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation ListServices for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ListServices
func (c *ECS) ListServices(input *ListServicesInput) (*ListServicesOutput, error) {
	req, out := c.ListServicesRequest(input)
	return out, req.Send()
}

// ListServicesWithContext is the same as ListServices with the addition of
// the ability to pass a context and additional request options.
//
// See ListServices for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) ListServicesWithContext(ctx aws.Context, input *ListServicesInput, opts ...request.Option) (*ListServicesOutput, error) {
	req, out := c.ListServicesRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// ListServicesPages iterates over the pages of a ListServices operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListServices method for more information on how to use this operation.
//
// Note: This operation can generate multiple requests to a service.
//
//	// Example iterating over at most 3 pages of a ListServices operation.
//	pageNum := 0
//	err := client.ListServicesPages(params,
//	    func(page *ecs.ListServicesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *ECS) ListServicesPages(input *ListServicesInput, fn func(*ListServicesOutput, bool) bool) error {
	return c.ListServicesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListServicesPagesWithContext same as ListServicesPages except
// it takes a Context and allows setting request options on the pages.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) ListServicesPagesWithContext(ctx aws.Context, input *ListServicesInput, fn func(*ListServicesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListServicesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListServicesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

	for p.Next() {
		if !fn(p.Page().(*ListServicesOutput), !p.HasNextPage()) {
			break
		}
	}

	return p.Err()
}

const opListServicesByNamespace = "ListServicesByNamespace"

// ListServicesByNamespaceRequest generates a "aws/request.Request" representing the
// client's request for the ListServicesByNamespace operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListServicesByNamespace for more information on using the ListServicesByNamespace
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the ListServicesByNamespaceRequest method.
//	req, resp := client.ListServicesByNamespaceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ListServicesByNamespace
func (c *ECS) ListServicesByNamespaceRequest(input *ListServicesByNamespaceInput) (req *request.Request, output *ListServicesByNamespaceOutput) {
	op := &request.Operation{
		Name:       opListServicesByNamespace,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListServicesByNamespaceInput{}
	}

	output = &ListServicesByNamespaceOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListServicesByNamespace API operation for Amazon EC2 Container Service.
//
// This operation lists all of the services that are associated with a Cloud
// Map namespace. This list might include services in different clusters. In
// contrast, ListServices can only list services in one cluster at a time. If
// you need to filter the list of services in a single cluster by various parameters,
// use ListServices. For more information, see Service Connect (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation ListServicesByNamespace for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - NamespaceNotFoundException
//     The specified namespace wasn't found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ListServicesByNamespace
func (c *ECS) ListServicesByNamespace(input *ListServicesByNamespaceInput) (*ListServicesByNamespaceOutput, error) {
	req, out := c.ListServicesByNamespaceRequest(input)
	return out, req.Send()
}

// ListServicesByNamespaceWithContext is the same as ListServicesByNamespace with the addition of
// the ability to pass a context and additional request options.
//
// See ListServicesByNamespace for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) ListServicesByNamespaceWithContext(ctx aws.Context, input *ListServicesByNamespaceInput, opts ...request.Option) (*ListServicesByNamespaceOutput, error) {
	req, out := c.ListServicesByNamespaceRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// ListServicesByNamespacePages iterates over the pages of a ListServicesByNamespace operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListServicesByNamespace method for more information on how to use this operation.
//
// Note: This operation can generate multiple requests to a service.
//
//	// Example iterating over at most 3 pages of a ListServicesByNamespace operation.
//	pageNum := 0
//	err := client.ListServicesByNamespacePages(params,
//	    func(page *ecs.ListServicesByNamespaceOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *ECS) ListServicesByNamespacePages(input *ListServicesByNamespaceInput, fn func(*ListServicesByNamespaceOutput, bool) bool) error {
	return c.ListServicesByNamespacePagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListServicesByNamespacePagesWithContext same as ListServicesByNamespacePages except
// it takes a Context and allows setting request options on the pages.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) ListServicesByNamespacePagesWithContext(ctx aws.Context, input *ListServicesByNamespaceInput, fn func(*ListServicesByNamespaceOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListServicesByNamespaceInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListServicesByNamespaceRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

	for p.Next() {
		if !fn(p.Page().(*ListServicesByNamespaceOutput), !p.HasNextPage()) {
			break
		}
	}

	return p.Err()
}

const opListTagsForResource = "ListTagsForResource"

// ListTagsForResourceRequest generates a "aws/request.Request" representing the
// client's request for the ListTagsForResource operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListTagsForResource for more information on using the ListTagsForResource
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the ListTagsForResourceRequest method.
//	req, resp := client.ListTagsForResourceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ListTagsForResource
func (c *ECS) ListTagsForResourceRequest(input *ListTagsForResourceInput) (req *request.Request, output *ListTagsForResourceOutput) {
	op := &request.Operation{
		Name:       opListTagsForResource,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListTagsForResourceInput{}
	}

	output = &ListTagsForResourceOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListTagsForResource API operation for Amazon EC2 Container Service.
//
// List the tags for an Amazon ECS resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation ListTagsForResource for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ListTagsForResource
func (c *ECS) ListTagsForResource(input *ListTagsForResourceInput) (*ListTagsForResourceOutput, error) {
	req, out := c.ListTagsForResourceRequest(input)
	return out, req.Send()
}

// ListTagsForResourceWithContext is the same as ListTagsForResource with the addition of
// the ability to pass a context and additional request options.
//
// See ListTagsForResource for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) ListTagsForResourceWithContext(ctx aws.Context, input *ListTagsForResourceInput, opts ...request.Option) (*ListTagsForResourceOutput, error) {
	req, out := c.ListTagsForResourceRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opListTaskDefinitionFamilies = "ListTaskDefinitionFamilies"

// ListTaskDefinitionFamiliesRequest generates a "aws/request.Request" representing the
// client's request for the ListTaskDefinitionFamilies operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListTaskDefinitionFamilies for more information on using the ListTaskDefinitionFamilies
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the ListTaskDefinitionFamiliesRequest method.
//	req, resp := client.ListTaskDefinitionFamiliesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ListTaskDefinitionFamilies
func (c *ECS) ListTaskDefinitionFamiliesRequest(input *ListTaskDefinitionFamiliesInput) (req *request.Request, output *ListTaskDefinitionFamiliesOutput) {
	op := &request.Operation{
		Name:       opListTaskDefinitionFamilies,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListTaskDefinitionFamiliesInput{}
	}

	output = &ListTaskDefinitionFamiliesOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListTaskDefinitionFamilies API operation for Amazon EC2 Container Service.
//
// Returns a list of task definition families that are registered to your account.
// This list includes task definition families that no longer have any ACTIVE
// task definition revisions.
//
// You can filter out task definition families that don't contain any ACTIVE
// task definition revisions by setting the status parameter to ACTIVE. You
// can also filter the results with the familyPrefix parameter.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation ListTaskDefinitionFamilies for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ListTaskDefinitionFamilies
func (c *ECS) ListTaskDefinitionFamilies(input *ListTaskDefinitionFamiliesInput) (*ListTaskDefinitionFamiliesOutput, error) {
	req, out := c.ListTaskDefinitionFamiliesRequest(input)
	return out, req.Send()
}

// ListTaskDefinitionFamiliesWithContext is the same as ListTaskDefinitionFamilies with the addition of
// the ability to pass a context and additional request options.
//
// See ListTaskDefinitionFamilies for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) ListTaskDefinitionFamiliesWithContext(ctx aws.Context, input *ListTaskDefinitionFamiliesInput, opts ...request.Option) (*ListTaskDefinitionFamiliesOutput, error) {
	req, out := c.ListTaskDefinitionFamiliesRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// ListTaskDefinitionFamiliesPages iterates over the pages of a ListTaskDefinitionFamilies operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListTaskDefinitionFamilies method for more information on how to use this operation.
//
// Note: This operation can generate multiple requests to a service.
//
//	// Example iterating over at most 3 pages of a ListTaskDefinitionFamilies operation.
//	pageNum := 0
//	err := client.ListTaskDefinitionFamiliesPages(params,
//	    func(page *ecs.ListTaskDefinitionFamiliesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *ECS) ListTaskDefinitionFamiliesPages(input *ListTaskDefinitionFamiliesInput, fn func(*ListTaskDefinitionFamiliesOutput, bool) bool) error {
	return c.ListTaskDefinitionFamiliesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListTaskDefinitionFamiliesPagesWithContext same as ListTaskDefinitionFamiliesPages except
// it takes a Context and allows setting request options on the pages.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) ListTaskDefinitionFamiliesPagesWithContext(ctx aws.Context, input *ListTaskDefinitionFamiliesInput, fn func(*ListTaskDefinitionFamiliesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListTaskDefinitionFamiliesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListTaskDefinitionFamiliesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

	for p.Next() {
		if !fn(p.Page().(*ListTaskDefinitionFamiliesOutput), !p.HasNextPage()) {
			break
		}
	}

	return p.Err()
}

const opListTaskDefinitions = "ListTaskDefinitions"

// ListTaskDefinitionsRequest generates a "aws/request.Request" representing the
// client's request for the ListTaskDefinitions operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListTaskDefinitions for more information on using the ListTaskDefinitions
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the ListTaskDefinitionsRequest method.
//	req, resp := client.ListTaskDefinitionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ListTaskDefinitions
func (c *ECS) ListTaskDefinitionsRequest(input *ListTaskDefinitionsInput) (req *request.Request, output *ListTaskDefinitionsOutput) {
	op := &request.Operation{
		Name:       opListTaskDefinitions,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListTaskDefinitionsInput{}
	}

	output = &ListTaskDefinitionsOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListTaskDefinitions API operation for Amazon EC2 Container Service.
//
// Returns a list of task definitions that are registered to your account. You
// can filter the results by family name with the familyPrefix parameter or
// by status with the status parameter.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation ListTaskDefinitions for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ListTaskDefinitions
func (c *ECS) ListTaskDefinitions(input *ListTaskDefinitionsInput) (*ListTaskDefinitionsOutput, error) {
	req, out := c.ListTaskDefinitionsRequest(input)
	return out, req.Send()
}

// ListTaskDefinitionsWithContext is the same as ListTaskDefinitions with the addition of
// the ability to pass a context and additional request options.
//
// See ListTaskDefinitions for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) ListTaskDefinitionsWithContext(ctx aws.Context, input *ListTaskDefinitionsInput, opts ...request.Option) (*ListTaskDefinitionsOutput, error) {
	req, out := c.ListTaskDefinitionsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// ListTaskDefinitionsPages iterates over the pages of a ListTaskDefinitions operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListTaskDefinitions method for more information on how to use this operation.
//
// Note: This operation can generate multiple requests to a service.
//
//	// Example iterating over at most 3 pages of a ListTaskDefinitions operation.
//	pageNum := 0
//	err := client.ListTaskDefinitionsPages(params,
//	    func(page *ecs.ListTaskDefinitionsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *ECS) ListTaskDefinitionsPages(input *ListTaskDefinitionsInput, fn func(*ListTaskDefinitionsOutput, bool) bool) error {
	return c.ListTaskDefinitionsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListTaskDefinitionsPagesWithContext same as ListTaskDefinitionsPages except
// it takes a Context and allows setting request options on the pages.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) ListTaskDefinitionsPagesWithContext(ctx aws.Context, input *ListTaskDefinitionsInput, fn func(*ListTaskDefinitionsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListTaskDefinitionsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListTaskDefinitionsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

	for p.Next() {
		if !fn(p.Page().(*ListTaskDefinitionsOutput), !p.HasNextPage()) {
			break
		}
	}

	return p.Err()
}

const opListTasks = "ListTasks"

// ListTasksRequest generates a "aws/request.Request" representing the
// client's request for the ListTasks operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListTasks for more information on using the ListTasks
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the ListTasksRequest method.
//	req, resp := client.ListTasksRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ListTasks
func (c *ECS) ListTasksRequest(input *ListTasksInput) (req *request.Request, output *ListTasksOutput) {
	op := &request.Operation{
		Name:       opListTasks,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListTasksInput{}
	}

	output = &ListTasksOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ListTasks API operation for Amazon EC2 Container Service.
//
// Returns a list of tasks. You can filter the results by cluster, task definition
// family, container instance, launch type, what IAM principal started the task,
// or by the desired status of the task.
//
// Recently stopped tasks might appear in the returned results.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation ListTasks for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - ServiceNotFoundException
//     The specified service wasn't found. You can view your available services
//     with ListServices. Amazon ECS services are cluster specific and Region specific.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/ListTasks
func (c *ECS) ListTasks(input *ListTasksInput) (*ListTasksOutput, error) {
	req, out := c.ListTasksRequest(input)
	return out, req.Send()
}

// ListTasksWithContext is the same as ListTasks with the addition of
// the ability to pass a context and additional request options.
//
// See ListTasks for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) ListTasksWithContext(ctx aws.Context, input *ListTasksInput, opts ...request.Option) (*ListTasksOutput, error) {
	req, out := c.ListTasksRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// ListTasksPages iterates over the pages of a ListTasks operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListTasks method for more information on how to use this operation.
//
// Note: This operation can generate multiple requests to a service.
//
//	// Example iterating over at most 3 pages of a ListTasks operation.
//	pageNum := 0
//	err := client.ListTasksPages(params,
//	    func(page *ecs.ListTasksOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *ECS) ListTasksPages(input *ListTasksInput, fn func(*ListTasksOutput, bool) bool) error {
	return c.ListTasksPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListTasksPagesWithContext same as ListTasksPages except
// it takes a Context and allows setting request options on the pages.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) ListTasksPagesWithContext(ctx aws.Context, input *ListTasksInput, fn func(*ListTasksOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListTasksInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListTasksRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

	for p.Next() {
		if !fn(p.Page().(*ListTasksOutput), !p.HasNextPage()) {
			break
		}
	}

	return p.Err()
}

const opPutAccountSetting = "PutAccountSetting"

// PutAccountSettingRequest generates a "aws/request.Request" representing the
// client's request for the PutAccountSetting operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See PutAccountSetting for more information on using the PutAccountSetting
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the PutAccountSettingRequest method.
//	req, resp := client.PutAccountSettingRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/PutAccountSetting
func (c *ECS) PutAccountSettingRequest(input *PutAccountSettingInput) (req *request.Request, output *PutAccountSettingOutput) {
	op := &request.Operation{
		Name:       opPutAccountSetting,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutAccountSettingInput{}
	}

	output = &PutAccountSettingOutput{}
	req = c.newRequest(op, input, output)
	return
}

// PutAccountSetting API operation for Amazon EC2 Container Service.
//
// Modifies an account setting. Account settings are set on a per-Region basis.
//
// If you change the root user account setting, the default settings are reset
// for users and roles that do not have specified individual account settings.
// For more information, see Account Settings (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// When you specify serviceLongArnFormat, taskLongArnFormat, or containerInstanceLongArnFormat,
// the Amazon Resource Name (ARN) and resource ID format of the resource type
// for a specified user, role, or the root user for an account is affected.
// The opt-in and opt-out account setting must be set for each Amazon ECS resource
// separately. The ARN and resource ID format of a resource is defined by the
// opt-in status of the user or role that created the resource. You must turn
// on this setting to use Amazon ECS features such as resource tagging.
//
// When you specify awsvpcTrunking, the elastic network interface (ENI) limit
// for any new container instances that support the feature is changed. If awsvpcTrunking
// is turned on, any new container instances that support the feature are launched
// have the increased ENI limits available to them. For more information, see
// Elastic Network Interface Trunking (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/container-instance-eni.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// When you specify containerInsights, the default setting indicating whether
// Amazon Web Services CloudWatch Container Insights is turned on for your clusters
// is changed. If containerInsights is turned on, any new clusters that are
// created will have Container Insights turned on unless you disable it during
// cluster creation. For more information, see CloudWatch Container Insights
// (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cloudwatch-container-insights.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// Amazon ECS is introducing tagging authorization for resource creation. Users
// must have permissions for actions that create the resource, such as ecsCreateCluster.
// If tags are specified when you create a resource, Amazon Web Services performs
// additional authorization to verify if users or roles have permissions to
// create tags. Therefore, you must grant explicit permissions to use the ecs:TagResource
// action. For more information, see Grant permission to tag resources on creation
// (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/supported-iam-actions-tagging.html)
// in the Amazon ECS Developer Guide.
//
// When Amazon Web Services determines that a security or infrastructure update
// is needed for an Amazon ECS task hosted on Fargate, the tasks need to be
// stopped and new tasks launched to replace them. Use fargateTaskRetirementWaitPeriod
// to configure the wait time to retire a Fargate task. For information about
// the Fargate tasks maintenance, see Amazon Web Services Fargate task maintenance
// (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-maintenance.html)
// in the Amazon ECS Developer Guide.
//
// The guardDutyActivate parameter is read-only in Amazon ECS and indicates
// whether Amazon ECS Runtime Monitoring is enabled or disabled by your security
// administrator in your Amazon ECS account. Amazon GuardDuty controls this
// account setting on your behalf. For more information, see Protecting Amazon
// ECS workloads with Amazon ECS Runtime Monitoring (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-guard-duty-integration.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation PutAccountSetting for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/PutAccountSetting
func (c *ECS) PutAccountSetting(input *PutAccountSettingInput) (*PutAccountSettingOutput, error) {
	req, out := c.PutAccountSettingRequest(input)
	return out, req.Send()
}

// PutAccountSettingWithContext is the same as PutAccountSetting with the addition of
// the ability to pass a context and additional request options.
//
// See PutAccountSetting for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) PutAccountSettingWithContext(ctx aws.Context, input *PutAccountSettingInput, opts ...request.Option) (*PutAccountSettingOutput, error) {
	req, out := c.PutAccountSettingRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opPutAccountSettingDefault = "PutAccountSettingDefault"

// PutAccountSettingDefaultRequest generates a "aws/request.Request" representing the
// client's request for the PutAccountSettingDefault operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See PutAccountSettingDefault for more information on using the PutAccountSettingDefault
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the PutAccountSettingDefaultRequest method.
//	req, resp := client.PutAccountSettingDefaultRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/PutAccountSettingDefault
func (c *ECS) PutAccountSettingDefaultRequest(input *PutAccountSettingDefaultInput) (req *request.Request, output *PutAccountSettingDefaultOutput) {
	op := &request.Operation{
		Name:       opPutAccountSettingDefault,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutAccountSettingDefaultInput{}
	}

	output = &PutAccountSettingDefaultOutput{}
	req = c.newRequest(op, input, output)
	return
}

// PutAccountSettingDefault API operation for Amazon EC2 Container Service.
//
// Modifies an account setting for all users on an account for whom no individual
// account setting has been specified. Account settings are set on a per-Region
// basis.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation PutAccountSettingDefault for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/PutAccountSettingDefault
func (c *ECS) PutAccountSettingDefault(input *PutAccountSettingDefaultInput) (*PutAccountSettingDefaultOutput, error) {
	req, out := c.PutAccountSettingDefaultRequest(input)
	return out, req.Send()
}

// PutAccountSettingDefaultWithContext is the same as PutAccountSettingDefault with the addition of
// the ability to pass a context and additional request options.
//
// See PutAccountSettingDefault for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) PutAccountSettingDefaultWithContext(ctx aws.Context, input *PutAccountSettingDefaultInput, opts ...request.Option) (*PutAccountSettingDefaultOutput, error) {
	req, out := c.PutAccountSettingDefaultRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opPutAttributes = "PutAttributes"

// PutAttributesRequest generates a "aws/request.Request" representing the
// client's request for the PutAttributes operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See PutAttributes for more information on using the PutAttributes
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the PutAttributesRequest method.
//	req, resp := client.PutAttributesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/PutAttributes
func (c *ECS) PutAttributesRequest(input *PutAttributesInput) (req *request.Request, output *PutAttributesOutput) {
	op := &request.Operation{
		Name:       opPutAttributes,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutAttributesInput{}
	}

	output = &PutAttributesOutput{}
	req = c.newRequest(op, input, output)
	return
}

// PutAttributes API operation for Amazon EC2 Container Service.
//
// Create or update an attribute on an Amazon ECS resource. If the attribute
// doesn't exist, it's created. If the attribute exists, its value is replaced
// with the specified value. To delete an attribute, use DeleteAttributes. For
// more information, see Attributes (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement-constraints.html#attributes)
// in the Amazon Elastic Container Service Developer Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation PutAttributes for usage and error information.
//
// Returned Error Types:
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - TargetNotFoundException
//     The specified target wasn't found. You can view your available container
//     instances with ListContainerInstances. Amazon ECS container instances are
//     cluster-specific and Region-specific.
//
//   - AttributeLimitExceededException
//     You can apply up to 10 custom attributes for each resource. You can view
//     the attributes of a resource with ListAttributes. You can remove existing
//     attributes on a resource with DeleteAttributes.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/PutAttributes
func (c *ECS) PutAttributes(input *PutAttributesInput) (*PutAttributesOutput, error) {
	req, out := c.PutAttributesRequest(input)
	return out, req.Send()
}

// PutAttributesWithContext is the same as PutAttributes with the addition of
// the ability to pass a context and additional request options.
//
// See PutAttributes for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) PutAttributesWithContext(ctx aws.Context, input *PutAttributesInput, opts ...request.Option) (*PutAttributesOutput, error) {
	req, out := c.PutAttributesRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opPutClusterCapacityProviders = "PutClusterCapacityProviders"

// PutClusterCapacityProvidersRequest generates a "aws/request.Request" representing the
// client's request for the PutClusterCapacityProviders operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See PutClusterCapacityProviders for more information on using the PutClusterCapacityProviders
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the PutClusterCapacityProvidersRequest method.
//	req, resp := client.PutClusterCapacityProvidersRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/PutClusterCapacityProviders
func (c *ECS) PutClusterCapacityProvidersRequest(input *PutClusterCapacityProvidersInput) (req *request.Request, output *PutClusterCapacityProvidersOutput) {
	op := &request.Operation{
		Name:       opPutClusterCapacityProviders,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutClusterCapacityProvidersInput{}
	}

	output = &PutClusterCapacityProvidersOutput{}
	req = c.newRequest(op, input, output)
	return
}

// PutClusterCapacityProviders API operation for Amazon EC2 Container Service.
//
// Modifies the available capacity providers and the default capacity provider
// strategy for a cluster.
//
// You must specify both the available capacity providers and a default capacity
// provider strategy for the cluster. If the specified cluster has existing
// capacity providers associated with it, you must specify all existing capacity
// providers in addition to any new ones you want to add. Any existing capacity
// providers that are associated with a cluster that are omitted from a PutClusterCapacityProviders
// API call will be disassociated with the cluster. You can only disassociate
// an existing capacity provider from a cluster if it's not being used by any
// existing tasks.
//
// When creating a service or running a task on a cluster, if no capacity provider
// or launch type is specified, then the cluster's default capacity provider
// strategy is used. We recommend that you define a default capacity provider
// strategy for your cluster. However, you must specify an empty array ([])
// to bypass defining a default strategy.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation PutClusterCapacityProviders for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - ResourceInUseException
//     The specified resource is in-use and can't be removed.
//
//   - UpdateInProgressException
//     There's already a current Amazon ECS container agent update in progress on
//     the container instance that's specified. If the container agent becomes disconnected
//     while it's in a transitional stage, such as PENDING or STAGING, the update
//     process can get stuck in that state. However, when the agent reconnects,
//     it resumes where it stopped previously.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/PutClusterCapacityProviders
func (c *ECS) PutClusterCapacityProviders(input *PutClusterCapacityProvidersInput) (*PutClusterCapacityProvidersOutput, error) {
	req, out := c.PutClusterCapacityProvidersRequest(input)
	return out, req.Send()
}

// PutClusterCapacityProvidersWithContext is the same as PutClusterCapacityProviders with the addition of
// the ability to pass a context and additional request options.
//
// See PutClusterCapacityProviders for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) PutClusterCapacityProvidersWithContext(ctx aws.Context, input *PutClusterCapacityProvidersInput, opts ...request.Option) (*PutClusterCapacityProvidersOutput, error) {
	req, out := c.PutClusterCapacityProvidersRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opRegisterContainerInstance = "RegisterContainerInstance"

// RegisterContainerInstanceRequest generates a "aws/request.Request" representing the
// client's request for the RegisterContainerInstance operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See RegisterContainerInstance for more information on using the RegisterContainerInstance
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the RegisterContainerInstanceRequest method.
//	req, resp := client.RegisterContainerInstanceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/RegisterContainerInstance
func (c *ECS) RegisterContainerInstanceRequest(input *RegisterContainerInstanceInput) (req *request.Request, output *RegisterContainerInstanceOutput) {
	op := &request.Operation{
		Name:       opRegisterContainerInstance,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &RegisterContainerInstanceInput{}
	}

	output = &RegisterContainerInstanceOutput{}
	req = c.newRequest(op, input, output)
	return
}

// RegisterContainerInstance API operation for Amazon EC2 Container Service.
//
// This action is only used by the Amazon ECS agent, and it is not intended
// for use outside of the agent.
//
// Registers an EC2 instance into the specified cluster. This instance becomes
// available to place containers on.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation RegisterContainerInstance for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/RegisterContainerInstance
func (c *ECS) RegisterContainerInstance(input *RegisterContainerInstanceInput) (*RegisterContainerInstanceOutput, error) {
	req, out := c.RegisterContainerInstanceRequest(input)
	return out, req.Send()
}

// RegisterContainerInstanceWithContext is the same as RegisterContainerInstance with the addition of
// the ability to pass a context and additional request options.
//
// See RegisterContainerInstance for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) RegisterContainerInstanceWithContext(ctx aws.Context, input *RegisterContainerInstanceInput, opts ...request.Option) (*RegisterContainerInstanceOutput, error) {
	req, out := c.RegisterContainerInstanceRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opRegisterTaskDefinition = "RegisterTaskDefinition"

// RegisterTaskDefinitionRequest generates a "aws/request.Request" representing the
// client's request for the RegisterTaskDefinition operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See RegisterTaskDefinition for more information on using the RegisterTaskDefinition
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the RegisterTaskDefinitionRequest method.
//	req, resp := client.RegisterTaskDefinitionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/RegisterTaskDefinition
func (c *ECS) RegisterTaskDefinitionRequest(input *RegisterTaskDefinitionInput) (req *request.Request, output *RegisterTaskDefinitionOutput) {
	op := &request.Operation{
		Name:       opRegisterTaskDefinition,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &RegisterTaskDefinitionInput{}
	}

	output = &RegisterTaskDefinitionOutput{}
	req = c.newRequest(op, input, output)
	return
}

// RegisterTaskDefinition API operation for Amazon EC2 Container Service.
//
// Registers a new task definition from the supplied family and containerDefinitions.
// Optionally, you can add data volumes to your containers with the volumes
// parameter. For more information about task definition parameters and defaults,
// see Amazon ECS Task Definitions (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_defintions.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// You can specify a role for your task with the taskRoleArn parameter. When
// you specify a role for a task, its containers can then use the latest versions
// of the CLI or SDKs to make API requests to the Amazon Web Services services
// that are specified in the policy that's associated with the role. For more
// information, see IAM Roles for Tasks (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// You can specify a Docker networking mode for the containers in your task
// definition with the networkMode parameter. The available network modes correspond
// to those described in Network settings (https://docs.docker.com/engine/reference/run/#/network-settings)
// in the Docker run reference. If you specify the awsvpc network mode, the
// task is allocated an elastic network interface, and you must specify a NetworkConfiguration
// when you create a service or run a task with the task definition. For more
// information, see Task Networking (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation RegisterTaskDefinition for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/RegisterTaskDefinition
func (c *ECS) RegisterTaskDefinition(input *RegisterTaskDefinitionInput) (*RegisterTaskDefinitionOutput, error) {
	req, out := c.RegisterTaskDefinitionRequest(input)
	return out, req.Send()
}

// RegisterTaskDefinitionWithContext is the same as RegisterTaskDefinition with the addition of
// the ability to pass a context and additional request options.
//
// See RegisterTaskDefinition for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) RegisterTaskDefinitionWithContext(ctx aws.Context, input *RegisterTaskDefinitionInput, opts ...request.Option) (*RegisterTaskDefinitionOutput, error) {
	req, out := c.RegisterTaskDefinitionRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opRunTask = "RunTask"

// RunTaskRequest generates a "aws/request.Request" representing the
// client's request for the RunTask operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See RunTask for more information on using the RunTask
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the RunTaskRequest method.
//	req, resp := client.RunTaskRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/RunTask
func (c *ECS) RunTaskRequest(input *RunTaskInput) (req *request.Request, output *RunTaskOutput) {
	op := &request.Operation{
		Name:       opRunTask,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &RunTaskInput{}
	}

	output = &RunTaskOutput{}
	req = c.newRequest(op, input, output)
	return
}

// RunTask API operation for Amazon EC2 Container Service.
//
// Starts a new task using the specified task definition.
//
// You can allow Amazon ECS to place tasks for you, or you can customize how
// Amazon ECS places tasks using placement constraints and placement strategies.
// For more information, see Scheduling Tasks (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduling_tasks.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// Alternatively, you can use StartTask to use your own scheduler or place tasks
// manually on specific container instances.
//
// Starting April 15, 2023, Amazon Web Services will not onboard new customers
// to Amazon Elastic Inference (EI), and will help current customers migrate
// their workloads to options that offer better price and performance. After
// April 15, 2023, new customers will not be able to launch instances with Amazon
// EI accelerators in Amazon SageMaker, Amazon ECS, or Amazon EC2. However,
// customers who have used Amazon EI at least once during the past 30-day period
// are considered current customers and will be able to continue using the service.
//
// The Amazon ECS API follows an eventual consistency model. This is because
// of the distributed nature of the system supporting the API. This means that
// the result of an API command you run that affects your Amazon ECS resources
// might not be immediately visible to all subsequent commands you run. Keep
// this in mind when you carry out an API command that immediately follows a
// previous API command.
//
// To manage eventual consistency, you can do the following:
//
//   - Confirm the state of the resource before you run a command to modify
//     it. Run the DescribeTasks command using an exponential backoff algorithm
//     to ensure that you allow enough time for the previous command to propagate
//     through the system. To do this, run the DescribeTasks command repeatedly,
//     starting with a couple of seconds of wait time and increasing gradually
//     up to five minutes of wait time.
//
//   - Add wait time between subsequent commands, even if the DescribeTasks
//     command returns an accurate response. Apply an exponential backoff algorithm
//     starting with a couple of seconds of wait time, and increase gradually
//     up to about five minutes of wait time.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation RunTask for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - UnsupportedFeatureException
//     The specified task isn't supported in this Region.
//
//   - PlatformUnknownException
//     The specified platform version doesn't exist.
//
//   - PlatformTaskDefinitionIncompatibilityException
//     The specified platform version doesn't satisfy the required capabilities
//     of the task definition.
//
//   - AccessDeniedException
//     You don't have authorization to perform the requested action.
//
//   - BlockedException
//     Your Amazon Web Services account was blocked. For more information, contact
//     Amazon Web Services Support (http://aws.amazon.com/contact-us/).
//
//   - ConflictException
//     The RunTask request could not be processed due to conflicts. The provided
//     clientToken is already in use with a different RunTask request. The resourceIds
//     are the existing task ARNs which are already associated with the clientToken.
//
//     To fix this issue:
//
//   - Run RunTask with a unique clientToken.
//
//   - Run RunTask with the clientToken and the original set of parameters
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/RunTask
func (c *ECS) RunTask(input *RunTaskInput) (*RunTaskOutput, error) {
	req, out := c.RunTaskRequest(input)
	return out, req.Send()
}

// RunTaskWithContext is the same as RunTask with the addition of
// the ability to pass a context and additional request options.
//
// See RunTask for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) RunTaskWithContext(ctx aws.Context, input *RunTaskInput, opts ...request.Option) (*RunTaskOutput, error) {
	req, out := c.RunTaskRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opStartTask = "StartTask"

// StartTaskRequest generates a "aws/request.Request" representing the
// client's request for the StartTask operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See StartTask for more information on using the StartTask
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the StartTaskRequest method.
//	req, resp := client.StartTaskRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/StartTask
func (c *ECS) StartTaskRequest(input *StartTaskInput) (req *request.Request, output *StartTaskOutput) {
	op := &request.Operation{
		Name:       opStartTask,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &StartTaskInput{}
	}

	output = &StartTaskOutput{}
	req = c.newRequest(op, input, output)
	return
}

// StartTask API operation for Amazon EC2 Container Service.
//
// Starts a new task from the specified task definition on the specified container
// instance or instances.
//
// Starting April 15, 2023, Amazon Web Services will not onboard new customers
// to Amazon Elastic Inference (EI), and will help current customers migrate
// their workloads to options that offer better price and performance. After
// April 15, 2023, new customers will not be able to launch instances with Amazon
// EI accelerators in Amazon SageMaker, Amazon ECS, or Amazon EC2. However,
// customers who have used Amazon EI at least once during the past 30-day period
// are considered current customers and will be able to continue using the service.
//
// Alternatively, you can use RunTask to place tasks for you. For more information,
// see Scheduling Tasks (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduling_tasks.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation StartTask for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/StartTask
func (c *ECS) StartTask(input *StartTaskInput) (*StartTaskOutput, error) {
	req, out := c.StartTaskRequest(input)
	return out, req.Send()
}

// StartTaskWithContext is the same as StartTask with the addition of
// the ability to pass a context and additional request options.
//
// See StartTask for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) StartTaskWithContext(ctx aws.Context, input *StartTaskInput, opts ...request.Option) (*StartTaskOutput, error) {
	req, out := c.StartTaskRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opStopTask = "StopTask"

// StopTaskRequest generates a "aws/request.Request" representing the
// client's request for the StopTask operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See StopTask for more information on using the StopTask
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the StopTaskRequest method.
//	req, resp := client.StopTaskRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/StopTask
func (c *ECS) StopTaskRequest(input *StopTaskInput) (req *request.Request, output *StopTaskOutput) {
	op := &request.Operation{
		Name:       opStopTask,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &StopTaskInput{}
	}

	output = &StopTaskOutput{}
	req = c.newRequest(op, input, output)
	return
}

// StopTask API operation for Amazon EC2 Container Service.
//
// Stops a running task. Any tags associated with the task will be deleted.
//
// When StopTask is called on a task, the equivalent of docker stop is issued
// to the containers running in the task. This results in a SIGTERM value and
// a default 30-second timeout, after which the SIGKILL value is sent and the
// containers are forcibly stopped. If the container handles the SIGTERM value
// gracefully and exits within 30 seconds from receiving it, no SIGKILL value
// is sent.
//
// The default 30-second timeout can be configured on the Amazon ECS container
// agent with the ECS_CONTAINER_STOP_TIMEOUT variable. For more information,
// see Amazon ECS Container Agent Configuration (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation StopTask for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/StopTask
func (c *ECS) StopTask(input *StopTaskInput) (*StopTaskOutput, error) {
	req, out := c.StopTaskRequest(input)
	return out, req.Send()
}

// StopTaskWithContext is the same as StopTask with the addition of
// the ability to pass a context and additional request options.
//
// See StopTask for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) StopTaskWithContext(ctx aws.Context, input *StopTaskInput, opts ...request.Option) (*StopTaskOutput, error) {
	req, out := c.StopTaskRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opSubmitAttachmentStateChanges = "SubmitAttachmentStateChanges"

// SubmitAttachmentStateChangesRequest generates a "aws/request.Request" representing the
// client's request for the SubmitAttachmentStateChanges operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See SubmitAttachmentStateChanges for more information on using the SubmitAttachmentStateChanges
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the SubmitAttachmentStateChangesRequest method.
//	req, resp := client.SubmitAttachmentStateChangesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/SubmitAttachmentStateChanges
func (c *ECS) SubmitAttachmentStateChangesRequest(input *SubmitAttachmentStateChangesInput) (req *request.Request, output *SubmitAttachmentStateChangesOutput) {
	op := &request.Operation{
		Name:       opSubmitAttachmentStateChanges,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &SubmitAttachmentStateChangesInput{}
	}

	output = &SubmitAttachmentStateChangesOutput{}
	req = c.newRequest(op, input, output)
	return
}

// SubmitAttachmentStateChanges API operation for Amazon EC2 Container Service.
//
// This action is only used by the Amazon ECS agent, and it is not intended
// for use outside of the agent.
//
// Sent to acknowledge that an attachment changed states.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation SubmitAttachmentStateChanges for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - AccessDeniedException
//     You don't have authorization to perform the requested action.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/SubmitAttachmentStateChanges
func (c *ECS) SubmitAttachmentStateChanges(input *SubmitAttachmentStateChangesInput) (*SubmitAttachmentStateChangesOutput, error) {
	req, out := c.SubmitAttachmentStateChangesRequest(input)
	return out, req.Send()
}

// SubmitAttachmentStateChangesWithContext is the same as SubmitAttachmentStateChanges with the addition of
// the ability to pass a context and additional request options.
//
// See SubmitAttachmentStateChanges for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) SubmitAttachmentStateChangesWithContext(ctx aws.Context, input *SubmitAttachmentStateChangesInput, opts ...request.Option) (*SubmitAttachmentStateChangesOutput, error) {
	req, out := c.SubmitAttachmentStateChangesRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opSubmitContainerStateChange = "SubmitContainerStateChange"

// SubmitContainerStateChangeRequest generates a "aws/request.Request" representing the
// client's request for the SubmitContainerStateChange operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See SubmitContainerStateChange for more information on using the SubmitContainerStateChange
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the SubmitContainerStateChangeRequest method.
//	req, resp := client.SubmitContainerStateChangeRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/SubmitContainerStateChange
func (c *ECS) SubmitContainerStateChangeRequest(input *SubmitContainerStateChangeInput) (req *request.Request, output *SubmitContainerStateChangeOutput) {
	op := &request.Operation{
		Name:       opSubmitContainerStateChange,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &SubmitContainerStateChangeInput{}
	}

	output = &SubmitContainerStateChangeOutput{}
	req = c.newRequest(op, input, output)
	return
}

// SubmitContainerStateChange API operation for Amazon EC2 Container Service.
//
// This action is only used by the Amazon ECS agent, and it is not intended
// for use outside of the agent.
//
// Sent to acknowledge that a container changed states.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation SubmitContainerStateChange for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - AccessDeniedException
//     You don't have authorization to perform the requested action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/SubmitContainerStateChange
func (c *ECS) SubmitContainerStateChange(input *SubmitContainerStateChangeInput) (*SubmitContainerStateChangeOutput, error) {
	req, out := c.SubmitContainerStateChangeRequest(input)
	return out, req.Send()
}

// SubmitContainerStateChangeWithContext is the same as SubmitContainerStateChange with the addition of
// the ability to pass a context and additional request options.
//
// See SubmitContainerStateChange for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) SubmitContainerStateChangeWithContext(ctx aws.Context, input *SubmitContainerStateChangeInput, opts ...request.Option) (*SubmitContainerStateChangeOutput, error) {
	req, out := c.SubmitContainerStateChangeRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opSubmitTaskStateChange = "SubmitTaskStateChange"

// SubmitTaskStateChangeRequest generates a "aws/request.Request" representing the
// client's request for the SubmitTaskStateChange operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See SubmitTaskStateChange for more information on using the SubmitTaskStateChange
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the SubmitTaskStateChangeRequest method.
//	req, resp := client.SubmitTaskStateChangeRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/SubmitTaskStateChange
func (c *ECS) SubmitTaskStateChangeRequest(input *SubmitTaskStateChangeInput) (req *request.Request, output *SubmitTaskStateChangeOutput) {
	op := &request.Operation{
		Name:       opSubmitTaskStateChange,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &SubmitTaskStateChangeInput{}
	}

	output = &SubmitTaskStateChangeOutput{}
	req = c.newRequest(op, input, output)
	return
}

// SubmitTaskStateChange API operation for Amazon EC2 Container Service.
//
// This action is only used by the Amazon ECS agent, and it is not intended
// for use outside of the agent.
//
// Sent to acknowledge that a task changed states.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation SubmitTaskStateChange for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - AccessDeniedException
//     You don't have authorization to perform the requested action.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/SubmitTaskStateChange
func (c *ECS) SubmitTaskStateChange(input *SubmitTaskStateChangeInput) (*SubmitTaskStateChangeOutput, error) {
	req, out := c.SubmitTaskStateChangeRequest(input)
	return out, req.Send()
}

// SubmitTaskStateChangeWithContext is the same as SubmitTaskStateChange with the addition of
// the ability to pass a context and additional request options.
//
// See SubmitTaskStateChange for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) SubmitTaskStateChangeWithContext(ctx aws.Context, input *SubmitTaskStateChangeInput, opts ...request.Option) (*SubmitTaskStateChangeOutput, error) {
	req, out := c.SubmitTaskStateChangeRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opTagResource = "TagResource"

// TagResourceRequest generates a "aws/request.Request" representing the
// client's request for the TagResource operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See TagResource for more information on using the TagResource
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the TagResourceRequest method.
//	req, resp := client.TagResourceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/TagResource
func (c *ECS) TagResourceRequest(input *TagResourceInput) (req *request.Request, output *TagResourceOutput) {
	op := &request.Operation{
		Name:       opTagResource,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &TagResourceInput{}
	}

	output = &TagResourceOutput{}
	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
	return
}

// TagResource API operation for Amazon EC2 Container Service.
//
// Associates the specified tags to a resource with the specified resourceArn.
// If existing tags on a resource aren't specified in the request parameters,
// they aren't changed. When a resource is deleted, the tags that are associated
// with that resource are deleted as well.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation TagResource for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - ResourceNotFoundException
//     The specified resource wasn't found.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/TagResource
func (c *ECS) TagResource(input *TagResourceInput) (*TagResourceOutput, error) {
	req, out := c.TagResourceRequest(input)
	return out, req.Send()
}

// TagResourceWithContext is the same as TagResource with the addition of
// the ability to pass a context and additional request options.
//
// See TagResource for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) TagResourceWithContext(ctx aws.Context, input *TagResourceInput, opts ...request.Option) (*TagResourceOutput, error) {
	req, out := c.TagResourceRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUntagResource = "UntagResource"

// UntagResourceRequest generates a "aws/request.Request" representing the
// client's request for the UntagResource operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UntagResource for more information on using the UntagResource
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the UntagResourceRequest method.
//	req, resp := client.UntagResourceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/UntagResource
func (c *ECS) UntagResourceRequest(input *UntagResourceInput) (req *request.Request, output *UntagResourceOutput) {
	op := &request.Operation{
		Name:       opUntagResource,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UntagResourceInput{}
	}

	output = &UntagResourceOutput{}
	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
	return
}

// UntagResource API operation for Amazon EC2 Container Service.
//
// Deletes specified tags from a resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation UntagResource for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - ResourceNotFoundException
//     The specified resource wasn't found.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/UntagResource
func (c *ECS) UntagResource(input *UntagResourceInput) (*UntagResourceOutput, error) {
	req, out := c.UntagResourceRequest(input)
	return out, req.Send()
}

// UntagResourceWithContext is the same as UntagResource with the addition of
// the ability to pass a context and additional request options.
//
// See UntagResource for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) UntagResourceWithContext(ctx aws.Context, input *UntagResourceInput, opts ...request.Option) (*UntagResourceOutput, error) {
	req, out := c.UntagResourceRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateCapacityProvider = "UpdateCapacityProvider"

// UpdateCapacityProviderRequest generates a "aws/request.Request" representing the
// client's request for the UpdateCapacityProvider operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateCapacityProvider for more information on using the UpdateCapacityProvider
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the UpdateCapacityProviderRequest method.
//	req, resp := client.UpdateCapacityProviderRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/UpdateCapacityProvider
func (c *ECS) UpdateCapacityProviderRequest(input *UpdateCapacityProviderInput) (req *request.Request, output *UpdateCapacityProviderOutput) {
	op := &request.Operation{
		Name:       opUpdateCapacityProvider,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateCapacityProviderInput{}
	}

	output = &UpdateCapacityProviderOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateCapacityProvider API operation for Amazon EC2 Container Service.
//
// Modifies the parameters for a capacity provider.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation UpdateCapacityProvider for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/UpdateCapacityProvider
func (c *ECS) UpdateCapacityProvider(input *UpdateCapacityProviderInput) (*UpdateCapacityProviderOutput, error) {
	req, out := c.UpdateCapacityProviderRequest(input)
	return out, req.Send()
}

// UpdateCapacityProviderWithContext is the same as UpdateCapacityProvider with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateCapacityProvider for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) UpdateCapacityProviderWithContext(ctx aws.Context, input *UpdateCapacityProviderInput, opts ...request.Option) (*UpdateCapacityProviderOutput, error) {
	req, out := c.UpdateCapacityProviderRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateCluster = "UpdateCluster"

// UpdateClusterRequest generates a "aws/request.Request" representing the
// client's request for the UpdateCluster operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateCluster for more information on using the UpdateCluster
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the UpdateClusterRequest method.
//	req, resp := client.UpdateClusterRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/UpdateCluster
func (c *ECS) UpdateClusterRequest(input *UpdateClusterInput) (req *request.Request, output *UpdateClusterOutput) {
	op := &request.Operation{
		Name:       opUpdateCluster,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateClusterInput{}
	}

	output = &UpdateClusterOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateCluster API operation for Amazon EC2 Container Service.
//
// Updates the cluster.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation UpdateCluster for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - NamespaceNotFoundException
//     The specified namespace wasn't found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/UpdateCluster
func (c *ECS) UpdateCluster(input *UpdateClusterInput) (*UpdateClusterOutput, error) {
	req, out := c.UpdateClusterRequest(input)
	return out, req.Send()
}

// UpdateClusterWithContext is the same as UpdateCluster with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateCluster for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) UpdateClusterWithContext(ctx aws.Context, input *UpdateClusterInput, opts ...request.Option) (*UpdateClusterOutput, error) {
	req, out := c.UpdateClusterRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateClusterSettings = "UpdateClusterSettings"

// UpdateClusterSettingsRequest generates a "aws/request.Request" representing the
// client's request for the UpdateClusterSettings operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateClusterSettings for more information on using the UpdateClusterSettings
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the UpdateClusterSettingsRequest method.
//	req, resp := client.UpdateClusterSettingsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/UpdateClusterSettings
func (c *ECS) UpdateClusterSettingsRequest(input *UpdateClusterSettingsInput) (req *request.Request, output *UpdateClusterSettingsOutput) {
	op := &request.Operation{
		Name:       opUpdateClusterSettings,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateClusterSettingsInput{}
	}

	output = &UpdateClusterSettingsOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateClusterSettings API operation for Amazon EC2 Container Service.
//
// Modifies the settings to use for a cluster.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation UpdateClusterSettings for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/UpdateClusterSettings
func (c *ECS) UpdateClusterSettings(input *UpdateClusterSettingsInput) (*UpdateClusterSettingsOutput, error) {
	req, out := c.UpdateClusterSettingsRequest(input)
	return out, req.Send()
}

// UpdateClusterSettingsWithContext is the same as UpdateClusterSettings with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateClusterSettings for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) UpdateClusterSettingsWithContext(ctx aws.Context, input *UpdateClusterSettingsInput, opts ...request.Option) (*UpdateClusterSettingsOutput, error) {
	req, out := c.UpdateClusterSettingsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateContainerAgent = "UpdateContainerAgent"

// UpdateContainerAgentRequest generates a "aws/request.Request" representing the
// client's request for the UpdateContainerAgent operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateContainerAgent for more information on using the UpdateContainerAgent
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the UpdateContainerAgentRequest method.
//	req, resp := client.UpdateContainerAgentRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/UpdateContainerAgent
func (c *ECS) UpdateContainerAgentRequest(input *UpdateContainerAgentInput) (req *request.Request, output *UpdateContainerAgentOutput) {
	op := &request.Operation{
		Name:       opUpdateContainerAgent,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateContainerAgentInput{}
	}

	output = &UpdateContainerAgentOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateContainerAgent API operation for Amazon EC2 Container Service.
//
// Updates the Amazon ECS container agent on a specified container instance.
// Updating the Amazon ECS container agent doesn't interrupt running tasks or
// services on the container instance. The process for updating the agent differs
// depending on whether your container instance was launched with the Amazon
// ECS-optimized AMI or another operating system.
//
// The UpdateContainerAgent API isn't supported for container instances using
// the Amazon ECS-optimized Amazon Linux 2 (arm64) AMI. To update the container
// agent, you can update the ecs-init package. This updates the agent. For more
// information, see Updating the Amazon ECS container agent (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/agent-update-ecs-ami.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// Agent updates with the UpdateContainerAgent API operation do not apply to
// Windows container instances. We recommend that you launch new container instances
// to update the agent version in your Windows clusters.
//
// The UpdateContainerAgent API requires an Amazon ECS-optimized AMI or Amazon
// Linux AMI with the ecs-init service installed and running. For help updating
// the Amazon ECS container agent on other operating systems, see Manually updating
// the Amazon ECS container agent (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html#manually_update_agent)
// in the Amazon Elastic Container Service Developer Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation UpdateContainerAgent for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - UpdateInProgressException
//     There's already a current Amazon ECS container agent update in progress on
//     the container instance that's specified. If the container agent becomes disconnected
//     while it's in a transitional stage, such as PENDING or STAGING, the update
//     process can get stuck in that state. However, when the agent reconnects,
//     it resumes where it stopped previously.
//
//   - NoUpdateAvailableException
//     There's no update available for this Amazon ECS container agent. This might
//     be because the agent is already running the latest version or because it's
//     so old that there's no update path to the current version.
//
//   - MissingVersionException
//     Amazon ECS can't determine the current version of the Amazon ECS container
//     agent on the container instance and doesn't have enough information to proceed
//     with an update. This could be because the agent running on the container
//     instance is a previous or custom version that doesn't use our version information.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/UpdateContainerAgent
func (c *ECS) UpdateContainerAgent(input *UpdateContainerAgentInput) (*UpdateContainerAgentOutput, error) {
	req, out := c.UpdateContainerAgentRequest(input)
	return out, req.Send()
}

// UpdateContainerAgentWithContext is the same as UpdateContainerAgent with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateContainerAgent for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) UpdateContainerAgentWithContext(ctx aws.Context, input *UpdateContainerAgentInput, opts ...request.Option) (*UpdateContainerAgentOutput, error) {
	req, out := c.UpdateContainerAgentRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateContainerInstancesState = "UpdateContainerInstancesState"

// UpdateContainerInstancesStateRequest generates a "aws/request.Request" representing the
// client's request for the UpdateContainerInstancesState operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateContainerInstancesState for more information on using the UpdateContainerInstancesState
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the UpdateContainerInstancesStateRequest method.
//	req, resp := client.UpdateContainerInstancesStateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/UpdateContainerInstancesState
func (c *ECS) UpdateContainerInstancesStateRequest(input *UpdateContainerInstancesStateInput) (req *request.Request, output *UpdateContainerInstancesStateOutput) {
	op := &request.Operation{
		Name:       opUpdateContainerInstancesState,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateContainerInstancesStateInput{}
	}

	output = &UpdateContainerInstancesStateOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateContainerInstancesState API operation for Amazon EC2 Container Service.
//
// Modifies the status of an Amazon ECS container instance.
//
// Once a container instance has reached an ACTIVE state, you can change the
// status of a container instance to DRAINING to manually remove an instance
// from a cluster, for example to perform system updates, update the Docker
// daemon, or scale down the cluster size.
//
// A container instance can't be changed to DRAINING until it has reached an
// ACTIVE status. If the instance is in any other status, an error will be received.
//
// When you set a container instance to DRAINING, Amazon ECS prevents new tasks
// from being scheduled for placement on the container instance and replacement
// service tasks are started on other container instances in the cluster if
// the resources are available. Service tasks on the container instance that
// are in the PENDING state are stopped immediately.
//
// Service tasks on the container instance that are in the RUNNING state are
// stopped and replaced according to the service's deployment configuration
// parameters, minimumHealthyPercent and maximumPercent. You can change the
// deployment configuration of your service using UpdateService.
//
//   - If minimumHealthyPercent is below 100%, the scheduler can ignore desiredCount
//     temporarily during task replacement. For example, desiredCount is four
//     tasks, a minimum of 50% allows the scheduler to stop two existing tasks
//     before starting two new tasks. If the minimum is 100%, the service scheduler
//     can't remove existing tasks until the replacement tasks are considered
//     healthy. Tasks for services that do not use a load balancer are considered
//     healthy if they're in the RUNNING state. Tasks for services that use a
//     load balancer are considered healthy if they're in the RUNNING state and
//     are reported as healthy by the load balancer.
//
//   - The maximumPercent parameter represents an upper limit on the number
//     of running tasks during task replacement. You can use this to define the
//     replacement batch size. For example, if desiredCount is four tasks, a
//     maximum of 200% starts four new tasks before stopping the four tasks to
//     be drained, provided that the cluster resources required to do this are
//     available. If the maximum is 100%, then replacement tasks can't start
//     until the draining tasks have stopped.
//
// Any PENDING or RUNNING tasks that do not belong to a service aren't affected.
// You must wait for them to finish or stop them manually.
//
// A container instance has completed draining when it has no more RUNNING tasks.
// You can verify this using ListTasks.
//
// When a container instance has been drained, you can set a container instance
// to ACTIVE status and once it has reached that status the Amazon ECS scheduler
// can begin scheduling tasks on the instance again.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation UpdateContainerInstancesState for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/UpdateContainerInstancesState
func (c *ECS) UpdateContainerInstancesState(input *UpdateContainerInstancesStateInput) (*UpdateContainerInstancesStateOutput, error) {
	req, out := c.UpdateContainerInstancesStateRequest(input)
	return out, req.Send()
}

// UpdateContainerInstancesStateWithContext is the same as UpdateContainerInstancesState with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateContainerInstancesState for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) UpdateContainerInstancesStateWithContext(ctx aws.Context, input *UpdateContainerInstancesStateInput, opts ...request.Option) (*UpdateContainerInstancesStateOutput, error) {
	req, out := c.UpdateContainerInstancesStateRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateService = "UpdateService"

// UpdateServiceRequest generates a "aws/request.Request" representing the
// client's request for the UpdateService operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateService for more information on using the UpdateService
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the UpdateServiceRequest method.
//	req, resp := client.UpdateServiceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/UpdateService
func (c *ECS) UpdateServiceRequest(input *UpdateServiceInput) (req *request.Request, output *UpdateServiceOutput) {
	op := &request.Operation{
		Name:       opUpdateService,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateServiceInput{}
	}

	output = &UpdateServiceOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateService API operation for Amazon EC2 Container Service.
//
// Modifies the parameters of a service.
//
// For services using the rolling update (ECS) you can update the desired count,
// deployment configuration, network configuration, load balancers, service
// registries, enable ECS managed tags option, propagate tags option, task placement
// constraints and strategies, and task definition. When you update any of these
// parameters, Amazon ECS starts new tasks with the new configuration.
//
// For services using the blue/green (CODE_DEPLOY) deployment controller, only
// the desired count, deployment configuration, health check grace period, task
// placement constraints and strategies, enable ECS managed tags option, and
// propagate tags can be updated using this API. If the network configuration,
// platform version, task definition, or load balancer need to be updated, create
// a new CodeDeploy deployment. For more information, see CreateDeployment (https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_CreateDeployment.html)
// in the CodeDeploy API Reference.
//
// For services using an external deployment controller, you can update only
// the desired count, task placement constraints and strategies, health check
// grace period, enable ECS managed tags option, and propagate tags option,
// using this API. If the launch type, load balancer, network configuration,
// platform version, or task definition need to be updated, create a new task
// set For more information, see CreateTaskSet.
//
// You can add to or subtract from the number of instantiations of a task definition
// in a service by specifying the cluster that the service is running in and
// a new desiredCount parameter.
//
// If you have updated the Docker image of your application, you can create
// a new task definition with that image and deploy it to your service. The
// service scheduler uses the minimum healthy percent and maximum percent parameters
// (in the service's deployment configuration) to determine the deployment strategy.
//
// If your updated Docker image uses the same tag as what is in the existing
// task definition for your service (for example, my_image:latest), you don't
// need to create a new revision of your task definition. You can update the
// service using the forceNewDeployment option. The new tasks launched by the
// deployment pull the current image/tag combination from your repository when
// they start.
//
// You can also update the deployment configuration of a service. When a deployment
// is triggered by updating the task definition of a service, the service scheduler
// uses the deployment configuration parameters, minimumHealthyPercent and maximumPercent,
// to determine the deployment strategy.
//
//   - If minimumHealthyPercent is below 100%, the scheduler can ignore desiredCount
//     temporarily during a deployment. For example, if desiredCount is four
//     tasks, a minimum of 50% allows the scheduler to stop two existing tasks
//     before starting two new tasks. Tasks for services that don't use a load
//     balancer are considered healthy if they're in the RUNNING state. Tasks
//     for services that use a load balancer are considered healthy if they're
//     in the RUNNING state and are reported as healthy by the load balancer.
//
//   - The maximumPercent parameter represents an upper limit on the number
//     of running tasks during a deployment. You can use it to define the deployment
//     batch size. For example, if desiredCount is four tasks, a maximum of 200%
//     starts four new tasks before stopping the four older tasks (provided that
//     the cluster resources required to do this are available).
//
// When UpdateService stops a task during a deployment, the equivalent of docker
// stop is issued to the containers running in the task. This results in a SIGTERM
// and a 30-second timeout. After this, SIGKILL is sent and the containers are
// forcibly stopped. If the container handles the SIGTERM gracefully and exits
// within 30 seconds from receiving it, no SIGKILL is sent.
//
// When the service scheduler launches new tasks, it determines task placement
// in your cluster with the following logic.
//
//   - Determine which of the container instances in your cluster can support
//     your service's task definition. For example, they have the required CPU,
//     memory, ports, and container instance attributes.
//
//   - By default, the service scheduler attempts to balance tasks across Availability
//     Zones in this manner even though you can choose a different placement
//     strategy. Sort the valid container instances by the fewest number of running
//     tasks for this service in the same Availability Zone as the instance.
//     For example, if zone A has one running service task and zones B and C
//     each have zero, valid container instances in either zone B or C are considered
//     optimal for placement. Place the new service task on a valid container
//     instance in an optimal Availability Zone (based on the previous steps),
//     favoring container instances with the fewest number of running tasks for
//     this service.
//
// When the service scheduler stops running tasks, it attempts to maintain balance
// across the Availability Zones in your cluster using the following logic:
//
//   - Sort the container instances by the largest number of running tasks
//     for this service in the same Availability Zone as the instance. For example,
//     if zone A has one running service task and zones B and C each have two,
//     container instances in either zone B or C are considered optimal for termination.
//
//   - Stop the task on a container instance in an optimal Availability Zone
//     (based on the previous steps), favoring container instances with the largest
//     number of running tasks for this service.
//
// You must have a service-linked role when you update any of the following
// service properties:
//
//   - loadBalancers,
//
//   - serviceRegistries
//
// For more information about the role see the CreateService request parameter
// role (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html#ECS-CreateService-request-role).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation UpdateService for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - ServiceNotFoundException
//     The specified service wasn't found. You can view your available services
//     with ListServices. Amazon ECS services are cluster specific and Region specific.
//
//   - ServiceNotActiveException
//     The specified service isn't active. You can't update a service that's inactive.
//     If you have previously deleted a service, you can re-create it with CreateService.
//
//   - PlatformUnknownException
//     The specified platform version doesn't exist.
//
//   - PlatformTaskDefinitionIncompatibilityException
//     The specified platform version doesn't satisfy the required capabilities
//     of the task definition.
//
//   - AccessDeniedException
//     You don't have authorization to perform the requested action.
//
//   - NamespaceNotFoundException
//     The specified namespace wasn't found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/UpdateService
func (c *ECS) UpdateService(input *UpdateServiceInput) (*UpdateServiceOutput, error) {
	req, out := c.UpdateServiceRequest(input)
	return out, req.Send()
}

// UpdateServiceWithContext is the same as UpdateService with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateService for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) UpdateServiceWithContext(ctx aws.Context, input *UpdateServiceInput, opts ...request.Option) (*UpdateServiceOutput, error) {
	req, out := c.UpdateServiceRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateServicePrimaryTaskSet = "UpdateServicePrimaryTaskSet"

// UpdateServicePrimaryTaskSetRequest generates a "aws/request.Request" representing the
// client's request for the UpdateServicePrimaryTaskSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateServicePrimaryTaskSet for more information on using the UpdateServicePrimaryTaskSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the UpdateServicePrimaryTaskSetRequest method.
//	req, resp := client.UpdateServicePrimaryTaskSetRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/UpdateServicePrimaryTaskSet
func (c *ECS) UpdateServicePrimaryTaskSetRequest(input *UpdateServicePrimaryTaskSetInput) (req *request.Request, output *UpdateServicePrimaryTaskSetOutput) {
	op := &request.Operation{
		Name:       opUpdateServicePrimaryTaskSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateServicePrimaryTaskSetInput{}
	}

	output = &UpdateServicePrimaryTaskSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateServicePrimaryTaskSet API operation for Amazon EC2 Container Service.
//
// Modifies which task set in a service is the primary task set. Any parameters
// that are updated on the primary task set in a service will transition to
// the service. This is used when a service uses the EXTERNAL deployment controller
// type. For more information, see Amazon ECS Deployment Types (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation UpdateServicePrimaryTaskSet for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - UnsupportedFeatureException
//     The specified task isn't supported in this Region.
//
//   - ServiceNotFoundException
//     The specified service wasn't found. You can view your available services
//     with ListServices. Amazon ECS services are cluster specific and Region specific.
//
//   - ServiceNotActiveException
//     The specified service isn't active. You can't update a service that's inactive.
//     If you have previously deleted a service, you can re-create it with CreateService.
//
//   - TaskSetNotFoundException
//     The specified task set wasn't found. You can view your available task sets
//     with DescribeTaskSets. Task sets are specific to each cluster, service and
//     Region.
//
//   - AccessDeniedException
//     You don't have authorization to perform the requested action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/UpdateServicePrimaryTaskSet
func (c *ECS) UpdateServicePrimaryTaskSet(input *UpdateServicePrimaryTaskSetInput) (*UpdateServicePrimaryTaskSetOutput, error) {
	req, out := c.UpdateServicePrimaryTaskSetRequest(input)
	return out, req.Send()
}

// UpdateServicePrimaryTaskSetWithContext is the same as UpdateServicePrimaryTaskSet with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateServicePrimaryTaskSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) UpdateServicePrimaryTaskSetWithContext(ctx aws.Context, input *UpdateServicePrimaryTaskSetInput, opts ...request.Option) (*UpdateServicePrimaryTaskSetOutput, error) {
	req, out := c.UpdateServicePrimaryTaskSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateTaskProtection = "UpdateTaskProtection"

// UpdateTaskProtectionRequest generates a "aws/request.Request" representing the
// client's request for the UpdateTaskProtection operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateTaskProtection for more information on using the UpdateTaskProtection
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the UpdateTaskProtectionRequest method.
//	req, resp := client.UpdateTaskProtectionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/UpdateTaskProtection
func (c *ECS) UpdateTaskProtectionRequest(input *UpdateTaskProtectionInput) (req *request.Request, output *UpdateTaskProtectionOutput) {
	op := &request.Operation{
		Name:       opUpdateTaskProtection,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateTaskProtectionInput{}
	}

	output = &UpdateTaskProtectionOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateTaskProtection API operation for Amazon EC2 Container Service.
//
// Updates the protection status of a task. You can set protectionEnabled to
// true to protect your task from termination during scale-in events from Service
// Autoscaling (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-auto-scaling.html)
// or deployments (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.html).
//
// Task-protection, by default, expires after 2 hours at which point Amazon
// ECS clears the protectionEnabled property making the task eligible for termination
// by a subsequent scale-in event.
//
// You can specify a custom expiration period for task protection from 1 minute
// to up to 2,880 minutes (48 hours). To specify the custom expiration period,
// set the expiresInMinutes property. The expiresInMinutes property is always
// reset when you invoke this operation for a task that already has protectionEnabled
// set to true. You can keep extending the protection expiration period of a
// task by invoking this operation repeatedly.
//
// To learn more about Amazon ECS task protection, see Task scale-in protection
// (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-scale-in-protection.html)
// in the Amazon Elastic Container Service Developer Guide .
//
// This operation is only supported for tasks belonging to an Amazon ECS service.
// Invoking this operation for a standalone task will result in an TASK_NOT_VALID
// failure. For more information, see API failure reasons (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/api_failures_messages.html).
//
// If you prefer to set task protection from within the container, we recommend
// using the Task scale-in protection endpoint (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-scale-in-protection-endpoint.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation UpdateTaskProtection for usage and error information.
//
// Returned Error Types:
//
//   - AccessDeniedException
//     You don't have authorization to perform the requested action.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ResourceNotFoundException
//     The specified resource wasn't found.
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - UnsupportedFeatureException
//     The specified task isn't supported in this Region.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/UpdateTaskProtection
func (c *ECS) UpdateTaskProtection(input *UpdateTaskProtectionInput) (*UpdateTaskProtectionOutput, error) {
	req, out := c.UpdateTaskProtectionRequest(input)
	return out, req.Send()
}

// UpdateTaskProtectionWithContext is the same as UpdateTaskProtection with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateTaskProtection for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) UpdateTaskProtectionWithContext(ctx aws.Context, input *UpdateTaskProtectionInput, opts ...request.Option) (*UpdateTaskProtectionOutput, error) {
	req, out := c.UpdateTaskProtectionRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateTaskSet = "UpdateTaskSet"

// UpdateTaskSetRequest generates a "aws/request.Request" representing the
// client's request for the UpdateTaskSet operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See UpdateTaskSet for more information on using the UpdateTaskSet
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the UpdateTaskSetRequest method.
//	req, resp := client.UpdateTaskSetRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/UpdateTaskSet
func (c *ECS) UpdateTaskSetRequest(input *UpdateTaskSetInput) (req *request.Request, output *UpdateTaskSetOutput) {
	op := &request.Operation{
		Name:       opUpdateTaskSet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateTaskSetInput{}
	}

	output = &UpdateTaskSetOutput{}
	req = c.newRequest(op, input, output)
	return
}

// UpdateTaskSet API operation for Amazon EC2 Container Service.
//
// Modifies a task set. This is used when a service uses the EXTERNAL deployment
// controller type. For more information, see Amazon ECS Deployment Types (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EC2 Container Service's
// API operation UpdateTaskSet for usage and error information.
//
// Returned Error Types:
//
//   - ServerException
//     These errors are usually caused by a server issue.
//
//   - ClientException
//     These errors are usually caused by a client action. This client action might
//     be using an action or resource on behalf of a user that doesn't have permissions
//     to use the action or resource. Or, it might be specifying an identifier that
//     isn't valid.
//
//   - InvalidParameterException
//     The specified parameter isn't valid. Review the available parameters for
//     the API request.
//
//   - ClusterNotFoundException
//     The specified cluster wasn't found. You can view your available clusters
//     with ListClusters. Amazon ECS clusters are Region specific.
//
//   - UnsupportedFeatureException
//     The specified task isn't supported in this Region.
//
//   - AccessDeniedException
//     You don't have authorization to perform the requested action.
//
//   - ServiceNotFoundException
//     The specified service wasn't found. You can view your available services
//     with ListServices. Amazon ECS services are cluster specific and Region specific.
//
//   - ServiceNotActiveException
//     The specified service isn't active. You can't update a service that's inactive.
//     If you have previously deleted a service, you can re-create it with CreateService.
//
//   - TaskSetNotFoundException
//     The specified task set wasn't found. You can view your available task sets
//     with DescribeTaskSets. Task sets are specific to each cluster, service and
//     Region.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ecs-2014-11-13/UpdateTaskSet
func (c *ECS) UpdateTaskSet(input *UpdateTaskSetInput) (*UpdateTaskSetOutput, error) {
	req, out := c.UpdateTaskSetRequest(input)
	return out, req.Send()
}

// UpdateTaskSetWithContext is the same as UpdateTaskSet with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateTaskSet for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *ECS) UpdateTaskSetWithContext(ctx aws.Context, input *UpdateTaskSetInput, opts ...request.Option) (*UpdateTaskSetOutput, error) {
	req, out := c.UpdateTaskSetRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// You don't have authorization to perform the requested action.
type AccessDeniedException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AccessDeniedException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AccessDeniedException) GoString() string {
	return s.String()
}

func newErrorAccessDeniedException(v protocol.ResponseMetadata) error {
	return &AccessDeniedException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *AccessDeniedException) Code() string {
	return "AccessDeniedException"
}

// Message returns the exception's message.
func (s *AccessDeniedException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *AccessDeniedException) OrigErr() error {
	return nil
}

func (s *AccessDeniedException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *AccessDeniedException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *AccessDeniedException) RequestID() string {
	return s.RespMetadata.RequestID
}

// An object representing a container instance or task attachment.
type Attachment struct {
	_ struct{} `type:"structure"`

	// Details of the attachment. For elastic network interfaces, this includes
	// the network interface ID, the MAC address, the subnet ID, and the private
	// IPv4 address.
	Details []*KeyValuePair `locationName:"details" type:"list"`

	// The unique identifier for the attachment.
	Id *string `locationName:"id" type:"string"`

	// The status of the attachment. Valid values are PRECREATED, CREATED, ATTACHING,
	// ATTACHED, DETACHING, DETACHED, DELETED, and FAILED.
	Status *string `locationName:"status" type:"string"`

	// The type of the attachment, such as ElasticNetworkInterface.
	Type *string `locationName:"type" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Attachment) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Attachment) GoString() string {
	return s.String()
}

// SetDetails sets the Details field's value.
func (s *Attachment) SetDetails(v []*KeyValuePair) *Attachment {
	s.Details = v
	return s
}

// SetId sets the Id field's value.
func (s *Attachment) SetId(v string) *Attachment {
	s.Id = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *Attachment) SetStatus(v string) *Attachment {
	s.Status = &v
	return s
}

// SetType sets the Type field's value.
func (s *Attachment) SetType(v string) *Attachment {
	s.Type = &v
	return s
}

// An object representing a change in state for a task attachment.
type AttachmentStateChange struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the attachment.
	//
	// AttachmentArn is a required field
	AttachmentArn *string `locationName:"attachmentArn" type:"string" required:"true"`

	// The status of the attachment.
	//
	// Status is a required field
	Status *string `locationName:"status" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttachmentStateChange) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttachmentStateChange) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *AttachmentStateChange) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AttachmentStateChange"}
	if s.AttachmentArn == nil {
		invalidParams.Add(request.NewErrParamRequired("AttachmentArn"))
	}
	if s.Status == nil {
		invalidParams.Add(request.NewErrParamRequired("Status"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAttachmentArn sets the AttachmentArn field's value.
func (s *AttachmentStateChange) SetAttachmentArn(v string) *AttachmentStateChange {
	s.AttachmentArn = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *AttachmentStateChange) SetStatus(v string) *AttachmentStateChange {
	s.Status = &v
	return s
}

// An attribute is a name-value pair that's associated with an Amazon ECS object.
// Use attributes to extend the Amazon ECS data model by adding custom metadata
// to your resources. For more information, see Attributes (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement-constraints.html#attributes)
// in the Amazon Elastic Container Service Developer Guide.
type Attribute struct {
	_ struct{} `type:"structure"`

	// The name of the attribute. The name must contain between 1 and 128 characters.
	// The name may contain letters (uppercase and lowercase), numbers, hyphens
	// (-), underscores (_), forward slashes (/), back slashes (\), or periods (.).
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true"`

	// The ID of the target. You can specify the short form ID for a resource or
	// the full Amazon Resource Name (ARN).
	TargetId *string `locationName:"targetId" type:"string"`

	// The type of the target to attach the attribute with. This parameter is required
	// if you use the short form ID for a resource instead of the full ARN.
	TargetType *string `locationName:"targetType" type:"string" enum:"TargetType"`

	// The value of the attribute. The value must contain between 1 and 128 characters.
	// It can contain letters (uppercase and lowercase), numbers, hyphens (-), underscores
	// (_), periods (.), at signs (@), forward slashes (/), back slashes (\), colons
	// (:), or spaces. The value can't start or end with a space.
	Value *string `locationName:"value" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Attribute) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Attribute) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *Attribute) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Attribute"}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetName sets the Name field's value.
func (s *Attribute) SetName(v string) *Attribute {
	s.Name = &v
	return s
}

// SetTargetId sets the TargetId field's value.
func (s *Attribute) SetTargetId(v string) *Attribute {
	s.TargetId = &v
	return s
}

// SetTargetType sets the TargetType field's value.
func (s *Attribute) SetTargetType(v string) *Attribute {
	s.TargetType = &v
	return s
}

// SetValue sets the Value field's value.
func (s *Attribute) SetValue(v string) *Attribute {
	s.Value = &v
	return s
}

// You can apply up to 10 custom attributes for each resource. You can view
// the attributes of a resource with ListAttributes. You can remove existing
// attributes on a resource with DeleteAttributes.
type AttributeLimitExceededException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttributeLimitExceededException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttributeLimitExceededException) GoString() string {
	return s.String()
}

func newErrorAttributeLimitExceededException(v protocol.ResponseMetadata) error {
	return &AttributeLimitExceededException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *AttributeLimitExceededException) Code() string {
	return "AttributeLimitExceededException"
}

// Message returns the exception's message.
func (s *AttributeLimitExceededException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *AttributeLimitExceededException) OrigErr() error {
	return nil
}

func (s *AttributeLimitExceededException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *AttributeLimitExceededException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *AttributeLimitExceededException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The details of the Auto Scaling group for the capacity provider.
type AutoScalingGroupProvider struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) that identifies the Auto Scaling group, or
	// the Auto Scaling group name.
	//
	// AutoScalingGroupArn is a required field
	AutoScalingGroupArn *string `locationName:"autoScalingGroupArn" type:"string" required:"true"`

	// The managed scaling settings for the Auto Scaling group capacity provider.
	ManagedScaling *ManagedScaling `locationName:"managedScaling" type:"structure"`

	// The managed termination protection setting to use for the Auto Scaling group
	// capacity provider. This determines whether the Auto Scaling group has managed
	// termination protection. The default is off.
	//
	// When using managed termination protection, managed scaling must also be used
	// otherwise managed termination protection doesn't work.
	//
	// When managed termination protection is on, Amazon ECS prevents the Amazon
	// EC2 instances in an Auto Scaling group that contain tasks from being terminated
	// during a scale-in action. The Auto Scaling group and each instance in the
	// Auto Scaling group must have instance protection from scale-in actions on
	// as well. For more information, see Instance Protection (https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-instance-termination.html#instance-protection)
	// in the Auto Scaling User Guide.
	//
	// When managed termination protection is off, your Amazon EC2 instances aren't
	// protected from termination when the Auto Scaling group scales in.
	ManagedTerminationProtection *string `locationName:"managedTerminationProtection" type:"string" enum:"ManagedTerminationProtection"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AutoScalingGroupProvider) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AutoScalingGroupProvider) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *AutoScalingGroupProvider) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AutoScalingGroupProvider"}
	if s.AutoScalingGroupArn == nil {
		invalidParams.Add(request.NewErrParamRequired("AutoScalingGroupArn"))
	}
	if s.ManagedScaling != nil {
		if err := s.ManagedScaling.Validate(); err != nil {
			invalidParams.AddNested("ManagedScaling", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAutoScalingGroupArn sets the AutoScalingGroupArn field's value.
func (s *AutoScalingGroupProvider) SetAutoScalingGroupArn(v string) *AutoScalingGroupProvider {
	s.AutoScalingGroupArn = &v
	return s
}

// SetManagedScaling sets the ManagedScaling field's value.
func (s *AutoScalingGroupProvider) SetManagedScaling(v *ManagedScaling) *AutoScalingGroupProvider {
	s.ManagedScaling = v
	return s
}

// SetManagedTerminationProtection sets the ManagedTerminationProtection field's value.
func (s *AutoScalingGroupProvider) SetManagedTerminationProtection(v string) *AutoScalingGroupProvider {
	s.ManagedTerminationProtection = &v
	return s
}

// The details of the Auto Scaling group capacity provider to update.
type AutoScalingGroupProviderUpdate struct {
	_ struct{} `type:"structure"`

	// The managed scaling settings for the Auto Scaling group capacity provider.
	ManagedScaling *ManagedScaling `locationName:"managedScaling" type:"structure"`

	// The managed termination protection setting to use for the Auto Scaling group
	// capacity provider. This determines whether the Auto Scaling group has managed
	// termination protection.
	//
	// When using managed termination protection, managed scaling must also be used
	// otherwise managed termination protection doesn't work.
	//
	// When managed termination protection is on, Amazon ECS prevents the Amazon
	// EC2 instances in an Auto Scaling group that contain tasks from being terminated
	// during a scale-in action. The Auto Scaling group and each instance in the
	// Auto Scaling group must have instance protection from scale-in actions on.
	// For more information, see Instance Protection (https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-instance-termination.html#instance-protection)
	// in the Auto Scaling User Guide.
	//
	// When managed termination protection is off, your Amazon EC2 instances aren't
	// protected from termination when the Auto Scaling group scales in.
	ManagedTerminationProtection *string `locationName:"managedTerminationProtection" type:"string" enum:"ManagedTerminationProtection"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AutoScalingGroupProviderUpdate) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AutoScalingGroupProviderUpdate) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *AutoScalingGroupProviderUpdate) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AutoScalingGroupProviderUpdate"}
	if s.ManagedScaling != nil {
		if err := s.ManagedScaling.Validate(); err != nil {
			invalidParams.AddNested("ManagedScaling", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetManagedScaling sets the ManagedScaling field's value.
func (s *AutoScalingGroupProviderUpdate) SetManagedScaling(v *ManagedScaling) *AutoScalingGroupProviderUpdate {
	s.ManagedScaling = v
	return s
}

// SetManagedTerminationProtection sets the ManagedTerminationProtection field's value.
func (s *AutoScalingGroupProviderUpdate) SetManagedTerminationProtection(v string) *AutoScalingGroupProviderUpdate {
	s.ManagedTerminationProtection = &v
	return s
}

// An object representing the networking details for a task or service.
type AwsVpcConfiguration struct {
	_ struct{} `type:"structure"`

	// Whether the task's elastic network interface receives a public IP address.
	// The default value is DISABLED.
	AssignPublicIp *string `locationName:"assignPublicIp" type:"string" enum:"AssignPublicIp"`

	// The IDs of the security groups associated with the task or service. If you
	// don't specify a security group, the default security group for the VPC is
	// used. There's a limit of 5 security groups that can be specified per AwsVpcConfiguration.
	//
	// All specified security groups must be from the same VPC.
	SecurityGroups []*string `locationName:"securityGroups" type:"list"`

	// The IDs of the subnets associated with the task or service. There's a limit
	// of 16 subnets that can be specified per AwsVpcConfiguration.
	//
	// All specified subnets must be from the same VPC.
	//
	// Subnets is a required field
	Subnets []*string `locationName:"subnets" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AwsVpcConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AwsVpcConfiguration) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *AwsVpcConfiguration) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AwsVpcConfiguration"}
	if s.Subnets == nil {
		invalidParams.Add(request.NewErrParamRequired("Subnets"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAssignPublicIp sets the AssignPublicIp field's value.
func (s *AwsVpcConfiguration) SetAssignPublicIp(v string) *AwsVpcConfiguration {
	s.AssignPublicIp = &v
	return s
}

// SetSecurityGroups sets the SecurityGroups field's value.
func (s *AwsVpcConfiguration) SetSecurityGroups(v []*string) *AwsVpcConfiguration {
	s.SecurityGroups = v
	return s
}

// SetSubnets sets the Subnets field's value.
func (s *AwsVpcConfiguration) SetSubnets(v []*string) *AwsVpcConfiguration {
	s.Subnets = v
	return s
}

// Your Amazon Web Services account was blocked. For more information, contact
// Amazon Web Services Support (http://aws.amazon.com/contact-us/).
type BlockedException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s BlockedException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s BlockedException) GoString() string {
	return s.String()
}

func newErrorBlockedException(v protocol.ResponseMetadata) error {
	return &BlockedException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *BlockedException) Code() string {
	return "BlockedException"
}

// Message returns the exception's message.
func (s *BlockedException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *BlockedException) OrigErr() error {
	return nil
}

func (s *BlockedException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *BlockedException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *BlockedException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The details for a capacity provider.
type CapacityProvider struct {
	_ struct{} `type:"structure"`

	// The Auto Scaling group settings for the capacity provider.
	AutoScalingGroupProvider *AutoScalingGroupProvider `locationName:"autoScalingGroupProvider" type:"structure"`

	// The Amazon Resource Name (ARN) that identifies the capacity provider.
	CapacityProviderArn *string `locationName:"capacityProviderArn" type:"string"`

	// The name of the capacity provider.
	Name *string `locationName:"name" type:"string"`

	// The current status of the capacity provider. Only capacity providers in an
	// ACTIVE state can be used in a cluster. When a capacity provider is successfully
	// deleted, it has an INACTIVE status.
	Status *string `locationName:"status" type:"string" enum:"CapacityProviderStatus"`

	// The metadata that you apply to the capacity provider to help you categorize
	// and organize it. Each tag consists of a key and an optional value. You define
	// both.
	//
	// The following basic restrictions apply to tags:
	//
	//    * Maximum number of tags per resource - 50
	//
	//    * For each resource, each tag key must be unique, and each tag key can
	//    have only one value.
	//
	//    * Maximum key length - 128 Unicode characters in UTF-8
	//
	//    * Maximum value length - 256 Unicode characters in UTF-8
	//
	//    * If your tagging schema is used across multiple services and resources,
	//    remember that other services may have restrictions on allowed characters.
	//    Generally allowed characters are: letters, numbers, and spaces representable
	//    in UTF-8, and the following characters: + - = . _ : / @.
	//
	//    * Tag keys and values are case-sensitive.
	//
	//    * Do not use aws:, AWS:, or any upper or lowercase combination of such
	//    as a prefix for either keys or values as it is reserved for Amazon Web
	//    Services use. You cannot edit or delete tag keys or values with this prefix.
	//    Tags with this prefix do not count against your tags per resource limit.
	Tags []*Tag `locationName:"tags" type:"list"`

	// The update status of the capacity provider. The following are the possible
	// states that is returned.
	//
	// DELETE_IN_PROGRESS
	//
	// The capacity provider is in the process of being deleted.
	//
	// DELETE_COMPLETE
	//
	// The capacity provider was successfully deleted and has an INACTIVE status.
	//
	// DELETE_FAILED
	//
	// The capacity provider can't be deleted. The update status reason provides
	// further details about why the delete failed.
	UpdateStatus *string `locationName:"updateStatus" type:"string" enum:"CapacityProviderUpdateStatus"`

	// The update status reason. This provides further details about the update
	// status for the capacity provider.
	UpdateStatusReason *string `locationName:"updateStatusReason" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CapacityProvider) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CapacityProvider) GoString() string {
	return s.String()
}

// SetAutoScalingGroupProvider sets the AutoScalingGroupProvider field's value.
func (s *CapacityProvider) SetAutoScalingGroupProvider(v *AutoScalingGroupProvider) *CapacityProvider {
	s.AutoScalingGroupProvider = v
	return s
}

// SetCapacityProviderArn sets the CapacityProviderArn field's value.
func (s *CapacityProvider) SetCapacityProviderArn(v string) *CapacityProvider {
	s.CapacityProviderArn = &v
	return s
}

// SetName sets the Name field's value.
func (s *CapacityProvider) SetName(v string) *CapacityProvider {
	s.Name = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *CapacityProvider) SetStatus(v string) *CapacityProvider {
	s.Status = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CapacityProvider) SetTags(v []*Tag) *CapacityProvider {
	s.Tags = v
	return s
}

// SetUpdateStatus sets the UpdateStatus field's value.
func (s *CapacityProvider) SetUpdateStatus(v string) *CapacityProvider {
	s.UpdateStatus = &v
	return s
}

// SetUpdateStatusReason sets the UpdateStatusReason field's value.
func (s *CapacityProvider) SetUpdateStatusReason(v string) *CapacityProvider {
	s.UpdateStatusReason = &v
	return s
}

// The details of a capacity provider strategy. A capacity provider strategy
// can be set when using the RunTask or CreateCluster APIs or as the default
// capacity provider strategy for a cluster with the CreateCluster API.
//
// Only capacity providers that are already associated with a cluster and have
// an ACTIVE or UPDATING status can be used in a capacity provider strategy.
// The PutClusterCapacityProviders API is used to associate a capacity provider
// with a cluster.
//
// If specifying a capacity provider that uses an Auto Scaling group, the capacity
// provider must already be created. New Auto Scaling group capacity providers
// can be created with the CreateCapacityProvider API operation.
//
// To use a Fargate capacity provider, specify either the FARGATE or FARGATE_SPOT
// capacity providers. The Fargate capacity providers are available to all accounts
// and only need to be associated with a cluster to be used in a capacity provider
// strategy.
//
// A capacity provider strategy may contain a maximum of 6 capacity providers.
type CapacityProviderStrategyItem struct {
	_ struct{} `type:"structure"`

	// The base value designates how many tasks, at a minimum, to run on the specified
	// capacity provider. Only one capacity provider in a capacity provider strategy
	// can have a base defined. If no value is specified, the default value of 0
	// is used.
	Base *int64 `locationName:"base" type:"integer"`

	// The short name of the capacity provider.
	//
	// CapacityProvider is a required field
	CapacityProvider *string `locationName:"capacityProvider" type:"string" required:"true"`

	// The weight value designates the relative percentage of the total number of
	// tasks launched that should use the specified capacity provider. The weight
	// value is taken into consideration after the base value, if defined, is satisfied.
	//
	// If no weight value is specified, the default value of 0 is used. When multiple
	// capacity providers are specified within a capacity provider strategy, at
	// least one of the capacity providers must have a weight value greater than
	// zero and any capacity providers with a weight of 0 can't be used to place
	// tasks. If you specify multiple capacity providers in a strategy that all
	// have a weight of 0, any RunTask or CreateService actions using the capacity
	// provider strategy will fail.
	//
	// An example scenario for using weights is defining a strategy that contains
	// two capacity providers and both have a weight of 1, then when the base is
	// satisfied, the tasks will be split evenly across the two capacity providers.
	// Using that same logic, if you specify a weight of 1 for capacityProviderA
	// and a weight of 4 for capacityProviderB, then for every one task that's run
	// using capacityProviderA, four tasks would use capacityProviderB.
	Weight *int64 `locationName:"weight" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CapacityProviderStrategyItem) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CapacityProviderStrategyItem) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CapacityProviderStrategyItem) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CapacityProviderStrategyItem"}
	if s.CapacityProvider == nil {
		invalidParams.Add(request.NewErrParamRequired("CapacityProvider"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetBase sets the Base field's value.
func (s *CapacityProviderStrategyItem) SetBase(v int64) *CapacityProviderStrategyItem {
	s.Base = &v
	return s
}

// SetCapacityProvider sets the CapacityProvider field's value.
func (s *CapacityProviderStrategyItem) SetCapacityProvider(v string) *CapacityProviderStrategyItem {
	s.CapacityProvider = &v
	return s
}

// SetWeight sets the Weight field's value.
func (s *CapacityProviderStrategyItem) SetWeight(v int64) *CapacityProviderStrategyItem {
	s.Weight = &v
	return s
}

// These errors are usually caused by a client action. This client action might
// be using an action or resource on behalf of a user that doesn't have permissions
// to use the action or resource. Or, it might be specifying an identifier that
// isn't valid.
type ClientException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClientException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClientException) GoString() string {
	return s.String()
}

func newErrorClientException(v protocol.ResponseMetadata) error {
	return &ClientException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ClientException) Code() string {
	return "ClientException"
}

// Message returns the exception's message.
func (s *ClientException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ClientException) OrigErr() error {
	return nil
}

func (s *ClientException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *ClientException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ClientException) RequestID() string {
	return s.RespMetadata.RequestID
}

// A regional grouping of one or more container instances where you can run
// task requests. Each account receives a default cluster the first time you
// use the Amazon ECS service, but you may also create other clusters. Clusters
// may contain more than one instance type simultaneously.
type Cluster struct {
	_ struct{} `type:"structure"`

	// The number of services that are running on the cluster in an ACTIVE state.
	// You can view these services with ListServices.
	ActiveServicesCount *int64 `locationName:"activeServicesCount" type:"integer"`

	// The resources attached to a cluster. When using a capacity provider with
	// a cluster, the capacity provider and associated resources are returned as
	// cluster attachments.
	Attachments []*Attachment `locationName:"attachments" type:"list"`

	// The status of the capacity providers associated with the cluster. The following
	// are the states that are returned.
	//
	// UPDATE_IN_PROGRESS
	//
	// The available capacity providers for the cluster are updating.
	//
	// UPDATE_COMPLETE
	//
	// The capacity providers have successfully updated.
	//
	// UPDATE_FAILED
	//
	// The capacity provider updates failed.
	AttachmentsStatus *string `locationName:"attachmentsStatus" type:"string"`

	// The capacity providers associated with the cluster.
	CapacityProviders []*string `locationName:"capacityProviders" type:"list"`

	// The Amazon Resource Name (ARN) that identifies the cluster. For more information
	// about the ARN format, see Amazon Resource Name (ARN) (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids)
	// in the Amazon ECS Developer Guide.
	ClusterArn *string `locationName:"clusterArn" type:"string"`

	// A user-generated string that you use to identify your cluster.
	ClusterName *string `locationName:"clusterName" type:"string"`

	// The execute command configuration for the cluster.
	Configuration *ClusterConfiguration `locationName:"configuration" type:"structure"`

	// The default capacity provider strategy for the cluster. When services or
	// tasks are run in the cluster with no launch type or capacity provider strategy
	// specified, the default capacity provider strategy is used.
	DefaultCapacityProviderStrategy []*CapacityProviderStrategyItem `locationName:"defaultCapacityProviderStrategy" type:"list"`

	// The number of tasks in the cluster that are in the PENDING state.
	PendingTasksCount *int64 `locationName:"pendingTasksCount" type:"integer"`

	// The number of container instances registered into the cluster. This includes
	// container instances in both ACTIVE and DRAINING status.
	RegisteredContainerInstancesCount *int64 `locationName:"registeredContainerInstancesCount" type:"integer"`

	// The number of tasks in the cluster that are in the RUNNING state.
	RunningTasksCount *int64 `locationName:"runningTasksCount" type:"integer"`

	// Use this parameter to set a default Service Connect namespace. After you
	// set a default Service Connect namespace, any new services with Service Connect
	// turned on that are created in the cluster are added as client services in
	// the namespace. This setting only applies to new services that set the enabled
	// parameter to true in the ServiceConnectConfiguration. You can set the namespace
	// of each service individually in the ServiceConnectConfiguration to override
	// this default parameter.
	//
	// Tasks that run in a namespace can use short names to connect to services
	// in the namespace. Tasks can connect to services across all of the clusters
	// in the namespace. Tasks connect through a managed proxy container that collects
	// logs and metrics for increased visibility. Only the tasks that Amazon ECS
	// services create are supported with Service Connect. For more information,
	// see Service Connect (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html)
	// in the Amazon Elastic Container Service Developer Guide.
	ServiceConnectDefaults *ClusterServiceConnectDefaults `locationName:"serviceConnectDefaults" type:"structure"`

	// The settings for the cluster. This parameter indicates whether CloudWatch
	// Container Insights is on or off for a cluster.
	Settings []*ClusterSetting `locationName:"settings" type:"list"`

	// Additional information about your clusters that are separated by launch type.
	// They include the following:
	//
	//    * runningEC2TasksCount
	//
	//    * RunningFargateTasksCount
	//
	//    * pendingEC2TasksCount
	//
	//    * pendingFargateTasksCount
	//
	//    * activeEC2ServiceCount
	//
	//    * activeFargateServiceCount
	//
	//    * drainingEC2ServiceCount
	//
	//    * drainingFargateServiceCount
	Statistics []*KeyValuePair `locationName:"statistics" type:"list"`

	// The status of the cluster. The following are the possible states that are
	// returned.
	//
	// ACTIVE
	//
	// The cluster is ready to accept tasks and if applicable you can register container
	// instances with the cluster.
	//
	// PROVISIONING
	//
	// The cluster has capacity providers that are associated with it and the resources
	// needed for the capacity provider are being created.
	//
	// DEPROVISIONING
	//
	// The cluster has capacity providers that are associated with it and the resources
	// needed for the capacity provider are being deleted.
	//
	// FAILED
	//
	// The cluster has capacity providers that are associated with it and the resources
	// needed for the capacity provider have failed to create.
	//
	// INACTIVE
	//
	// The cluster has been deleted. Clusters with an INACTIVE status may remain
	// discoverable in your account for a period of time. However, this behavior
	// is subject to change in the future. We don't recommend that you rely on INACTIVE
	// clusters persisting.
	Status *string `locationName:"status" type:"string"`

	// The metadata that you apply to the cluster to help you categorize and organize
	// them. Each tag consists of a key and an optional value. You define both.
	//
	// The following basic restrictions apply to tags:
	//
	//    * Maximum number of tags per resource - 50
	//
	//    * For each resource, each tag key must be unique, and each tag key can
	//    have only one value.
	//
	//    * Maximum key length - 128 Unicode characters in UTF-8
	//
	//    * Maximum value length - 256 Unicode characters in UTF-8
	//
	//    * If your tagging schema is used across multiple services and resources,
	//    remember that other services may have restrictions on allowed characters.
	//    Generally allowed characters are: letters, numbers, and spaces representable
	//    in UTF-8, and the following characters: + - = . _ : / @.
	//
	//    * Tag keys and values are case-sensitive.
	//
	//    * Do not use aws:, AWS:, or any upper or lowercase combination of such
	//    as a prefix for either keys or values as it is reserved for Amazon Web
	//    Services use. You cannot edit or delete tag keys or values with this prefix.
	//    Tags with this prefix do not count against your tags per resource limit.
	Tags []*Tag `locationName:"tags" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Cluster) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Cluster) GoString() string {
	return s.String()
}

// SetActiveServicesCount sets the ActiveServicesCount field's value.
func (s *Cluster) SetActiveServicesCount(v int64) *Cluster {
	s.ActiveServicesCount = &v
	return s
}

// SetAttachments sets the Attachments field's value.
func (s *Cluster) SetAttachments(v []*Attachment) *Cluster {
	s.Attachments = v
	return s
}

// SetAttachmentsStatus sets the AttachmentsStatus field's value.
func (s *Cluster) SetAttachmentsStatus(v string) *Cluster {
	s.AttachmentsStatus = &v
	return s
}

// SetCapacityProviders sets the CapacityProviders field's value.
func (s *Cluster) SetCapacityProviders(v []*string) *Cluster {
	s.CapacityProviders = v
	return s
}

// SetClusterArn sets the ClusterArn field's value.
func (s *Cluster) SetClusterArn(v string) *Cluster {
	s.ClusterArn = &v
	return s
}

// SetClusterName sets the ClusterName field's value.
func (s *Cluster) SetClusterName(v string) *Cluster {
	s.ClusterName = &v
	return s
}

// SetConfiguration sets the Configuration field's value.
func (s *Cluster) SetConfiguration(v *ClusterConfiguration) *Cluster {
	s.Configuration = v
	return s
}

// SetDefaultCapacityProviderStrategy sets the DefaultCapacityProviderStrategy field's value.
func (s *Cluster) SetDefaultCapacityProviderStrategy(v []*CapacityProviderStrategyItem) *Cluster {
	s.DefaultCapacityProviderStrategy = v
	return s
}

// SetPendingTasksCount sets the PendingTasksCount field's value.
func (s *Cluster) SetPendingTasksCount(v int64) *Cluster {
	s.PendingTasksCount = &v
	return s
}

// SetRegisteredContainerInstancesCount sets the RegisteredContainerInstancesCount field's value.
func (s *Cluster) SetRegisteredContainerInstancesCount(v int64) *Cluster {
	s.RegisteredContainerInstancesCount = &v
	return s
}

// SetRunningTasksCount sets the RunningTasksCount field's value.
func (s *Cluster) SetRunningTasksCount(v int64) *Cluster {
	s.RunningTasksCount = &v
	return s
}

// SetServiceConnectDefaults sets the ServiceConnectDefaults field's value.
func (s *Cluster) SetServiceConnectDefaults(v *ClusterServiceConnectDefaults) *Cluster {
	s.ServiceConnectDefaults = v
	return s
}

// SetSettings sets the Settings field's value.
func (s *Cluster) SetSettings(v []*ClusterSetting) *Cluster {
	s.Settings = v
	return s
}

// SetStatistics sets the Statistics field's value.
func (s *Cluster) SetStatistics(v []*KeyValuePair) *Cluster {
	s.Statistics = v
	return s
}

// SetStatus sets the Status field's value.
func (s *Cluster) SetStatus(v string) *Cluster {
	s.Status = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *Cluster) SetTags(v []*Tag) *Cluster {
	s.Tags = v
	return s
}

// The execute command configuration for the cluster.
type ClusterConfiguration struct {
	_ struct{} `type:"structure"`

	// The details of the execute command configuration.
	ExecuteCommandConfiguration *ExecuteCommandConfiguration `locationName:"executeCommandConfiguration" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClusterConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClusterConfiguration) GoString() string {
	return s.String()
}

// SetExecuteCommandConfiguration sets the ExecuteCommandConfiguration field's value.
func (s *ClusterConfiguration) SetExecuteCommandConfiguration(v *ExecuteCommandConfiguration) *ClusterConfiguration {
	s.ExecuteCommandConfiguration = v
	return s
}

// You can't delete a cluster that has registered container instances. First,
// deregister the container instances before you can delete the cluster. For
// more information, see DeregisterContainerInstance.
type ClusterContainsContainerInstancesException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClusterContainsContainerInstancesException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClusterContainsContainerInstancesException) GoString() string {
	return s.String()
}

func newErrorClusterContainsContainerInstancesException(v protocol.ResponseMetadata) error {
	return &ClusterContainsContainerInstancesException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ClusterContainsContainerInstancesException) Code() string {
	return "ClusterContainsContainerInstancesException"
}

// Message returns the exception's message.
func (s *ClusterContainsContainerInstancesException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ClusterContainsContainerInstancesException) OrigErr() error {
	return nil
}

func (s *ClusterContainsContainerInstancesException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *ClusterContainsContainerInstancesException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ClusterContainsContainerInstancesException) RequestID() string {
	return s.RespMetadata.RequestID
}

// You can't delete a cluster that contains services. First, update the service
// to reduce its desired task count to 0, and then delete the service. For more
// information, see UpdateService and DeleteService.
type ClusterContainsServicesException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClusterContainsServicesException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClusterContainsServicesException) GoString() string {
	return s.String()
}

func newErrorClusterContainsServicesException(v protocol.ResponseMetadata) error {
	return &ClusterContainsServicesException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ClusterContainsServicesException) Code() string {
	return "ClusterContainsServicesException"
}

// Message returns the exception's message.
func (s *ClusterContainsServicesException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ClusterContainsServicesException) OrigErr() error {
	return nil
}

func (s *ClusterContainsServicesException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *ClusterContainsServicesException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ClusterContainsServicesException) RequestID() string {
	return s.RespMetadata.RequestID
}

// You can't delete a cluster that has active tasks.
type ClusterContainsTasksException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClusterContainsTasksException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClusterContainsTasksException) GoString() string {
	return s.String()
}

func newErrorClusterContainsTasksException(v protocol.ResponseMetadata) error {
	return &ClusterContainsTasksException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ClusterContainsTasksException) Code() string {
	return "ClusterContainsTasksException"
}

// Message returns the exception's message.
func (s *ClusterContainsTasksException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ClusterContainsTasksException) OrigErr() error {
	return nil
}

func (s *ClusterContainsTasksException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *ClusterContainsTasksException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ClusterContainsTasksException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The specified cluster wasn't found. You can view your available clusters
// with ListClusters. Amazon ECS clusters are Region specific.
type ClusterNotFoundException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClusterNotFoundException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClusterNotFoundException) GoString() string {
	return s.String()
}

func newErrorClusterNotFoundException(v protocol.ResponseMetadata) error {
	return &ClusterNotFoundException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ClusterNotFoundException) Code() string {
	return "ClusterNotFoundException"
}

// Message returns the exception's message.
func (s *ClusterNotFoundException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ClusterNotFoundException) OrigErr() error {
	return nil
}

func (s *ClusterNotFoundException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *ClusterNotFoundException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ClusterNotFoundException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Use this parameter to set a default Service Connect namespace. After you
// set a default Service Connect namespace, any new services with Service Connect
// turned on that are created in the cluster are added as client services in
// the namespace. This setting only applies to new services that set the enabled
// parameter to true in the ServiceConnectConfiguration. You can set the namespace
// of each service individually in the ServiceConnectConfiguration to override
// this default parameter.
//
// Tasks that run in a namespace can use short names to connect to services
// in the namespace. Tasks can connect to services across all of the clusters
// in the namespace. Tasks connect through a managed proxy container that collects
// logs and metrics for increased visibility. Only the tasks that Amazon ECS
// services create are supported with Service Connect. For more information,
// see Service Connect (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html)
// in the Amazon Elastic Container Service Developer Guide.
type ClusterServiceConnectDefaults struct {
	_ struct{} `type:"structure"`

	// The namespace name or full Amazon Resource Name (ARN) of the Cloud Map namespace.
	// When you create a service and don't specify a Service Connect configuration,
	// this namespace is used.
	Namespace *string `locationName:"namespace" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClusterServiceConnectDefaults) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClusterServiceConnectDefaults) GoString() string {
	return s.String()
}

// SetNamespace sets the Namespace field's value.
func (s *ClusterServiceConnectDefaults) SetNamespace(v string) *ClusterServiceConnectDefaults {
	s.Namespace = &v
	return s
}

// Use this parameter to set a default Service Connect namespace. After you
// set a default Service Connect namespace, any new services with Service Connect
// turned on that are created in the cluster are added as client services in
// the namespace. This setting only applies to new services that set the enabled
// parameter to true in the ServiceConnectConfiguration. You can set the namespace
// of each service individually in the ServiceConnectConfiguration to override
// this default parameter.
//
// Tasks that run in a namespace can use short names to connect to services
// in the namespace. Tasks can connect to services across all of the clusters
// in the namespace. Tasks connect through a managed proxy container that collects
// logs and metrics for increased visibility. Only the tasks that Amazon ECS
// services create are supported with Service Connect. For more information,
// see Service Connect (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html)
// in the Amazon Elastic Container Service Developer Guide.
type ClusterServiceConnectDefaultsRequest struct {
	_ struct{} `type:"structure"`

	// The namespace name or full Amazon Resource Name (ARN) of the Cloud Map namespace
	// that's used when you create a service and don't specify a Service Connect
	// configuration. The namespace name can include up to 1024 characters. The
	// name is case-sensitive. The name can't include hyphens (-), tilde (~), greater
	// than (>), less than (<), or slash (/).
	//
	// If you enter an existing namespace name or ARN, then that namespace will
	// be used. Any namespace type is supported. The namespace must be in this account
	// and this Amazon Web Services Region.
	//
	// If you enter a new name, a Cloud Map namespace will be created. Amazon ECS
	// creates a Cloud Map namespace with the "API calls" method of instance discovery
	// only. This instance discovery method is the "HTTP" namespace type in the
	// Command Line Interface. Other types of instance discovery aren't used by
	// Service Connect.
	//
	// If you update the cluster with an empty string "" for the namespace name,
	// the cluster configuration for Service Connect is removed. Note that the namespace
	// will remain in Cloud Map and must be deleted separately.
	//
	// For more information about Cloud Map, see Working with Services (https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-services.html)
	// in the Cloud Map Developer Guide.
	//
	// Namespace is a required field
	Namespace *string `locationName:"namespace" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClusterServiceConnectDefaultsRequest) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClusterServiceConnectDefaultsRequest) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ClusterServiceConnectDefaultsRequest) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ClusterServiceConnectDefaultsRequest"}
	if s.Namespace == nil {
		invalidParams.Add(request.NewErrParamRequired("Namespace"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetNamespace sets the Namespace field's value.
func (s *ClusterServiceConnectDefaultsRequest) SetNamespace(v string) *ClusterServiceConnectDefaultsRequest {
	s.Namespace = &v
	return s
}

// The settings to use when creating a cluster. This parameter is used to turn
// on CloudWatch Container Insights for a cluster.
type ClusterSetting struct {
	_ struct{} `type:"structure"`

	// The name of the cluster setting. The value is containerInsights .
	Name *string `locationName:"name" type:"string" enum:"ClusterSettingName"`

	// The value to set for the cluster setting. The supported values are enabled
	// and disabled.
	//
	// If you set name to containerInsights and value to enabled, CloudWatch Container
	// Insights will be on for the cluster, otherwise it will be off unless the
	// containerInsights account setting is turned on. If a cluster value is specified,
	// it will override the containerInsights value set with PutAccountSetting (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_PutAccountSetting.html)
	// or PutAccountSettingDefault (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_PutAccountSettingDefault.html).
	Value *string `locationName:"value" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClusterSetting) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClusterSetting) GoString() string {
	return s.String()
}

// SetName sets the Name field's value.
func (s *ClusterSetting) SetName(v string) *ClusterSetting {
	s.Name = &v
	return s
}

// SetValue sets the Value field's value.
func (s *ClusterSetting) SetValue(v string) *ClusterSetting {
	s.Value = &v
	return s
}

// The RunTask request could not be processed due to conflicts. The provided
// clientToken is already in use with a different RunTask request. The resourceIds
// are the existing task ARNs which are already associated with the clientToken.
//
// To fix this issue:
//
//   - Run RunTask with a unique clientToken.
//
//   - Run RunTask with the clientToken and the original set of parameters
type ConflictException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`

	// The existing task ARNs which are already associated with the clientToken.
	ResourceIds []*string `locationName:"resourceIds" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ConflictException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ConflictException) GoString() string {
	return s.String()
}

func newErrorConflictException(v protocol.ResponseMetadata) error {
	return &ConflictException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ConflictException) Code() string {
	return "ConflictException"
}

// Message returns the exception's message.
func (s *ConflictException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ConflictException) OrigErr() error {
	return nil
}

func (s *ConflictException) Error() string {
	return fmt.Sprintf("%s: %s\n%s", s.Code(), s.Message(), s.String())
}

// Status code returns the HTTP status code for the request's response error.
func (s *ConflictException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ConflictException) RequestID() string {
	return s.RespMetadata.RequestID
}

// A Docker container that's part of a task.
type Container struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the container.
	ContainerArn *string `locationName:"containerArn" type:"string"`

	// The number of CPU units set for the container. The value is 0 if no value
	// was specified in the container definition when the task definition was registered.
	Cpu *string `locationName:"cpu" type:"string"`

	// The exit code returned from the container.
	ExitCode *int64 `locationName:"exitCode" type:"integer"`

	// The IDs of each GPU assigned to the container.
	GpuIds []*string `locationName:"gpuIds" type:"list"`

	// The health status of the container. If health checks aren't configured for
	// this container in its task definition, then it reports the health status
	// as UNKNOWN.
	HealthStatus *string `locationName:"healthStatus" type:"string" enum:"HealthStatus"`

	// The image used for the container.
	Image *string `locationName:"image" type:"string"`

	// The container image manifest digest.
	ImageDigest *string `locationName:"imageDigest" type:"string"`

	// The last known status of the container.
	LastStatus *string `locationName:"lastStatus" type:"string"`

	// The details of any Amazon ECS managed agents associated with the container.
	ManagedAgents []*ManagedAgent `locationName:"managedAgents" type:"list"`

	// The hard limit (in MiB) of memory set for the container.
	Memory *string `locationName:"memory" type:"string"`

	// The soft limit (in MiB) of memory set for the container.
	MemoryReservation *string `locationName:"memoryReservation" type:"string"`

	// The name of the container.
	Name *string `locationName:"name" type:"string"`

	// The network bindings associated with the container.
	NetworkBindings []*NetworkBinding `locationName:"networkBindings" type:"list"`

	// The network interfaces associated with the container.
	NetworkInterfaces []*NetworkInterface `locationName:"networkInterfaces" type:"list"`

	// A short (255 max characters) human-readable string to provide additional
	// details about a running or stopped container.
	Reason *string `locationName:"reason" type:"string"`

	// The ID of the Docker container.
	RuntimeId *string `locationName:"runtimeId" type:"string"`

	// The ARN of the task.
	TaskArn *string `locationName:"taskArn" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Container) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Container) GoString() string {
	return s.String()
}

// SetContainerArn sets the ContainerArn field's value.
func (s *Container) SetContainerArn(v string) *Container {
	s.ContainerArn = &v
	return s
}

// SetCpu sets the Cpu field's value.
func (s *Container) SetCpu(v string) *Container {
	s.Cpu = &v
	return s
}

// SetExitCode sets the ExitCode field's value.
func (s *Container) SetExitCode(v int64) *Container {
	s.ExitCode = &v
	return s
}

// SetGpuIds sets the GpuIds field's value.
func (s *Container) SetGpuIds(v []*string) *Container {
	s.GpuIds = v
	return s
}

// SetHealthStatus sets the HealthStatus field's value.
func (s *Container) SetHealthStatus(v string) *Container {
	s.HealthStatus = &v
	return s
}

// SetImage sets the Image field's value.
func (s *Container) SetImage(v string) *Container {
	s.Image = &v
	return s
}

// SetImageDigest sets the ImageDigest field's value.
func (s *Container) SetImageDigest(v string) *Container {
	s.ImageDigest = &v
	return s
}

// SetLastStatus sets the LastStatus field's value.
func (s *Container) SetLastStatus(v string) *Container {
	s.LastStatus = &v
	return s
}

// SetManagedAgents sets the ManagedAgents field's value.
func (s *Container) SetManagedAgents(v []*ManagedAgent) *Container {
	s.ManagedAgents = v
	return s
}

// SetMemory sets the Memory field's value.
func (s *Container) SetMemory(v string) *Container {
	s.Memory = &v
	return s
}

// SetMemoryReservation sets the MemoryReservation field's value.
func (s *Container) SetMemoryReservation(v string) *Container {
	s.MemoryReservation = &v
	return s
}

// SetName sets the Name field's value.
func (s *Container) SetName(v string) *Container {
	s.Name = &v
	return s
}

// SetNetworkBindings sets the NetworkBindings field's value.
func (s *Container) SetNetworkBindings(v []*NetworkBinding) *Container {
	s.NetworkBindings = v
	return s
}

// SetNetworkInterfaces sets the NetworkInterfaces field's value.
func (s *Container) SetNetworkInterfaces(v []*NetworkInterface) *Container {
	s.NetworkInterfaces = v
	return s
}

// SetReason sets the Reason field's value.
func (s *Container) SetReason(v string) *Container {
	s.Reason = &v
	return s
}

// SetRuntimeId sets the RuntimeId field's value.
func (s *Container) SetRuntimeId(v string) *Container {
	s.RuntimeId = &v
	return s
}

// SetTaskArn sets the TaskArn field's value.
func (s *Container) SetTaskArn(v string) *Container {
	s.TaskArn = &v
	return s
}

// Container definitions are used in task definitions to describe the different
// containers that are launched as part of a task.
type ContainerDefinition struct {
	_ struct{} `type:"structure"`

	// The command that's passed to the container. This parameter maps to Cmd in
	// the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the COMMAND parameter to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	// For more information, see https://docs.docker.com/engine/reference/builder/#cmd
	// (https://docs.docker.com/engine/reference/builder/#cmd). If there are multiple
	// arguments, each argument is a separated string in the array.
	Command []*string `locationName:"command" type:"list"`

	// The number of cpu units reserved for the container. This parameter maps to
	// CpuShares in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --cpu-shares option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// This field is optional for tasks using the Fargate launch type, and the only
	// requirement is that the total amount of CPU reserved for all containers within
	// a task be lower than the task-level cpu value.
	//
	// You can determine the number of CPU units that are available per EC2 instance
	// type by multiplying the vCPUs listed for that instance type on the Amazon
	// EC2 Instances (http://aws.amazon.com/ec2/instance-types/) detail page by
	// 1,024.
	//
	// Linux containers share unallocated CPU units with other containers on the
	// container instance with the same ratio as their allocated amount. For example,
	// if you run a single-container task on a single-core instance type with 512
	// CPU units specified for that container, and that's the only task running
	// on the container instance, that container could use the full 1,024 CPU unit
	// share at any given time. However, if you launched another copy of the same
	// task on that container instance, each task is guaranteed a minimum of 512
	// CPU units when needed. Moreover, each container could float to higher CPU
	// usage if the other container was not using it. If both tasks were 100% active
	// all of the time, they would be limited to 512 CPU units.
	//
	// On Linux container instances, the Docker daemon on the container instance
	// uses the CPU value to calculate the relative CPU share ratios for running
	// containers. For more information, see CPU share constraint (https://docs.docker.com/engine/reference/run/#cpu-share-constraint)
	// in the Docker documentation. The minimum valid CPU share value that the Linux
	// kernel allows is 2. However, the CPU parameter isn't required, and you can
	// use CPU values below 2 in your container definitions. For CPU values below
	// 2 (including null), the behavior varies based on your Amazon ECS container
	// agent version:
	//
	//    * Agent versions less than or equal to 1.1.0: Null and zero CPU values
	//    are passed to Docker as 0, which Docker then converts to 1,024 CPU shares.
	//    CPU values of 1 are passed to Docker as 1, which the Linux kernel converts
	//    to two CPU shares.
	//
	//    * Agent versions greater than or equal to 1.2.0: Null, zero, and CPU values
	//    of 1 are passed to Docker as 2.
	//
	// On Windows container instances, the CPU limit is enforced as an absolute
	// limit, or a quota. Windows containers only have access to the specified amount
	// of CPU that's described in the task definition. A null or zero CPU value
	// is passed to Docker as 0, which Windows interprets as 1% of one CPU.
	Cpu *int64 `locationName:"cpu" type:"integer"`

	// A list of ARNs in SSM or Amazon S3 to a credential spec (CredSpec) file that
	// configures the container for Active Directory authentication. We recommend
	// that you use this parameter instead of the dockerSecurityOptions. The maximum
	// number of ARNs is 1.
	//
	// There are two formats for each ARN.
	//
	// credentialspecdomainless:MyARN
	//
	// You use credentialspecdomainless:MyARN to provide a CredSpec with an additional
	// section for a secret in Secrets Manager. You provide the login credentials
	// to the domain in the secret.
	//
	// Each task that runs on any container instance can join different domains.
	//
	// You can use this format without joining the container instance to a domain.
	//
	// credentialspec:MyARN
	//
	// You use credentialspec:MyARN to provide a CredSpec for a single domain.
	//
	// You must join the container instance to the domain before you start any tasks
	// that use this task definition.
	//
	// In both formats, replace MyARN with the ARN in SSM or Amazon S3.
	//
	// If you provide a credentialspecdomainless:MyARN, the credspec must provide
	// a ARN in Secrets Manager for a secret containing the username, password,
	// and the domain to connect to. For better security, the instance isn't joined
	// to the domain for domainless authentication. Other applications on the instance
	// can't use the domainless credentials. You can use this parameter to run tasks
	// on the same instance, even it the tasks need to join different domains. For
	// more information, see Using gMSAs for Windows Containers (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/windows-gmsa.html)
	// and Using gMSAs for Linux Containers (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/linux-gmsa.html).
	CredentialSpecs []*string `locationName:"credentialSpecs" type:"list"`

	// The dependencies defined for container startup and shutdown. A container
	// can contain multiple dependencies on other containers in a task definition.
	// When a dependency is defined for container startup, for container shutdown
	// it is reversed.
	//
	// For tasks using the EC2 launch type, the container instances require at least
	// version 1.26.0 of the container agent to turn on container dependencies.
	// However, we recommend using the latest container agent version. For information
	// about checking your agent version and updating to the latest version, see
	// Updating the Amazon ECS Container Agent (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html)
	// in the Amazon Elastic Container Service Developer Guide. If you're using
	// an Amazon ECS-optimized Linux AMI, your instance needs at least version 1.26.0-1
	// of the ecs-init package. If your container instances are launched from version
	// 20190301 or later, then they contain the required versions of the container
	// agent and ecs-init. For more information, see Amazon ECS-optimized Linux
	// AMI (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// For tasks using the Fargate launch type, the task or service requires the
	// following platforms:
	//
	//    * Linux platform version 1.3.0 or later.
	//
	//    * Windows platform version 1.0.0 or later.
	DependsOn []*ContainerDependency `locationName:"dependsOn" type:"list"`

	// When this parameter is true, networking is off within the container. This
	// parameter maps to NetworkDisabled in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/).
	//
	// This parameter is not supported for Windows containers.
	DisableNetworking *bool `locationName:"disableNetworking" type:"boolean"`

	// A list of DNS search domains that are presented to the container. This parameter
	// maps to DnsSearch in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --dns-search option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// This parameter is not supported for Windows containers.
	DnsSearchDomains []*string `locationName:"dnsSearchDomains" type:"list"`

	// A list of DNS servers that are presented to the container. This parameter
	// maps to Dns in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --dns option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// This parameter is not supported for Windows containers.
	DnsServers []*string `locationName:"dnsServers" type:"list"`

	// A key/value map of labels to add to the container. This parameter maps to
	// Labels in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --label option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	// This parameter requires version 1.18 of the Docker Remote API or greater
	// on your container instance. To check the Docker Remote API version on your
	// container instance, log in to your container instance and run the following
	// command: sudo docker version --format '{{.Server.APIVersion}}'
	DockerLabels map[string]*string `locationName:"dockerLabels" type:"map"`

	// A list of strings to provide custom configuration for multiple security systems.
	// For more information about valid values, see Docker Run Security Configuration
	// (https://docs.docker.com/engine/reference/run/#security-configuration). This
	// field isn't valid for containers in tasks using the Fargate launch type.
	//
	// For Linux tasks on EC2, this parameter can be used to reference custom labels
	// for SELinux and AppArmor multi-level security systems.
	//
	// For any tasks on EC2, this parameter can be used to reference a credential
	// spec file that configures a container for Active Directory authentication.
	// For more information, see Using gMSAs for Windows Containers (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/windows-gmsa.html)
	// and Using gMSAs for Linux Containers (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/linux-gmsa.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// This parameter maps to SecurityOpt in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --security-opt option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// The Amazon ECS container agent running on a container instance must register
	// with the ECS_SELINUX_CAPABLE=true or ECS_APPARMOR_CAPABLE=true environment
	// variables before containers placed on that instance can use these security
	// options. For more information, see Amazon ECS Container Agent Configuration
	// (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// For more information about valid values, see Docker Run Security Configuration
	// (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// Valid values: "no-new-privileges" | "apparmor:PROFILE" | "label:value" |
	// "credentialspec:CredentialSpecFilePath"
	DockerSecurityOptions []*string `locationName:"dockerSecurityOptions" type:"list"`

	//
	// Early versions of the Amazon ECS container agent don't properly handle entryPoint
	// parameters. If you have problems using entryPoint, update your container
	// agent or enter your commands and arguments as command array items instead.
	//
	// The entry point that's passed to the container. This parameter maps to Entrypoint
	// in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --entrypoint option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	// For more information, see https://docs.docker.com/engine/reference/builder/#entrypoint
	// (https://docs.docker.com/engine/reference/builder/#entrypoint).
	EntryPoint []*string `locationName:"entryPoint" type:"list"`

	// The environment variables to pass to a container. This parameter maps to
	// Env in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --env option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// We don't recommend that you use plaintext environment variables for sensitive
	// information, such as credential data.
	Environment []*KeyValuePair `locationName:"environment" type:"list"`

	// A list of files containing the environment variables to pass to a container.
	// This parameter maps to the --env-file option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// You can specify up to ten environment files. The file must have a .env file
	// extension. Each line in an environment file contains an environment variable
	// in VARIABLE=VALUE format. Lines beginning with # are treated as comments
	// and are ignored. For more information about the environment variable file
	// syntax, see Declare default environment variables in file (https://docs.docker.com/compose/env-file/).
	//
	// If there are environment variables specified using the environment parameter
	// in a container definition, they take precedence over the variables contained
	// within an environment file. If multiple environment files are specified that
	// contain the same variable, they're processed from the top down. We recommend
	// that you use unique variable names. For more information, see Specifying
	// Environment Variables (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/taskdef-envfiles.html)
	// in the Amazon Elastic Container Service Developer Guide.
	EnvironmentFiles []*EnvironmentFile `locationName:"environmentFiles" type:"list"`

	// If the essential parameter of a container is marked as true, and that container
	// fails or stops for any reason, all other containers that are part of the
	// task are stopped. If the essential parameter of a container is marked as
	// false, its failure doesn't affect the rest of the containers in a task. If
	// this parameter is omitted, a container is assumed to be essential.
	//
	// All tasks must have at least one essential container. If you have an application
	// that's composed of multiple containers, group containers that are used for
	// a common purpose into components, and separate the different components into
	// multiple task definitions. For more information, see Application Architecture
	// (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/application_architecture.html)
	// in the Amazon Elastic Container Service Developer Guide.
	Essential *bool `locationName:"essential" type:"boolean"`

	// A list of hostnames and IP address mappings to append to the /etc/hosts file
	// on the container. This parameter maps to ExtraHosts in the Create a container
	// (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section
	// of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/) and
	// the --add-host option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// This parameter isn't supported for Windows containers or tasks that use the
	// awsvpc network mode.
	ExtraHosts []*HostEntry `locationName:"extraHosts" type:"list"`

	// The FireLens configuration for the container. This is used to specify and
	// configure a log router for container logs. For more information, see Custom
	// Log Routing (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_firelens.html)
	// in the Amazon Elastic Container Service Developer Guide.
	FirelensConfiguration *FirelensConfiguration `locationName:"firelensConfiguration" type:"structure"`

	// The container health check command and associated configuration parameters
	// for the container. This parameter maps to HealthCheck in the Create a container
	// (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section
	// of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/) and
	// the HEALTHCHECK parameter of docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	HealthCheck *HealthCheck `locationName:"healthCheck" type:"structure"`

	// The hostname to use for your container. This parameter maps to Hostname in
	// the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --hostname option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// The hostname parameter is not supported if you're using the awsvpc network
	// mode.
	Hostname *string `locationName:"hostname" type:"string"`

	// The image used to start a container. This string is passed directly to the
	// Docker daemon. By default, images in the Docker Hub registry are available.
	// Other repositories are specified with either repository-url/image:tag or
	// repository-url/image@digest . Up to 255 letters (uppercase and lowercase),
	// numbers, hyphens, underscores, colons, periods, forward slashes, and number
	// signs are allowed. This parameter maps to Image in the Create a container
	// (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section
	// of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/) and
	// the IMAGE parameter of docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	//    * When a new task starts, the Amazon ECS container agent pulls the latest
	//    version of the specified image and tag for the container to use. However,
	//    subsequent updates to a repository image aren't propagated to already
	//    running tasks.
	//
	//    * Images in Amazon ECR repositories can be specified by either using the
	//    full registry/repository:tag or registry/repository@digest. For example,
	//    012345678910.dkr.ecr.<region-name>.amazonaws.com/<repository-name>:latest
	//    or 012345678910.dkr.ecr.<region-name>.amazonaws.com/<repository-name>@sha256:94afd1f2e64d908bc90dbca0035a5b567EXAMPLE.
	//
	//    * Images in official repositories on Docker Hub use a single name (for
	//    example, ubuntu or mongo).
	//
	//    * Images in other repositories on Docker Hub are qualified with an organization
	//    name (for example, amazon/amazon-ecs-agent).
	//
	//    * Images in other online repositories are qualified further by a domain
	//    name (for example, quay.io/assemblyline/ubuntu).
	Image *string `locationName:"image" type:"string"`

	// When this parameter is true, you can deploy containerized applications that
	// require stdin or a tty to be allocated. This parameter maps to OpenStdin
	// in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --interactive option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	Interactive *bool `locationName:"interactive" type:"boolean"`

	// The links parameter allows containers to communicate with each other without
	// the need for port mappings. This parameter is only supported if the network
	// mode of a task definition is bridge. The name:internalName construct is analogous
	// to name:alias in Docker links. Up to 255 letters (uppercase and lowercase),
	// numbers, underscores, and hyphens are allowed. For more information about
	// linking Docker containers, go to Legacy container links (https://docs.docker.com/network/links/)
	// in the Docker documentation. This parameter maps to Links in the Create a
	// container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --link option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// This parameter is not supported for Windows containers.
	//
	// Containers that are collocated on a single container instance may be able
	// to communicate with each other without requiring links or host port mappings.
	// Network isolation is achieved on the container instance using security groups
	// and VPC settings.
	Links []*string `locationName:"links" type:"list"`

	// Linux-specific modifications that are applied to the container, such as Linux
	// kernel capabilities. For more information see KernelCapabilities.
	//
	// This parameter is not supported for Windows containers.
	LinuxParameters *LinuxParameters `locationName:"linuxParameters" type:"structure"`

	// The log configuration specification for the container.
	//
	// This parameter maps to LogConfig in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --log-driver option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	// By default, containers use the same logging driver that the Docker daemon
	// uses. However the container can use a different logging driver than the Docker
	// daemon by specifying a log driver with this parameter in the container definition.
	// To use a different logging driver for a container, the log system must be
	// configured properly on the container instance (or on a different log server
	// for remote logging options). For more information about the options for different
	// supported log drivers, see Configure logging drivers (https://docs.docker.com/engine/admin/logging/overview/)
	// in the Docker documentation.
	//
	// Amazon ECS currently supports a subset of the logging drivers available to
	// the Docker daemon (shown in the LogConfiguration data type). Additional log
	// drivers may be available in future releases of the Amazon ECS container agent.
	//
	// This parameter requires version 1.18 of the Docker Remote API or greater
	// on your container instance. To check the Docker Remote API version on your
	// container instance, log in to your container instance and run the following
	// command: sudo docker version --format '{{.Server.APIVersion}}'
	//
	// The Amazon ECS container agent running on a container instance must register
	// the logging drivers available on that instance with the ECS_AVAILABLE_LOGGING_DRIVERS
	// environment variable before containers placed on that instance can use these
	// log configuration options. For more information, see Amazon ECS Container
	// Agent Configuration (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html)
	// in the Amazon Elastic Container Service Developer Guide.
	LogConfiguration *LogConfiguration `locationName:"logConfiguration" type:"structure"`

	// The amount (in MiB) of memory to present to the container. If your container
	// attempts to exceed the memory specified here, the container is killed. The
	// total amount of memory reserved for all containers within a task must be
	// lower than the task memory value, if one is specified. This parameter maps
	// to Memory in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --memory option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// If using the Fargate launch type, this parameter is optional.
	//
	// If using the EC2 launch type, you must specify either a task-level memory
	// value or a container-level memory value. If you specify both a container-level
	// memory and memoryReservation value, memory must be greater than memoryReservation.
	// If you specify memoryReservation, then that value is subtracted from the
	// available memory resources for the container instance where the container
	// is placed. Otherwise, the value of memory is used.
	//
	// The Docker 20.10.0 or later daemon reserves a minimum of 6 MiB of memory
	// for a container. So, don't specify less than 6 MiB of memory for your containers.
	//
	// The Docker 19.03.13-ce or earlier daemon reserves a minimum of 4 MiB of memory
	// for a container. So, don't specify less than 4 MiB of memory for your containers.
	Memory *int64 `locationName:"memory" type:"integer"`

	// The soft limit (in MiB) of memory to reserve for the container. When system
	// memory is under heavy contention, Docker attempts to keep the container memory
	// to this soft limit. However, your container can consume more memory when
	// it needs to, up to either the hard limit specified with the memory parameter
	// (if applicable), or all of the available memory on the container instance,
	// whichever comes first. This parameter maps to MemoryReservation in the Create
	// a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --memory-reservation option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// If a task-level memory value is not specified, you must specify a non-zero
	// integer for one or both of memory or memoryReservation in a container definition.
	// If you specify both, memory must be greater than memoryReservation. If you
	// specify memoryReservation, then that value is subtracted from the available
	// memory resources for the container instance where the container is placed.
	// Otherwise, the value of memory is used.
	//
	// For example, if your container normally uses 128 MiB of memory, but occasionally
	// bursts to 256 MiB of memory for short periods of time, you can set a memoryReservation
	// of 128 MiB, and a memory hard limit of 300 MiB. This configuration would
	// allow the container to only reserve 128 MiB of memory from the remaining
	// resources on the container instance, but also allow the container to consume
	// more memory resources when needed.
	//
	// The Docker 20.10.0 or later daemon reserves a minimum of 6 MiB of memory
	// for a container. So, don't specify less than 6 MiB of memory for your containers.
	//
	// The Docker 19.03.13-ce or earlier daemon reserves a minimum of 4 MiB of memory
	// for a container. So, don't specify less than 4 MiB of memory for your containers.
	MemoryReservation *int64 `locationName:"memoryReservation" type:"integer"`

	// The mount points for data volumes in your container.
	//
	// This parameter maps to Volumes in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --volume option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// Windows containers can mount whole directories on the same drive as $env:ProgramData.
	// Windows containers can't mount directories on a different drive, and mount
	// point can't be across drives.
	MountPoints []*MountPoint `locationName:"mountPoints" type:"list"`

	// The name of a container. If you're linking multiple containers together in
	// a task definition, the name of one container can be entered in the links
	// of another container to connect the containers. Up to 255 letters (uppercase
	// and lowercase), numbers, underscores, and hyphens are allowed. This parameter
	// maps to name in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --name option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	Name *string `locationName:"name" type:"string"`

	// The list of port mappings for the container. Port mappings allow containers
	// to access ports on the host container instance to send or receive traffic.
	//
	// For task definitions that use the awsvpc network mode, only specify the containerPort.
	// The hostPort can be left blank or it must be the same value as the containerPort.
	//
	// Port mappings on Windows use the NetNAT gateway address rather than localhost.
	// There's no loopback for port mappings on Windows, so you can't access a container's
	// mapped port from the host itself.
	//
	// This parameter maps to PortBindings in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --publish option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	// If the network mode of a task definition is set to none, then you can't specify
	// port mappings. If the network mode of a task definition is set to host, then
	// host ports must either be undefined or they must match the container port
	// in the port mapping.
	//
	// After a task reaches the RUNNING status, manual and automatic host and container
	// port assignments are visible in the Network Bindings section of a container
	// description for a selected task in the Amazon ECS console. The assignments
	// are also visible in the networkBindings section DescribeTasks responses.
	PortMappings []*PortMapping `locationName:"portMappings" type:"list"`

	// When this parameter is true, the container is given elevated privileges on
	// the host container instance (similar to the root user). This parameter maps
	// to Privileged in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --privileged option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// This parameter is not supported for Windows containers or tasks run on Fargate.
	Privileged *bool `locationName:"privileged" type:"boolean"`

	// When this parameter is true, a TTY is allocated. This parameter maps to Tty
	// in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --tty option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	PseudoTerminal *bool `locationName:"pseudoTerminal" type:"boolean"`

	// When this parameter is true, the container is given read-only access to its
	// root file system. This parameter maps to ReadonlyRootfs in the Create a container
	// (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section
	// of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/) and
	// the --read-only option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// This parameter is not supported for Windows containers.
	ReadonlyRootFilesystem *bool `locationName:"readonlyRootFilesystem" type:"boolean"`

	// The private repository authentication credentials to use.
	RepositoryCredentials *RepositoryCredentials `locationName:"repositoryCredentials" type:"structure"`

	// The type and amount of a resource to assign to a container. The only supported
	// resource is a GPU.
	ResourceRequirements []*ResourceRequirement `locationName:"resourceRequirements" type:"list"`

	// The secrets to pass to the container. For more information, see Specifying
	// Sensitive Data (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data.html)
	// in the Amazon Elastic Container Service Developer Guide.
	Secrets []*Secret `locationName:"secrets" type:"list"`

	// Time duration (in seconds) to wait before giving up on resolving dependencies
	// for a container. For example, you specify two containers in a task definition
	// with containerA having a dependency on containerB reaching a COMPLETE, SUCCESS,
	// or HEALTHY status. If a startTimeout value is specified for containerB and
	// it doesn't reach the desired status within that time then containerA gives
	// up and not start. This results in the task transitioning to a STOPPED state.
	//
	// When the ECS_CONTAINER_START_TIMEOUT container agent configuration variable
	// is used, it's enforced independently from this start timeout value.
	//
	// For tasks using the Fargate launch type, the task or service requires the
	// following platforms:
	//
	//    * Linux platform version 1.3.0 or later.
	//
	//    * Windows platform version 1.0.0 or later.
	//
	// For tasks using the EC2 launch type, your container instances require at
	// least version 1.26.0 of the container agent to use a container start timeout
	// value. However, we recommend using the latest container agent version. For
	// information about checking your agent version and updating to the latest
	// version, see Updating the Amazon ECS Container Agent (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html)
	// in the Amazon Elastic Container Service Developer Guide. If you're using
	// an Amazon ECS-optimized Linux AMI, your instance needs at least version 1.26.0-1
	// of the ecs-init package. If your container instances are launched from version
	// 20190301 or later, then they contain the required versions of the container
	// agent and ecs-init. For more information, see Amazon ECS-optimized Linux
	// AMI (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// The valid values are 2-120 seconds.
	StartTimeout *int64 `locationName:"startTimeout" type:"integer"`

	// Time duration (in seconds) to wait before the container is forcefully killed
	// if it doesn't exit normally on its own.
	//
	// For tasks using the Fargate launch type, the task or service requires the
	// following platforms:
	//
	//    * Linux platform version 1.3.0 or later.
	//
	//    * Windows platform version 1.0.0 or later.
	//
	// The max stop timeout value is 120 seconds and if the parameter is not specified,
	// the default value of 30 seconds is used.
	//
	// For tasks that use the EC2 launch type, if the stopTimeout parameter isn't
	// specified, the value set for the Amazon ECS container agent configuration
	// variable ECS_CONTAINER_STOP_TIMEOUT is used. If neither the stopTimeout parameter
	// or the ECS_CONTAINER_STOP_TIMEOUT agent configuration variable are set, then
	// the default values of 30 seconds for Linux containers and 30 seconds on Windows
	// containers are used. Your container instances require at least version 1.26.0
	// of the container agent to use a container stop timeout value. However, we
	// recommend using the latest container agent version. For information about
	// checking your agent version and updating to the latest version, see Updating
	// the Amazon ECS Container Agent (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html)
	// in the Amazon Elastic Container Service Developer Guide. If you're using
	// an Amazon ECS-optimized Linux AMI, your instance needs at least version 1.26.0-1
	// of the ecs-init package. If your container instances are launched from version
	// 20190301 or later, then they contain the required versions of the container
	// agent and ecs-init. For more information, see Amazon ECS-optimized Linux
	// AMI (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// The valid values are 2-120 seconds.
	StopTimeout *int64 `locationName:"stopTimeout" type:"integer"`

	// A list of namespaced kernel parameters to set in the container. This parameter
	// maps to Sysctls in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --sysctl option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	// For example, you can configure net.ipv4.tcp_keepalive_time setting to maintain
	// longer lived connections.
	//
	// We don't recommended that you specify network-related systemControls parameters
	// for multiple containers in a single task that also uses either the awsvpc
	// or host network modes. For tasks that use the awsvpc network mode, the container
	// that's started last determines which systemControls parameters take effect.
	// For tasks that use the host network mode, it changes the container instance's
	// namespaced kernel parameters as well as the containers.
	//
	// This parameter is not supported for Windows containers.
	//
	// This parameter is only supported for tasks that are hosted on Fargate if
	// the tasks are using platform version 1.4.0 or later (Linux). This isn't supported
	// for Windows containers on Fargate.
	SystemControls []*SystemControl `locationName:"systemControls" type:"list"`

	// A list of ulimits to set in the container. If a ulimit value is specified
	// in a task definition, it overrides the default values set by Docker. This
	// parameter maps to Ulimits in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --ulimit option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	// Valid naming values are displayed in the Ulimit data type.
	//
	// Amazon ECS tasks hosted on Fargate use the default resource limit values
	// set by the operating system with the exception of the nofile resource limit
	// parameter which Fargate overrides. The nofile resource limit sets a restriction
	// on the number of open files that a container can use. The default nofile
	// soft limit is 1024 and the default hard limit is 4096.
	//
	// This parameter requires version 1.18 of the Docker Remote API or greater
	// on your container instance. To check the Docker Remote API version on your
	// container instance, log in to your container instance and run the following
	// command: sudo docker version --format '{{.Server.APIVersion}}'
	//
	// This parameter is not supported for Windows containers.
	Ulimits []*Ulimit `locationName:"ulimits" type:"list"`

	// The user to use inside the container. This parameter maps to User in the
	// Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --user option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// When running tasks using the host network mode, don't run containers using
	// the root user (UID 0). We recommend using a non-root user for better security.
	//
	// You can specify the user using the following formats. If specifying a UID
	// or GID, you must specify it as a positive integer.
	//
	//    * user
	//
	//    * user:group
	//
	//    * uid
	//
	//    * uid:gid
	//
	//    * user:gid
	//
	//    * uid:group
	//
	// This parameter is not supported for Windows containers.
	User *string `locationName:"user" type:"string"`

	// Data volumes to mount from another container. This parameter maps to VolumesFrom
	// in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --volumes-from option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	VolumesFrom []*VolumeFrom `locationName:"volumesFrom" type:"list"`

	// The working directory to run commands inside the container in. This parameter
	// maps to WorkingDir in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --workdir option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	WorkingDirectory *string `locationName:"workingDirectory" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ContainerDefinition) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ContainerDefinition) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ContainerDefinition) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ContainerDefinition"}
	if s.DependsOn != nil {
		for i, v := range s.DependsOn {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "DependsOn", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.EnvironmentFiles != nil {
		for i, v := range s.EnvironmentFiles {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "EnvironmentFiles", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.ExtraHosts != nil {
		for i, v := range s.ExtraHosts {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ExtraHosts", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.FirelensConfiguration != nil {
		if err := s.FirelensConfiguration.Validate(); err != nil {
			invalidParams.AddNested("FirelensConfiguration", err.(request.ErrInvalidParams))
		}
	}
	if s.HealthCheck != nil {
		if err := s.HealthCheck.Validate(); err != nil {
			invalidParams.AddNested("HealthCheck", err.(request.ErrInvalidParams))
		}
	}
	if s.LinuxParameters != nil {
		if err := s.LinuxParameters.Validate(); err != nil {
			invalidParams.AddNested("LinuxParameters", err.(request.ErrInvalidParams))
		}
	}
	if s.LogConfiguration != nil {
		if err := s.LogConfiguration.Validate(); err != nil {
			invalidParams.AddNested("LogConfiguration", err.(request.ErrInvalidParams))
		}
	}
	if s.RepositoryCredentials != nil {
		if err := s.RepositoryCredentials.Validate(); err != nil {
			invalidParams.AddNested("RepositoryCredentials", err.(request.ErrInvalidParams))
		}
	}
	if s.ResourceRequirements != nil {
		for i, v := range s.ResourceRequirements {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ResourceRequirements", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.Secrets != nil {
		for i, v := range s.Secrets {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Secrets", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.Ulimits != nil {
		for i, v := range s.Ulimits {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Ulimits", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCommand sets the Command field's value.
func (s *ContainerDefinition) SetCommand(v []*string) *ContainerDefinition {
	s.Command = v
	return s
}

// SetCpu sets the Cpu field's value.
func (s *ContainerDefinition) SetCpu(v int64) *ContainerDefinition {
	s.Cpu = &v
	return s
}

// SetCredentialSpecs sets the CredentialSpecs field's value.
func (s *ContainerDefinition) SetCredentialSpecs(v []*string) *ContainerDefinition {
	s.CredentialSpecs = v
	return s
}

// SetDependsOn sets the DependsOn field's value.
func (s *ContainerDefinition) SetDependsOn(v []*ContainerDependency) *ContainerDefinition {
	s.DependsOn = v
	return s
}

// SetDisableNetworking sets the DisableNetworking field's value.
func (s *ContainerDefinition) SetDisableNetworking(v bool) *ContainerDefinition {
	s.DisableNetworking = &v
	return s
}

// SetDnsSearchDomains sets the DnsSearchDomains field's value.
func (s *ContainerDefinition) SetDnsSearchDomains(v []*string) *ContainerDefinition {
	s.DnsSearchDomains = v
	return s
}

// SetDnsServers sets the DnsServers field's value.
func (s *ContainerDefinition) SetDnsServers(v []*string) *ContainerDefinition {
	s.DnsServers = v
	return s
}

// SetDockerLabels sets the DockerLabels field's value.
func (s *ContainerDefinition) SetDockerLabels(v map[string]*string) *ContainerDefinition {
	s.DockerLabels = v
	return s
}

// SetDockerSecurityOptions sets the DockerSecurityOptions field's value.
func (s *ContainerDefinition) SetDockerSecurityOptions(v []*string) *ContainerDefinition {
	s.DockerSecurityOptions = v
	return s
}

// SetEntryPoint sets the EntryPoint field's value.
func (s *ContainerDefinition) SetEntryPoint(v []*string) *ContainerDefinition {
	s.EntryPoint = v
	return s
}

// SetEnvironment sets the Environment field's value.
func (s *ContainerDefinition) SetEnvironment(v []*KeyValuePair) *ContainerDefinition {
	s.Environment = v
	return s
}

// SetEnvironmentFiles sets the EnvironmentFiles field's value.
func (s *ContainerDefinition) SetEnvironmentFiles(v []*EnvironmentFile) *ContainerDefinition {
	s.EnvironmentFiles = v
	return s
}

// SetEssential sets the Essential field's value.
func (s *ContainerDefinition) SetEssential(v bool) *ContainerDefinition {
	s.Essential = &v
	return s
}

// SetExtraHosts sets the ExtraHosts field's value.
func (s *ContainerDefinition) SetExtraHosts(v []*HostEntry) *ContainerDefinition {
	s.ExtraHosts = v
	return s
}

// SetFirelensConfiguration sets the FirelensConfiguration field's value.
func (s *ContainerDefinition) SetFirelensConfiguration(v *FirelensConfiguration) *ContainerDefinition {
	s.FirelensConfiguration = v
	return s
}

// SetHealthCheck sets the HealthCheck field's value.
func (s *ContainerDefinition) SetHealthCheck(v *HealthCheck) *ContainerDefinition {
	s.HealthCheck = v
	return s
}

// SetHostname sets the Hostname field's value.
func (s *ContainerDefinition) SetHostname(v string) *ContainerDefinition {
	s.Hostname = &v
	return s
}

// SetImage sets the Image field's value.
func (s *ContainerDefinition) SetImage(v string) *ContainerDefinition {
	s.Image = &v
	return s
}

// SetInteractive sets the Interactive field's value.
func (s *ContainerDefinition) SetInteractive(v bool) *ContainerDefinition {
	s.Interactive = &v
	return s
}

// SetLinks sets the Links field's value.
func (s *ContainerDefinition) SetLinks(v []*string) *ContainerDefinition {
	s.Links = v
	return s
}

// SetLinuxParameters sets the LinuxParameters field's value.
func (s *ContainerDefinition) SetLinuxParameters(v *LinuxParameters) *ContainerDefinition {
	s.LinuxParameters = v
	return s
}

// SetLogConfiguration sets the LogConfiguration field's value.
func (s *ContainerDefinition) SetLogConfiguration(v *LogConfiguration) *ContainerDefinition {
	s.LogConfiguration = v
	return s
}

// SetMemory sets the Memory field's value.
func (s *ContainerDefinition) SetMemory(v int64) *ContainerDefinition {
	s.Memory = &v
	return s
}

// SetMemoryReservation sets the MemoryReservation field's value.
func (s *ContainerDefinition) SetMemoryReservation(v int64) *ContainerDefinition {
	s.MemoryReservation = &v
	return s
}

// SetMountPoints sets the MountPoints field's value.
func (s *ContainerDefinition) SetMountPoints(v []*MountPoint) *ContainerDefinition {
	s.MountPoints = v
	return s
}

// SetName sets the Name field's value.
func (s *ContainerDefinition) SetName(v string) *ContainerDefinition {
	s.Name = &v
	return s
}

// SetPortMappings sets the PortMappings field's value.
func (s *ContainerDefinition) SetPortMappings(v []*PortMapping) *ContainerDefinition {
	s.PortMappings = v
	return s
}

// SetPrivileged sets the Privileged field's value.
func (s *ContainerDefinition) SetPrivileged(v bool) *ContainerDefinition {
	s.Privileged = &v
	return s
}

// SetPseudoTerminal sets the PseudoTerminal field's value.
func (s *ContainerDefinition) SetPseudoTerminal(v bool) *ContainerDefinition {
	s.PseudoTerminal = &v
	return s
}

// SetReadonlyRootFilesystem sets the ReadonlyRootFilesystem field's value.
func (s *ContainerDefinition) SetReadonlyRootFilesystem(v bool) *ContainerDefinition {
	s.ReadonlyRootFilesystem = &v
	return s
}

// SetRepositoryCredentials sets the RepositoryCredentials field's value.
func (s *ContainerDefinition) SetRepositoryCredentials(v *RepositoryCredentials) *ContainerDefinition {
	s.RepositoryCredentials = v
	return s
}

// SetResourceRequirements sets the ResourceRequirements field's value.
func (s *ContainerDefinition) SetResourceRequirements(v []*ResourceRequirement) *ContainerDefinition {
	s.ResourceRequirements = v
	return s
}

// SetSecrets sets the Secrets field's value.
func (s *ContainerDefinition) SetSecrets(v []*Secret) *ContainerDefinition {
	s.Secrets = v
	return s
}

// SetStartTimeout sets the StartTimeout field's value.
func (s *ContainerDefinition) SetStartTimeout(v int64) *ContainerDefinition {
	s.StartTimeout = &v
	return s
}

// SetStopTimeout sets the StopTimeout field's value.
func (s *ContainerDefinition) SetStopTimeout(v int64) *ContainerDefinition {
	s.StopTimeout = &v
	return s
}

// SetSystemControls sets the SystemControls field's value.
func (s *ContainerDefinition) SetSystemControls(v []*SystemControl) *ContainerDefinition {
	s.SystemControls = v
	return s
}

// SetUlimits sets the Ulimits field's value.
func (s *ContainerDefinition) SetUlimits(v []*Ulimit) *ContainerDefinition {
	s.Ulimits = v
	return s
}

// SetUser sets the User field's value.
func (s *ContainerDefinition) SetUser(v string) *ContainerDefinition {
	s.User = &v
	return s
}

// SetVolumesFrom sets the VolumesFrom field's value.
func (s *ContainerDefinition) SetVolumesFrom(v []*VolumeFrom) *ContainerDefinition {
	s.VolumesFrom = v
	return s
}

// SetWorkingDirectory sets the WorkingDirectory field's value.
func (s *ContainerDefinition) SetWorkingDirectory(v string) *ContainerDefinition {
	s.WorkingDirectory = &v
	return s
}

// The dependencies defined for container startup and shutdown. A container
// can contain multiple dependencies. When a dependency is defined for container
// startup, for container shutdown it is reversed.
//
// Your Amazon ECS container instances require at least version 1.26.0 of the
// container agent to use container dependencies. However, we recommend using
// the latest container agent version. For information about checking your agent
// version and updating to the latest version, see Updating the Amazon ECS Container
// Agent (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html)
// in the Amazon Elastic Container Service Developer Guide. If you're using
// an Amazon ECS-optimized Linux AMI, your instance needs at least version 1.26.0-1
// of the ecs-init package. If your container instances are launched from version
// 20190301 or later, then they contain the required versions of the container
// agent and ecs-init. For more information, see Amazon ECS-optimized Linux
// AMI (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// For tasks that use the Fargate launch type, the task or service requires
// the following platforms:
//
//   - Linux platform version 1.3.0 or later.
//
//   - Windows platform version 1.0.0 or later.
type ContainerDependency struct {
	_ struct{} `type:"structure"`

	// The dependency condition of the container. The following are the available
	// conditions and their behavior:
	//
	//    * START - This condition emulates the behavior of links and volumes today.
	//    It validates that a dependent container is started before permitting other
	//    containers to start.
	//
	//    * COMPLETE - This condition validates that a dependent container runs
	//    to completion (exits) before permitting other containers to start. This
	//    can be useful for nonessential containers that run a script and then exit.
	//    This condition can't be set on an essential container.
	//
	//    * SUCCESS - This condition is the same as COMPLETE, but it also requires
	//    that the container exits with a zero status. This condition can't be set
	//    on an essential container.
	//
	//    * HEALTHY - This condition validates that the dependent container passes
	//    its Docker health check before permitting other containers to start. This
	//    requires that the dependent container has health checks configured. This
	//    condition is confirmed only at task startup.
	//
	// Condition is a required field
	Condition *string `locationName:"condition" type:"string" required:"true" enum:"ContainerCondition"`

	// The name of a container.
	//
	// ContainerName is a required field
	ContainerName *string `locationName:"containerName" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ContainerDependency) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ContainerDependency) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ContainerDependency) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ContainerDependency"}
	if s.Condition == nil {
		invalidParams.Add(request.NewErrParamRequired("Condition"))
	}
	if s.ContainerName == nil {
		invalidParams.Add(request.NewErrParamRequired("ContainerName"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCondition sets the Condition field's value.
func (s *ContainerDependency) SetCondition(v string) *ContainerDependency {
	s.Condition = &v
	return s
}

// SetContainerName sets the ContainerName field's value.
func (s *ContainerDependency) SetContainerName(v string) *ContainerDependency {
	s.ContainerName = &v
	return s
}

// An Amazon EC2 or External instance that's running the Amazon ECS agent and
// has been registered with a cluster.
type ContainerInstance struct {
	_ struct{} `type:"structure"`

	// This parameter returns true if the agent is connected to Amazon ECS. An instance
	// with an agent that may be unhealthy or stopped return false. Only instances
	// connected to an agent can accept task placement requests.
	AgentConnected *bool `locationName:"agentConnected" type:"boolean"`

	// The status of the most recent agent update. If an update wasn't ever requested,
	// this value is NULL.
	AgentUpdateStatus *string `locationName:"agentUpdateStatus" type:"string" enum:"AgentUpdateStatus"`

	// The resources attached to a container instance, such as an elastic network
	// interface.
	Attachments []*Attachment `locationName:"attachments" type:"list"`

	// The attributes set for the container instance, either by the Amazon ECS container
	// agent at instance registration or manually with the PutAttributes operation.
	Attributes []*Attribute `locationName:"attributes" type:"list"`

	// The capacity provider that's associated with the container instance.
	CapacityProviderName *string `locationName:"capacityProviderName" type:"string"`

	// The Amazon Resource Name (ARN) of the container instance. For more information
	// about the ARN format, see Amazon Resource Name (ARN) (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids)
	// in the Amazon ECS Developer Guide.
	ContainerInstanceArn *string `locationName:"containerInstanceArn" type:"string"`

	// The ID of the container instance. For Amazon EC2 instances, this value is
	// the Amazon EC2 instance ID. For external instances, this value is the Amazon
	// Web Services Systems Manager managed instance ID.
	Ec2InstanceId *string `locationName:"ec2InstanceId" type:"string"`

	// An object representing the health status of the container instance.
	HealthStatus *ContainerInstanceHealthStatus `locationName:"healthStatus" type:"structure"`

	// The number of tasks on the container instance that are in the PENDING status.
	PendingTasksCount *int64 `locationName:"pendingTasksCount" type:"integer"`

	// The Unix timestamp for the time when the container instance was registered.
	RegisteredAt *time.Time `locationName:"registeredAt" type:"timestamp"`

	// For CPU and memory resource types, this parameter describes the amount of
	// each resource that was available on the container instance when the container
	// agent registered it with Amazon ECS. This value represents the total amount
	// of CPU and memory that can be allocated on this container instance to tasks.
	// For port resource types, this parameter describes the ports that were reserved
	// by the Amazon ECS container agent when it registered the container instance
	// with Amazon ECS.
	RegisteredResources []*Resource `locationName:"registeredResources" type:"list"`

	// For CPU and memory resource types, this parameter describes the remaining
	// CPU and memory that wasn't already allocated to tasks and is therefore available
	// for new tasks. For port resource types, this parameter describes the ports
	// that were reserved by the Amazon ECS container agent (at instance registration
	// time) and any task containers that have reserved port mappings on the host
	// (with the host or bridge network mode). Any port that's not specified here
	// is available for new tasks.
	RemainingResources []*Resource `locationName:"remainingResources" type:"list"`

	// The number of tasks on the container instance that have a desired status
	// (desiredStatus) of RUNNING.
	RunningTasksCount *int64 `locationName:"runningTasksCount" type:"integer"`

	// The status of the container instance. The valid values are REGISTERING, REGISTRATION_FAILED,
	// ACTIVE, INACTIVE, DEREGISTERING, or DRAINING.
	//
	// If your account has opted in to the awsvpcTrunking account setting, then
	// any newly registered container instance will transition to a REGISTERING
	// status while the trunk elastic network interface is provisioned for the instance.
	// If the registration fails, the instance will transition to a REGISTRATION_FAILED
	// status. You can describe the container instance and see the reason for failure
	// in the statusReason parameter. Once the container instance is terminated,
	// the instance transitions to a DEREGISTERING status while the trunk elastic
	// network interface is deprovisioned. The instance then transitions to an INACTIVE
	// status.
	//
	// The ACTIVE status indicates that the container instance can accept tasks.
	// The DRAINING indicates that new tasks aren't placed on the container instance
	// and any service tasks running on the container instance are removed if possible.
	// For more information, see Container instance draining (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/container-instance-draining.html)
	// in the Amazon Elastic Container Service Developer Guide.
	Status *string `locationName:"status" type:"string"`

	// The reason that the container instance reached its current status.
	StatusReason *string `locationName:"statusReason" type:"string"`

	// The metadata that you apply to the container instance to help you categorize
	// and organize them. Each tag consists of a key and an optional value. You
	// define both.
	//
	// The following basic restrictions apply to tags:
	//
	//    * Maximum number of tags per resource - 50
	//
	//    * For each resource, each tag key must be unique, and each tag key can
	//    have only one value.
	//
	//    * Maximum key length - 128 Unicode characters in UTF-8
	//
	//    * Maximum value length - 256 Unicode characters in UTF-8
	//
	//    * If your tagging schema is used across multiple services and resources,
	//    remember that other services may have restrictions on allowed characters.
	//    Generally allowed characters are: letters, numbers, and spaces representable
	//    in UTF-8, and the following characters: + - = . _ : / @.
	//
	//    * Tag keys and values are case-sensitive.
	//
	//    * Do not use aws:, AWS:, or any upper or lowercase combination of such
	//    as a prefix for either keys or values as it is reserved for Amazon Web
	//    Services use. You cannot edit or delete tag keys or values with this prefix.
	//    Tags with this prefix do not count against your tags per resource limit.
	Tags []*Tag `locationName:"tags" type:"list"`

	// The version counter for the container instance. Every time a container instance
	// experiences a change that triggers a CloudWatch event, the version counter
	// is incremented. If you're replicating your Amazon ECS container instance
	// state with CloudWatch Events, you can compare the version of a container
	// instance reported by the Amazon ECS APIs with the version reported in CloudWatch
	// Events for the container instance (inside the detail object) to verify that
	// the version in your event stream is current.
	Version *int64 `locationName:"version" type:"long"`

	// The version information for the Amazon ECS container agent and Docker daemon
	// running on the container instance.
	VersionInfo *VersionInfo `locationName:"versionInfo" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ContainerInstance) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ContainerInstance) GoString() string {
	return s.String()
}

// SetAgentConnected sets the AgentConnected field's value.
func (s *ContainerInstance) SetAgentConnected(v bool) *ContainerInstance {
	s.AgentConnected = &v
	return s
}

// SetAgentUpdateStatus sets the AgentUpdateStatus field's value.
func (s *ContainerInstance) SetAgentUpdateStatus(v string) *ContainerInstance {
	s.AgentUpdateStatus = &v
	return s
}

// SetAttachments sets the Attachments field's value.
func (s *ContainerInstance) SetAttachments(v []*Attachment) *ContainerInstance {
	s.Attachments = v
	return s
}

// SetAttributes sets the Attributes field's value.
func (s *ContainerInstance) SetAttributes(v []*Attribute) *ContainerInstance {
	s.Attributes = v
	return s
}

// SetCapacityProviderName sets the CapacityProviderName field's value.
func (s *ContainerInstance) SetCapacityProviderName(v string) *ContainerInstance {
	s.CapacityProviderName = &v
	return s
}

// SetContainerInstanceArn sets the ContainerInstanceArn field's value.
func (s *ContainerInstance) SetContainerInstanceArn(v string) *ContainerInstance {
	s.ContainerInstanceArn = &v
	return s
}

// SetEc2InstanceId sets the Ec2InstanceId field's value.
func (s *ContainerInstance) SetEc2InstanceId(v string) *ContainerInstance {
	s.Ec2InstanceId = &v
	return s
}

// SetHealthStatus sets the HealthStatus field's value.
func (s *ContainerInstance) SetHealthStatus(v *ContainerInstanceHealthStatus) *ContainerInstance {
	s.HealthStatus = v
	return s
}

// SetPendingTasksCount sets the PendingTasksCount field's value.
func (s *ContainerInstance) SetPendingTasksCount(v int64) *ContainerInstance {
	s.PendingTasksCount = &v
	return s
}

// SetRegisteredAt sets the RegisteredAt field's value.
func (s *ContainerInstance) SetRegisteredAt(v time.Time) *ContainerInstance {
	s.RegisteredAt = &v
	return s
}

// SetRegisteredResources sets the RegisteredResources field's value.
func (s *ContainerInstance) SetRegisteredResources(v []*Resource) *ContainerInstance {
	s.RegisteredResources = v
	return s
}

// SetRemainingResources sets the RemainingResources field's value.
func (s *ContainerInstance) SetRemainingResources(v []*Resource) *ContainerInstance {
	s.RemainingResources = v
	return s
}

// SetRunningTasksCount sets the RunningTasksCount field's value.
func (s *ContainerInstance) SetRunningTasksCount(v int64) *ContainerInstance {
	s.RunningTasksCount = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *ContainerInstance) SetStatus(v string) *ContainerInstance {
	s.Status = &v
	return s
}

// SetStatusReason sets the StatusReason field's value.
func (s *ContainerInstance) SetStatusReason(v string) *ContainerInstance {
	s.StatusReason = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *ContainerInstance) SetTags(v []*Tag) *ContainerInstance {
	s.Tags = v
	return s
}

// SetVersion sets the Version field's value.
func (s *ContainerInstance) SetVersion(v int64) *ContainerInstance {
	s.Version = &v
	return s
}

// SetVersionInfo sets the VersionInfo field's value.
func (s *ContainerInstance) SetVersionInfo(v *VersionInfo) *ContainerInstance {
	s.VersionInfo = v
	return s
}

// An object representing the health status of the container instance.
type ContainerInstanceHealthStatus struct {
	_ struct{} `type:"structure"`

	// An array of objects representing the details of the container instance health
	// status.
	Details []*InstanceHealthCheckResult `locationName:"details" type:"list"`

	// The overall health status of the container instance. This is an aggregate
	// status of all container instance health checks.
	OverallStatus *string `locationName:"overallStatus" type:"string" enum:"InstanceHealthCheckState"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ContainerInstanceHealthStatus) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ContainerInstanceHealthStatus) GoString() string {
	return s.String()
}

// SetDetails sets the Details field's value.
func (s *ContainerInstanceHealthStatus) SetDetails(v []*InstanceHealthCheckResult) *ContainerInstanceHealthStatus {
	s.Details = v
	return s
}

// SetOverallStatus sets the OverallStatus field's value.
func (s *ContainerInstanceHealthStatus) SetOverallStatus(v string) *ContainerInstanceHealthStatus {
	s.OverallStatus = &v
	return s
}

// The overrides that are sent to a container. An empty container override can
// be passed in. An example of an empty container override is {"containerOverrides":
// [ ] }. If a non-empty container override is specified, the name parameter
// must be included.
//
// You can use Secrets Manager or Amazon Web Services Systems Manager Parameter
// Store to store the sensitive data. For more information, see Retrieve secrets
// through environment variables (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/secrets-envvar.html)
// in the Amazon ECS Developer Guide.
type ContainerOverride struct {
	_ struct{} `type:"structure"`

	// The command to send to the container that overrides the default command from
	// the Docker image or the task definition. You must also specify a container
	// name.
	Command []*string `locationName:"command" type:"list"`

	// The number of cpu units reserved for the container, instead of the default
	// value from the task definition. You must also specify a container name.
	Cpu *int64 `locationName:"cpu" type:"integer"`

	// The environment variables to send to the container. You can add new environment
	// variables, which are added to the container at launch, or you can override
	// the existing environment variables from the Docker image or the task definition.
	// You must also specify a container name.
	Environment []*KeyValuePair `locationName:"environment" type:"list"`

	// A list of files containing the environment variables to pass to a container,
	// instead of the value from the container definition.
	EnvironmentFiles []*EnvironmentFile `locationName:"environmentFiles" type:"list"`

	// The hard limit (in MiB) of memory to present to the container, instead of
	// the default value from the task definition. If your container attempts to
	// exceed the memory specified here, the container is killed. You must also
	// specify a container name.
	Memory *int64 `locationName:"memory" type:"integer"`

	// The soft limit (in MiB) of memory to reserve for the container, instead of
	// the default value from the task definition. You must also specify a container
	// name.
	MemoryReservation *int64 `locationName:"memoryReservation" type:"integer"`

	// The name of the container that receives the override. This parameter is required
	// if any override is specified.
	Name *string `locationName:"name" type:"string"`

	// The type and amount of a resource to assign to a container, instead of the
	// default value from the task definition. The only supported resource is a
	// GPU.
	ResourceRequirements []*ResourceRequirement `locationName:"resourceRequirements" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ContainerOverride) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ContainerOverride) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ContainerOverride) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ContainerOverride"}
	if s.EnvironmentFiles != nil {
		for i, v := range s.EnvironmentFiles {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "EnvironmentFiles", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.ResourceRequirements != nil {
		for i, v := range s.ResourceRequirements {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ResourceRequirements", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCommand sets the Command field's value.
func (s *ContainerOverride) SetCommand(v []*string) *ContainerOverride {
	s.Command = v
	return s
}

// SetCpu sets the Cpu field's value.
func (s *ContainerOverride) SetCpu(v int64) *ContainerOverride {
	s.Cpu = &v
	return s
}

// SetEnvironment sets the Environment field's value.
func (s *ContainerOverride) SetEnvironment(v []*KeyValuePair) *ContainerOverride {
	s.Environment = v
	return s
}

// SetEnvironmentFiles sets the EnvironmentFiles field's value.
func (s *ContainerOverride) SetEnvironmentFiles(v []*EnvironmentFile) *ContainerOverride {
	s.EnvironmentFiles = v
	return s
}

// SetMemory sets the Memory field's value.
func (s *ContainerOverride) SetMemory(v int64) *ContainerOverride {
	s.Memory = &v
	return s
}

// SetMemoryReservation sets the MemoryReservation field's value.
func (s *ContainerOverride) SetMemoryReservation(v int64) *ContainerOverride {
	s.MemoryReservation = &v
	return s
}

// SetName sets the Name field's value.
func (s *ContainerOverride) SetName(v string) *ContainerOverride {
	s.Name = &v
	return s
}

// SetResourceRequirements sets the ResourceRequirements field's value.
func (s *ContainerOverride) SetResourceRequirements(v []*ResourceRequirement) *ContainerOverride {
	s.ResourceRequirements = v
	return s
}

// An object that represents a change in state for a container.
type ContainerStateChange struct {
	_ struct{} `type:"structure"`

	// The name of the container.
	ContainerName *string `locationName:"containerName" type:"string"`

	// The exit code for the container, if the state change is a result of the container
	// exiting.
	ExitCode *int64 `locationName:"exitCode" type:"integer"`

	// The container image SHA 256 digest.
	ImageDigest *string `locationName:"imageDigest" type:"string"`

	// Any network bindings that are associated with the container.
	NetworkBindings []*NetworkBinding `locationName:"networkBindings" type:"list"`

	// The reason for the state change.
	Reason *string `locationName:"reason" type:"string"`

	// The ID of the Docker container.
	RuntimeId *string `locationName:"runtimeId" type:"string"`

	// The status of the container.
	Status *string `locationName:"status" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ContainerStateChange) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ContainerStateChange) GoString() string {
	return s.String()
}

// SetContainerName sets the ContainerName field's value.
func (s *ContainerStateChange) SetContainerName(v string) *ContainerStateChange {
	s.ContainerName = &v
	return s
}

// SetExitCode sets the ExitCode field's value.
func (s *ContainerStateChange) SetExitCode(v int64) *ContainerStateChange {
	s.ExitCode = &v
	return s
}

// SetImageDigest sets the ImageDigest field's value.
func (s *ContainerStateChange) SetImageDigest(v string) *ContainerStateChange {
	s.ImageDigest = &v
	return s
}

// SetNetworkBindings sets the NetworkBindings field's value.
func (s *ContainerStateChange) SetNetworkBindings(v []*NetworkBinding) *ContainerStateChange {
	s.NetworkBindings = v
	return s
}

// SetReason sets the Reason field's value.
func (s *ContainerStateChange) SetReason(v string) *ContainerStateChange {
	s.Reason = &v
	return s
}

// SetRuntimeId sets the RuntimeId field's value.
func (s *ContainerStateChange) SetRuntimeId(v string) *ContainerStateChange {
	s.RuntimeId = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *ContainerStateChange) SetStatus(v string) *ContainerStateChange {
	s.Status = &v
	return s
}

type CreateCapacityProviderInput struct {
	_ struct{} `type:"structure"`

	// The details of the Auto Scaling group for the capacity provider.
	//
	// AutoScalingGroupProvider is a required field
	AutoScalingGroupProvider *AutoScalingGroupProvider `locationName:"autoScalingGroupProvider" type:"structure" required:"true"`

	// The name of the capacity provider. Up to 255 characters are allowed. They
	// include letters (both upper and lowercase letters), numbers, underscores
	// (_), and hyphens (-). The name can't be prefixed with "aws", "ecs", or "fargate".
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true"`

	// The metadata that you apply to the capacity provider to categorize and organize
	// them more conveniently. Each tag consists of a key and an optional value.
	// You define both of them.
	//
	// The following basic restrictions apply to tags:
	//
	//    * Maximum number of tags per resource - 50
	//
	//    * For each resource, each tag key must be unique, and each tag key can
	//    have only one value.
	//
	//    * Maximum key length - 128 Unicode characters in UTF-8
	//
	//    * Maximum value length - 256 Unicode characters in UTF-8
	//
	//    * If your tagging schema is used across multiple services and resources,
	//    remember that other services may have restrictions on allowed characters.
	//    Generally allowed characters are: letters, numbers, and spaces representable
	//    in UTF-8, and the following characters: + - = . _ : / @.
	//
	//    * Tag keys and values are case-sensitive.
	//
	//    * Do not use aws:, AWS:, or any upper or lowercase combination of such
	//    as a prefix for either keys or values as it is reserved for Amazon Web
	//    Services use. You cannot edit or delete tag keys or values with this prefix.
	//    Tags with this prefix do not count against your tags per resource limit.
	Tags []*Tag `locationName:"tags" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateCapacityProviderInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateCapacityProviderInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateCapacityProviderInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateCapacityProviderInput"}
	if s.AutoScalingGroupProvider == nil {
		invalidParams.Add(request.NewErrParamRequired("AutoScalingGroupProvider"))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.AutoScalingGroupProvider != nil {
		if err := s.AutoScalingGroupProvider.Validate(); err != nil {
			invalidParams.AddNested("AutoScalingGroupProvider", err.(request.ErrInvalidParams))
		}
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAutoScalingGroupProvider sets the AutoScalingGroupProvider field's value.
func (s *CreateCapacityProviderInput) SetAutoScalingGroupProvider(v *AutoScalingGroupProvider) *CreateCapacityProviderInput {
	s.AutoScalingGroupProvider = v
	return s
}

// SetName sets the Name field's value.
func (s *CreateCapacityProviderInput) SetName(v string) *CreateCapacityProviderInput {
	s.Name = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateCapacityProviderInput) SetTags(v []*Tag) *CreateCapacityProviderInput {
	s.Tags = v
	return s
}

type CreateCapacityProviderOutput struct {
	_ struct{} `type:"structure"`

	// The full description of the new capacity provider.
	CapacityProvider *CapacityProvider `locationName:"capacityProvider" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateCapacityProviderOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateCapacityProviderOutput) GoString() string {
	return s.String()
}

// SetCapacityProvider sets the CapacityProvider field's value.
func (s *CreateCapacityProviderOutput) SetCapacityProvider(v *CapacityProvider) *CreateCapacityProviderOutput {
	s.CapacityProvider = v
	return s
}

type CreateClusterInput struct {
	_ struct{} `type:"structure"`

	// The short name of one or more capacity providers to associate with the cluster.
	// A capacity provider must be associated with a cluster before it can be included
	// as part of the default capacity provider strategy of the cluster or used
	// in a capacity provider strategy when calling the CreateService (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html)
	// or RunTask (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html)
	// actions.
	//
	// If specifying a capacity provider that uses an Auto Scaling group, the capacity
	// provider must be created but not associated with another cluster. New Auto
	// Scaling group capacity providers can be created with the CreateCapacityProvider
	// (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateCapacityProvider.html)
	// API operation.
	//
	// To use a Fargate capacity provider, specify either the FARGATE or FARGATE_SPOT
	// capacity providers. The Fargate capacity providers are available to all accounts
	// and only need to be associated with a cluster to be used.
	//
	// The PutCapacityProvider (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_PutCapacityProvider.html)
	// API operation is used to update the list of available capacity providers
	// for a cluster after the cluster is created.
	CapacityProviders []*string `locationName:"capacityProviders" type:"list"`

	// The name of your cluster. If you don't specify a name for your cluster, you
	// create a cluster that's named default. Up to 255 letters (uppercase and lowercase),
	// numbers, underscores, and hyphens are allowed.
	ClusterName *string `locationName:"clusterName" type:"string"`

	// The execute command configuration for the cluster.
	Configuration *ClusterConfiguration `locationName:"configuration" type:"structure"`

	// The capacity provider strategy to set as the default for the cluster. After
	// a default capacity provider strategy is set for a cluster, when you call
	// the CreateService (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html)
	// or RunTask (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html)
	// APIs with no capacity provider strategy or launch type specified, the default
	// capacity provider strategy for the cluster is used.
	//
	// If a default capacity provider strategy isn't defined for a cluster when
	// it was created, it can be defined later with the PutClusterCapacityProviders
	// API operation.
	DefaultCapacityProviderStrategy []*CapacityProviderStrategyItem `locationName:"defaultCapacityProviderStrategy" type:"list"`

	// Use this parameter to set a default Service Connect namespace. After you
	// set a default Service Connect namespace, any new services with Service Connect
	// turned on that are created in the cluster are added as client services in
	// the namespace. This setting only applies to new services that set the enabled
	// parameter to true in the ServiceConnectConfiguration. You can set the namespace
	// of each service individually in the ServiceConnectConfiguration to override
	// this default parameter.
	//
	// Tasks that run in a namespace can use short names to connect to services
	// in the namespace. Tasks can connect to services across all of the clusters
	// in the namespace. Tasks connect through a managed proxy container that collects
	// logs and metrics for increased visibility. Only the tasks that Amazon ECS
	// services create are supported with Service Connect. For more information,
	// see Service Connect (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html)
	// in the Amazon Elastic Container Service Developer Guide.
	ServiceConnectDefaults *ClusterServiceConnectDefaultsRequest `locationName:"serviceConnectDefaults" type:"structure"`

	// The setting to use when creating a cluster. This parameter is used to turn
	// on CloudWatch Container Insights for a cluster. If this value is specified,
	// it overrides the containerInsights value set with PutAccountSetting or PutAccountSettingDefault.
	Settings []*ClusterSetting `locationName:"settings" type:"list"`

	// The metadata that you apply to the cluster to help you categorize and organize
	// them. Each tag consists of a key and an optional value. You define both.
	//
	// The following basic restrictions apply to tags:
	//
	//    * Maximum number of tags per resource - 50
	//
	//    * For each resource, each tag key must be unique, and each tag key can
	//    have only one value.
	//
	//    * Maximum key length - 128 Unicode characters in UTF-8
	//
	//    * Maximum value length - 256 Unicode characters in UTF-8
	//
	//    * If your tagging schema is used across multiple services and resources,
	//    remember that other services may have restrictions on allowed characters.
	//    Generally allowed characters are: letters, numbers, and spaces representable
	//    in UTF-8, and the following characters: + - = . _ : / @.
	//
	//    * Tag keys and values are case-sensitive.
	//
	//    * Do not use aws:, AWS:, or any upper or lowercase combination of such
	//    as a prefix for either keys or values as it is reserved for Amazon Web
	//    Services use. You cannot edit or delete tag keys or values with this prefix.
	//    Tags with this prefix do not count against your tags per resource limit.
	Tags []*Tag `locationName:"tags" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateClusterInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateClusterInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateClusterInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateClusterInput"}
	if s.DefaultCapacityProviderStrategy != nil {
		for i, v := range s.DefaultCapacityProviderStrategy {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "DefaultCapacityProviderStrategy", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.ServiceConnectDefaults != nil {
		if err := s.ServiceConnectDefaults.Validate(); err != nil {
			invalidParams.AddNested("ServiceConnectDefaults", err.(request.ErrInvalidParams))
		}
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCapacityProviders sets the CapacityProviders field's value.
func (s *CreateClusterInput) SetCapacityProviders(v []*string) *CreateClusterInput {
	s.CapacityProviders = v
	return s
}

// SetClusterName sets the ClusterName field's value.
func (s *CreateClusterInput) SetClusterName(v string) *CreateClusterInput {
	s.ClusterName = &v
	return s
}

// SetConfiguration sets the Configuration field's value.
func (s *CreateClusterInput) SetConfiguration(v *ClusterConfiguration) *CreateClusterInput {
	s.Configuration = v
	return s
}

// SetDefaultCapacityProviderStrategy sets the DefaultCapacityProviderStrategy field's value.
func (s *CreateClusterInput) SetDefaultCapacityProviderStrategy(v []*CapacityProviderStrategyItem) *CreateClusterInput {
	s.DefaultCapacityProviderStrategy = v
	return s
}

// SetServiceConnectDefaults sets the ServiceConnectDefaults field's value.
func (s *CreateClusterInput) SetServiceConnectDefaults(v *ClusterServiceConnectDefaultsRequest) *CreateClusterInput {
	s.ServiceConnectDefaults = v
	return s
}

// SetSettings sets the Settings field's value.
func (s *CreateClusterInput) SetSettings(v []*ClusterSetting) *CreateClusterInput {
	s.Settings = v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateClusterInput) SetTags(v []*Tag) *CreateClusterInput {
	s.Tags = v
	return s
}

type CreateClusterOutput struct {
	_ struct{} `type:"structure"`

	// The full description of your new cluster.
	Cluster *Cluster `locationName:"cluster" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateClusterOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateClusterOutput) GoString() string {
	return s.String()
}

// SetCluster sets the Cluster field's value.
func (s *CreateClusterOutput) SetCluster(v *Cluster) *CreateClusterOutput {
	s.Cluster = v
	return s
}

type CreateServiceInput struct {
	_ struct{} `type:"structure"`

	// The capacity provider strategy to use for the service.
	//
	// If a capacityProviderStrategy is specified, the launchType parameter must
	// be omitted. If no capacityProviderStrategy or launchType is specified, the
	// defaultCapacityProviderStrategy for the cluster is used.
	//
	// A capacity provider strategy may contain a maximum of 6 capacity providers.
	CapacityProviderStrategy []*CapacityProviderStrategyItem `locationName:"capacityProviderStrategy" type:"list"`

	// An identifier that you provide to ensure the idempotency of the request.
	// It must be unique and is case sensitive. Up to 36 ASCII characters in the
	// range of 33-126 (inclusive) are allowed.
	ClientToken *string `locationName:"clientToken" type:"string"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that you
	// run your service on. If you do not specify a cluster, the default cluster
	// is assumed.
	Cluster *string `locationName:"cluster" type:"string"`

	// Optional deployment parameters that control how many tasks run during the
	// deployment and the ordering of stopping and starting tasks.
	DeploymentConfiguration *DeploymentConfiguration `locationName:"deploymentConfiguration" type:"structure"`

	// The deployment controller to use for the service. If no deployment controller
	// is specified, the default value of ECS is used.
	DeploymentController *DeploymentController `locationName:"deploymentController" type:"structure"`

	// The number of instantiations of the specified task definition to place and
	// keep running in your service.
	//
	// This is required if schedulingStrategy is REPLICA or isn't specified. If
	// schedulingStrategy is DAEMON then this isn't required.
	DesiredCount *int64 `locationName:"desiredCount" type:"integer"`

	// Specifies whether to turn on Amazon ECS managed tags for the tasks within
	// the service. For more information, see Tagging your Amazon ECS resources
	// (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-using-tags.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// When you use Amazon ECS managed tags, you need to set the propagateTags request
	// parameter.
	EnableECSManagedTags *bool `locationName:"enableECSManagedTags" type:"boolean"`

	// Determines whether the execute command functionality is turned on for the
	// service. If true, this enables execute command functionality on all containers
	// in the service tasks.
	EnableExecuteCommand *bool `locationName:"enableExecuteCommand" type:"boolean"`

	// The period of time, in seconds, that the Amazon ECS service scheduler ignores
	// unhealthy Elastic Load Balancing target health checks after a task has first
	// started. This is only used when your service is configured to use a load
	// balancer. If your service has a load balancer defined and you don't specify
	// a health check grace period value, the default value of 0 is used.
	//
	// If you do not use an Elastic Load Balancing, we recommend that you use the
	// startPeriod in the task definition health check parameters. For more information,
	// see Health check (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_HealthCheck.html).
	//
	// If your service's tasks take a while to start and respond to Elastic Load
	// Balancing health checks, you can specify a health check grace period of up
	// to 2,147,483,647 seconds (about 69 years). During that time, the Amazon ECS
	// service scheduler ignores health check status. This grace period can prevent
	// the service scheduler from marking tasks as unhealthy and stopping them before
	// they have time to come up.
	HealthCheckGracePeriodSeconds *int64 `locationName:"healthCheckGracePeriodSeconds" type:"integer"`

	// The infrastructure that you run your service on. For more information, see
	// Amazon ECS launch types (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// The FARGATE launch type runs your tasks on Fargate On-Demand infrastructure.
	//
	// Fargate Spot infrastructure is available for use but a capacity provider
	// strategy must be used. For more information, see Fargate capacity providers
	// (https://docs.aws.amazon.com/AmazonECS/latest/userguide/fargate-capacity-providers.html)
	// in the Amazon ECS User Guide for Fargate.
	//
	// The EC2 launch type runs your tasks on Amazon EC2 instances registered to
	// your cluster.
	//
	// The EXTERNAL launch type runs your tasks on your on-premises server or virtual
	// machine (VM) capacity registered to your cluster.
	//
	// A service can use either a launch type or a capacity provider strategy. If
	// a launchType is specified, the capacityProviderStrategy parameter must be
	// omitted.
	LaunchType *string `locationName:"launchType" type:"string" enum:"LaunchType"`

	// A load balancer object representing the load balancers to use with your service.
	// For more information, see Service load balancing (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-load-balancing.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// If the service uses the rolling update (ECS) deployment controller and using
	// either an Application Load Balancer or Network Load Balancer, you must specify
	// one or more target group ARNs to attach to the service. The service-linked
	// role is required for services that use multiple target groups. For more information,
	// see Using service-linked roles for Amazon ECS (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using-service-linked-roles.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// If the service uses the CODE_DEPLOY deployment controller, the service is
	// required to use either an Application Load Balancer or Network Load Balancer.
	// When creating an CodeDeploy deployment group, you specify two target groups
	// (referred to as a targetGroupPair). During a deployment, CodeDeploy determines
	// which task set in your service has the status PRIMARY, and it associates
	// one target group with it. Then, it also associates the other target group
	// with the replacement task set. The load balancer can also have up to two
	// listeners: a required listener for production traffic and an optional listener
	// that you can use to perform validation tests with Lambda functions before
	// routing production traffic to it.
	//
	// If you use the CODE_DEPLOY deployment controller, these values can be changed
	// when updating the service.
	//
	// For Application Load Balancers and Network Load Balancers, this object must
	// contain the load balancer target group ARN, the container name, and the container
	// port to access from the load balancer. The container name must be as it appears
	// in a container definition. The load balancer name parameter must be omitted.
	// When a task from this service is placed on a container instance, the container
	// instance and port combination is registered as a target in the target group
	// that's specified here.
	//
	// For Classic Load Balancers, this object must contain the load balancer name,
	// the container name , and the container port to access from the load balancer.
	// The container name must be as it appears in a container definition. The target
	// group ARN parameter must be omitted. When a task from this service is placed
	// on a container instance, the container instance is registered with the load
	// balancer that's specified here.
	//
	// Services with tasks that use the awsvpc network mode (for example, those
	// with the Fargate launch type) only support Application Load Balancers and
	// Network Load Balancers. Classic Load Balancers aren't supported. Also, when
	// you create any target groups for these services, you must choose ip as the
	// target type, not instance. This is because tasks that use the awsvpc network
	// mode are associated with an elastic network interface, not an Amazon EC2
	// instance.
	LoadBalancers []*LoadBalancer `locationName:"loadBalancers" type:"list"`

	// The network configuration for the service. This parameter is required for
	// task definitions that use the awsvpc network mode to receive their own elastic
	// network interface, and it isn't supported for other network modes. For more
	// information, see Task networking (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html)
	// in the Amazon Elastic Container Service Developer Guide.
	NetworkConfiguration *NetworkConfiguration `locationName:"networkConfiguration" type:"structure"`

	// An array of placement constraint objects to use for tasks in your service.
	// You can specify a maximum of 10 constraints for each task. This limit includes
	// constraints in the task definition and those specified at runtime.
	PlacementConstraints []*PlacementConstraint `locationName:"placementConstraints" type:"list"`

	// The placement strategy objects to use for tasks in your service. You can
	// specify a maximum of 5 strategy rules for each service.
	PlacementStrategy []*PlacementStrategy `locationName:"placementStrategy" type:"list"`

	// The platform version that your tasks in the service are running on. A platform
	// version is specified only for tasks using the Fargate launch type. If one
	// isn't specified, the LATEST platform version is used. For more information,
	// see Fargate platform versions (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html)
	// in the Amazon Elastic Container Service Developer Guide.
	PlatformVersion *string `locationName:"platformVersion" type:"string"`

	// Specifies whether to propagate the tags from the task definition to the task.
	// If no value is specified, the tags aren't propagated. Tags can only be propagated
	// to the task during task creation. To add tags to a task after task creation,
	// use the TagResource (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_TagResource.html)
	// API action.
	//
	// The default is NONE.
	PropagateTags *string `locationName:"propagateTags" type:"string" enum:"PropagateTags"`

	// The name or full Amazon Resource Name (ARN) of the IAM role that allows Amazon
	// ECS to make calls to your load balancer on your behalf. This parameter is
	// only permitted if you are using a load balancer with your service and your
	// task definition doesn't use the awsvpc network mode. If you specify the role
	// parameter, you must also specify a load balancer object with the loadBalancers
	// parameter.
	//
	// If your account has already created the Amazon ECS service-linked role, that
	// role is used for your service unless you specify a role here. The service-linked
	// role is required if your task definition uses the awsvpc network mode or
	// if the service is configured to use service discovery, an external deployment
	// controller, multiple target groups, or Elastic Inference accelerators in
	// which case you don't specify a role here. For more information, see Using
	// service-linked roles for Amazon ECS (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using-service-linked-roles.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// If your specified role has a path other than /, then you must either specify
	// the full role ARN (this is recommended) or prefix the role name with the
	// path. For example, if a role with the name bar has a path of /foo/ then you
	// would specify /foo/bar as the role name. For more information, see Friendly
	// names and paths (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-friendly-names)
	// in the IAM User Guide.
	Role *string `locationName:"role" type:"string"`

	// The scheduling strategy to use for the service. For more information, see
	// Services (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html).
	//
	// There are two service scheduler strategies available:
	//
	//    * REPLICA-The replica scheduling strategy places and maintains the desired
	//    number of tasks across your cluster. By default, the service scheduler
	//    spreads tasks across Availability Zones. You can use task placement strategies
	//    and constraints to customize task placement decisions. This scheduler
	//    strategy is required if the service uses the CODE_DEPLOY or EXTERNAL deployment
	//    controller types.
	//
	//    * DAEMON-The daemon scheduling strategy deploys exactly one task on each
	//    active container instance that meets all of the task placement constraints
	//    that you specify in your cluster. The service scheduler also evaluates
	//    the task placement constraints for running tasks and will stop tasks that
	//    don't meet the placement constraints. When you're using this strategy,
	//    you don't need to specify a desired number of tasks, a task placement
	//    strategy, or use Service Auto Scaling policies. Tasks using the Fargate
	//    launch type or the CODE_DEPLOY or EXTERNAL deployment controller types
	//    don't support the DAEMON scheduling strategy.
	SchedulingStrategy *string `locationName:"schedulingStrategy" type:"string" enum:"SchedulingStrategy"`

	// The configuration for this service to discover and connect to services, and
	// be discovered by, and connected from, other services within a namespace.
	//
	// Tasks that run in a namespace can use short names to connect to services
	// in the namespace. Tasks can connect to services across all of the clusters
	// in the namespace. Tasks connect through a managed proxy container that collects
	// logs and metrics for increased visibility. Only the tasks that Amazon ECS
	// services create are supported with Service Connect. For more information,
	// see Service Connect (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html)
	// in the Amazon Elastic Container Service Developer Guide.
	ServiceConnectConfiguration *ServiceConnectConfiguration `locationName:"serviceConnectConfiguration" type:"structure"`

	// The name of your service. Up to 255 letters (uppercase and lowercase), numbers,
	// underscores, and hyphens are allowed. Service names must be unique within
	// a cluster, but you can have similarly named services in multiple clusters
	// within a Region or across multiple Regions.
	//
	// ServiceName is a required field
	ServiceName *string `locationName:"serviceName" type:"string" required:"true"`

	// The details of the service discovery registry to associate with this service.
	// For more information, see Service discovery (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-discovery.html).
	//
	// Each service may be associated with one service registry. Multiple service
	// registries for each service isn't supported.
	ServiceRegistries []*ServiceRegistry `locationName:"serviceRegistries" type:"list"`

	// The metadata that you apply to the service to help you categorize and organize
	// them. Each tag consists of a key and an optional value, both of which you
	// define. When a service is deleted, the tags are deleted as well.
	//
	// The following basic restrictions apply to tags:
	//
	//    * Maximum number of tags per resource - 50
	//
	//    * For each resource, each tag key must be unique, and each tag key can
	//    have only one value.
	//
	//    * Maximum key length - 128 Unicode characters in UTF-8
	//
	//    * Maximum value length - 256 Unicode characters in UTF-8
	//
	//    * If your tagging schema is used across multiple services and resources,
	//    remember that other services may have restrictions on allowed characters.
	//    Generally allowed characters are: letters, numbers, and spaces representable
	//    in UTF-8, and the following characters: + - = . _ : / @.
	//
	//    * Tag keys and values are case-sensitive.
	//
	//    * Do not use aws:, AWS:, or any upper or lowercase combination of such
	//    as a prefix for either keys or values as it is reserved for Amazon Web
	//    Services use. You cannot edit or delete tag keys or values with this prefix.
	//    Tags with this prefix do not count against your tags per resource limit.
	Tags []*Tag `locationName:"tags" type:"list"`

	// The family and revision (family:revision) or full ARN of the task definition
	// to run in your service. If a revision isn't specified, the latest ACTIVE
	// revision is used.
	//
	// A task definition must be specified if the service uses either the ECS or
	// CODE_DEPLOY deployment controllers.
	//
	// For more information about deployment types, see Amazon ECS deployment types
	// (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.html).
	TaskDefinition *string `locationName:"taskDefinition" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateServiceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateServiceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateServiceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateServiceInput"}
	if s.ServiceName == nil {
		invalidParams.Add(request.NewErrParamRequired("ServiceName"))
	}
	if s.CapacityProviderStrategy != nil {
		for i, v := range s.CapacityProviderStrategy {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "CapacityProviderStrategy", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.DeploymentConfiguration != nil {
		if err := s.DeploymentConfiguration.Validate(); err != nil {
			invalidParams.AddNested("DeploymentConfiguration", err.(request.ErrInvalidParams))
		}
	}
	if s.DeploymentController != nil {
		if err := s.DeploymentController.Validate(); err != nil {
			invalidParams.AddNested("DeploymentController", err.(request.ErrInvalidParams))
		}
	}
	if s.NetworkConfiguration != nil {
		if err := s.NetworkConfiguration.Validate(); err != nil {
			invalidParams.AddNested("NetworkConfiguration", err.(request.ErrInvalidParams))
		}
	}
	if s.ServiceConnectConfiguration != nil {
		if err := s.ServiceConnectConfiguration.Validate(); err != nil {
			invalidParams.AddNested("ServiceConnectConfiguration", err.(request.ErrInvalidParams))
		}
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCapacityProviderStrategy sets the CapacityProviderStrategy field's value.
func (s *CreateServiceInput) SetCapacityProviderStrategy(v []*CapacityProviderStrategyItem) *CreateServiceInput {
	s.CapacityProviderStrategy = v
	return s
}

// SetClientToken sets the ClientToken field's value.
func (s *CreateServiceInput) SetClientToken(v string) *CreateServiceInput {
	s.ClientToken = &v
	return s
}

// SetCluster sets the Cluster field's value.
func (s *CreateServiceInput) SetCluster(v string) *CreateServiceInput {
	s.Cluster = &v
	return s
}

// SetDeploymentConfiguration sets the DeploymentConfiguration field's value.
func (s *CreateServiceInput) SetDeploymentConfiguration(v *DeploymentConfiguration) *CreateServiceInput {
	s.DeploymentConfiguration = v
	return s
}

// SetDeploymentController sets the DeploymentController field's value.
func (s *CreateServiceInput) SetDeploymentController(v *DeploymentController) *CreateServiceInput {
	s.DeploymentController = v
	return s
}

// SetDesiredCount sets the DesiredCount field's value.
func (s *CreateServiceInput) SetDesiredCount(v int64) *CreateServiceInput {
	s.DesiredCount = &v
	return s
}

// SetEnableECSManagedTags sets the EnableECSManagedTags field's value.
func (s *CreateServiceInput) SetEnableECSManagedTags(v bool) *CreateServiceInput {
	s.EnableECSManagedTags = &v
	return s
}

// SetEnableExecuteCommand sets the EnableExecuteCommand field's value.
func (s *CreateServiceInput) SetEnableExecuteCommand(v bool) *CreateServiceInput {
	s.EnableExecuteCommand = &v
	return s
}

// SetHealthCheckGracePeriodSeconds sets the HealthCheckGracePeriodSeconds field's value.
func (s *CreateServiceInput) SetHealthCheckGracePeriodSeconds(v int64) *CreateServiceInput {
	s.HealthCheckGracePeriodSeconds = &v
	return s
}

// SetLaunchType sets the LaunchType field's value.
func (s *CreateServiceInput) SetLaunchType(v string) *CreateServiceInput {
	s.LaunchType = &v
	return s
}

// SetLoadBalancers sets the LoadBalancers field's value.
func (s *CreateServiceInput) SetLoadBalancers(v []*LoadBalancer) *CreateServiceInput {
	s.LoadBalancers = v
	return s
}

// SetNetworkConfiguration sets the NetworkConfiguration field's value.
func (s *CreateServiceInput) SetNetworkConfiguration(v *NetworkConfiguration) *CreateServiceInput {
	s.NetworkConfiguration = v
	return s
}

// SetPlacementConstraints sets the PlacementConstraints field's value.
func (s *CreateServiceInput) SetPlacementConstraints(v []*PlacementConstraint) *CreateServiceInput {
	s.PlacementConstraints = v
	return s
}

// SetPlacementStrategy sets the PlacementStrategy field's value.
func (s *CreateServiceInput) SetPlacementStrategy(v []*PlacementStrategy) *CreateServiceInput {
	s.PlacementStrategy = v
	return s
}

// SetPlatformVersion sets the PlatformVersion field's value.
func (s *CreateServiceInput) SetPlatformVersion(v string) *CreateServiceInput {
	s.PlatformVersion = &v
	return s
}

// SetPropagateTags sets the PropagateTags field's value.
func (s *CreateServiceInput) SetPropagateTags(v string) *CreateServiceInput {
	s.PropagateTags = &v
	return s
}

// SetRole sets the Role field's value.
func (s *CreateServiceInput) SetRole(v string) *CreateServiceInput {
	s.Role = &v
	return s
}

// SetSchedulingStrategy sets the SchedulingStrategy field's value.
func (s *CreateServiceInput) SetSchedulingStrategy(v string) *CreateServiceInput {
	s.SchedulingStrategy = &v
	return s
}

// SetServiceConnectConfiguration sets the ServiceConnectConfiguration field's value.
func (s *CreateServiceInput) SetServiceConnectConfiguration(v *ServiceConnectConfiguration) *CreateServiceInput {
	s.ServiceConnectConfiguration = v
	return s
}

// SetServiceName sets the ServiceName field's value.
func (s *CreateServiceInput) SetServiceName(v string) *CreateServiceInput {
	s.ServiceName = &v
	return s
}

// SetServiceRegistries sets the ServiceRegistries field's value.
func (s *CreateServiceInput) SetServiceRegistries(v []*ServiceRegistry) *CreateServiceInput {
	s.ServiceRegistries = v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateServiceInput) SetTags(v []*Tag) *CreateServiceInput {
	s.Tags = v
	return s
}

// SetTaskDefinition sets the TaskDefinition field's value.
func (s *CreateServiceInput) SetTaskDefinition(v string) *CreateServiceInput {
	s.TaskDefinition = &v
	return s
}

type CreateServiceOutput struct {
	_ struct{} `type:"structure"`

	// The full description of your service following the create call.
	//
	// A service will return either a capacityProviderStrategy or launchType parameter,
	// but not both, depending where one was specified when it was created.
	//
	// If a service is using the ECS deployment controller, the deploymentController
	// and taskSets parameters will not be returned.
	//
	// if the service uses the CODE_DEPLOY deployment controller, the deploymentController,
	// taskSets and deployments parameters will be returned, however the deployments
	// parameter will be an empty list.
	Service *Service `locationName:"service" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateServiceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateServiceOutput) GoString() string {
	return s.String()
}

// SetService sets the Service field's value.
func (s *CreateServiceOutput) SetService(v *Service) *CreateServiceOutput {
	s.Service = v
	return s
}

type CreateTaskSetInput struct {
	_ struct{} `type:"structure"`

	// The capacity provider strategy to use for the task set.
	//
	// A capacity provider strategy consists of one or more capacity providers along
	// with the base and weight to assign to them. A capacity provider must be associated
	// with the cluster to be used in a capacity provider strategy. The PutClusterCapacityProviders
	// API is used to associate a capacity provider with a cluster. Only capacity
	// providers with an ACTIVE or UPDATING status can be used.
	//
	// If a capacityProviderStrategy is specified, the launchType parameter must
	// be omitted. If no capacityProviderStrategy or launchType is specified, the
	// defaultCapacityProviderStrategy for the cluster is used.
	//
	// If specifying a capacity provider that uses an Auto Scaling group, the capacity
	// provider must already be created. New capacity providers can be created with
	// the CreateCapacityProvider API operation.
	//
	// To use a Fargate capacity provider, specify either the FARGATE or FARGATE_SPOT
	// capacity providers. The Fargate capacity providers are available to all accounts
	// and only need to be associated with a cluster to be used.
	//
	// The PutClusterCapacityProviders API operation is used to update the list
	// of available capacity providers for a cluster after the cluster is created.
	CapacityProviderStrategy []*CapacityProviderStrategyItem `locationName:"capacityProviderStrategy" type:"list"`

	// An identifier that you provide to ensure the idempotency of the request.
	// It must be unique and is case sensitive. Up to 36 ASCII characters in the
	// range of 33-126 (inclusive) are allowed.
	ClientToken *string `locationName:"clientToken" type:"string"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that hosts
	// the service to create the task set in.
	//
	// Cluster is a required field
	Cluster *string `locationName:"cluster" type:"string" required:"true"`

	// An optional non-unique tag that identifies this task set in external systems.
	// If the task set is associated with a service discovery registry, the tasks
	// in this task set will have the ECS_TASK_SET_EXTERNAL_ID Cloud Map attribute
	// set to the provided value.
	ExternalId *string `locationName:"externalId" type:"string"`

	// The launch type that new tasks in the task set uses. For more information,
	// see Amazon ECS launch types (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// If a launchType is specified, the capacityProviderStrategy parameter must
	// be omitted.
	LaunchType *string `locationName:"launchType" type:"string" enum:"LaunchType"`

	// A load balancer object representing the load balancer to use with the task
	// set. The supported load balancer types are either an Application Load Balancer
	// or a Network Load Balancer.
	LoadBalancers []*LoadBalancer `locationName:"loadBalancers" type:"list"`

	// An object representing the network configuration for a task set.
	NetworkConfiguration *NetworkConfiguration `locationName:"networkConfiguration" type:"structure"`

	// The platform version that the tasks in the task set uses. A platform version
	// is specified only for tasks using the Fargate launch type. If one isn't specified,
	// the LATEST platform version is used.
	PlatformVersion *string `locationName:"platformVersion" type:"string"`

	// A floating-point percentage of the desired number of tasks to place and keep
	// running in the task set.
	Scale *Scale `locationName:"scale" type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the service to create
	// the task set in.
	//
	// Service is a required field
	Service *string `locationName:"service" type:"string" required:"true"`

	// The details of the service discovery registries to assign to this task set.
	// For more information, see Service discovery (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-discovery.html).
	ServiceRegistries []*ServiceRegistry `locationName:"serviceRegistries" type:"list"`

	// The metadata that you apply to the task set to help you categorize and organize
	// them. Each tag consists of a key and an optional value. You define both.
	// When a service is deleted, the tags are deleted.
	//
	// The following basic restrictions apply to tags:
	//
	//    * Maximum number of tags per resource - 50
	//
	//    * For each resource, each tag key must be unique, and each tag key can
	//    have only one value.
	//
	//    * Maximum key length - 128 Unicode characters in UTF-8
	//
	//    * Maximum value length - 256 Unicode characters in UTF-8
	//
	//    * If your tagging schema is used across multiple services and resources,
	//    remember that other services may have restrictions on allowed characters.
	//    Generally allowed characters are: letters, numbers, and spaces representable
	//    in UTF-8, and the following characters: + - = . _ : / @.
	//
	//    * Tag keys and values are case-sensitive.
	//
	//    * Do not use aws:, AWS:, or any upper or lowercase combination of such
	//    as a prefix for either keys or values as it is reserved for Amazon Web
	//    Services use. You cannot edit or delete tag keys or values with this prefix.
	//    Tags with this prefix do not count against your tags per resource limit.
	Tags []*Tag `locationName:"tags" type:"list"`

	// The task definition for the tasks in the task set to use. If a revision isn't
	// specified, the latest ACTIVE revision is used.
	//
	// TaskDefinition is a required field
	TaskDefinition *string `locationName:"taskDefinition" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateTaskSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateTaskSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateTaskSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateTaskSetInput"}
	if s.Cluster == nil {
		invalidParams.Add(request.NewErrParamRequired("Cluster"))
	}
	if s.Service == nil {
		invalidParams.Add(request.NewErrParamRequired("Service"))
	}
	if s.TaskDefinition == nil {
		invalidParams.Add(request.NewErrParamRequired("TaskDefinition"))
	}
	if s.CapacityProviderStrategy != nil {
		for i, v := range s.CapacityProviderStrategy {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "CapacityProviderStrategy", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.NetworkConfiguration != nil {
		if err := s.NetworkConfiguration.Validate(); err != nil {
			invalidParams.AddNested("NetworkConfiguration", err.(request.ErrInvalidParams))
		}
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCapacityProviderStrategy sets the CapacityProviderStrategy field's value.
func (s *CreateTaskSetInput) SetCapacityProviderStrategy(v []*CapacityProviderStrategyItem) *CreateTaskSetInput {
	s.CapacityProviderStrategy = v
	return s
}

// SetClientToken sets the ClientToken field's value.
func (s *CreateTaskSetInput) SetClientToken(v string) *CreateTaskSetInput {
	s.ClientToken = &v
	return s
}

// SetCluster sets the Cluster field's value.
func (s *CreateTaskSetInput) SetCluster(v string) *CreateTaskSetInput {
	s.Cluster = &v
	return s
}

// SetExternalId sets the ExternalId field's value.
func (s *CreateTaskSetInput) SetExternalId(v string) *CreateTaskSetInput {
	s.ExternalId = &v
	return s
}

// SetLaunchType sets the LaunchType field's value.
func (s *CreateTaskSetInput) SetLaunchType(v string) *CreateTaskSetInput {
	s.LaunchType = &v
	return s
}

// SetLoadBalancers sets the LoadBalancers field's value.
func (s *CreateTaskSetInput) SetLoadBalancers(v []*LoadBalancer) *CreateTaskSetInput {
	s.LoadBalancers = v
	return s
}

// SetNetworkConfiguration sets the NetworkConfiguration field's value.
func (s *CreateTaskSetInput) SetNetworkConfiguration(v *NetworkConfiguration) *CreateTaskSetInput {
	s.NetworkConfiguration = v
	return s
}

// SetPlatformVersion sets the PlatformVersion field's value.
func (s *CreateTaskSetInput) SetPlatformVersion(v string) *CreateTaskSetInput {
	s.PlatformVersion = &v
	return s
}

// SetScale sets the Scale field's value.
func (s *CreateTaskSetInput) SetScale(v *Scale) *CreateTaskSetInput {
	s.Scale = v
	return s
}

// SetService sets the Service field's value.
func (s *CreateTaskSetInput) SetService(v string) *CreateTaskSetInput {
	s.Service = &v
	return s
}

// SetServiceRegistries sets the ServiceRegistries field's value.
func (s *CreateTaskSetInput) SetServiceRegistries(v []*ServiceRegistry) *CreateTaskSetInput {
	s.ServiceRegistries = v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateTaskSetInput) SetTags(v []*Tag) *CreateTaskSetInput {
	s.Tags = v
	return s
}

// SetTaskDefinition sets the TaskDefinition field's value.
func (s *CreateTaskSetInput) SetTaskDefinition(v string) *CreateTaskSetInput {
	s.TaskDefinition = &v
	return s
}

type CreateTaskSetOutput struct {
	_ struct{} `type:"structure"`

	// Information about a set of Amazon ECS tasks in either an CodeDeploy or an
	// EXTERNAL deployment. A task set includes details such as the desired number
	// of tasks, how many tasks are running, and whether the task set serves production
	// traffic.
	TaskSet *TaskSet `locationName:"taskSet" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateTaskSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateTaskSetOutput) GoString() string {
	return s.String()
}

// SetTaskSet sets the TaskSet field's value.
func (s *CreateTaskSetOutput) SetTaskSet(v *TaskSet) *CreateTaskSetOutput {
	s.TaskSet = v
	return s
}

type DeleteAccountSettingInput struct {
	_ struct{} `type:"structure"`

	// The resource name to disable the account setting for. If serviceLongArnFormat
	// is specified, the ARN for your Amazon ECS services is affected. If taskLongArnFormat
	// is specified, the ARN and resource ID for your Amazon ECS tasks is affected.
	// If containerInstanceLongArnFormat is specified, the ARN and resource ID for
	// your Amazon ECS container instances is affected. If awsvpcTrunking is specified,
	// the ENI limit for your Amazon ECS container instances is affected.
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true" enum:"SettingName"`

	// The Amazon Resource Name (ARN) of the principal. It can be an user, role,
	// or the root user. If you specify the root user, it disables the account setting
	// for all users, roles, and the root user of the account unless a user or role
	// explicitly overrides these settings. If this field is omitted, the setting
	// is changed only for the authenticated user.
	PrincipalArn *string `locationName:"principalArn" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteAccountSettingInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteAccountSettingInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteAccountSettingInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteAccountSettingInput"}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetName sets the Name field's value.
func (s *DeleteAccountSettingInput) SetName(v string) *DeleteAccountSettingInput {
	s.Name = &v
	return s
}

// SetPrincipalArn sets the PrincipalArn field's value.
func (s *DeleteAccountSettingInput) SetPrincipalArn(v string) *DeleteAccountSettingInput {
	s.PrincipalArn = &v
	return s
}

type DeleteAccountSettingOutput struct {
	_ struct{} `type:"structure"`

	// The account setting for the specified principal ARN.
	Setting *Setting `locationName:"setting" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteAccountSettingOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteAccountSettingOutput) GoString() string {
	return s.String()
}

// SetSetting sets the Setting field's value.
func (s *DeleteAccountSettingOutput) SetSetting(v *Setting) *DeleteAccountSettingOutput {
	s.Setting = v
	return s
}

type DeleteAttributesInput struct {
	_ struct{} `type:"structure"`

	// The attributes to delete from your resource. You can specify up to 10 attributes
	// for each request. For custom attributes, specify the attribute name and target
	// ID, but don't specify the value. If you specify the target ID using the short
	// form, you must also specify the target type.
	//
	// Attributes is a required field
	Attributes []*Attribute `locationName:"attributes" type:"list" required:"true"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that contains
	// the resource to delete attributes. If you do not specify a cluster, the default
	// cluster is assumed.
	Cluster *string `locationName:"cluster" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteAttributesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteAttributesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteAttributesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteAttributesInput"}
	if s.Attributes == nil {
		invalidParams.Add(request.NewErrParamRequired("Attributes"))
	}
	if s.Attributes != nil {
		for i, v := range s.Attributes {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Attributes", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAttributes sets the Attributes field's value.
func (s *DeleteAttributesInput) SetAttributes(v []*Attribute) *DeleteAttributesInput {
	s.Attributes = v
	return s
}

// SetCluster sets the Cluster field's value.
func (s *DeleteAttributesInput) SetCluster(v string) *DeleteAttributesInput {
	s.Cluster = &v
	return s
}

type DeleteAttributesOutput struct {
	_ struct{} `type:"structure"`

	// A list of attribute objects that were successfully deleted from your resource.
	Attributes []*Attribute `locationName:"attributes" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteAttributesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteAttributesOutput) GoString() string {
	return s.String()
}

// SetAttributes sets the Attributes field's value.
func (s *DeleteAttributesOutput) SetAttributes(v []*Attribute) *DeleteAttributesOutput {
	s.Attributes = v
	return s
}

type DeleteCapacityProviderInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the capacity provider
	// to delete.
	//
	// CapacityProvider is a required field
	CapacityProvider *string `locationName:"capacityProvider" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteCapacityProviderInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteCapacityProviderInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteCapacityProviderInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteCapacityProviderInput"}
	if s.CapacityProvider == nil {
		invalidParams.Add(request.NewErrParamRequired("CapacityProvider"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCapacityProvider sets the CapacityProvider field's value.
func (s *DeleteCapacityProviderInput) SetCapacityProvider(v string) *DeleteCapacityProviderInput {
	s.CapacityProvider = &v
	return s
}

type DeleteCapacityProviderOutput struct {
	_ struct{} `type:"structure"`

	// The details of the capacity provider.
	CapacityProvider *CapacityProvider `locationName:"capacityProvider" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteCapacityProviderOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteCapacityProviderOutput) GoString() string {
	return s.String()
}

// SetCapacityProvider sets the CapacityProvider field's value.
func (s *DeleteCapacityProviderOutput) SetCapacityProvider(v *CapacityProvider) *DeleteCapacityProviderOutput {
	s.CapacityProvider = v
	return s
}

type DeleteClusterInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the cluster to delete.
	//
	// Cluster is a required field
	Cluster *string `locationName:"cluster" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteClusterInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteClusterInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteClusterInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteClusterInput"}
	if s.Cluster == nil {
		invalidParams.Add(request.NewErrParamRequired("Cluster"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCluster sets the Cluster field's value.
func (s *DeleteClusterInput) SetCluster(v string) *DeleteClusterInput {
	s.Cluster = &v
	return s
}

type DeleteClusterOutput struct {
	_ struct{} `type:"structure"`

	// The full description of the deleted cluster.
	Cluster *Cluster `locationName:"cluster" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteClusterOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteClusterOutput) GoString() string {
	return s.String()
}

// SetCluster sets the Cluster field's value.
func (s *DeleteClusterOutput) SetCluster(v *Cluster) *DeleteClusterOutput {
	s.Cluster = v
	return s
}

type DeleteServiceInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that hosts
	// the service to delete. If you do not specify a cluster, the default cluster
	// is assumed.
	Cluster *string `locationName:"cluster" type:"string"`

	// If true, allows you to delete a service even if it wasn't scaled down to
	// zero tasks. It's only necessary to use this if the service uses the REPLICA
	// scheduling strategy.
	Force *bool `locationName:"force" type:"boolean"`

	// The name of the service to delete.
	//
	// Service is a required field
	Service *string `locationName:"service" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteServiceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteServiceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteServiceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteServiceInput"}
	if s.Service == nil {
		invalidParams.Add(request.NewErrParamRequired("Service"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCluster sets the Cluster field's value.
func (s *DeleteServiceInput) SetCluster(v string) *DeleteServiceInput {
	s.Cluster = &v
	return s
}

// SetForce sets the Force field's value.
func (s *DeleteServiceInput) SetForce(v bool) *DeleteServiceInput {
	s.Force = &v
	return s
}

// SetService sets the Service field's value.
func (s *DeleteServiceInput) SetService(v string) *DeleteServiceInput {
	s.Service = &v
	return s
}

type DeleteServiceOutput struct {
	_ struct{} `type:"structure"`

	// The full description of the deleted service.
	Service *Service `locationName:"service" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteServiceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteServiceOutput) GoString() string {
	return s.String()
}

// SetService sets the Service field's value.
func (s *DeleteServiceOutput) SetService(v *Service) *DeleteServiceOutput {
	s.Service = v
	return s
}

type DeleteTaskDefinitionsInput struct {
	_ struct{} `type:"structure"`

	// The family and revision (family:revision) or full Amazon Resource Name (ARN)
	// of the task definition to delete. You must specify a revision.
	//
	// You can specify up to 10 task definitions as a comma separated list.
	//
	// TaskDefinitions is a required field
	TaskDefinitions []*string `locationName:"taskDefinitions" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteTaskDefinitionsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteTaskDefinitionsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteTaskDefinitionsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteTaskDefinitionsInput"}
	if s.TaskDefinitions == nil {
		invalidParams.Add(request.NewErrParamRequired("TaskDefinitions"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTaskDefinitions sets the TaskDefinitions field's value.
func (s *DeleteTaskDefinitionsInput) SetTaskDefinitions(v []*string) *DeleteTaskDefinitionsInput {
	s.TaskDefinitions = v
	return s
}

type DeleteTaskDefinitionsOutput struct {
	_ struct{} `type:"structure"`

	// Any failures associated with the call.
	Failures []*Failure `locationName:"failures" type:"list"`

	// The list of deleted task definitions.
	TaskDefinitions []*TaskDefinition `locationName:"taskDefinitions" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteTaskDefinitionsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteTaskDefinitionsOutput) GoString() string {
	return s.String()
}

// SetFailures sets the Failures field's value.
func (s *DeleteTaskDefinitionsOutput) SetFailures(v []*Failure) *DeleteTaskDefinitionsOutput {
	s.Failures = v
	return s
}

// SetTaskDefinitions sets the TaskDefinitions field's value.
func (s *DeleteTaskDefinitionsOutput) SetTaskDefinitions(v []*TaskDefinition) *DeleteTaskDefinitionsOutput {
	s.TaskDefinitions = v
	return s
}

type DeleteTaskSetInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that hosts
	// the service that the task set found in to delete.
	//
	// Cluster is a required field
	Cluster *string `locationName:"cluster" type:"string" required:"true"`

	// If true, you can delete a task set even if it hasn't been scaled down to
	// zero.
	Force *bool `locationName:"force" type:"boolean"`

	// The short name or full Amazon Resource Name (ARN) of the service that hosts
	// the task set to delete.
	//
	// Service is a required field
	Service *string `locationName:"service" type:"string" required:"true"`

	// The task set ID or full Amazon Resource Name (ARN) of the task set to delete.
	//
	// TaskSet is a required field
	TaskSet *string `locationName:"taskSet" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteTaskSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteTaskSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteTaskSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteTaskSetInput"}
	if s.Cluster == nil {
		invalidParams.Add(request.NewErrParamRequired("Cluster"))
	}
	if s.Service == nil {
		invalidParams.Add(request.NewErrParamRequired("Service"))
	}
	if s.TaskSet == nil {
		invalidParams.Add(request.NewErrParamRequired("TaskSet"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCluster sets the Cluster field's value.
func (s *DeleteTaskSetInput) SetCluster(v string) *DeleteTaskSetInput {
	s.Cluster = &v
	return s
}

// SetForce sets the Force field's value.
func (s *DeleteTaskSetInput) SetForce(v bool) *DeleteTaskSetInput {
	s.Force = &v
	return s
}

// SetService sets the Service field's value.
func (s *DeleteTaskSetInput) SetService(v string) *DeleteTaskSetInput {
	s.Service = &v
	return s
}

// SetTaskSet sets the TaskSet field's value.
func (s *DeleteTaskSetInput) SetTaskSet(v string) *DeleteTaskSetInput {
	s.TaskSet = &v
	return s
}

type DeleteTaskSetOutput struct {
	_ struct{} `type:"structure"`

	// Details about the task set.
	TaskSet *TaskSet `locationName:"taskSet" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteTaskSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteTaskSetOutput) GoString() string {
	return s.String()
}

// SetTaskSet sets the TaskSet field's value.
func (s *DeleteTaskSetOutput) SetTaskSet(v *TaskSet) *DeleteTaskSetOutput {
	s.TaskSet = v
	return s
}

// The details of an Amazon ECS service deployment. This is used only when a
// service uses the ECS deployment controller type.
type Deployment struct {
	_ struct{} `type:"structure"`

	// The capacity provider strategy that the deployment is using.
	CapacityProviderStrategy []*CapacityProviderStrategyItem `locationName:"capacityProviderStrategy" type:"list"`

	// The Unix timestamp for the time when the service deployment was created.
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp"`

	// The most recent desired count of tasks that was specified for the service
	// to deploy or maintain.
	DesiredCount *int64 `locationName:"desiredCount" type:"integer"`

	// The number of consecutively failed tasks in the deployment. A task is considered
	// a failure if the service scheduler can't launch the task, the task doesn't
	// transition to a RUNNING state, or if it fails any of its defined health checks
	// and is stopped.
	//
	// Once a service deployment has one or more successfully running tasks, the
	// failed task count resets to zero and stops being evaluated.
	FailedTasks *int64 `locationName:"failedTasks" type:"integer"`

	// The ID of the deployment.
	Id *string `locationName:"id" type:"string"`

	// The launch type the tasks in the service are using. For more information,
	// see Amazon ECS Launch Types (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html)
	// in the Amazon Elastic Container Service Developer Guide.
	LaunchType *string `locationName:"launchType" type:"string" enum:"LaunchType"`

	// The VPC subnet and security group configuration for tasks that receive their
	// own elastic network interface by using the awsvpc networking mode.
	NetworkConfiguration *NetworkConfiguration `locationName:"networkConfiguration" type:"structure"`

	// The number of tasks in the deployment that are in the PENDING status.
	PendingCount *int64 `locationName:"pendingCount" type:"integer"`

	// The operating system that your tasks in the service, or tasks are running
	// on. A platform family is specified only for tasks using the Fargate launch
	// type.
	//
	// All tasks that run as part of this service must use the same platformFamily
	// value as the service, for example, LINUX..
	PlatformFamily *string `locationName:"platformFamily" type:"string"`

	// The platform version that your tasks in the service run on. A platform version
	// is only specified for tasks using the Fargate launch type. If one isn't specified,
	// the LATEST platform version is used. For more information, see Fargate Platform
	// Versions (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html)
	// in the Amazon Elastic Container Service Developer Guide.
	PlatformVersion *string `locationName:"platformVersion" type:"string"`

	//
	// The rolloutState of a service is only returned for services that use the
	// rolling update (ECS) deployment type that aren't behind a Classic Load Balancer.
	//
	// The rollout state of the deployment. When a service deployment is started,
	// it begins in an IN_PROGRESS state. When the service reaches a steady state,
	// the deployment transitions to a COMPLETED state. If the service fails to
	// reach a steady state and circuit breaker is turned on, the deployment transitions
	// to a FAILED state. A deployment in FAILED state doesn't launch any new tasks.
	// For more information, see DeploymentCircuitBreaker.
	RolloutState *string `locationName:"rolloutState" type:"string" enum:"DeploymentRolloutState"`

	// A description of the rollout state of a deployment.
	RolloutStateReason *string `locationName:"rolloutStateReason" type:"string"`

	// The number of tasks in the deployment that are in the RUNNING status.
	RunningCount *int64 `locationName:"runningCount" type:"integer"`

	// The details of the Service Connect configuration that's used by this deployment.
	// Compare the configuration between multiple deployments when troubleshooting
	// issues with new deployments.
	//
	// The configuration for this service to discover and connect to services, and
	// be discovered by, and connected from, other services within a namespace.
	//
	// Tasks that run in a namespace can use short names to connect to services
	// in the namespace. Tasks can connect to services across all of the clusters
	// in the namespace. Tasks connect through a managed proxy container that collects
	// logs and metrics for increased visibility. Only the tasks that Amazon ECS
	// services create are supported with Service Connect. For more information,
	// see Service Connect (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html)
	// in the Amazon Elastic Container Service Developer Guide.
	ServiceConnectConfiguration *ServiceConnectConfiguration `locationName:"serviceConnectConfiguration" type:"structure"`

	// The list of Service Connect resources that are associated with this deployment.
	// Each list entry maps a discovery name to a Cloud Map service name.
	ServiceConnectResources []*ServiceConnectServiceResource `locationName:"serviceConnectResources" type:"list"`

	// The status of the deployment. The following describes each state.
	//
	// PRIMARY
	//
	// The most recent deployment of a service.
	//
	// ACTIVE
	//
	// A service deployment that still has running tasks, but are in the process
	// of being replaced with a new PRIMARY deployment.
	//
	// INACTIVE
	//
	// A deployment that has been completely replaced.
	Status *string `locationName:"status" type:"string"`

	// The most recent task definition that was specified for the tasks in the service
	// to use.
	TaskDefinition *string `locationName:"taskDefinition" type:"string"`

	// The Unix timestamp for the time when the service deployment was last updated.
	UpdatedAt *time.Time `locationName:"updatedAt" type:"timestamp"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Deployment) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Deployment) GoString() string {
	return s.String()
}

// SetCapacityProviderStrategy sets the CapacityProviderStrategy field's value.
func (s *Deployment) SetCapacityProviderStrategy(v []*CapacityProviderStrategyItem) *Deployment {
	s.CapacityProviderStrategy = v
	return s
}

// SetCreatedAt sets the CreatedAt field's value.
func (s *Deployment) SetCreatedAt(v time.Time) *Deployment {
	s.CreatedAt = &v
	return s
}

// SetDesiredCount sets the DesiredCount field's value.
func (s *Deployment) SetDesiredCount(v int64) *Deployment {
	s.DesiredCount = &v
	return s
}

// SetFailedTasks sets the FailedTasks field's value.
func (s *Deployment) SetFailedTasks(v int64) *Deployment {
	s.FailedTasks = &v
	return s
}

// SetId sets the Id field's value.
func (s *Deployment) SetId(v string) *Deployment {
	s.Id = &v
	return s
}

// SetLaunchType sets the LaunchType field's value.
func (s *Deployment) SetLaunchType(v string) *Deployment {
	s.LaunchType = &v
	return s
}

// SetNetworkConfiguration sets the NetworkConfiguration field's value.
func (s *Deployment) SetNetworkConfiguration(v *NetworkConfiguration) *Deployment {
	s.NetworkConfiguration = v
	return s
}

// SetPendingCount sets the PendingCount field's value.
func (s *Deployment) SetPendingCount(v int64) *Deployment {
	s.PendingCount = &v
	return s
}

// SetPlatformFamily sets the PlatformFamily field's value.
func (s *Deployment) SetPlatformFamily(v string) *Deployment {
	s.PlatformFamily = &v
	return s
}

// SetPlatformVersion sets the PlatformVersion field's value.
func (s *Deployment) SetPlatformVersion(v string) *Deployment {
	s.PlatformVersion = &v
	return s
}

// SetRolloutState sets the RolloutState field's value.
func (s *Deployment) SetRolloutState(v string) *Deployment {
	s.RolloutState = &v
	return s
}

// SetRolloutStateReason sets the RolloutStateReason field's value.
func (s *Deployment) SetRolloutStateReason(v string) *Deployment {
	s.RolloutStateReason = &v
	return s
}

// SetRunningCount sets the RunningCount field's value.
func (s *Deployment) SetRunningCount(v int64) *Deployment {
	s.RunningCount = &v
	return s
}

// SetServiceConnectConfiguration sets the ServiceConnectConfiguration field's value.
func (s *Deployment) SetServiceConnectConfiguration(v *ServiceConnectConfiguration) *Deployment {
	s.ServiceConnectConfiguration = v
	return s
}

// SetServiceConnectResources sets the ServiceConnectResources field's value.
func (s *Deployment) SetServiceConnectResources(v []*ServiceConnectServiceResource) *Deployment {
	s.ServiceConnectResources = v
	return s
}

// SetStatus sets the Status field's value.
func (s *Deployment) SetStatus(v string) *Deployment {
	s.Status = &v
	return s
}

// SetTaskDefinition sets the TaskDefinition field's value.
func (s *Deployment) SetTaskDefinition(v string) *Deployment {
	s.TaskDefinition = &v
	return s
}

// SetUpdatedAt sets the UpdatedAt field's value.
func (s *Deployment) SetUpdatedAt(v time.Time) *Deployment {
	s.UpdatedAt = &v
	return s
}

// One of the methods which provide a way for you to quickly identify when a
// deployment has failed, and then to optionally roll back the failure to the
// last working deployment.
//
// When the alarms are generated, Amazon ECS sets the service deployment to
// failed. Set the rollback parameter to have Amazon ECS to roll back your service
// to the last completed deployment after a failure.
//
// You can only use the DeploymentAlarms method to detect failures when the
// DeploymentController is set to ECS (rolling update).
//
// For more information, see Rolling update (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-ecs.html)
// in the Amazon Elastic Container Service Developer Guide .
type DeploymentAlarms struct {
	_ struct{} `type:"structure"`

	// One or more CloudWatch alarm names. Use a "," to separate the alarms.
	//
	// AlarmNames is a required field
	AlarmNames []*string `locationName:"alarmNames" type:"list" required:"true"`

	// Determines whether to use the CloudWatch alarm option in the service deployment
	// process.
	//
	// Enable is a required field
	Enable *bool `locationName:"enable" type:"boolean" required:"true"`

	// Determines whether to configure Amazon ECS to roll back the service if a
	// service deployment fails. If rollback is used, when a service deployment
	// fails, the service is rolled back to the last deployment that completed successfully.
	//
	// Rollback is a required field
	Rollback *bool `locationName:"rollback" type:"boolean" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeploymentAlarms) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeploymentAlarms) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeploymentAlarms) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeploymentAlarms"}
	if s.AlarmNames == nil {
		invalidParams.Add(request.NewErrParamRequired("AlarmNames"))
	}
	if s.Enable == nil {
		invalidParams.Add(request.NewErrParamRequired("Enable"))
	}
	if s.Rollback == nil {
		invalidParams.Add(request.NewErrParamRequired("Rollback"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAlarmNames sets the AlarmNames field's value.
func (s *DeploymentAlarms) SetAlarmNames(v []*string) *DeploymentAlarms {
	s.AlarmNames = v
	return s
}

// SetEnable sets the Enable field's value.
func (s *DeploymentAlarms) SetEnable(v bool) *DeploymentAlarms {
	s.Enable = &v
	return s
}

// SetRollback sets the Rollback field's value.
func (s *DeploymentAlarms) SetRollback(v bool) *DeploymentAlarms {
	s.Rollback = &v
	return s
}

// The deployment circuit breaker can only be used for services using the rolling
// update (ECS) deployment type.
//
// The deployment circuit breaker determines whether a service deployment will
// fail if the service can't reach a steady state. If it is turned on, a service
// deployment will transition to a failed state and stop launching new tasks.
// You can also configure Amazon ECS to roll back your service to the last completed
// deployment after a failure. For more information, see Rolling update (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-ecs.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// For more information about API failure reasons, see API failure reasons (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/api_failures_messages.html)
// in the Amazon Elastic Container Service Developer Guide.
type DeploymentCircuitBreaker struct {
	_ struct{} `type:"structure"`

	// Determines whether to use the deployment circuit breaker logic for the service.
	//
	// Enable is a required field
	Enable *bool `locationName:"enable" type:"boolean" required:"true"`

	// Determines whether to configure Amazon ECS to roll back the service if a
	// service deployment fails. If rollback is on, when a service deployment fails,
	// the service is rolled back to the last deployment that completed successfully.
	//
	// Rollback is a required field
	Rollback *bool `locationName:"rollback" type:"boolean" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeploymentCircuitBreaker) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeploymentCircuitBreaker) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeploymentCircuitBreaker) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeploymentCircuitBreaker"}
	if s.Enable == nil {
		invalidParams.Add(request.NewErrParamRequired("Enable"))
	}
	if s.Rollback == nil {
		invalidParams.Add(request.NewErrParamRequired("Rollback"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetEnable sets the Enable field's value.
func (s *DeploymentCircuitBreaker) SetEnable(v bool) *DeploymentCircuitBreaker {
	s.Enable = &v
	return s
}

// SetRollback sets the Rollback field's value.
func (s *DeploymentCircuitBreaker) SetRollback(v bool) *DeploymentCircuitBreaker {
	s.Rollback = &v
	return s
}

// Optional deployment parameters that control how many tasks run during a deployment
// and the ordering of stopping and starting tasks.
type DeploymentConfiguration struct {
	_ struct{} `type:"structure"`

	// Information about the CloudWatch alarms.
	Alarms *DeploymentAlarms `locationName:"alarms" type:"structure"`

	//
	// The deployment circuit breaker can only be used for services using the rolling
	// update (ECS) deployment type.
	//
	// The deployment circuit breaker determines whether a service deployment will
	// fail if the service can't reach a steady state. If you use the deployment
	// circuit breaker, a service deployment will transition to a failed state and
	// stop launching new tasks. If you use the rollback option, when a service
	// deployment fails, the service is rolled back to the last deployment that
	// completed successfully. For more information, see Rolling update (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-ecs.html)
	// in the Amazon Elastic Container Service Developer Guide
	DeploymentCircuitBreaker *DeploymentCircuitBreaker `locationName:"deploymentCircuitBreaker" type:"structure"`

	// If a service is using the rolling update (ECS) deployment type, the maximumPercent
	// parameter represents an upper limit on the number of your service's tasks
	// that are allowed in the RUNNING or PENDING state during a deployment, as
	// a percentage of the desiredCount (rounded down to the nearest integer). This
	// parameter enables you to define the deployment batch size. For example, if
	// your service is using the REPLICA service scheduler and has a desiredCount
	// of four tasks and a maximumPercent value of 200%, the scheduler may start
	// four new tasks before stopping the four older tasks (provided that the cluster
	// resources required to do this are available). The default maximumPercent
	// value for a service using the REPLICA service scheduler is 200%.
	//
	// If a service is using either the blue/green (CODE_DEPLOY) or EXTERNAL deployment
	// types and tasks that use the EC2 launch type, the maximum percent value is
	// set to the default value and is used to define the upper limit on the number
	// of the tasks in the service that remain in the RUNNING state while the container
	// instances are in the DRAINING state. If the tasks in the service use the
	// Fargate launch type, the maximum percent value is not used, although it is
	// returned when describing your service.
	MaximumPercent *int64 `locationName:"maximumPercent" type:"integer"`

	// If a service is using the rolling update (ECS) deployment type, the minimumHealthyPercent
	// represents a lower limit on the number of your service's tasks that must
	// remain in the RUNNING state during a deployment, as a percentage of the desiredCount
	// (rounded up to the nearest integer). This parameter enables you to deploy
	// without using additional cluster capacity. For example, if your service has
	// a desiredCount of four tasks and a minimumHealthyPercent of 50%, the service
	// scheduler may stop two existing tasks to free up cluster capacity before
	// starting two new tasks.
	//
	// For services that do not use a load balancer, the following should be noted:
	//
	//    * A service is considered healthy if all essential containers within the
	//    tasks in the service pass their health checks.
	//
	//    * If a task has no essential containers with a health check defined, the
	//    service scheduler will wait for 40 seconds after a task reaches a RUNNING
	//    state before the task is counted towards the minimum healthy percent total.
	//
	//    * If a task has one or more essential containers with a health check defined,
	//    the service scheduler will wait for the task to reach a healthy status
	//    before counting it towards the minimum healthy percent total. A task is
	//    considered healthy when all essential containers within the task have
	//    passed their health checks. The amount of time the service scheduler can
	//    wait for is determined by the container health check settings.
	//
	// For services are that do use a load balancer, the following should be noted:
	//
	//    * If a task has no essential containers with a health check defined, the
	//    service scheduler will wait for the load balancer target group health
	//    check to return a healthy status before counting the task towards the
	//    minimum healthy percent total.
	//
	//    * If a task has an essential container with a health check defined, the
	//    service scheduler will wait for both the task to reach a healthy status
	//    and the load balancer target group health check to return a healthy status
	//    before counting the task towards the minimum healthy percent total.
	//
	// If a service is using either the blue/green (CODE_DEPLOY) or EXTERNAL deployment
	// types and is running tasks that use the EC2 launch type, the minimum healthy
	// percent value is set to the default value and is used to define the lower
	// limit on the number of the tasks in the service that remain in the RUNNING
	// state while the container instances are in the DRAINING state. If a service
	// is using either the blue/green (CODE_DEPLOY) or EXTERNAL deployment types
	// and is running tasks that use the Fargate launch type, the minimum healthy
	// percent value is not used, although it is returned when describing your service.
	MinimumHealthyPercent *int64 `locationName:"minimumHealthyPercent" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeploymentConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeploymentConfiguration) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeploymentConfiguration) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeploymentConfiguration"}
	if s.Alarms != nil {
		if err := s.Alarms.Validate(); err != nil {
			invalidParams.AddNested("Alarms", err.(request.ErrInvalidParams))
		}
	}
	if s.DeploymentCircuitBreaker != nil {
		if err := s.DeploymentCircuitBreaker.Validate(); err != nil {
			invalidParams.AddNested("DeploymentCircuitBreaker", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAlarms sets the Alarms field's value.
func (s *DeploymentConfiguration) SetAlarms(v *DeploymentAlarms) *DeploymentConfiguration {
	s.Alarms = v
	return s
}

// SetDeploymentCircuitBreaker sets the DeploymentCircuitBreaker field's value.
func (s *DeploymentConfiguration) SetDeploymentCircuitBreaker(v *DeploymentCircuitBreaker) *DeploymentConfiguration {
	s.DeploymentCircuitBreaker = v
	return s
}

// SetMaximumPercent sets the MaximumPercent field's value.
func (s *DeploymentConfiguration) SetMaximumPercent(v int64) *DeploymentConfiguration {
	s.MaximumPercent = &v
	return s
}

// SetMinimumHealthyPercent sets the MinimumHealthyPercent field's value.
func (s *DeploymentConfiguration) SetMinimumHealthyPercent(v int64) *DeploymentConfiguration {
	s.MinimumHealthyPercent = &v
	return s
}

// The deployment controller to use for the service. For more information, see
// Amazon ECS deployment types (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.html)
// in the Amazon Elastic Container Service Developer Guide.
type DeploymentController struct {
	_ struct{} `type:"structure"`

	// The deployment controller type to use.
	//
	// There are three deployment controller types available:
	//
	// ECS
	//
	// The rolling update (ECS) deployment type involves replacing the current running
	// version of the container with the latest version. The number of containers
	// Amazon ECS adds or removes from the service during a rolling update is controlled
	// by adjusting the minimum and maximum number of healthy tasks allowed during
	// a service deployment, as specified in the DeploymentConfiguration.
	//
	// CODE_DEPLOY
	//
	// The blue/green (CODE_DEPLOY) deployment type uses the blue/green deployment
	// model powered by CodeDeploy, which allows you to verify a new deployment
	// of a service before sending production traffic to it.
	//
	// EXTERNAL
	//
	// The external (EXTERNAL) deployment type enables you to use any third-party
	// deployment controller for full control over the deployment process for an
	// Amazon ECS service.
	//
	// Type is a required field
	Type *string `locationName:"type" type:"string" required:"true" enum:"DeploymentControllerType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeploymentController) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeploymentController) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeploymentController) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeploymentController"}
	if s.Type == nil {
		invalidParams.Add(request.NewErrParamRequired("Type"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetType sets the Type field's value.
func (s *DeploymentController) SetType(v string) *DeploymentController {
	s.Type = &v
	return s
}

type DeregisterContainerInstanceInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that hosts
	// the container instance to deregister. If you do not specify a cluster, the
	// default cluster is assumed.
	Cluster *string `locationName:"cluster" type:"string"`

	// The container instance ID or full ARN of the container instance to deregister.
	// For more information about the ARN format, see Amazon Resource Name (ARN)
	// (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids)
	// in the Amazon ECS Developer Guide.
	//
	// ContainerInstance is a required field
	ContainerInstance *string `locationName:"containerInstance" type:"string" required:"true"`

	// Forces the container instance to be deregistered. If you have tasks running
	// on the container instance when you deregister it with the force option, these
	// tasks remain running until you terminate the instance or the tasks stop through
	// some other means, but they're orphaned (no longer monitored or accounted
	// for by Amazon ECS). If an orphaned task on your container instance is part
	// of an Amazon ECS service, then the service scheduler starts another copy
	// of that task, on a different container instance if possible.
	//
	// Any containers in orphaned service tasks that are registered with a Classic
	// Load Balancer or an Application Load Balancer target group are deregistered.
	// They begin connection draining according to the settings on the load balancer
	// or target group.
	Force *bool `locationName:"force" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeregisterContainerInstanceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeregisterContainerInstanceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeregisterContainerInstanceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeregisterContainerInstanceInput"}
	if s.ContainerInstance == nil {
		invalidParams.Add(request.NewErrParamRequired("ContainerInstance"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCluster sets the Cluster field's value.
func (s *DeregisterContainerInstanceInput) SetCluster(v string) *DeregisterContainerInstanceInput {
	s.Cluster = &v
	return s
}

// SetContainerInstance sets the ContainerInstance field's value.
func (s *DeregisterContainerInstanceInput) SetContainerInstance(v string) *DeregisterContainerInstanceInput {
	s.ContainerInstance = &v
	return s
}

// SetForce sets the Force field's value.
func (s *DeregisterContainerInstanceInput) SetForce(v bool) *DeregisterContainerInstanceInput {
	s.Force = &v
	return s
}

type DeregisterContainerInstanceOutput struct {
	_ struct{} `type:"structure"`

	// The container instance that was deregistered.
	ContainerInstance *ContainerInstance `locationName:"containerInstance" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeregisterContainerInstanceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeregisterContainerInstanceOutput) GoString() string {
	return s.String()
}

// SetContainerInstance sets the ContainerInstance field's value.
func (s *DeregisterContainerInstanceOutput) SetContainerInstance(v *ContainerInstance) *DeregisterContainerInstanceOutput {
	s.ContainerInstance = v
	return s
}

type DeregisterTaskDefinitionInput struct {
	_ struct{} `type:"structure"`

	// The family and revision (family:revision) or full Amazon Resource Name (ARN)
	// of the task definition to deregister. You must specify a revision.
	//
	// TaskDefinition is a required field
	TaskDefinition *string `locationName:"taskDefinition" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeregisterTaskDefinitionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeregisterTaskDefinitionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeregisterTaskDefinitionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeregisterTaskDefinitionInput"}
	if s.TaskDefinition == nil {
		invalidParams.Add(request.NewErrParamRequired("TaskDefinition"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTaskDefinition sets the TaskDefinition field's value.
func (s *DeregisterTaskDefinitionInput) SetTaskDefinition(v string) *DeregisterTaskDefinitionInput {
	s.TaskDefinition = &v
	return s
}

type DeregisterTaskDefinitionOutput struct {
	_ struct{} `type:"structure"`

	// The full description of the deregistered task.
	TaskDefinition *TaskDefinition `locationName:"taskDefinition" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeregisterTaskDefinitionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeregisterTaskDefinitionOutput) GoString() string {
	return s.String()
}

// SetTaskDefinition sets the TaskDefinition field's value.
func (s *DeregisterTaskDefinitionOutput) SetTaskDefinition(v *TaskDefinition) *DeregisterTaskDefinitionOutput {
	s.TaskDefinition = v
	return s
}

type DescribeCapacityProvidersInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of one or more capacity
	// providers. Up to 100 capacity providers can be described in an action.
	CapacityProviders []*string `locationName:"capacityProviders" type:"list"`

	// Specifies whether or not you want to see the resource tags for the capacity
	// provider. If TAGS is specified, the tags are included in the response. If
	// this field is omitted, tags aren't included in the response.
	Include []*string `locationName:"include" type:"list" enum:"CapacityProviderField"`

	// The maximum number of account setting results returned by DescribeCapacityProviders
	// in paginated output. When this parameter is used, DescribeCapacityProviders
	// only returns maxResults results in a single page along with a nextToken response
	// element. The remaining results of the initial request can be seen by sending
	// another DescribeCapacityProviders request with the returned nextToken value.
	// This value can be between 1 and 10. If this parameter is not used, then DescribeCapacityProviders
	// returns up to 10 results and a nextToken value if applicable.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// The nextToken value returned from a previous paginated DescribeCapacityProviders
	// request where maxResults was used and the results exceeded the value of that
	// parameter. Pagination continues from the end of the previous results that
	// returned the nextToken value.
	//
	// This token should be treated as an opaque identifier that is only used to
	// retrieve the next items in a list and not for other programmatic purposes.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeCapacityProvidersInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeCapacityProvidersInput) GoString() string {
	return s.String()
}

// SetCapacityProviders sets the CapacityProviders field's value.
func (s *DescribeCapacityProvidersInput) SetCapacityProviders(v []*string) *DescribeCapacityProvidersInput {
	s.CapacityProviders = v
	return s
}

// SetInclude sets the Include field's value.
func (s *DescribeCapacityProvidersInput) SetInclude(v []*string) *DescribeCapacityProvidersInput {
	s.Include = v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *DescribeCapacityProvidersInput) SetMaxResults(v int64) *DescribeCapacityProvidersInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *DescribeCapacityProvidersInput) SetNextToken(v string) *DescribeCapacityProvidersInput {
	s.NextToken = &v
	return s
}

type DescribeCapacityProvidersOutput struct {
	_ struct{} `type:"structure"`

	// The list of capacity providers.
	CapacityProviders []*CapacityProvider `locationName:"capacityProviders" type:"list"`

	// Any failures associated with the call.
	Failures []*Failure `locationName:"failures" type:"list"`

	// The nextToken value to include in a future DescribeCapacityProviders request.
	// When the results of a DescribeCapacityProviders request exceed maxResults,
	// this value can be used to retrieve the next page of results. This value is
	// null when there are no more results to return.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeCapacityProvidersOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeCapacityProvidersOutput) GoString() string {
	return s.String()
}

// SetCapacityProviders sets the CapacityProviders field's value.
func (s *DescribeCapacityProvidersOutput) SetCapacityProviders(v []*CapacityProvider) *DescribeCapacityProvidersOutput {
	s.CapacityProviders = v
	return s
}

// SetFailures sets the Failures field's value.
func (s *DescribeCapacityProvidersOutput) SetFailures(v []*Failure) *DescribeCapacityProvidersOutput {
	s.Failures = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *DescribeCapacityProvidersOutput) SetNextToken(v string) *DescribeCapacityProvidersOutput {
	s.NextToken = &v
	return s
}

type DescribeClustersInput struct {
	_ struct{} `type:"structure"`

	// A list of up to 100 cluster names or full cluster Amazon Resource Name (ARN)
	// entries. If you do not specify a cluster, the default cluster is assumed.
	Clusters []*string `locationName:"clusters" type:"list"`

	// Determines whether to include additional information about the clusters in
	// the response. If this field is omitted, this information isn't included.
	//
	// If ATTACHMENTS is specified, the attachments for the container instances
	// or tasks within the cluster are included, for example the capacity providers.
	//
	// If SETTINGS is specified, the settings for the cluster are included.
	//
	// If CONFIGURATIONS is specified, the configuration for the cluster is included.
	//
	// If STATISTICS is specified, the task and service count is included, separated
	// by launch type.
	//
	// If TAGS is specified, the metadata tags associated with the cluster are included.
	Include []*string `locationName:"include" type:"list" enum:"ClusterField"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeClustersInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeClustersInput) GoString() string {
	return s.String()
}

// SetClusters sets the Clusters field's value.
func (s *DescribeClustersInput) SetClusters(v []*string) *DescribeClustersInput {
	s.Clusters = v
	return s
}

// SetInclude sets the Include field's value.
func (s *DescribeClustersInput) SetInclude(v []*string) *DescribeClustersInput {
	s.Include = v
	return s
}

type DescribeClustersOutput struct {
	_ struct{} `type:"structure"`

	// The list of clusters.
	Clusters []*Cluster `locationName:"clusters" type:"list"`

	// Any failures associated with the call.
	Failures []*Failure `locationName:"failures" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeClustersOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeClustersOutput) GoString() string {
	return s.String()
}

// SetClusters sets the Clusters field's value.
func (s *DescribeClustersOutput) SetClusters(v []*Cluster) *DescribeClustersOutput {
	s.Clusters = v
	return s
}

// SetFailures sets the Failures field's value.
func (s *DescribeClustersOutput) SetFailures(v []*Failure) *DescribeClustersOutput {
	s.Failures = v
	return s
}

type DescribeContainerInstancesInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that hosts
	// the container instances to describe. If you do not specify a cluster, the
	// default cluster is assumed. This parameter is required if the container instance
	// or container instances you are describing were launched in any cluster other
	// than the default cluster.
	Cluster *string `locationName:"cluster" type:"string"`

	// A list of up to 100 container instance IDs or full Amazon Resource Name (ARN)
	// entries.
	//
	// ContainerInstances is a required field
	ContainerInstances []*string `locationName:"containerInstances" type:"list" required:"true"`

	// Specifies whether you want to see the resource tags for the container instance.
	// If TAGS is specified, the tags are included in the response. If CONTAINER_INSTANCE_HEALTH
	// is specified, the container instance health is included in the response.
	// If this field is omitted, tags and container instance health status aren't
	// included in the response.
	Include []*string `locationName:"include" type:"list" enum:"ContainerInstanceField"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeContainerInstancesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeContainerInstancesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeContainerInstancesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeContainerInstancesInput"}
	if s.ContainerInstances == nil {
		invalidParams.Add(request.NewErrParamRequired("ContainerInstances"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCluster sets the Cluster field's value.
func (s *DescribeContainerInstancesInput) SetCluster(v string) *DescribeContainerInstancesInput {
	s.Cluster = &v
	return s
}

// SetContainerInstances sets the ContainerInstances field's value.
func (s *DescribeContainerInstancesInput) SetContainerInstances(v []*string) *DescribeContainerInstancesInput {
	s.ContainerInstances = v
	return s
}

// SetInclude sets the Include field's value.
func (s *DescribeContainerInstancesInput) SetInclude(v []*string) *DescribeContainerInstancesInput {
	s.Include = v
	return s
}

type DescribeContainerInstancesOutput struct {
	_ struct{} `type:"structure"`

	// The list of container instances.
	ContainerInstances []*ContainerInstance `locationName:"containerInstances" type:"list"`

	// Any failures associated with the call.
	Failures []*Failure `locationName:"failures" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeContainerInstancesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeContainerInstancesOutput) GoString() string {
	return s.String()
}

// SetContainerInstances sets the ContainerInstances field's value.
func (s *DescribeContainerInstancesOutput) SetContainerInstances(v []*ContainerInstance) *DescribeContainerInstancesOutput {
	s.ContainerInstances = v
	return s
}

// SetFailures sets the Failures field's value.
func (s *DescribeContainerInstancesOutput) SetFailures(v []*Failure) *DescribeContainerInstancesOutput {
	s.Failures = v
	return s
}

type DescribeServicesInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN)the cluster that hosts the
	// service to describe. If you do not specify a cluster, the default cluster
	// is assumed. This parameter is required if the service or services you are
	// describing were launched in any cluster other than the default cluster.
	Cluster *string `locationName:"cluster" type:"string"`

	// Determines whether you want to see the resource tags for the service. If
	// TAGS is specified, the tags are included in the response. If this field is
	// omitted, tags aren't included in the response.
	Include []*string `locationName:"include" type:"list" enum:"ServiceField"`

	// A list of services to describe. You may specify up to 10 services to describe
	// in a single operation.
	//
	// Services is a required field
	Services []*string `locationName:"services" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeServicesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeServicesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeServicesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeServicesInput"}
	if s.Services == nil {
		invalidParams.Add(request.NewErrParamRequired("Services"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCluster sets the Cluster field's value.
func (s *DescribeServicesInput) SetCluster(v string) *DescribeServicesInput {
	s.Cluster = &v
	return s
}

// SetInclude sets the Include field's value.
func (s *DescribeServicesInput) SetInclude(v []*string) *DescribeServicesInput {
	s.Include = v
	return s
}

// SetServices sets the Services field's value.
func (s *DescribeServicesInput) SetServices(v []*string) *DescribeServicesInput {
	s.Services = v
	return s
}

type DescribeServicesOutput struct {
	_ struct{} `type:"structure"`

	// Any failures associated with the call.
	Failures []*Failure `locationName:"failures" type:"list"`

	// The list of services described.
	Services []*Service `locationName:"services" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeServicesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeServicesOutput) GoString() string {
	return s.String()
}

// SetFailures sets the Failures field's value.
func (s *DescribeServicesOutput) SetFailures(v []*Failure) *DescribeServicesOutput {
	s.Failures = v
	return s
}

// SetServices sets the Services field's value.
func (s *DescribeServicesOutput) SetServices(v []*Service) *DescribeServicesOutput {
	s.Services = v
	return s
}

type DescribeTaskDefinitionInput struct {
	_ struct{} `type:"structure"`

	// Determines whether to see the resource tags for the task definition. If TAGS
	// is specified, the tags are included in the response. If this field is omitted,
	// tags aren't included in the response.
	Include []*string `locationName:"include" type:"list" enum:"TaskDefinitionField"`

	// The family for the latest ACTIVE revision, family and revision (family:revision)
	// for a specific revision in the family, or full Amazon Resource Name (ARN)
	// of the task definition to describe.
	//
	// TaskDefinition is a required field
	TaskDefinition *string `locationName:"taskDefinition" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeTaskDefinitionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeTaskDefinitionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeTaskDefinitionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeTaskDefinitionInput"}
	if s.TaskDefinition == nil {
		invalidParams.Add(request.NewErrParamRequired("TaskDefinition"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetInclude sets the Include field's value.
func (s *DescribeTaskDefinitionInput) SetInclude(v []*string) *DescribeTaskDefinitionInput {
	s.Include = v
	return s
}

// SetTaskDefinition sets the TaskDefinition field's value.
func (s *DescribeTaskDefinitionInput) SetTaskDefinition(v string) *DescribeTaskDefinitionInput {
	s.TaskDefinition = &v
	return s
}

type DescribeTaskDefinitionOutput struct {
	_ struct{} `type:"structure"`

	// The metadata that's applied to the task definition to help you categorize
	// and organize them. Each tag consists of a key and an optional value. You
	// define both.
	//
	// The following basic restrictions apply to tags:
	//
	//    * Maximum number of tags per resource - 50
	//
	//    * For each resource, each tag key must be unique, and each tag key can
	//    have only one value.
	//
	//    * Maximum key length - 128 Unicode characters in UTF-8
	//
	//    * Maximum value length - 256 Unicode characters in UTF-8
	//
	//    * If your tagging schema is used across multiple services and resources,
	//    remember that other services may have restrictions on allowed characters.
	//    Generally allowed characters are: letters, numbers, and spaces representable
	//    in UTF-8, and the following characters: + - = . _ : / @.
	//
	//    * Tag keys and values are case-sensitive.
	//
	//    * Do not use aws:, AWS:, or any upper or lowercase combination of such
	//    as a prefix for either keys or values as it is reserved for Amazon Web
	//    Services use. You cannot edit or delete tag keys or values with this prefix.
	//    Tags with this prefix do not count against your tags per resource limit.
	Tags []*Tag `locationName:"tags" type:"list"`

	// The full task definition description.
	TaskDefinition *TaskDefinition `locationName:"taskDefinition" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeTaskDefinitionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeTaskDefinitionOutput) GoString() string {
	return s.String()
}

// SetTags sets the Tags field's value.
func (s *DescribeTaskDefinitionOutput) SetTags(v []*Tag) *DescribeTaskDefinitionOutput {
	s.Tags = v
	return s
}

// SetTaskDefinition sets the TaskDefinition field's value.
func (s *DescribeTaskDefinitionOutput) SetTaskDefinition(v *TaskDefinition) *DescribeTaskDefinitionOutput {
	s.TaskDefinition = v
	return s
}

type DescribeTaskSetsInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that hosts
	// the service that the task sets exist in.
	//
	// Cluster is a required field
	Cluster *string `locationName:"cluster" type:"string" required:"true"`

	// Specifies whether to see the resource tags for the task set. If TAGS is specified,
	// the tags are included in the response. If this field is omitted, tags aren't
	// included in the response.
	Include []*string `locationName:"include" type:"list" enum:"TaskSetField"`

	// The short name or full Amazon Resource Name (ARN) of the service that the
	// task sets exist in.
	//
	// Service is a required field
	Service *string `locationName:"service" type:"string" required:"true"`

	// The ID or full Amazon Resource Name (ARN) of task sets to describe.
	TaskSets []*string `locationName:"taskSets" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeTaskSetsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeTaskSetsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeTaskSetsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeTaskSetsInput"}
	if s.Cluster == nil {
		invalidParams.Add(request.NewErrParamRequired("Cluster"))
	}
	if s.Service == nil {
		invalidParams.Add(request.NewErrParamRequired("Service"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCluster sets the Cluster field's value.
func (s *DescribeTaskSetsInput) SetCluster(v string) *DescribeTaskSetsInput {
	s.Cluster = &v
	return s
}

// SetInclude sets the Include field's value.
func (s *DescribeTaskSetsInput) SetInclude(v []*string) *DescribeTaskSetsInput {
	s.Include = v
	return s
}

// SetService sets the Service field's value.
func (s *DescribeTaskSetsInput) SetService(v string) *DescribeTaskSetsInput {
	s.Service = &v
	return s
}

// SetTaskSets sets the TaskSets field's value.
func (s *DescribeTaskSetsInput) SetTaskSets(v []*string) *DescribeTaskSetsInput {
	s.TaskSets = v
	return s
}

type DescribeTaskSetsOutput struct {
	_ struct{} `type:"structure"`

	// Any failures associated with the call.
	Failures []*Failure `locationName:"failures" type:"list"`

	// The list of task sets described.
	TaskSets []*TaskSet `locationName:"taskSets" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeTaskSetsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeTaskSetsOutput) GoString() string {
	return s.String()
}

// SetFailures sets the Failures field's value.
func (s *DescribeTaskSetsOutput) SetFailures(v []*Failure) *DescribeTaskSetsOutput {
	s.Failures = v
	return s
}

// SetTaskSets sets the TaskSets field's value.
func (s *DescribeTaskSetsOutput) SetTaskSets(v []*TaskSet) *DescribeTaskSetsOutput {
	s.TaskSets = v
	return s
}

type DescribeTasksInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that hosts
	// the task or tasks to describe. If you do not specify a cluster, the default
	// cluster is assumed. This parameter is required if the task or tasks you are
	// describing were launched in any cluster other than the default cluster.
	Cluster *string `locationName:"cluster" type:"string"`

	// Specifies whether you want to see the resource tags for the task. If TAGS
	// is specified, the tags are included in the response. If this field is omitted,
	// tags aren't included in the response.
	Include []*string `locationName:"include" type:"list" enum:"TaskField"`

	// A list of up to 100 task IDs or full ARN entries.
	//
	// Tasks is a required field
	Tasks []*string `locationName:"tasks" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeTasksInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeTasksInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeTasksInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeTasksInput"}
	if s.Tasks == nil {
		invalidParams.Add(request.NewErrParamRequired("Tasks"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCluster sets the Cluster field's value.
func (s *DescribeTasksInput) SetCluster(v string) *DescribeTasksInput {
	s.Cluster = &v
	return s
}

// SetInclude sets the Include field's value.
func (s *DescribeTasksInput) SetInclude(v []*string) *DescribeTasksInput {
	s.Include = v
	return s
}

// SetTasks sets the Tasks field's value.
func (s *DescribeTasksInput) SetTasks(v []*string) *DescribeTasksInput {
	s.Tasks = v
	return s
}

type DescribeTasksOutput struct {
	_ struct{} `type:"structure"`

	// Any failures associated with the call.
	Failures []*Failure `locationName:"failures" type:"list"`

	// The list of tasks.
	Tasks []*Task `locationName:"tasks" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeTasksOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeTasksOutput) GoString() string {
	return s.String()
}

// SetFailures sets the Failures field's value.
func (s *DescribeTasksOutput) SetFailures(v []*Failure) *DescribeTasksOutput {
	s.Failures = v
	return s
}

// SetTasks sets the Tasks field's value.
func (s *DescribeTasksOutput) SetTasks(v []*Task) *DescribeTasksOutput {
	s.Tasks = v
	return s
}

// An object representing a container instance host device.
type Device struct {
	_ struct{} `type:"structure"`

	// The path inside the container at which to expose the host device.
	ContainerPath *string `locationName:"containerPath" type:"string"`

	// The path for the device on the host container instance.
	//
	// HostPath is a required field
	HostPath *string `locationName:"hostPath" type:"string" required:"true"`

	// The explicit permissions to provide to the container for the device. By default,
	// the container has permissions for read, write, and mknod for the device.
	Permissions []*string `locationName:"permissions" type:"list" enum:"DeviceCgroupPermission"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Device) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Device) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *Device) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Device"}
	if s.HostPath == nil {
		invalidParams.Add(request.NewErrParamRequired("HostPath"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetContainerPath sets the ContainerPath field's value.
func (s *Device) SetContainerPath(v string) *Device {
	s.ContainerPath = &v
	return s
}

// SetHostPath sets the HostPath field's value.
func (s *Device) SetHostPath(v string) *Device {
	s.HostPath = &v
	return s
}

// SetPermissions sets the Permissions field's value.
func (s *Device) SetPermissions(v []*string) *Device {
	s.Permissions = v
	return s
}

type DiscoverPollEndpointInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that the
	// container instance belongs to.
	Cluster *string `locationName:"cluster" type:"string"`

	// The container instance ID or full ARN of the container instance. For more
	// information about the ARN format, see Amazon Resource Name (ARN) (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids)
	// in the Amazon ECS Developer Guide.
	ContainerInstance *string `locationName:"containerInstance" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DiscoverPollEndpointInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DiscoverPollEndpointInput) GoString() string {
	return s.String()
}

// SetCluster sets the Cluster field's value.
func (s *DiscoverPollEndpointInput) SetCluster(v string) *DiscoverPollEndpointInput {
	s.Cluster = &v
	return s
}

// SetContainerInstance sets the ContainerInstance field's value.
func (s *DiscoverPollEndpointInput) SetContainerInstance(v string) *DiscoverPollEndpointInput {
	s.ContainerInstance = &v
	return s
}

type DiscoverPollEndpointOutput struct {
	_ struct{} `type:"structure"`

	// The endpoint for the Amazon ECS agent to poll.
	Endpoint *string `locationName:"endpoint" type:"string"`

	// The endpoint for the Amazon ECS agent to poll for Service Connect configuration.
	// For more information, see Service Connect (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html)
	// in the Amazon Elastic Container Service Developer Guide.
	ServiceConnectEndpoint *string `locationName:"serviceConnectEndpoint" type:"string"`

	// The telemetry endpoint for the Amazon ECS agent.
	TelemetryEndpoint *string `locationName:"telemetryEndpoint" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DiscoverPollEndpointOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DiscoverPollEndpointOutput) GoString() string {
	return s.String()
}

// SetEndpoint sets the Endpoint field's value.
func (s *DiscoverPollEndpointOutput) SetEndpoint(v string) *DiscoverPollEndpointOutput {
	s.Endpoint = &v
	return s
}

// SetServiceConnectEndpoint sets the ServiceConnectEndpoint field's value.
func (s *DiscoverPollEndpointOutput) SetServiceConnectEndpoint(v string) *DiscoverPollEndpointOutput {
	s.ServiceConnectEndpoint = &v
	return s
}

// SetTelemetryEndpoint sets the TelemetryEndpoint field's value.
func (s *DiscoverPollEndpointOutput) SetTelemetryEndpoint(v string) *DiscoverPollEndpointOutput {
	s.TelemetryEndpoint = &v
	return s
}

// This parameter is specified when you're using Docker volumes. Docker volumes
// are only supported when you're using the EC2 launch type. Windows containers
// only support the use of the local driver. To use bind mounts, specify a host
// instead.
type DockerVolumeConfiguration struct {
	_ struct{} `type:"structure"`

	// If this value is true, the Docker volume is created if it doesn't already
	// exist.
	//
	// This field is only used if the scope is shared.
	Autoprovision *bool `locationName:"autoprovision" type:"boolean"`

	// The Docker volume driver to use. The driver value must match the driver name
	// provided by Docker because it is used for task placement. If the driver was
	// installed using the Docker plugin CLI, use docker plugin ls to retrieve the
	// driver name from your container instance. If the driver was installed using
	// another method, use Docker plugin discovery to retrieve the driver name.
	// For more information, see Docker plugin discovery (https://docs.docker.com/engine/extend/plugin_api/#plugin-discovery).
	// This parameter maps to Driver in the Create a volume (https://docs.docker.com/engine/api/v1.35/#operation/VolumeCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the xxdriver option to docker volume create (https://docs.docker.com/engine/reference/commandline/volume_create/).
	Driver *string `locationName:"driver" type:"string"`

	// A map of Docker driver-specific options passed through. This parameter maps
	// to DriverOpts in the Create a volume (https://docs.docker.com/engine/api/v1.35/#operation/VolumeCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the xxopt option to docker volume create (https://docs.docker.com/engine/reference/commandline/volume_create/).
	DriverOpts map[string]*string `locationName:"driverOpts" type:"map"`

	// Custom metadata to add to your Docker volume. This parameter maps to Labels
	// in the Create a volume (https://docs.docker.com/engine/api/v1.35/#operation/VolumeCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the xxlabel option to docker volume create (https://docs.docker.com/engine/reference/commandline/volume_create/).
	Labels map[string]*string `locationName:"labels" type:"map"`

	// The scope for the Docker volume that determines its lifecycle. Docker volumes
	// that are scoped to a task are automatically provisioned when the task starts
	// and destroyed when the task stops. Docker volumes that are scoped as shared
	// persist after the task stops.
	Scope *string `locationName:"scope" type:"string" enum:"Scope"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DockerVolumeConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DockerVolumeConfiguration) GoString() string {
	return s.String()
}

// SetAutoprovision sets the Autoprovision field's value.
func (s *DockerVolumeConfiguration) SetAutoprovision(v bool) *DockerVolumeConfiguration {
	s.Autoprovision = &v
	return s
}

// SetDriver sets the Driver field's value.
func (s *DockerVolumeConfiguration) SetDriver(v string) *DockerVolumeConfiguration {
	s.Driver = &v
	return s
}

// SetDriverOpts sets the DriverOpts field's value.
func (s *DockerVolumeConfiguration) SetDriverOpts(v map[string]*string) *DockerVolumeConfiguration {
	s.DriverOpts = v
	return s
}

// SetLabels sets the Labels field's value.
func (s *DockerVolumeConfiguration) SetLabels(v map[string]*string) *DockerVolumeConfiguration {
	s.Labels = v
	return s
}

// SetScope sets the Scope field's value.
func (s *DockerVolumeConfiguration) SetScope(v string) *DockerVolumeConfiguration {
	s.Scope = &v
	return s
}

// The authorization configuration details for the Amazon EFS file system.
type EFSAuthorizationConfig struct {
	_ struct{} `type:"structure"`

	// The Amazon EFS access point ID to use. If an access point is specified, the
	// root directory value specified in the EFSVolumeConfiguration must either
	// be omitted or set to / which will enforce the path set on the EFS access
	// point. If an access point is used, transit encryption must be on in the EFSVolumeConfiguration.
	// For more information, see Working with Amazon EFS access points (https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html)
	// in the Amazon Elastic File System User Guide.
	AccessPointId *string `locationName:"accessPointId" type:"string"`

	// Determines whether to use the Amazon ECS task role defined in a task definition
	// when mounting the Amazon EFS file system. If it is turned on, transit encryption
	// must be turned on in the EFSVolumeConfiguration. If this parameter is omitted,
	// the default value of DISABLED is used. For more information, see Using Amazon
	// EFS access points (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/efs-volumes.html#efs-volume-accesspoints)
	// in the Amazon Elastic Container Service Developer Guide.
	Iam *string `locationName:"iam" type:"string" enum:"EFSAuthorizationConfigIAM"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EFSAuthorizationConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EFSAuthorizationConfig) GoString() string {
	return s.String()
}

// SetAccessPointId sets the AccessPointId field's value.
func (s *EFSAuthorizationConfig) SetAccessPointId(v string) *EFSAuthorizationConfig {
	s.AccessPointId = &v
	return s
}

// SetIam sets the Iam field's value.
func (s *EFSAuthorizationConfig) SetIam(v string) *EFSAuthorizationConfig {
	s.Iam = &v
	return s
}

// This parameter is specified when you're using an Amazon Elastic File System
// file system for task storage. For more information, see Amazon EFS volumes
// (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/efs-volumes.html)
// in the Amazon Elastic Container Service Developer Guide.
type EFSVolumeConfiguration struct {
	_ struct{} `type:"structure"`

	// The authorization configuration details for the Amazon EFS file system.
	AuthorizationConfig *EFSAuthorizationConfig `locationName:"authorizationConfig" type:"structure"`

	// The Amazon EFS file system ID to use.
	//
	// FileSystemId is a required field
	FileSystemId *string `locationName:"fileSystemId" type:"string" required:"true"`

	// The directory within the Amazon EFS file system to mount as the root directory
	// inside the host. If this parameter is omitted, the root of the Amazon EFS
	// volume will be used. Specifying / will have the same effect as omitting this
	// parameter.
	//
	// If an EFS access point is specified in the authorizationConfig, the root
	// directory parameter must either be omitted or set to / which will enforce
	// the path set on the EFS access point.
	RootDirectory *string `locationName:"rootDirectory" type:"string"`

	// Determines whether to use encryption for Amazon EFS data in transit between
	// the Amazon ECS host and the Amazon EFS server. Transit encryption must be
	// turned on if Amazon EFS IAM authorization is used. If this parameter is omitted,
	// the default value of DISABLED is used. For more information, see Encrypting
	// data in transit (https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html)
	// in the Amazon Elastic File System User Guide.
	TransitEncryption *string `locationName:"transitEncryption" type:"string" enum:"EFSTransitEncryption"`

	// The port to use when sending encrypted data between the Amazon ECS host and
	// the Amazon EFS server. If you do not specify a transit encryption port, it
	// will use the port selection strategy that the Amazon EFS mount helper uses.
	// For more information, see EFS mount helper (https://docs.aws.amazon.com/efs/latest/ug/efs-mount-helper.html)
	// in the Amazon Elastic File System User Guide.
	TransitEncryptionPort *int64 `locationName:"transitEncryptionPort" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EFSVolumeConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EFSVolumeConfiguration) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *EFSVolumeConfiguration) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "EFSVolumeConfiguration"}
	if s.FileSystemId == nil {
		invalidParams.Add(request.NewErrParamRequired("FileSystemId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAuthorizationConfig sets the AuthorizationConfig field's value.
func (s *EFSVolumeConfiguration) SetAuthorizationConfig(v *EFSAuthorizationConfig) *EFSVolumeConfiguration {
	s.AuthorizationConfig = v
	return s
}

// SetFileSystemId sets the FileSystemId field's value.
func (s *EFSVolumeConfiguration) SetFileSystemId(v string) *EFSVolumeConfiguration {
	s.FileSystemId = &v
	return s
}

// SetRootDirectory sets the RootDirectory field's value.
func (s *EFSVolumeConfiguration) SetRootDirectory(v string) *EFSVolumeConfiguration {
	s.RootDirectory = &v
	return s
}

// SetTransitEncryption sets the TransitEncryption field's value.
func (s *EFSVolumeConfiguration) SetTransitEncryption(v string) *EFSVolumeConfiguration {
	s.TransitEncryption = &v
	return s
}

// SetTransitEncryptionPort sets the TransitEncryptionPort field's value.
func (s *EFSVolumeConfiguration) SetTransitEncryptionPort(v int64) *EFSVolumeConfiguration {
	s.TransitEncryptionPort = &v
	return s
}

// A list of files containing the environment variables to pass to a container.
// You can specify up to ten environment files. The file must have a .env file
// extension. Each line in an environment file should contain an environment
// variable in VARIABLE=VALUE format. Lines beginning with # are treated as
// comments and are ignored.
//
// If there are environment variables specified using the environment parameter
// in a container definition, they take precedence over the variables contained
// within an environment file. If multiple environment files are specified that
// contain the same variable, they're processed from the top down. We recommend
// that you use unique variable names. For more information, see Specifying
// environment variables (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/taskdef-envfiles.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// You must use the following platforms for the Fargate launch type:
//
//   - Linux platform version 1.4.0 or later.
//
//   - Windows platform version 1.0.0 or later.
//
// Consider the following when using the Fargate launch type:
//
//   - The file is handled like a native Docker env-file.
//
//   - There is no support for shell escape handling.
//
//   - The container entry point interperts the VARIABLE values.
type EnvironmentFile struct {
	_ struct{} `type:"structure"`

	// The file type to use. The only supported value is s3.
	//
	// Type is a required field
	Type *string `locationName:"type" type:"string" required:"true" enum:"EnvironmentFileType"`

	// The Amazon Resource Name (ARN) of the Amazon S3 object containing the environment
	// variable file.
	//
	// Value is a required field
	Value *string `locationName:"value" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EnvironmentFile) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EnvironmentFile) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *EnvironmentFile) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "EnvironmentFile"}
	if s.Type == nil {
		invalidParams.Add(request.NewErrParamRequired("Type"))
	}
	if s.Value == nil {
		invalidParams.Add(request.NewErrParamRequired("Value"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetType sets the Type field's value.
func (s *EnvironmentFile) SetType(v string) *EnvironmentFile {
	s.Type = &v
	return s
}

// SetValue sets the Value field's value.
func (s *EnvironmentFile) SetValue(v string) *EnvironmentFile {
	s.Value = &v
	return s
}

// The amount of ephemeral storage to allocate for the task. This parameter
// is used to expand the total amount of ephemeral storage available, beyond
// the default amount, for tasks hosted on Fargate. For more information, see
// Fargate task storage (https://docs.aws.amazon.com/AmazonECS/latest/userguide/using_data_volumes.html)
// in the Amazon ECS User Guide for Fargate.
//
// For tasks using the Fargate launch type, the task requires the following
// platforms:
//
//   - Linux platform version 1.4.0 or later.
//
//   - Windows platform version 1.0.0 or later.
type EphemeralStorage struct {
	_ struct{} `type:"structure"`

	// The total amount, in GiB, of ephemeral storage to set for the task. The minimum
	// supported value is 21 GiB and the maximum supported value is 200 GiB.
	//
	// SizeInGiB is a required field
	SizeInGiB *int64 `locationName:"sizeInGiB" type:"integer" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EphemeralStorage) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EphemeralStorage) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *EphemeralStorage) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "EphemeralStorage"}
	if s.SizeInGiB == nil {
		invalidParams.Add(request.NewErrParamRequired("SizeInGiB"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetSizeInGiB sets the SizeInGiB field's value.
func (s *EphemeralStorage) SetSizeInGiB(v int64) *EphemeralStorage {
	s.SizeInGiB = &v
	return s
}

// The details of the execute command configuration.
type ExecuteCommandConfiguration struct {
	_ struct{} `type:"structure"`

	// Specify an Key Management Service key ID to encrypt the data between the
	// local client and the container.
	KmsKeyId *string `locationName:"kmsKeyId" type:"string"`

	// The log configuration for the results of the execute command actions. The
	// logs can be sent to CloudWatch Logs or an Amazon S3 bucket. When logging=OVERRIDE
	// is specified, a logConfiguration must be provided.
	LogConfiguration *ExecuteCommandLogConfiguration `locationName:"logConfiguration" type:"structure"`

	// The log setting to use for redirecting logs for your execute command results.
	// The following log settings are available.
	//
	//    * NONE: The execute command session is not logged.
	//
	//    * DEFAULT: The awslogs configuration in the task definition is used. If
	//    no logging parameter is specified, it defaults to this value. If no awslogs
	//    log driver is configured in the task definition, the output won't be logged.
	//
	//    * OVERRIDE: Specify the logging details as a part of logConfiguration.
	//    If the OVERRIDE logging option is specified, the logConfiguration is required.
	Logging *string `locationName:"logging" type:"string" enum:"ExecuteCommandLogging"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExecuteCommandConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExecuteCommandConfiguration) GoString() string {
	return s.String()
}

// SetKmsKeyId sets the KmsKeyId field's value.
func (s *ExecuteCommandConfiguration) SetKmsKeyId(v string) *ExecuteCommandConfiguration {
	s.KmsKeyId = &v
	return s
}

// SetLogConfiguration sets the LogConfiguration field's value.
func (s *ExecuteCommandConfiguration) SetLogConfiguration(v *ExecuteCommandLogConfiguration) *ExecuteCommandConfiguration {
	s.LogConfiguration = v
	return s
}

// SetLogging sets the Logging field's value.
func (s *ExecuteCommandConfiguration) SetLogging(v string) *ExecuteCommandConfiguration {
	s.Logging = &v
	return s
}

type ExecuteCommandInput struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) or short name of the cluster the task is running
	// in. If you do not specify a cluster, the default cluster is assumed.
	Cluster *string `locationName:"cluster" type:"string"`

	// The command to run on the container.
	//
	// Command is a required field
	Command *string `locationName:"command" type:"string" required:"true"`

	// The name of the container to execute the command on. A container name only
	// needs to be specified for tasks containing multiple containers.
	Container *string `locationName:"container" type:"string"`

	// Use this flag to run your command in interactive mode.
	//
	// Interactive is a required field
	Interactive *bool `locationName:"interactive" type:"boolean" required:"true"`

	// The Amazon Resource Name (ARN) or ID of the task the container is part of.
	//
	// Task is a required field
	Task *string `locationName:"task" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExecuteCommandInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExecuteCommandInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ExecuteCommandInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ExecuteCommandInput"}
	if s.Command == nil {
		invalidParams.Add(request.NewErrParamRequired("Command"))
	}
	if s.Interactive == nil {
		invalidParams.Add(request.NewErrParamRequired("Interactive"))
	}
	if s.Task == nil {
		invalidParams.Add(request.NewErrParamRequired("Task"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCluster sets the Cluster field's value.
func (s *ExecuteCommandInput) SetCluster(v string) *ExecuteCommandInput {
	s.Cluster = &v
	return s
}

// SetCommand sets the Command field's value.
func (s *ExecuteCommandInput) SetCommand(v string) *ExecuteCommandInput {
	s.Command = &v
	return s
}

// SetContainer sets the Container field's value.
func (s *ExecuteCommandInput) SetContainer(v string) *ExecuteCommandInput {
	s.Container = &v
	return s
}

// SetInteractive sets the Interactive field's value.
func (s *ExecuteCommandInput) SetInteractive(v bool) *ExecuteCommandInput {
	s.Interactive = &v
	return s
}

// SetTask sets the Task field's value.
func (s *ExecuteCommandInput) SetTask(v string) *ExecuteCommandInput {
	s.Task = &v
	return s
}

// The log configuration for the results of the execute command actions. The
// logs can be sent to CloudWatch Logs or an Amazon S3 bucket.
type ExecuteCommandLogConfiguration struct {
	_ struct{} `type:"structure"`

	// Determines whether to use encryption on the CloudWatch logs. If not specified,
	// encryption will be off.
	CloudWatchEncryptionEnabled *bool `locationName:"cloudWatchEncryptionEnabled" type:"boolean"`

	// The name of the CloudWatch log group to send logs to.
	//
	// The CloudWatch log group must already be created.
	CloudWatchLogGroupName *string `locationName:"cloudWatchLogGroupName" type:"string"`

	// The name of the S3 bucket to send logs to.
	//
	// The S3 bucket must already be created.
	S3BucketName *string `locationName:"s3BucketName" type:"string"`

	// Determines whether to use encryption on the S3 logs. If not specified, encryption
	// is not used.
	S3EncryptionEnabled *bool `locationName:"s3EncryptionEnabled" type:"boolean"`

	// An optional folder in the S3 bucket to place logs in.
	S3KeyPrefix *string `locationName:"s3KeyPrefix" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExecuteCommandLogConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExecuteCommandLogConfiguration) GoString() string {
	return s.String()
}

// SetCloudWatchEncryptionEnabled sets the CloudWatchEncryptionEnabled field's value.
func (s *ExecuteCommandLogConfiguration) SetCloudWatchEncryptionEnabled(v bool) *ExecuteCommandLogConfiguration {
	s.CloudWatchEncryptionEnabled = &v
	return s
}

// SetCloudWatchLogGroupName sets the CloudWatchLogGroupName field's value.
func (s *ExecuteCommandLogConfiguration) SetCloudWatchLogGroupName(v string) *ExecuteCommandLogConfiguration {
	s.CloudWatchLogGroupName = &v
	return s
}

// SetS3BucketName sets the S3BucketName field's value.
func (s *ExecuteCommandLogConfiguration) SetS3BucketName(v string) *ExecuteCommandLogConfiguration {
	s.S3BucketName = &v
	return s
}

// SetS3EncryptionEnabled sets the S3EncryptionEnabled field's value.
func (s *ExecuteCommandLogConfiguration) SetS3EncryptionEnabled(v bool) *ExecuteCommandLogConfiguration {
	s.S3EncryptionEnabled = &v
	return s
}

// SetS3KeyPrefix sets the S3KeyPrefix field's value.
func (s *ExecuteCommandLogConfiguration) SetS3KeyPrefix(v string) *ExecuteCommandLogConfiguration {
	s.S3KeyPrefix = &v
	return s
}

type ExecuteCommandOutput struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the cluster.
	ClusterArn *string `locationName:"clusterArn" type:"string"`

	// The Amazon Resource Name (ARN) of the container.
	ContainerArn *string `locationName:"containerArn" type:"string"`

	// The name of the container.
	ContainerName *string `locationName:"containerName" type:"string"`

	// Determines whether the execute command session is running in interactive
	// mode. Amazon ECS only supports initiating interactive sessions, so you must
	// specify true for this value.
	Interactive *bool `locationName:"interactive" type:"boolean"`

	// The details of the SSM session that was created for this instance of execute-command.
	Session *Session `locationName:"session" type:"structure"`

	// The Amazon Resource Name (ARN) of the task.
	TaskArn *string `locationName:"taskArn" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExecuteCommandOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExecuteCommandOutput) GoString() string {
	return s.String()
}

// SetClusterArn sets the ClusterArn field's value.
func (s *ExecuteCommandOutput) SetClusterArn(v string) *ExecuteCommandOutput {
	s.ClusterArn = &v
	return s
}

// SetContainerArn sets the ContainerArn field's value.
func (s *ExecuteCommandOutput) SetContainerArn(v string) *ExecuteCommandOutput {
	s.ContainerArn = &v
	return s
}

// SetContainerName sets the ContainerName field's value.
func (s *ExecuteCommandOutput) SetContainerName(v string) *ExecuteCommandOutput {
	s.ContainerName = &v
	return s
}

// SetInteractive sets the Interactive field's value.
func (s *ExecuteCommandOutput) SetInteractive(v bool) *ExecuteCommandOutput {
	s.Interactive = &v
	return s
}

// SetSession sets the Session field's value.
func (s *ExecuteCommandOutput) SetSession(v *Session) *ExecuteCommandOutput {
	s.Session = v
	return s
}

// SetTaskArn sets the TaskArn field's value.
func (s *ExecuteCommandOutput) SetTaskArn(v string) *ExecuteCommandOutput {
	s.TaskArn = &v
	return s
}

// The authorization configuration details for Amazon FSx for Windows File Server
// file system. See FSxWindowsFileServerVolumeConfiguration (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_FSxWindowsFileServerVolumeConfiguration.html)
// in the Amazon ECS API Reference.
//
// For more information and the input format, see Amazon FSx for Windows File
// Server Volumes (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/wfsx-volumes.html)
// in the Amazon Elastic Container Service Developer Guide.
type FSxWindowsFileServerAuthorizationConfig struct {
	_ struct{} `type:"structure"`

	// The authorization credential option to use. The authorization credential
	// options can be provided using either the Amazon Resource Name (ARN) of an
	// Secrets Manager secret or SSM Parameter Store parameter. The ARN refers to
	// the stored credentials.
	//
	// CredentialsParameter is a required field
	CredentialsParameter *string `locationName:"credentialsParameter" type:"string" required:"true"`

	// A fully qualified domain name hosted by an Directory Service (https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)
	// Managed Microsoft AD (Active Directory) or self-hosted AD on Amazon EC2.
	//
	// Domain is a required field
	Domain *string `locationName:"domain" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s FSxWindowsFileServerAuthorizationConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s FSxWindowsFileServerAuthorizationConfig) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *FSxWindowsFileServerAuthorizationConfig) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "FSxWindowsFileServerAuthorizationConfig"}
	if s.CredentialsParameter == nil {
		invalidParams.Add(request.NewErrParamRequired("CredentialsParameter"))
	}
	if s.Domain == nil {
		invalidParams.Add(request.NewErrParamRequired("Domain"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCredentialsParameter sets the CredentialsParameter field's value.
func (s *FSxWindowsFileServerAuthorizationConfig) SetCredentialsParameter(v string) *FSxWindowsFileServerAuthorizationConfig {
	s.CredentialsParameter = &v
	return s
}

// SetDomain sets the Domain field's value.
func (s *FSxWindowsFileServerAuthorizationConfig) SetDomain(v string) *FSxWindowsFileServerAuthorizationConfig {
	s.Domain = &v
	return s
}

// This parameter is specified when you're using Amazon FSx for Windows File
// Server (https://docs.aws.amazon.com/fsx/latest/WindowsGuide/what-is.html)
// file system for task storage.
//
// For more information and the input format, see Amazon FSx for Windows File
// Server volumes (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/wfsx-volumes.html)
// in the Amazon Elastic Container Service Developer Guide.
type FSxWindowsFileServerVolumeConfiguration struct {
	_ struct{} `type:"structure"`

	// The authorization configuration details for the Amazon FSx for Windows File
	// Server file system.
	//
	// AuthorizationConfig is a required field
	AuthorizationConfig *FSxWindowsFileServerAuthorizationConfig `locationName:"authorizationConfig" type:"structure" required:"true"`

	// The Amazon FSx for Windows File Server file system ID to use.
	//
	// FileSystemId is a required field
	FileSystemId *string `locationName:"fileSystemId" type:"string" required:"true"`

	// The directory within the Amazon FSx for Windows File Server file system to
	// mount as the root directory inside the host.
	//
	// RootDirectory is a required field
	RootDirectory *string `locationName:"rootDirectory" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s FSxWindowsFileServerVolumeConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s FSxWindowsFileServerVolumeConfiguration) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *FSxWindowsFileServerVolumeConfiguration) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "FSxWindowsFileServerVolumeConfiguration"}
	if s.AuthorizationConfig == nil {
		invalidParams.Add(request.NewErrParamRequired("AuthorizationConfig"))
	}
	if s.FileSystemId == nil {
		invalidParams.Add(request.NewErrParamRequired("FileSystemId"))
	}
	if s.RootDirectory == nil {
		invalidParams.Add(request.NewErrParamRequired("RootDirectory"))
	}
	if s.AuthorizationConfig != nil {
		if err := s.AuthorizationConfig.Validate(); err != nil {
			invalidParams.AddNested("AuthorizationConfig", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAuthorizationConfig sets the AuthorizationConfig field's value.
func (s *FSxWindowsFileServerVolumeConfiguration) SetAuthorizationConfig(v *FSxWindowsFileServerAuthorizationConfig) *FSxWindowsFileServerVolumeConfiguration {
	s.AuthorizationConfig = v
	return s
}

// SetFileSystemId sets the FileSystemId field's value.
func (s *FSxWindowsFileServerVolumeConfiguration) SetFileSystemId(v string) *FSxWindowsFileServerVolumeConfiguration {
	s.FileSystemId = &v
	return s
}

// SetRootDirectory sets the RootDirectory field's value.
func (s *FSxWindowsFileServerVolumeConfiguration) SetRootDirectory(v string) *FSxWindowsFileServerVolumeConfiguration {
	s.RootDirectory = &v
	return s
}

// A failed resource. For a list of common causes, see API failure reasons (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/api_failures_messages.html)
// in the Amazon Elastic Container Service Developer Guide.
type Failure struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the failed resource.
	Arn *string `locationName:"arn" type:"string"`

	// The details of the failure.
	Detail *string `locationName:"detail" type:"string"`

	// The reason for the failure.
	Reason *string `locationName:"reason" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Failure) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Failure) GoString() string {
	return s.String()
}

// SetArn sets the Arn field's value.
func (s *Failure) SetArn(v string) *Failure {
	s.Arn = &v
	return s
}

// SetDetail sets the Detail field's value.
func (s *Failure) SetDetail(v string) *Failure {
	s.Detail = &v
	return s
}

// SetReason sets the Reason field's value.
func (s *Failure) SetReason(v string) *Failure {
	s.Reason = &v
	return s
}

// The FireLens configuration for the container. This is used to specify and
// configure a log router for container logs. For more information, see Custom
// log routing (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_firelens.html)
// in the Amazon Elastic Container Service Developer Guide.
type FirelensConfiguration struct {
	_ struct{} `type:"structure"`

	// The options to use when configuring the log router. This field is optional
	// and can be used to specify a custom configuration file or to add additional
	// metadata, such as the task, task definition, cluster, and container instance
	// details to the log event. If specified, the syntax to use is "options":{"enable-ecs-log-metadata":"true|false","config-file-type:"s3|file","config-file-value":"arn:aws:s3:::mybucket/fluent.conf|filepath"}.
	// For more information, see Creating a task definition that uses a FireLens
	// configuration (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_firelens.html#firelens-taskdef)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// Tasks hosted on Fargate only support the file configuration file type.
	Options map[string]*string `locationName:"options" type:"map"`

	// The log router to use. The valid values are fluentd or fluentbit.
	//
	// Type is a required field
	Type *string `locationName:"type" type:"string" required:"true" enum:"FirelensConfigurationType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s FirelensConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s FirelensConfiguration) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *FirelensConfiguration) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "FirelensConfiguration"}
	if s.Type == nil {
		invalidParams.Add(request.NewErrParamRequired("Type"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetOptions sets the Options field's value.
func (s *FirelensConfiguration) SetOptions(v map[string]*string) *FirelensConfiguration {
	s.Options = v
	return s
}

// SetType sets the Type field's value.
func (s *FirelensConfiguration) SetType(v string) *FirelensConfiguration {
	s.Type = &v
	return s
}

type GetTaskProtectionInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that hosts
	// the service that the task sets exist in.
	//
	// Cluster is a required field
	Cluster *string `locationName:"cluster" type:"string" required:"true"`

	// A list of up to 100 task IDs or full ARN entries.
	Tasks []*string `locationName:"tasks" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetTaskProtectionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetTaskProtectionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetTaskProtectionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetTaskProtectionInput"}
	if s.Cluster == nil {
		invalidParams.Add(request.NewErrParamRequired("Cluster"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCluster sets the Cluster field's value.
func (s *GetTaskProtectionInput) SetCluster(v string) *GetTaskProtectionInput {
	s.Cluster = &v
	return s
}

// SetTasks sets the Tasks field's value.
func (s *GetTaskProtectionInput) SetTasks(v []*string) *GetTaskProtectionInput {
	s.Tasks = v
	return s
}

type GetTaskProtectionOutput struct {
	_ struct{} `type:"structure"`

	// Any failures associated with the call.
	Failures []*Failure `locationName:"failures" type:"list"`

	// A list of tasks with the following information.
	//
	//    * taskArn: The task ARN.
	//
	//    * protectionEnabled: The protection status of the task. If scale-in protection
	//    is turned on for a task, the value is true. Otherwise, it is false.
	//
	//    * expirationDate: The epoch time when protection for the task will expire.
	ProtectedTasks []*ProtectedTask `locationName:"protectedTasks" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetTaskProtectionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetTaskProtectionOutput) GoString() string {
	return s.String()
}

// SetFailures sets the Failures field's value.
func (s *GetTaskProtectionOutput) SetFailures(v []*Failure) *GetTaskProtectionOutput {
	s.Failures = v
	return s
}

// SetProtectedTasks sets the ProtectedTasks field's value.
func (s *GetTaskProtectionOutput) SetProtectedTasks(v []*ProtectedTask) *GetTaskProtectionOutput {
	s.ProtectedTasks = v
	return s
}

// An object representing a container health check. Health check parameters
// that are specified in a container definition override any Docker health checks
// that exist in the container image (such as those specified in a parent image
// or from the image's Dockerfile). This configuration maps to the HEALTHCHECK
// parameter of docker run (https://docs.docker.com/engine/reference/run/).
//
// The Amazon ECS container agent only monitors and reports on the health checks
// specified in the task definition. Amazon ECS does not monitor Docker health
// checks that are embedded in a container image and not specified in the container
// definition. Health check parameters that are specified in a container definition
// override any Docker health checks that exist in the container image.
//
// You can view the health status of both individual containers and a task with
// the DescribeTasks API operation or when viewing the task details in the console.
//
// The health check is designed to make sure that your containers survive agent
// restarts, upgrades, or temporary unavailability.
//
// The following describes the possible healthStatus values for a container:
//
//   - HEALTHY-The container health check has passed successfully.
//
//   - UNHEALTHY-The container health check has failed.
//
//   - UNKNOWN-The container health check is being evaluated, there's no container
//     health check defined, or Amazon ECS doesn't have the health status of
//     the container.
//
// The following describes the possible healthStatus values based on the container
// health checker status of essential containers in the task with the following
// priority order (high to low):
//
//   - UNHEALTHY-One or more essential containers have failed their health
//     check.
//
//   - UNKNOWN-Any essential container running within the task is in an UNKNOWN
//     state and no other essential containers have an UNHEALTHY state.
//
//   - HEALTHY-All essential containers within the task have passed their health
//     checks.
//
// Consider the following task health example with 2 containers.
//
//   - If Container1 is UNHEALTHY and Container2 is UNKNOWN, the task health
//     is UNHEALTHY.
//
//   - If Container1 is UNHEALTHY and Container2 is HEALTHY, the task health
//     is UNHEALTHY.
//
//   - If Container1 is HEALTHY and Container2 is UNKNOWN, the task health
//     is UNKNOWN.
//
//   - If Container1 is HEALTHY and Container2 is HEALTHY, the task health
//     is HEALTHY.
//
// Consider the following task health example with 3 containers.
//
//   - If Container1 is UNHEALTHY and Container2 is UNKNOWN, and Container3
//     is UNKNOWN, the task health is UNHEALTHY.
//
//   - If Container1 is UNHEALTHY and Container2 is UNKNOWN, and Container3
//     is HEALTHY, the task health is UNHEALTHY.
//
//   - If Container1 is UNHEALTHY and Container2 is HEALTHY, and Container3
//     is HEALTHY, the task health is UNHEALTHY.
//
//   - If Container1 is HEALTHY and Container2 is UNKNOWN, and Container3 is
//     HEALTHY, the task health is UNKNOWN.
//
//   - If Container1 is HEALTHY and Container2 is UNKNOWN, and Container3 is
//     UNKNOWN, the task health is UNKNOWN.
//
//   - If Container1 is HEALTHY and Container2 is HEALTHY, and Container3 is
//     HEALTHY, the task health is HEALTHY.
//
// If a task is run manually, and not as part of a service, the task will continue
// its lifecycle regardless of its health status. For tasks that are part of
// a service, if the task reports as unhealthy then the task will be stopped
// and the service scheduler will replace it.
//
// The following are notes about container health check support:
//
//   - When the Amazon ECS agent cannot connect to the Amazon ECS service,
//     the service reports the container as UNHEALTHY.
//
//   - The health check statuses are the "last heard from" response from the
//     Amazon ECS agent. There are no assumptions made about the status of the
//     container health checks.
//
//   - Container health checks require version 1.17.0 or greater of the Amazon
//     ECS container agent. For more information, see Updating the Amazon ECS
//     container agent (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html).
//
//   - Container health checks are supported for Fargate tasks if you're using
//     platform version 1.1.0 or greater. For more information, see Fargate platform
//     versions (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html).
//
//   - Container health checks aren't supported for tasks that are part of
//     a service that's configured to use a Classic Load Balancer.
type HealthCheck struct {
	_ struct{} `type:"structure"`

	// A string array representing the command that the container runs to determine
	// if it is healthy. The string array must start with CMD to run the command
	// arguments directly, or CMD-SHELL to run the command with the container's
	// default shell.
	//
	// When you use the Amazon Web Services Management Console JSON panel, the Command
	// Line Interface, or the APIs, enclose the list of commands in double quotes
	// and brackets.
	//
	// [ "CMD-SHELL", "curl -f http://localhost/ || exit 1" ]
	//
	// You don't include the double quotes and brackets when you use the Amazon
	// Web Services Management Console.
	//
	// CMD-SHELL, curl -f http://localhost/ || exit 1
	//
	// An exit code of 0 indicates success, and non-zero exit code indicates failure.
	// For more information, see HealthCheck in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/).
	//
	// Command is a required field
	Command []*string `locationName:"command" type:"list" required:"true"`

	// The time period in seconds between each health check execution. You may specify
	// between 5 and 300 seconds. The default value is 30 seconds.
	Interval *int64 `locationName:"interval" type:"integer"`

	// The number of times to retry a failed health check before the container is
	// considered unhealthy. You may specify between 1 and 10 retries. The default
	// value is 3.
	Retries *int64 `locationName:"retries" type:"integer"`

	// The optional grace period to provide containers time to bootstrap before
	// failed health checks count towards the maximum number of retries. You can
	// specify between 0 and 300 seconds. By default, the startPeriod is off.
	//
	// If a health check succeeds within the startPeriod, then the container is
	// considered healthy and any subsequent failures count toward the maximum number
	// of retries.
	StartPeriod *int64 `locationName:"startPeriod" type:"integer"`

	// The time period in seconds to wait for a health check to succeed before it
	// is considered a failure. You may specify between 2 and 60 seconds. The default
	// value is 5.
	Timeout *int64 `locationName:"timeout" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s HealthCheck) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s HealthCheck) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *HealthCheck) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "HealthCheck"}
	if s.Command == nil {
		invalidParams.Add(request.NewErrParamRequired("Command"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCommand sets the Command field's value.
func (s *HealthCheck) SetCommand(v []*string) *HealthCheck {
	s.Command = v
	return s
}

// SetInterval sets the Interval field's value.
func (s *HealthCheck) SetInterval(v int64) *HealthCheck {
	s.Interval = &v
	return s
}

// SetRetries sets the Retries field's value.
func (s *HealthCheck) SetRetries(v int64) *HealthCheck {
	s.Retries = &v
	return s
}

// SetStartPeriod sets the StartPeriod field's value.
func (s *HealthCheck) SetStartPeriod(v int64) *HealthCheck {
	s.StartPeriod = &v
	return s
}

// SetTimeout sets the Timeout field's value.
func (s *HealthCheck) SetTimeout(v int64) *HealthCheck {
	s.Timeout = &v
	return s
}

// Hostnames and IP address entries that are added to the /etc/hosts file of
// a container via the extraHosts parameter of its ContainerDefinition.
type HostEntry struct {
	_ struct{} `type:"structure"`

	// The hostname to use in the /etc/hosts entry.
	//
	// Hostname is a required field
	Hostname *string `locationName:"hostname" type:"string" required:"true"`

	// The IP address to use in the /etc/hosts entry.
	//
	// IpAddress is a required field
	IpAddress *string `locationName:"ipAddress" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s HostEntry) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s HostEntry) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *HostEntry) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "HostEntry"}
	if s.Hostname == nil {
		invalidParams.Add(request.NewErrParamRequired("Hostname"))
	}
	if s.IpAddress == nil {
		invalidParams.Add(request.NewErrParamRequired("IpAddress"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetHostname sets the Hostname field's value.
func (s *HostEntry) SetHostname(v string) *HostEntry {
	s.Hostname = &v
	return s
}

// SetIpAddress sets the IpAddress field's value.
func (s *HostEntry) SetIpAddress(v string) *HostEntry {
	s.IpAddress = &v
	return s
}

// Details on a container instance bind mount host volume.
type HostVolumeProperties struct {
	_ struct{} `type:"structure"`

	// When the host parameter is used, specify a sourcePath to declare the path
	// on the host container instance that's presented to the container. If this
	// parameter is empty, then the Docker daemon has assigned a host path for you.
	// If the host parameter contains a sourcePath file location, then the data
	// volume persists at the specified location on the host container instance
	// until you delete it manually. If the sourcePath value doesn't exist on the
	// host container instance, the Docker daemon creates it. If the location does
	// exist, the contents of the source path folder are exported.
	//
	// If you're using the Fargate launch type, the sourcePath parameter is not
	// supported.
	SourcePath *string `locationName:"sourcePath" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s HostVolumeProperties) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s HostVolumeProperties) GoString() string {
	return s.String()
}

// SetSourcePath sets the SourcePath field's value.
func (s *HostVolumeProperties) SetSourcePath(v string) *HostVolumeProperties {
	s.SourcePath = &v
	return s
}

// Details on an Elastic Inference accelerator. For more information, see Working
// with Amazon Elastic Inference on Amazon ECS (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-inference.html)
// in the Amazon Elastic Container Service Developer Guide.
type InferenceAccelerator struct {
	_ struct{} `type:"structure"`

	// The Elastic Inference accelerator device name. The deviceName must also be
	// referenced in a container definition as a ResourceRequirement (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ResourceRequirement.html).
	//
	// DeviceName is a required field
	DeviceName *string `locationName:"deviceName" type:"string" required:"true"`

	// The Elastic Inference accelerator type to use.
	//
	// DeviceType is a required field
	DeviceType *string `locationName:"deviceType" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InferenceAccelerator) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InferenceAccelerator) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *InferenceAccelerator) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "InferenceAccelerator"}
	if s.DeviceName == nil {
		invalidParams.Add(request.NewErrParamRequired("DeviceName"))
	}
	if s.DeviceType == nil {
		invalidParams.Add(request.NewErrParamRequired("DeviceType"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDeviceName sets the DeviceName field's value.
func (s *InferenceAccelerator) SetDeviceName(v string) *InferenceAccelerator {
	s.DeviceName = &v
	return s
}

// SetDeviceType sets the DeviceType field's value.
func (s *InferenceAccelerator) SetDeviceType(v string) *InferenceAccelerator {
	s.DeviceType = &v
	return s
}

// Details on an Elastic Inference accelerator task override. This parameter
// is used to override the Elastic Inference accelerator specified in the task
// definition. For more information, see Working with Amazon Elastic Inference
// on Amazon ECS (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-inference.html)
// in the Amazon Elastic Container Service Developer Guide.
type InferenceAcceleratorOverride struct {
	_ struct{} `type:"structure"`

	// The Elastic Inference accelerator device name to override for the task. This
	// parameter must match a deviceName specified in the task definition.
	DeviceName *string `locationName:"deviceName" type:"string"`

	// The Elastic Inference accelerator type to use.
	DeviceType *string `locationName:"deviceType" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InferenceAcceleratorOverride) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InferenceAcceleratorOverride) GoString() string {
	return s.String()
}

// SetDeviceName sets the DeviceName field's value.
func (s *InferenceAcceleratorOverride) SetDeviceName(v string) *InferenceAcceleratorOverride {
	s.DeviceName = &v
	return s
}

// SetDeviceType sets the DeviceType field's value.
func (s *InferenceAcceleratorOverride) SetDeviceType(v string) *InferenceAcceleratorOverride {
	s.DeviceType = &v
	return s
}

// An object representing the result of a container instance health status check.
type InstanceHealthCheckResult struct {
	_ struct{} `type:"structure"`

	// The Unix timestamp for when the container instance health status last changed.
	LastStatusChange *time.Time `locationName:"lastStatusChange" type:"timestamp"`

	// The Unix timestamp for when the container instance health status was last
	// updated.
	LastUpdated *time.Time `locationName:"lastUpdated" type:"timestamp"`

	// The container instance health status.
	Status *string `locationName:"status" type:"string" enum:"InstanceHealthCheckState"`

	// The type of container instance health status that was verified.
	Type *string `locationName:"type" type:"string" enum:"InstanceHealthCheckType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InstanceHealthCheckResult) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InstanceHealthCheckResult) GoString() string {
	return s.String()
}

// SetLastStatusChange sets the LastStatusChange field's value.
func (s *InstanceHealthCheckResult) SetLastStatusChange(v time.Time) *InstanceHealthCheckResult {
	s.LastStatusChange = &v
	return s
}

// SetLastUpdated sets the LastUpdated field's value.
func (s *InstanceHealthCheckResult) SetLastUpdated(v time.Time) *InstanceHealthCheckResult {
	s.LastUpdated = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *InstanceHealthCheckResult) SetStatus(v string) *InstanceHealthCheckResult {
	s.Status = &v
	return s
}

// SetType sets the Type field's value.
func (s *InstanceHealthCheckResult) SetType(v string) *InstanceHealthCheckResult {
	s.Type = &v
	return s
}

// The specified parameter isn't valid. Review the available parameters for
// the API request.
type InvalidParameterException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InvalidParameterException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InvalidParameterException) GoString() string {
	return s.String()
}

func newErrorInvalidParameterException(v protocol.ResponseMetadata) error {
	return &InvalidParameterException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *InvalidParameterException) Code() string {
	return "InvalidParameterException"
}

// Message returns the exception's message.
func (s *InvalidParameterException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *InvalidParameterException) OrigErr() error {
	return nil
}

func (s *InvalidParameterException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *InvalidParameterException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *InvalidParameterException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The Linux capabilities for the container that are added to or dropped from
// the default configuration provided by Docker. For more information about
// the default capabilities and the non-default available capabilities, see
// Runtime privilege and Linux capabilities (https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities)
// in the Docker run reference. For more detailed information about these Linux
// capabilities, see the capabilities(7) (http://man7.org/linux/man-pages/man7/capabilities.7.html)
// Linux manual page.
type KernelCapabilities struct {
	_ struct{} `type:"structure"`

	// The Linux capabilities for the container that have been added to the default
	// configuration provided by Docker. This parameter maps to CapAdd in the Create
	// a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --cap-add option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// Tasks launched on Fargate only support adding the SYS_PTRACE kernel capability.
	//
	// Valid values: "ALL" | "AUDIT_CONTROL" | "AUDIT_WRITE" | "BLOCK_SUSPEND" |
	// "CHOWN" | "DAC_OVERRIDE" | "DAC_READ_SEARCH" | "FOWNER" | "FSETID" | "IPC_LOCK"
	// | "IPC_OWNER" | "KILL" | "LEASE" | "LINUX_IMMUTABLE" | "MAC_ADMIN" | "MAC_OVERRIDE"
	// | "MKNOD" | "NET_ADMIN" | "NET_BIND_SERVICE" | "NET_BROADCAST" | "NET_RAW"
	// | "SETFCAP" | "SETGID" | "SETPCAP" | "SETUID" | "SYS_ADMIN" | "SYS_BOOT"
	// | "SYS_CHROOT" | "SYS_MODULE" | "SYS_NICE" | "SYS_PACCT" | "SYS_PTRACE" |
	// "SYS_RAWIO" | "SYS_RESOURCE" | "SYS_TIME" | "SYS_TTY_CONFIG" | "SYSLOG" |
	// "WAKE_ALARM"
	Add []*string `locationName:"add" type:"list"`

	// The Linux capabilities for the container that have been removed from the
	// default configuration provided by Docker. This parameter maps to CapDrop
	// in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --cap-drop option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// Valid values: "ALL" | "AUDIT_CONTROL" | "AUDIT_WRITE" | "BLOCK_SUSPEND" |
	// "CHOWN" | "DAC_OVERRIDE" | "DAC_READ_SEARCH" | "FOWNER" | "FSETID" | "IPC_LOCK"
	// | "IPC_OWNER" | "KILL" | "LEASE" | "LINUX_IMMUTABLE" | "MAC_ADMIN" | "MAC_OVERRIDE"
	// | "MKNOD" | "NET_ADMIN" | "NET_BIND_SERVICE" | "NET_BROADCAST" | "NET_RAW"
	// | "SETFCAP" | "SETGID" | "SETPCAP" | "SETUID" | "SYS_ADMIN" | "SYS_BOOT"
	// | "SYS_CHROOT" | "SYS_MODULE" | "SYS_NICE" | "SYS_PACCT" | "SYS_PTRACE" |
	// "SYS_RAWIO" | "SYS_RESOURCE" | "SYS_TIME" | "SYS_TTY_CONFIG" | "SYSLOG" |
	// "WAKE_ALARM"
	Drop []*string `locationName:"drop" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s KernelCapabilities) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s KernelCapabilities) GoString() string {
	return s.String()
}

// SetAdd sets the Add field's value.
func (s *KernelCapabilities) SetAdd(v []*string) *KernelCapabilities {
	s.Add = v
	return s
}

// SetDrop sets the Drop field's value.
func (s *KernelCapabilities) SetDrop(v []*string) *KernelCapabilities {
	s.Drop = v
	return s
}

// A key-value pair object.
type KeyValuePair struct {
	_ struct{} `type:"structure"`

	// The name of the key-value pair. For environment variables, this is the name
	// of the environment variable.
	Name *string `locationName:"name" type:"string"`

	// The value of the key-value pair. For environment variables, this is the value
	// of the environment variable.
	Value *string `locationName:"value" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s KeyValuePair) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s KeyValuePair) GoString() string {
	return s.String()
}

// SetName sets the Name field's value.
func (s *KeyValuePair) SetName(v string) *KeyValuePair {
	s.Name = &v
	return s
}

// SetValue sets the Value field's value.
func (s *KeyValuePair) SetValue(v string) *KeyValuePair {
	s.Value = &v
	return s
}

// The limit for the resource was exceeded.
type LimitExceededException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LimitExceededException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LimitExceededException) GoString() string {
	return s.String()
}

func newErrorLimitExceededException(v protocol.ResponseMetadata) error {
	return &LimitExceededException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *LimitExceededException) Code() string {
	return "LimitExceededException"
}

// Message returns the exception's message.
func (s *LimitExceededException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *LimitExceededException) OrigErr() error {
	return nil
}

func (s *LimitExceededException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *LimitExceededException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *LimitExceededException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The Linux-specific options that are applied to the container, such as Linux
// KernelCapabilities (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_KernelCapabilities.html).
type LinuxParameters struct {
	_ struct{} `type:"structure"`

	// The Linux capabilities for the container that are added to or dropped from
	// the default configuration provided by Docker.
	//
	// For tasks that use the Fargate launch type, capabilities is supported for
	// all platform versions but the add parameter is only supported if using platform
	// version 1.4.0 or later.
	Capabilities *KernelCapabilities `locationName:"capabilities" type:"structure"`

	// Any host devices to expose to the container. This parameter maps to Devices
	// in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --device option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// If you're using tasks that use the Fargate launch type, the devices parameter
	// isn't supported.
	Devices []*Device `locationName:"devices" type:"list"`

	// Run an init process inside the container that forwards signals and reaps
	// processes. This parameter maps to the --init option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	// This parameter requires version 1.25 of the Docker Remote API or greater
	// on your container instance. To check the Docker Remote API version on your
	// container instance, log in to your container instance and run the following
	// command: sudo docker version --format '{{.Server.APIVersion}}'
	InitProcessEnabled *bool `locationName:"initProcessEnabled" type:"boolean"`

	// The total amount of swap memory (in MiB) a container can use. This parameter
	// will be translated to the --memory-swap option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration)
	// where the value would be the sum of the container memory plus the maxSwap
	// value.
	//
	// If a maxSwap value of 0 is specified, the container will not use swap. Accepted
	// values are 0 or any positive integer. If the maxSwap parameter is omitted,
	// the container will use the swap configuration for the container instance
	// it is running on. A maxSwap value must be set for the swappiness parameter
	// to be used.
	//
	// If you're using tasks that use the Fargate launch type, the maxSwap parameter
	// isn't supported.
	//
	// If you're using tasks on Amazon Linux 2023 the swappiness parameter isn't
	// supported.
	MaxSwap *int64 `locationName:"maxSwap" type:"integer"`

	// The value for the size (in MiB) of the /dev/shm volume. This parameter maps
	// to the --shm-size option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// If you are using tasks that use the Fargate launch type, the sharedMemorySize
	// parameter is not supported.
	SharedMemorySize *int64 `locationName:"sharedMemorySize" type:"integer"`

	// This allows you to tune a container's memory swappiness behavior. A swappiness
	// value of 0 will cause swapping to not happen unless absolutely necessary.
	// A swappiness value of 100 will cause pages to be swapped very aggressively.
	// Accepted values are whole numbers between 0 and 100. If the swappiness parameter
	// is not specified, a default value of 60 is used. If a value is not specified
	// for maxSwap then this parameter is ignored. This parameter maps to the --memory-swappiness
	// option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// If you're using tasks that use the Fargate launch type, the swappiness parameter
	// isn't supported.
	//
	// If you're using tasks on Amazon Linux 2023 the swappiness parameter isn't
	// supported.
	Swappiness *int64 `locationName:"swappiness" type:"integer"`

	// The container path, mount options, and size (in MiB) of the tmpfs mount.
	// This parameter maps to the --tmpfs option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
	//
	// If you're using tasks that use the Fargate launch type, the tmpfs parameter
	// isn't supported.
	Tmpfs []*Tmpfs `locationName:"tmpfs" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LinuxParameters) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LinuxParameters) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *LinuxParameters) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "LinuxParameters"}
	if s.Devices != nil {
		for i, v := range s.Devices {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Devices", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.Tmpfs != nil {
		for i, v := range s.Tmpfs {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tmpfs", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCapabilities sets the Capabilities field's value.
func (s *LinuxParameters) SetCapabilities(v *KernelCapabilities) *LinuxParameters {
	s.Capabilities = v
	return s
}

// SetDevices sets the Devices field's value.
func (s *LinuxParameters) SetDevices(v []*Device) *LinuxParameters {
	s.Devices = v
	return s
}

// SetInitProcessEnabled sets the InitProcessEnabled field's value.
func (s *LinuxParameters) SetInitProcessEnabled(v bool) *LinuxParameters {
	s.InitProcessEnabled = &v
	return s
}

// SetMaxSwap sets the MaxSwap field's value.
func (s *LinuxParameters) SetMaxSwap(v int64) *LinuxParameters {
	s.MaxSwap = &v
	return s
}

// SetSharedMemorySize sets the SharedMemorySize field's value.
func (s *LinuxParameters) SetSharedMemorySize(v int64) *LinuxParameters {
	s.SharedMemorySize = &v
	return s
}

// SetSwappiness sets the Swappiness field's value.
func (s *LinuxParameters) SetSwappiness(v int64) *LinuxParameters {
	s.Swappiness = &v
	return s
}

// SetTmpfs sets the Tmpfs field's value.
func (s *LinuxParameters) SetTmpfs(v []*Tmpfs) *LinuxParameters {
	s.Tmpfs = v
	return s
}

type ListAccountSettingsInput struct {
	_ struct{} `type:"structure"`

	// Determines whether to return the effective settings. If true, the account
	// settings for the root user or the default setting for the principalArn are
	// returned. If false, the account settings for the principalArn are returned
	// if they're set. Otherwise, no account settings are returned.
	EffectiveSettings *bool `locationName:"effectiveSettings" type:"boolean"`

	// The maximum number of account setting results returned by ListAccountSettings
	// in paginated output. When this parameter is used, ListAccountSettings only
	// returns maxResults results in a single page along with a nextToken response
	// element. The remaining results of the initial request can be seen by sending
	// another ListAccountSettings request with the returned nextToken value. This
	// value can be between 1 and 10. If this parameter isn't used, then ListAccountSettings
	// returns up to 10 results and a nextToken value if applicable.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// The name of the account setting you want to list the settings for.
	Name *string `locationName:"name" type:"string" enum:"SettingName"`

	// The nextToken value returned from a ListAccountSettings request indicating
	// that more results are available to fulfill the request and further calls
	// will be needed. If maxResults was provided, it's possible the number of results
	// to be fewer than maxResults.
	//
	// This token should be treated as an opaque identifier that is only used to
	// retrieve the next items in a list and not for other programmatic purposes.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The ARN of the principal, which can be a user, role, or the root user. If
	// this field is omitted, the account settings are listed only for the authenticated
	// user.
	//
	// Federated users assume the account setting of the root user and can't have
	// explicit account settings set for them.
	PrincipalArn *string `locationName:"principalArn" type:"string"`

	// The value of the account settings to filter results with. You must also specify
	// an account setting name to use this parameter.
	Value *string `locationName:"value" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAccountSettingsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAccountSettingsInput) GoString() string {
	return s.String()
}

// SetEffectiveSettings sets the EffectiveSettings field's value.
func (s *ListAccountSettingsInput) SetEffectiveSettings(v bool) *ListAccountSettingsInput {
	s.EffectiveSettings = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListAccountSettingsInput) SetMaxResults(v int64) *ListAccountSettingsInput {
	s.MaxResults = &v
	return s
}

// SetName sets the Name field's value.
func (s *ListAccountSettingsInput) SetName(v string) *ListAccountSettingsInput {
	s.Name = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListAccountSettingsInput) SetNextToken(v string) *ListAccountSettingsInput {
	s.NextToken = &v
	return s
}

// SetPrincipalArn sets the PrincipalArn field's value.
func (s *ListAccountSettingsInput) SetPrincipalArn(v string) *ListAccountSettingsInput {
	s.PrincipalArn = &v
	return s
}

// SetValue sets the Value field's value.
func (s *ListAccountSettingsInput) SetValue(v string) *ListAccountSettingsInput {
	s.Value = &v
	return s
}

type ListAccountSettingsOutput struct {
	_ struct{} `type:"structure"`

	// The nextToken value to include in a future ListAccountSettings request. When
	// the results of a ListAccountSettings request exceed maxResults, this value
	// can be used to retrieve the next page of results. This value is null when
	// there are no more results to return.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The account settings for the resource.
	Settings []*Setting `locationName:"settings" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAccountSettingsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAccountSettingsOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListAccountSettingsOutput) SetNextToken(v string) *ListAccountSettingsOutput {
	s.NextToken = &v
	return s
}

// SetSettings sets the Settings field's value.
func (s *ListAccountSettingsOutput) SetSettings(v []*Setting) *ListAccountSettingsOutput {
	s.Settings = v
	return s
}

type ListAttributesInput struct {
	_ struct{} `type:"structure"`

	// The name of the attribute to filter the results with.
	AttributeName *string `locationName:"attributeName" type:"string"`

	// The value of the attribute to filter results with. You must also specify
	// an attribute name to use this parameter.
	AttributeValue *string `locationName:"attributeValue" type:"string"`

	// The short name or full Amazon Resource Name (ARN) of the cluster to list
	// attributes. If you do not specify a cluster, the default cluster is assumed.
	Cluster *string `locationName:"cluster" type:"string"`

	// The maximum number of cluster results that ListAttributes returned in paginated
	// output. When this parameter is used, ListAttributes only returns maxResults
	// results in a single page along with a nextToken response element. The remaining
	// results of the initial request can be seen by sending another ListAttributes
	// request with the returned nextToken value. This value can be between 1 and
	// 100. If this parameter isn't used, then ListAttributes returns up to 100
	// results and a nextToken value if applicable.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// The nextToken value returned from a ListAttributes request indicating that
	// more results are available to fulfill the request and further calls are needed.
	// If maxResults was provided, it's possible the number of results to be fewer
	// than maxResults.
	//
	// This token should be treated as an opaque identifier that is only used to
	// retrieve the next items in a list and not for other programmatic purposes.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The type of the target to list attributes with.
	//
	// TargetType is a required field
	TargetType *string `locationName:"targetType" type:"string" required:"true" enum:"TargetType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAttributesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAttributesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListAttributesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListAttributesInput"}
	if s.TargetType == nil {
		invalidParams.Add(request.NewErrParamRequired("TargetType"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAttributeName sets the AttributeName field's value.
func (s *ListAttributesInput) SetAttributeName(v string) *ListAttributesInput {
	s.AttributeName = &v
	return s
}

// SetAttributeValue sets the AttributeValue field's value.
func (s *ListAttributesInput) SetAttributeValue(v string) *ListAttributesInput {
	s.AttributeValue = &v
	return s
}

// SetCluster sets the Cluster field's value.
func (s *ListAttributesInput) SetCluster(v string) *ListAttributesInput {
	s.Cluster = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListAttributesInput) SetMaxResults(v int64) *ListAttributesInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListAttributesInput) SetNextToken(v string) *ListAttributesInput {
	s.NextToken = &v
	return s
}

// SetTargetType sets the TargetType field's value.
func (s *ListAttributesInput) SetTargetType(v string) *ListAttributesInput {
	s.TargetType = &v
	return s
}

type ListAttributesOutput struct {
	_ struct{} `type:"structure"`

	// A list of attribute objects that meet the criteria of the request.
	Attributes []*Attribute `locationName:"attributes" type:"list"`

	// The nextToken value to include in a future ListAttributes request. When the
	// results of a ListAttributes request exceed maxResults, this value can be
	// used to retrieve the next page of results. This value is null when there
	// are no more results to return.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAttributesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAttributesOutput) GoString() string {
	return s.String()
}

// SetAttributes sets the Attributes field's value.
func (s *ListAttributesOutput) SetAttributes(v []*Attribute) *ListAttributesOutput {
	s.Attributes = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListAttributesOutput) SetNextToken(v string) *ListAttributesOutput {
	s.NextToken = &v
	return s
}

type ListClustersInput struct {
	_ struct{} `type:"structure"`

	// The maximum number of cluster results that ListClusters returned in paginated
	// output. When this parameter is used, ListClusters only returns maxResults
	// results in a single page along with a nextToken response element. The remaining
	// results of the initial request can be seen by sending another ListClusters
	// request with the returned nextToken value. This value can be between 1 and
	// 100. If this parameter isn't used, then ListClusters returns up to 100 results
	// and a nextToken value if applicable.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// The nextToken value returned from a ListClusters request indicating that
	// more results are available to fulfill the request and further calls are needed.
	// If maxResults was provided, it's possible the number of results to be fewer
	// than maxResults.
	//
	// This token should be treated as an opaque identifier that is only used to
	// retrieve the next items in a list and not for other programmatic purposes.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListClustersInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListClustersInput) GoString() string {
	return s.String()
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListClustersInput) SetMaxResults(v int64) *ListClustersInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListClustersInput) SetNextToken(v string) *ListClustersInput {
	s.NextToken = &v
	return s
}

type ListClustersOutput struct {
	_ struct{} `type:"structure"`

	// The list of full Amazon Resource Name (ARN) entries for each cluster that's
	// associated with your account.
	ClusterArns []*string `locationName:"clusterArns" type:"list"`

	// The nextToken value to include in a future ListClusters request. When the
	// results of a ListClusters request exceed maxResults, this value can be used
	// to retrieve the next page of results. This value is null when there are no
	// more results to return.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListClustersOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListClustersOutput) GoString() string {
	return s.String()
}

// SetClusterArns sets the ClusterArns field's value.
func (s *ListClustersOutput) SetClusterArns(v []*string) *ListClustersOutput {
	s.ClusterArns = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListClustersOutput) SetNextToken(v string) *ListClustersOutput {
	s.NextToken = &v
	return s
}

type ListContainerInstancesInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that hosts
	// the container instances to list. If you do not specify a cluster, the default
	// cluster is assumed.
	Cluster *string `locationName:"cluster" type:"string"`

	// You can filter the results of a ListContainerInstances operation with cluster
	// query language statements. For more information, see Cluster Query Language
	// (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-query-language.html)
	// in the Amazon Elastic Container Service Developer Guide.
	Filter *string `locationName:"filter" type:"string"`

	// The maximum number of container instance results that ListContainerInstances
	// returned in paginated output. When this parameter is used, ListContainerInstances
	// only returns maxResults results in a single page along with a nextToken response
	// element. The remaining results of the initial request can be seen by sending
	// another ListContainerInstances request with the returned nextToken value.
	// This value can be between 1 and 100. If this parameter isn't used, then ListContainerInstances
	// returns up to 100 results and a nextToken value if applicable.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// The nextToken value returned from a ListContainerInstances request indicating
	// that more results are available to fulfill the request and further calls
	// are needed. If maxResults was provided, it's possible the number of results
	// to be fewer than maxResults.
	//
	// This token should be treated as an opaque identifier that is only used to
	// retrieve the next items in a list and not for other programmatic purposes.
	NextToken *string `locationName:"nextToken" type:"string"`

	// Filters the container instances by status. For example, if you specify the
	// DRAINING status, the results include only container instances that have been
	// set to DRAINING using UpdateContainerInstancesState. If you don't specify
	// this parameter, the default is to include container instances set to all
	// states other than INACTIVE.
	Status *string `locationName:"status" type:"string" enum:"ContainerInstanceStatus"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListContainerInstancesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListContainerInstancesInput) GoString() string {
	return s.String()
}

// SetCluster sets the Cluster field's value.
func (s *ListContainerInstancesInput) SetCluster(v string) *ListContainerInstancesInput {
	s.Cluster = &v
	return s
}

// SetFilter sets the Filter field's value.
func (s *ListContainerInstancesInput) SetFilter(v string) *ListContainerInstancesInput {
	s.Filter = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListContainerInstancesInput) SetMaxResults(v int64) *ListContainerInstancesInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListContainerInstancesInput) SetNextToken(v string) *ListContainerInstancesInput {
	s.NextToken = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *ListContainerInstancesInput) SetStatus(v string) *ListContainerInstancesInput {
	s.Status = &v
	return s
}

type ListContainerInstancesOutput struct {
	_ struct{} `type:"structure"`

	// The list of container instances with full ARN entries for each container
	// instance associated with the specified cluster.
	ContainerInstanceArns []*string `locationName:"containerInstanceArns" type:"list"`

	// The nextToken value to include in a future ListContainerInstances request.
	// When the results of a ListContainerInstances request exceed maxResults, this
	// value can be used to retrieve the next page of results. This value is null
	// when there are no more results to return.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListContainerInstancesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListContainerInstancesOutput) GoString() string {
	return s.String()
}

// SetContainerInstanceArns sets the ContainerInstanceArns field's value.
func (s *ListContainerInstancesOutput) SetContainerInstanceArns(v []*string) *ListContainerInstancesOutput {
	s.ContainerInstanceArns = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListContainerInstancesOutput) SetNextToken(v string) *ListContainerInstancesOutput {
	s.NextToken = &v
	return s
}

type ListServicesByNamespaceInput struct {
	_ struct{} `type:"structure"`

	// The maximum number of service results that ListServicesByNamespace returns
	// in paginated output. When this parameter is used, ListServicesByNamespace
	// only returns maxResults results in a single page along with a nextToken response
	// element. The remaining results of the initial request can be seen by sending
	// another ListServicesByNamespace request with the returned nextToken value.
	// This value can be between 1 and 100. If this parameter isn't used, then ListServicesByNamespace
	// returns up to 10 results and a nextToken value if applicable.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// The namespace name or full Amazon Resource Name (ARN) of the Cloud Map namespace
	// to list the services in.
	//
	// Tasks that run in a namespace can use short names to connect to services
	// in the namespace. Tasks can connect to services across all of the clusters
	// in the namespace. Tasks connect through a managed proxy container that collects
	// logs and metrics for increased visibility. Only the tasks that Amazon ECS
	// services create are supported with Service Connect. For more information,
	// see Service Connect (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// Namespace is a required field
	Namespace *string `locationName:"namespace" type:"string" required:"true"`

	// The nextToken value that's returned from a ListServicesByNamespace request.
	// It indicates that more results are available to fulfill the request and further
	// calls are needed. If maxResults is returned, it is possible the number of
	// results is less than maxResults.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListServicesByNamespaceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListServicesByNamespaceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListServicesByNamespaceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListServicesByNamespaceInput"}
	if s.Namespace == nil {
		invalidParams.Add(request.NewErrParamRequired("Namespace"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListServicesByNamespaceInput) SetMaxResults(v int64) *ListServicesByNamespaceInput {
	s.MaxResults = &v
	return s
}

// SetNamespace sets the Namespace field's value.
func (s *ListServicesByNamespaceInput) SetNamespace(v string) *ListServicesByNamespaceInput {
	s.Namespace = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListServicesByNamespaceInput) SetNextToken(v string) *ListServicesByNamespaceInput {
	s.NextToken = &v
	return s
}

type ListServicesByNamespaceOutput struct {
	_ struct{} `type:"structure"`

	// The nextToken value to include in a future ListServicesByNamespace request.
	// When the results of a ListServicesByNamespace request exceed maxResults,
	// this value can be used to retrieve the next page of results. When there are
	// no more results to return, this value is null.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The list of full ARN entries for each service that's associated with the
	// specified namespace.
	ServiceArns []*string `locationName:"serviceArns" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListServicesByNamespaceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListServicesByNamespaceOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListServicesByNamespaceOutput) SetNextToken(v string) *ListServicesByNamespaceOutput {
	s.NextToken = &v
	return s
}

// SetServiceArns sets the ServiceArns field's value.
func (s *ListServicesByNamespaceOutput) SetServiceArns(v []*string) *ListServicesByNamespaceOutput {
	s.ServiceArns = v
	return s
}

type ListServicesInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the cluster to use when
	// filtering the ListServices results. If you do not specify a cluster, the
	// default cluster is assumed.
	Cluster *string `locationName:"cluster" type:"string"`

	// The launch type to use when filtering the ListServices results.
	LaunchType *string `locationName:"launchType" type:"string" enum:"LaunchType"`

	// The maximum number of service results that ListServices returned in paginated
	// output. When this parameter is used, ListServices only returns maxResults
	// results in a single page along with a nextToken response element. The remaining
	// results of the initial request can be seen by sending another ListServices
	// request with the returned nextToken value. This value can be between 1 and
	// 100. If this parameter isn't used, then ListServices returns up to 10 results
	// and a nextToken value if applicable.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// The nextToken value returned from a ListServices request indicating that
	// more results are available to fulfill the request and further calls will
	// be needed. If maxResults was provided, it is possible the number of results
	// to be fewer than maxResults.
	//
	// This token should be treated as an opaque identifier that is only used to
	// retrieve the next items in a list and not for other programmatic purposes.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The scheduling strategy to use when filtering the ListServices results.
	SchedulingStrategy *string `locationName:"schedulingStrategy" type:"string" enum:"SchedulingStrategy"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListServicesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListServicesInput) GoString() string {
	return s.String()
}

// SetCluster sets the Cluster field's value.
func (s *ListServicesInput) SetCluster(v string) *ListServicesInput {
	s.Cluster = &v
	return s
}

// SetLaunchType sets the LaunchType field's value.
func (s *ListServicesInput) SetLaunchType(v string) *ListServicesInput {
	s.LaunchType = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListServicesInput) SetMaxResults(v int64) *ListServicesInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListServicesInput) SetNextToken(v string) *ListServicesInput {
	s.NextToken = &v
	return s
}

// SetSchedulingStrategy sets the SchedulingStrategy field's value.
func (s *ListServicesInput) SetSchedulingStrategy(v string) *ListServicesInput {
	s.SchedulingStrategy = &v
	return s
}

type ListServicesOutput struct {
	_ struct{} `type:"structure"`

	// The nextToken value to include in a future ListServices request. When the
	// results of a ListServices request exceed maxResults, this value can be used
	// to retrieve the next page of results. This value is null when there are no
	// more results to return.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The list of full ARN entries for each service that's associated with the
	// specified cluster.
	ServiceArns []*string `locationName:"serviceArns" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListServicesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListServicesOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListServicesOutput) SetNextToken(v string) *ListServicesOutput {
	s.NextToken = &v
	return s
}

// SetServiceArns sets the ServiceArns field's value.
func (s *ListServicesOutput) SetServiceArns(v []*string) *ListServicesOutput {
	s.ServiceArns = v
	return s
}

type ListTagsForResourceInput struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) that identifies the resource to list the tags
	// for. Currently, the supported resources are Amazon ECS tasks, services, task
	// definitions, clusters, and container instances.
	//
	// ResourceArn is a required field
	ResourceArn *string `locationName:"resourceArn" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTagsForResourceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTagsForResourceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListTagsForResourceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListTagsForResourceInput"}
	if s.ResourceArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ResourceArn"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetResourceArn sets the ResourceArn field's value.
func (s *ListTagsForResourceInput) SetResourceArn(v string) *ListTagsForResourceInput {
	s.ResourceArn = &v
	return s
}

type ListTagsForResourceOutput struct {
	_ struct{} `type:"structure"`

	// The tags for the resource.
	Tags []*Tag `locationName:"tags" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTagsForResourceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTagsForResourceOutput) GoString() string {
	return s.String()
}

// SetTags sets the Tags field's value.
func (s *ListTagsForResourceOutput) SetTags(v []*Tag) *ListTagsForResourceOutput {
	s.Tags = v
	return s
}

type ListTaskDefinitionFamiliesInput struct {
	_ struct{} `type:"structure"`

	// The familyPrefix is a string that's used to filter the results of ListTaskDefinitionFamilies.
	// If you specify a familyPrefix, only task definition family names that begin
	// with the familyPrefix string are returned.
	FamilyPrefix *string `locationName:"familyPrefix" type:"string"`

	// The maximum number of task definition family results that ListTaskDefinitionFamilies
	// returned in paginated output. When this parameter is used, ListTaskDefinitions
	// only returns maxResults results in a single page along with a nextToken response
	// element. The remaining results of the initial request can be seen by sending
	// another ListTaskDefinitionFamilies request with the returned nextToken value.
	// This value can be between 1 and 100. If this parameter isn't used, then ListTaskDefinitionFamilies
	// returns up to 100 results and a nextToken value if applicable.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// The nextToken value returned from a ListTaskDefinitionFamilies request indicating
	// that more results are available to fulfill the request and further calls
	// will be needed. If maxResults was provided, it is possible the number of
	// results to be fewer than maxResults.
	//
	// This token should be treated as an opaque identifier that is only used to
	// retrieve the next items in a list and not for other programmatic purposes.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The task definition family status to filter the ListTaskDefinitionFamilies
	// results with. By default, both ACTIVE and INACTIVE task definition families
	// are listed. If this parameter is set to ACTIVE, only task definition families
	// that have an ACTIVE task definition revision are returned. If this parameter
	// is set to INACTIVE, only task definition families that do not have any ACTIVE
	// task definition revisions are returned. If you paginate the resulting output,
	// be sure to keep the status value constant in each subsequent request.
	Status *string `locationName:"status" type:"string" enum:"TaskDefinitionFamilyStatus"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTaskDefinitionFamiliesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTaskDefinitionFamiliesInput) GoString() string {
	return s.String()
}

// SetFamilyPrefix sets the FamilyPrefix field's value.
func (s *ListTaskDefinitionFamiliesInput) SetFamilyPrefix(v string) *ListTaskDefinitionFamiliesInput {
	s.FamilyPrefix = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListTaskDefinitionFamiliesInput) SetMaxResults(v int64) *ListTaskDefinitionFamiliesInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListTaskDefinitionFamiliesInput) SetNextToken(v string) *ListTaskDefinitionFamiliesInput {
	s.NextToken = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *ListTaskDefinitionFamiliesInput) SetStatus(v string) *ListTaskDefinitionFamiliesInput {
	s.Status = &v
	return s
}

type ListTaskDefinitionFamiliesOutput struct {
	_ struct{} `type:"structure"`

	// The list of task definition family names that match the ListTaskDefinitionFamilies
	// request.
	Families []*string `locationName:"families" type:"list"`

	// The nextToken value to include in a future ListTaskDefinitionFamilies request.
	// When the results of a ListTaskDefinitionFamilies request exceed maxResults,
	// this value can be used to retrieve the next page of results. This value is
	// null when there are no more results to return.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTaskDefinitionFamiliesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTaskDefinitionFamiliesOutput) GoString() string {
	return s.String()
}

// SetFamilies sets the Families field's value.
func (s *ListTaskDefinitionFamiliesOutput) SetFamilies(v []*string) *ListTaskDefinitionFamiliesOutput {
	s.Families = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListTaskDefinitionFamiliesOutput) SetNextToken(v string) *ListTaskDefinitionFamiliesOutput {
	s.NextToken = &v
	return s
}

type ListTaskDefinitionsInput struct {
	_ struct{} `type:"structure"`

	// The full family name to filter the ListTaskDefinitions results with. Specifying
	// a familyPrefix limits the listed task definitions to task definition revisions
	// that belong to that family.
	FamilyPrefix *string `locationName:"familyPrefix" type:"string"`

	// The maximum number of task definition results that ListTaskDefinitions returned
	// in paginated output. When this parameter is used, ListTaskDefinitions only
	// returns maxResults results in a single page along with a nextToken response
	// element. The remaining results of the initial request can be seen by sending
	// another ListTaskDefinitions request with the returned nextToken value. This
	// value can be between 1 and 100. If this parameter isn't used, then ListTaskDefinitions
	// returns up to 100 results and a nextToken value if applicable.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// The nextToken value returned from a ListTaskDefinitions request indicating
	// that more results are available to fulfill the request and further calls
	// will be needed. If maxResults was provided, it is possible the number of
	// results to be fewer than maxResults.
	//
	// This token should be treated as an opaque identifier that is only used to
	// retrieve the next items in a list and not for other programmatic purposes.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The order to sort the results in. Valid values are ASC and DESC. By default,
	// (ASC) task definitions are listed lexicographically by family name and in
	// ascending numerical order by revision so that the newest task definitions
	// in a family are listed last. Setting this parameter to DESC reverses the
	// sort order on family name and revision. This is so that the newest task definitions
	// in a family are listed first.
	Sort *string `locationName:"sort" type:"string" enum:"SortOrder"`

	// The task definition status to filter the ListTaskDefinitions results with.
	// By default, only ACTIVE task definitions are listed. By setting this parameter
	// to INACTIVE, you can view task definitions that are INACTIVE as long as an
	// active task or service still references them. If you paginate the resulting
	// output, be sure to keep the status value constant in each subsequent request.
	Status *string `locationName:"status" type:"string" enum:"TaskDefinitionStatus"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTaskDefinitionsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTaskDefinitionsInput) GoString() string {
	return s.String()
}

// SetFamilyPrefix sets the FamilyPrefix field's value.
func (s *ListTaskDefinitionsInput) SetFamilyPrefix(v string) *ListTaskDefinitionsInput {
	s.FamilyPrefix = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListTaskDefinitionsInput) SetMaxResults(v int64) *ListTaskDefinitionsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListTaskDefinitionsInput) SetNextToken(v string) *ListTaskDefinitionsInput {
	s.NextToken = &v
	return s
}

// SetSort sets the Sort field's value.
func (s *ListTaskDefinitionsInput) SetSort(v string) *ListTaskDefinitionsInput {
	s.Sort = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *ListTaskDefinitionsInput) SetStatus(v string) *ListTaskDefinitionsInput {
	s.Status = &v
	return s
}

type ListTaskDefinitionsOutput struct {
	_ struct{} `type:"structure"`

	// The nextToken value to include in a future ListTaskDefinitions request. When
	// the results of a ListTaskDefinitions request exceed maxResults, this value
	// can be used to retrieve the next page of results. This value is null when
	// there are no more results to return.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The list of task definition Amazon Resource Name (ARN) entries for the ListTaskDefinitions
	// request.
	TaskDefinitionArns []*string `locationName:"taskDefinitionArns" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTaskDefinitionsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTaskDefinitionsOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListTaskDefinitionsOutput) SetNextToken(v string) *ListTaskDefinitionsOutput {
	s.NextToken = &v
	return s
}

// SetTaskDefinitionArns sets the TaskDefinitionArns field's value.
func (s *ListTaskDefinitionsOutput) SetTaskDefinitionArns(v []*string) *ListTaskDefinitionsOutput {
	s.TaskDefinitionArns = v
	return s
}

type ListTasksInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the cluster to use when
	// filtering the ListTasks results. If you do not specify a cluster, the default
	// cluster is assumed.
	Cluster *string `locationName:"cluster" type:"string"`

	// The container instance ID or full ARN of the container instance to use when
	// filtering the ListTasks results. Specifying a containerInstance limits the
	// results to tasks that belong to that container instance.
	ContainerInstance *string `locationName:"containerInstance" type:"string"`

	// The task desired status to use when filtering the ListTasks results. Specifying
	// a desiredStatus of STOPPED limits the results to tasks that Amazon ECS has
	// set the desired status to STOPPED. This can be useful for debugging tasks
	// that aren't starting properly or have died or finished. The default status
	// filter is RUNNING, which shows tasks that Amazon ECS has set the desired
	// status to RUNNING.
	//
	// Although you can filter results based on a desired status of PENDING, this
	// doesn't return any results. Amazon ECS never sets the desired status of a
	// task to that value (only a task's lastStatus may have a value of PENDING).
	DesiredStatus *string `locationName:"desiredStatus" type:"string" enum:"DesiredStatus"`

	// The name of the task definition family to use when filtering the ListTasks
	// results. Specifying a family limits the results to tasks that belong to that
	// family.
	Family *string `locationName:"family" type:"string"`

	// The launch type to use when filtering the ListTasks results.
	LaunchType *string `locationName:"launchType" type:"string" enum:"LaunchType"`

	// The maximum number of task results that ListTasks returned in paginated output.
	// When this parameter is used, ListTasks only returns maxResults results in
	// a single page along with a nextToken response element. The remaining results
	// of the initial request can be seen by sending another ListTasks request with
	// the returned nextToken value. This value can be between 1 and 100. If this
	// parameter isn't used, then ListTasks returns up to 100 results and a nextToken
	// value if applicable.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// The nextToken value returned from a ListTasks request indicating that more
	// results are available to fulfill the request and further calls will be needed.
	// If maxResults was provided, it's possible the number of results to be fewer
	// than maxResults.
	//
	// This token should be treated as an opaque identifier that is only used to
	// retrieve the next items in a list and not for other programmatic purposes.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The name of the service to use when filtering the ListTasks results. Specifying
	// a serviceName limits the results to tasks that belong to that service.
	ServiceName *string `locationName:"serviceName" type:"string"`

	// The startedBy value to filter the task results with. Specifying a startedBy
	// value limits the results to tasks that were started with that value.
	//
	// When you specify startedBy as the filter, it must be the only filter that
	// you use.
	StartedBy *string `locationName:"startedBy" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTasksInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTasksInput) GoString() string {
	return s.String()
}

// SetCluster sets the Cluster field's value.
func (s *ListTasksInput) SetCluster(v string) *ListTasksInput {
	s.Cluster = &v
	return s
}

// SetContainerInstance sets the ContainerInstance field's value.
func (s *ListTasksInput) SetContainerInstance(v string) *ListTasksInput {
	s.ContainerInstance = &v
	return s
}

// SetDesiredStatus sets the DesiredStatus field's value.
func (s *ListTasksInput) SetDesiredStatus(v string) *ListTasksInput {
	s.DesiredStatus = &v
	return s
}

// SetFamily sets the Family field's value.
func (s *ListTasksInput) SetFamily(v string) *ListTasksInput {
	s.Family = &v
	return s
}

// SetLaunchType sets the LaunchType field's value.
func (s *ListTasksInput) SetLaunchType(v string) *ListTasksInput {
	s.LaunchType = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListTasksInput) SetMaxResults(v int64) *ListTasksInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListTasksInput) SetNextToken(v string) *ListTasksInput {
	s.NextToken = &v
	return s
}

// SetServiceName sets the ServiceName field's value.
func (s *ListTasksInput) SetServiceName(v string) *ListTasksInput {
	s.ServiceName = &v
	return s
}

// SetStartedBy sets the StartedBy field's value.
func (s *ListTasksInput) SetStartedBy(v string) *ListTasksInput {
	s.StartedBy = &v
	return s
}

type ListTasksOutput struct {
	_ struct{} `type:"structure"`

	// The nextToken value to include in a future ListTasks request. When the results
	// of a ListTasks request exceed maxResults, this value can be used to retrieve
	// the next page of results. This value is null when there are no more results
	// to return.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The list of task ARN entries for the ListTasks request.
	TaskArns []*string `locationName:"taskArns" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTasksOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTasksOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListTasksOutput) SetNextToken(v string) *ListTasksOutput {
	s.NextToken = &v
	return s
}

// SetTaskArns sets the TaskArns field's value.
func (s *ListTasksOutput) SetTaskArns(v []*string) *ListTasksOutput {
	s.TaskArns = v
	return s
}

// The load balancer configuration to use with a service or task set.
//
// When you add, update, or remove a load balancer configuration, Amazon ECS
// starts a new deployment with the updated Elastic Load Balancing configuration.
// This causes tasks to register to and deregister from load balancers.
//
// We recommend that you verify this on a test environment before you update
// the Elastic Load Balancing configuration.
//
// A service-linked role is required for services that use multiple target groups.
// For more information, see Using service-linked roles (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using-service-linked-roles.html)
// in the Amazon Elastic Container Service Developer Guide.
type LoadBalancer struct {
	_ struct{} `type:"structure"`

	// The name of the container (as it appears in a container definition) to associate
	// with the load balancer.
	ContainerName *string `locationName:"containerName" type:"string"`

	// The port on the container to associate with the load balancer. This port
	// must correspond to a containerPort in the task definition the tasks in the
	// service are using. For tasks that use the EC2 launch type, the container
	// instance they're launched on must allow ingress traffic on the hostPort of
	// the port mapping.
	ContainerPort *int64 `locationName:"containerPort" type:"integer"`

	// The name of the load balancer to associate with the Amazon ECS service or
	// task set.
	//
	// If you are using an Application Load Balancer or a Network Load Balancer
	// the load balancer name parameter should be omitted.
	LoadBalancerName *string `locationName:"loadBalancerName" type:"string"`

	// The full Amazon Resource Name (ARN) of the Elastic Load Balancing target
	// group or groups associated with a service or task set.
	//
	// A target group ARN is only specified when using an Application Load Balancer
	// or Network Load Balancer.
	//
	// For services using the ECS deployment controller, you can specify one or
	// multiple target groups. For more information, see Registering multiple target
	// groups with a service (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/register-multiple-targetgroups.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// For services using the CODE_DEPLOY deployment controller, you're required
	// to define two target groups for the load balancer. For more information,
	// see Blue/green deployment with CodeDeploy (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-bluegreen.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// If your service's task definition uses the awsvpc network mode, you must
	// choose ip as the target type, not instance. Do this when creating your target
	// groups because tasks that use the awsvpc network mode are associated with
	// an elastic network interface, not an Amazon EC2 instance. This network mode
	// is required for the Fargate launch type.
	TargetGroupArn *string `locationName:"targetGroupArn" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LoadBalancer) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LoadBalancer) GoString() string {
	return s.String()
}

// SetContainerName sets the ContainerName field's value.
func (s *LoadBalancer) SetContainerName(v string) *LoadBalancer {
	s.ContainerName = &v
	return s
}

// SetContainerPort sets the ContainerPort field's value.
func (s *LoadBalancer) SetContainerPort(v int64) *LoadBalancer {
	s.ContainerPort = &v
	return s
}

// SetLoadBalancerName sets the LoadBalancerName field's value.
func (s *LoadBalancer) SetLoadBalancerName(v string) *LoadBalancer {
	s.LoadBalancerName = &v
	return s
}

// SetTargetGroupArn sets the TargetGroupArn field's value.
func (s *LoadBalancer) SetTargetGroupArn(v string) *LoadBalancer {
	s.TargetGroupArn = &v
	return s
}

// The log configuration for the container. This parameter maps to LogConfig
// in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
// and the --log-driver option to docker run (https://docs.docker.com/engine/reference/commandline/run/).
//
// By default, containers use the same logging driver that the Docker daemon
// uses. However, the container might use a different logging driver than the
// Docker daemon by specifying a log driver configuration in the container definition.
// For more information about the options for different supported log drivers,
// see Configure logging drivers (https://docs.docker.com/engine/admin/logging/overview/)
// in the Docker documentation.
//
// Understand the following when specifying a log configuration for your containers.
//
//   - Amazon ECS currently supports a subset of the logging drivers available
//     to the Docker daemon. Additional log drivers may be available in future
//     releases of the Amazon ECS container agent. For tasks on Fargate, the
//     supported log drivers are awslogs, splunk, and awsfirelens. For tasks
//     hosted on Amazon EC2 instances, the supported log drivers are awslogs,
//     fluentd, gelf, json-file, journald, logentries,syslog, splunk, and awsfirelens.
//
//   - This parameter requires version 1.18 of the Docker Remote API or greater
//     on your container instance.
//
//   - For tasks that are hosted on Amazon EC2 instances, the Amazon ECS container
//     agent must register the available logging drivers with the ECS_AVAILABLE_LOGGING_DRIVERS
//     environment variable before containers placed on that instance can use
//     these log configuration options. For more information, see Amazon ECS
//     container agent configuration (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html)
//     in the Amazon Elastic Container Service Developer Guide.
//
//   - For tasks that are on Fargate, because you don't have access to the
//     underlying infrastructure your tasks are hosted on, any additional software
//     needed must be installed outside of the task. For example, the Fluentd
//     output aggregators or a remote host running Logstash to send Gelf logs
//     to.
type LogConfiguration struct {
	_ struct{} `type:"structure"`

	// The log driver to use for the container.
	//
	// For tasks on Fargate, the supported log drivers are awslogs, splunk, and
	// awsfirelens.
	//
	// For tasks hosted on Amazon EC2 instances, the supported log drivers are awslogs,
	// fluentd, gelf, json-file, journald, logentries,syslog, splunk, and awsfirelens.
	//
	// For more information about using the awslogs log driver, see Using the awslogs
	// log driver (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_awslogs.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// For more information about using the awsfirelens log driver, see Custom log
	// routing (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_firelens.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// If you have a custom driver that isn't listed, you can fork the Amazon ECS
	// container agent project that's available on GitHub (https://github.com/aws/amazon-ecs-agent)
	// and customize it to work with that driver. We encourage you to submit pull
	// requests for changes that you would like to have included. However, we don't
	// currently provide support for running modified copies of this software.
	//
	// LogDriver is a required field
	LogDriver *string `locationName:"logDriver" type:"string" required:"true" enum:"LogDriver"`

	// The configuration options to send to the log driver. This parameter requires
	// version 1.19 of the Docker Remote API or greater on your container instance.
	// To check the Docker Remote API version on your container instance, log in
	// to your container instance and run the following command: sudo docker version
	// --format '{{.Server.APIVersion}}'
	Options map[string]*string `locationName:"options" type:"map"`

	// The secrets to pass to the log configuration. For more information, see Specifying
	// sensitive data (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data.html)
	// in the Amazon Elastic Container Service Developer Guide.
	SecretOptions []*Secret `locationName:"secretOptions" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LogConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LogConfiguration) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *LogConfiguration) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "LogConfiguration"}
	if s.LogDriver == nil {
		invalidParams.Add(request.NewErrParamRequired("LogDriver"))
	}
	if s.SecretOptions != nil {
		for i, v := range s.SecretOptions {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "SecretOptions", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLogDriver sets the LogDriver field's value.
func (s *LogConfiguration) SetLogDriver(v string) *LogConfiguration {
	s.LogDriver = &v
	return s
}

// SetOptions sets the Options field's value.
func (s *LogConfiguration) SetOptions(v map[string]*string) *LogConfiguration {
	s.Options = v
	return s
}

// SetSecretOptions sets the SecretOptions field's value.
func (s *LogConfiguration) SetSecretOptions(v []*Secret) *LogConfiguration {
	s.SecretOptions = v
	return s
}

// Details about the managed agent status for the container.
type ManagedAgent struct {
	_ struct{} `type:"structure"`

	// The Unix timestamp for the time when the managed agent was last started.
	LastStartedAt *time.Time `locationName:"lastStartedAt" type:"timestamp"`

	// The last known status of the managed agent.
	LastStatus *string `locationName:"lastStatus" type:"string"`

	// The name of the managed agent. When the execute command feature is turned
	// on, the managed agent name is ExecuteCommandAgent.
	Name *string `locationName:"name" type:"string" enum:"ManagedAgentName"`

	// The reason for why the managed agent is in the state it is in.
	Reason *string `locationName:"reason" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ManagedAgent) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ManagedAgent) GoString() string {
	return s.String()
}

// SetLastStartedAt sets the LastStartedAt field's value.
func (s *ManagedAgent) SetLastStartedAt(v time.Time) *ManagedAgent {
	s.LastStartedAt = &v
	return s
}

// SetLastStatus sets the LastStatus field's value.
func (s *ManagedAgent) SetLastStatus(v string) *ManagedAgent {
	s.LastStatus = &v
	return s
}

// SetName sets the Name field's value.
func (s *ManagedAgent) SetName(v string) *ManagedAgent {
	s.Name = &v
	return s
}

// SetReason sets the Reason field's value.
func (s *ManagedAgent) SetReason(v string) *ManagedAgent {
	s.Reason = &v
	return s
}

// An object representing a change in state for a managed agent.
type ManagedAgentStateChange struct {
	_ struct{} `type:"structure"`

	// The name of the container that's associated with the managed agent.
	//
	// ContainerName is a required field
	ContainerName *string `locationName:"containerName" type:"string" required:"true"`

	// The name of the managed agent.
	//
	// ManagedAgentName is a required field
	ManagedAgentName *string `locationName:"managedAgentName" type:"string" required:"true" enum:"ManagedAgentName"`

	// The reason for the status of the managed agent.
	Reason *string `locationName:"reason" type:"string"`

	// The status of the managed agent.
	//
	// Status is a required field
	Status *string `locationName:"status" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ManagedAgentStateChange) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ManagedAgentStateChange) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ManagedAgentStateChange) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ManagedAgentStateChange"}
	if s.ContainerName == nil {
		invalidParams.Add(request.NewErrParamRequired("ContainerName"))
	}
	if s.ManagedAgentName == nil {
		invalidParams.Add(request.NewErrParamRequired("ManagedAgentName"))
	}
	if s.Status == nil {
		invalidParams.Add(request.NewErrParamRequired("Status"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetContainerName sets the ContainerName field's value.
func (s *ManagedAgentStateChange) SetContainerName(v string) *ManagedAgentStateChange {
	s.ContainerName = &v
	return s
}

// SetManagedAgentName sets the ManagedAgentName field's value.
func (s *ManagedAgentStateChange) SetManagedAgentName(v string) *ManagedAgentStateChange {
	s.ManagedAgentName = &v
	return s
}

// SetReason sets the Reason field's value.
func (s *ManagedAgentStateChange) SetReason(v string) *ManagedAgentStateChange {
	s.Reason = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *ManagedAgentStateChange) SetStatus(v string) *ManagedAgentStateChange {
	s.Status = &v
	return s
}

// The managed scaling settings for the Auto Scaling group capacity provider.
//
// When managed scaling is turned on, Amazon ECS manages the scale-in and scale-out
// actions of the Auto Scaling group. Amazon ECS manages a target tracking scaling
// policy using an Amazon ECS managed CloudWatch metric with the specified targetCapacity
// value as the target value for the metric. For more information, see Using
// managed scaling (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/asg-capacity-providers.html#asg-capacity-providers-managed-scaling)
// in the Amazon Elastic Container Service Developer Guide.
//
// If managed scaling is off, the user must manage the scaling of the Auto Scaling
// group.
type ManagedScaling struct {
	_ struct{} `type:"structure"`

	// The period of time, in seconds, after a newly launched Amazon EC2 instance
	// can contribute to CloudWatch metrics for Auto Scaling group. If this parameter
	// is omitted, the default value of 300 seconds is used.
	InstanceWarmupPeriod *int64 `locationName:"instanceWarmupPeriod" type:"integer"`

	// The maximum number of Amazon EC2 instances that Amazon ECS will scale out
	// at one time. The scale in process is not affected by this parameter. If this
	// parameter is omitted, the default value of 10000 is used.
	MaximumScalingStepSize *int64 `locationName:"maximumScalingStepSize" min:"1" type:"integer"`

	// The minimum number of Amazon EC2 instances that Amazon ECS will scale out
	// at one time. The scale in process is not affected by this parameter If this
	// parameter is omitted, the default value of 1 is used.
	//
	// When additional capacity is required, Amazon ECS will scale up the minimum
	// scaling step size even if the actual demand is less than the minimum scaling
	// step size.
	//
	// If you use a capacity provider with an Auto Scaling group configured with
	// more than one Amazon EC2 instance type or Availability Zone, Amazon ECS will
	// scale up by the exact minimum scaling step size value and will ignore both
	// the maximum scaling step size as well as the capacity demand.
	MinimumScalingStepSize *int64 `locationName:"minimumScalingStepSize" min:"1" type:"integer"`

	// Determines whether to use managed scaling for the capacity provider.
	Status *string `locationName:"status" type:"string" enum:"ManagedScalingStatus"`

	// The target capacity utilization as a percentage for the capacity provider.
	// The specified value must be greater than 0 and less than or equal to 100.
	// For example, if you want the capacity provider to maintain 10% spare capacity,
	// then that means the utilization is 90%, so use a targetCapacity of 90. The
	// default value of 100 percent results in the Amazon EC2 instances in your
	// Auto Scaling group being completely used.
	TargetCapacity *int64 `locationName:"targetCapacity" min:"1" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ManagedScaling) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ManagedScaling) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ManagedScaling) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ManagedScaling"}
	if s.MaximumScalingStepSize != nil && *s.MaximumScalingStepSize < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaximumScalingStepSize", 1))
	}
	if s.MinimumScalingStepSize != nil && *s.MinimumScalingStepSize < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MinimumScalingStepSize", 1))
	}
	if s.TargetCapacity != nil && *s.TargetCapacity < 1 {
		invalidParams.Add(request.NewErrParamMinValue("TargetCapacity", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetInstanceWarmupPeriod sets the InstanceWarmupPeriod field's value.
func (s *ManagedScaling) SetInstanceWarmupPeriod(v int64) *ManagedScaling {
	s.InstanceWarmupPeriod = &v
	return s
}

// SetMaximumScalingStepSize sets the MaximumScalingStepSize field's value.
func (s *ManagedScaling) SetMaximumScalingStepSize(v int64) *ManagedScaling {
	s.MaximumScalingStepSize = &v
	return s
}

// SetMinimumScalingStepSize sets the MinimumScalingStepSize field's value.
func (s *ManagedScaling) SetMinimumScalingStepSize(v int64) *ManagedScaling {
	s.MinimumScalingStepSize = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *ManagedScaling) SetStatus(v string) *ManagedScaling {
	s.Status = &v
	return s
}

// SetTargetCapacity sets the TargetCapacity field's value.
func (s *ManagedScaling) SetTargetCapacity(v int64) *ManagedScaling {
	s.TargetCapacity = &v
	return s
}

// Amazon ECS can't determine the current version of the Amazon ECS container
// agent on the container instance and doesn't have enough information to proceed
// with an update. This could be because the agent running on the container
// instance is a previous or custom version that doesn't use our version information.
type MissingVersionException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MissingVersionException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MissingVersionException) GoString() string {
	return s.String()
}

func newErrorMissingVersionException(v protocol.ResponseMetadata) error {
	return &MissingVersionException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *MissingVersionException) Code() string {
	return "MissingVersionException"
}

// Message returns the exception's message.
func (s *MissingVersionException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *MissingVersionException) OrigErr() error {
	return nil
}

func (s *MissingVersionException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *MissingVersionException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *MissingVersionException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The details for a volume mount point that's used in a container definition.
type MountPoint struct {
	_ struct{} `type:"structure"`

	// The path on the container to mount the host volume at.
	ContainerPath *string `locationName:"containerPath" type:"string"`

	// If this value is true, the container has read-only access to the volume.
	// If this value is false, then the container can write to the volume. The default
	// value is false.
	ReadOnly *bool `locationName:"readOnly" type:"boolean"`

	// The name of the volume to mount. Must be a volume name referenced in the
	// name parameter of task definition volume.
	SourceVolume *string `locationName:"sourceVolume" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MountPoint) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MountPoint) GoString() string {
	return s.String()
}

// SetContainerPath sets the ContainerPath field's value.
func (s *MountPoint) SetContainerPath(v string) *MountPoint {
	s.ContainerPath = &v
	return s
}

// SetReadOnly sets the ReadOnly field's value.
func (s *MountPoint) SetReadOnly(v bool) *MountPoint {
	s.ReadOnly = &v
	return s
}

// SetSourceVolume sets the SourceVolume field's value.
func (s *MountPoint) SetSourceVolume(v string) *MountPoint {
	s.SourceVolume = &v
	return s
}

// The specified namespace wasn't found.
type NamespaceNotFoundException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s NamespaceNotFoundException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s NamespaceNotFoundException) GoString() string {
	return s.String()
}

func newErrorNamespaceNotFoundException(v protocol.ResponseMetadata) error {
	return &NamespaceNotFoundException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *NamespaceNotFoundException) Code() string {
	return "NamespaceNotFoundException"
}

// Message returns the exception's message.
func (s *NamespaceNotFoundException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *NamespaceNotFoundException) OrigErr() error {
	return nil
}

func (s *NamespaceNotFoundException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *NamespaceNotFoundException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *NamespaceNotFoundException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Details on the network bindings between a container and its host container
// instance. After a task reaches the RUNNING status, manual and automatic host
// and container port assignments are visible in the networkBindings section
// of DescribeTasks API responses.
type NetworkBinding struct {
	_ struct{} `type:"structure"`

	// The IP address that the container is bound to on the container instance.
	BindIP *string `locationName:"bindIP" type:"string"`

	// The port number on the container that's used with the network binding.
	ContainerPort *int64 `locationName:"containerPort" type:"integer"`

	// The port number range on the container that's bound to the dynamically mapped
	// host port range.
	//
	// The following rules apply when you specify a containerPortRange:
	//
	//    * You must use either the bridge network mode or the awsvpc network mode.
	//
	//    * This parameter is available for both the EC2 and Fargate launch types.
	//
	//    * This parameter is available for both the Linux and Windows operating
	//    systems.
	//
	//    * The container instance must have at least version 1.67.0 of the container
	//    agent and at least version 1.67.0-1 of the ecs-init package
	//
	//    * You can specify a maximum of 100 port ranges per container.
	//
	//    * You do not specify a hostPortRange. The value of the hostPortRange is
	//    set as follows: For containers in a task with the awsvpc network mode,
	//    the hostPortRange is set to the same value as the containerPortRange.
	//    This is a static mapping strategy. For containers in a task with the bridge
	//    network mode, the Amazon ECS agent finds open host ports from the default
	//    ephemeral range and passes it to docker to bind them to the container
	//    ports.
	//
	//    * The containerPortRange valid values are between 1 and 65535.
	//
	//    * A port can only be included in one port mapping per container.
	//
	//    * You cannot specify overlapping port ranges.
	//
	//    * The first port in the range must be less than last port in the range.
	//
	//    * Docker recommends that you turn off the docker-proxy in the Docker daemon
	//    config file when you have a large number of ports. For more information,
	//    see Issue #11185 (https://github.com/moby/moby/issues/11185) on the Github
	//    website. For information about how to turn off the docker-proxy in the
	//    Docker daemon config file, see Docker daemon (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/bootstrap_container_instance.html#bootstrap_docker_daemon)
	//    in the Amazon ECS Developer Guide.
	//
	// You can call DescribeTasks (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTasks.html)
	// to view the hostPortRange which are the host ports that are bound to the
	// container ports.
	ContainerPortRange *string `locationName:"containerPortRange" type:"string"`

	// The port number on the host that's used with the network binding.
	HostPort *int64 `locationName:"hostPort" type:"integer"`

	// The port number range on the host that's used with the network binding. This
	// is assigned is assigned by Docker and delivered by the Amazon ECS agent.
	HostPortRange *string `locationName:"hostPortRange" type:"string"`

	// The protocol used for the network binding.
	Protocol *string `locationName:"protocol" type:"string" enum:"TransportProtocol"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s NetworkBinding) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s NetworkBinding) GoString() string {
	return s.String()
}

// SetBindIP sets the BindIP field's value.
func (s *NetworkBinding) SetBindIP(v string) *NetworkBinding {
	s.BindIP = &v
	return s
}

// SetContainerPort sets the ContainerPort field's value.
func (s *NetworkBinding) SetContainerPort(v int64) *NetworkBinding {
	s.ContainerPort = &v
	return s
}

// SetContainerPortRange sets the ContainerPortRange field's value.
func (s *NetworkBinding) SetContainerPortRange(v string) *NetworkBinding {
	s.ContainerPortRange = &v
	return s
}

// SetHostPort sets the HostPort field's value.
func (s *NetworkBinding) SetHostPort(v int64) *NetworkBinding {
	s.HostPort = &v
	return s
}

// SetHostPortRange sets the HostPortRange field's value.
func (s *NetworkBinding) SetHostPortRange(v string) *NetworkBinding {
	s.HostPortRange = &v
	return s
}

// SetProtocol sets the Protocol field's value.
func (s *NetworkBinding) SetProtocol(v string) *NetworkBinding {
	s.Protocol = &v
	return s
}

// The network configuration for a task or service.
type NetworkConfiguration struct {
	_ struct{} `type:"structure"`

	// The VPC subnets and security groups that are associated with a task.
	//
	// All specified subnets and security groups must be from the same VPC.
	AwsvpcConfiguration *AwsVpcConfiguration `locationName:"awsvpcConfiguration" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s NetworkConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s NetworkConfiguration) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *NetworkConfiguration) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "NetworkConfiguration"}
	if s.AwsvpcConfiguration != nil {
		if err := s.AwsvpcConfiguration.Validate(); err != nil {
			invalidParams.AddNested("AwsvpcConfiguration", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAwsvpcConfiguration sets the AwsvpcConfiguration field's value.
func (s *NetworkConfiguration) SetAwsvpcConfiguration(v *AwsVpcConfiguration) *NetworkConfiguration {
	s.AwsvpcConfiguration = v
	return s
}

// An object representing the elastic network interface for tasks that use the
// awsvpc network mode.
type NetworkInterface struct {
	_ struct{} `type:"structure"`

	// The attachment ID for the network interface.
	AttachmentId *string `locationName:"attachmentId" type:"string"`

	// The private IPv6 address for the network interface.
	Ipv6Address *string `locationName:"ipv6Address" type:"string"`

	// The private IPv4 address for the network interface.
	PrivateIpv4Address *string `locationName:"privateIpv4Address" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s NetworkInterface) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s NetworkInterface) GoString() string {
	return s.String()
}

// SetAttachmentId sets the AttachmentId field's value.
func (s *NetworkInterface) SetAttachmentId(v string) *NetworkInterface {
	s.AttachmentId = &v
	return s
}

// SetIpv6Address sets the Ipv6Address field's value.
func (s *NetworkInterface) SetIpv6Address(v string) *NetworkInterface {
	s.Ipv6Address = &v
	return s
}

// SetPrivateIpv4Address sets the PrivateIpv4Address field's value.
func (s *NetworkInterface) SetPrivateIpv4Address(v string) *NetworkInterface {
	s.PrivateIpv4Address = &v
	return s
}

// There's no update available for this Amazon ECS container agent. This might
// be because the agent is already running the latest version or because it's
// so old that there's no update path to the current version.
type NoUpdateAvailableException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s NoUpdateAvailableException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s NoUpdateAvailableException) GoString() string {
	return s.String()
}

func newErrorNoUpdateAvailableException(v protocol.ResponseMetadata) error {
	return &NoUpdateAvailableException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *NoUpdateAvailableException) Code() string {
	return "NoUpdateAvailableException"
}

// Message returns the exception's message.
func (s *NoUpdateAvailableException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *NoUpdateAvailableException) OrigErr() error {
	return nil
}

func (s *NoUpdateAvailableException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *NoUpdateAvailableException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *NoUpdateAvailableException) RequestID() string {
	return s.RespMetadata.RequestID
}

// An object representing a constraint on task placement. For more information,
// see Task placement constraints (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement-constraints.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// If you're using the Fargate launch type, task placement constraints aren't
// supported.
type PlacementConstraint struct {
	_ struct{} `type:"structure"`

	// A cluster query language expression to apply to the constraint. The expression
	// can have a maximum length of 2000 characters. You can't specify an expression
	// if the constraint type is distinctInstance. For more information, see Cluster
	// query language (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-query-language.html)
	// in the Amazon Elastic Container Service Developer Guide.
	Expression *string `locationName:"expression" type:"string"`

	// The type of constraint. Use distinctInstance to ensure that each task in
	// a particular group is running on a different container instance. Use memberOf
	// to restrict the selection to a group of valid candidates.
	Type *string `locationName:"type" type:"string" enum:"PlacementConstraintType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PlacementConstraint) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PlacementConstraint) GoString() string {
	return s.String()
}

// SetExpression sets the Expression field's value.
func (s *PlacementConstraint) SetExpression(v string) *PlacementConstraint {
	s.Expression = &v
	return s
}

// SetType sets the Type field's value.
func (s *PlacementConstraint) SetType(v string) *PlacementConstraint {
	s.Type = &v
	return s
}

// The task placement strategy for a task or service. For more information,
// see Task placement strategies (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement-strategies.html)
// in the Amazon Elastic Container Service Developer Guide.
type PlacementStrategy struct {
	_ struct{} `type:"structure"`

	// The field to apply the placement strategy against. For the spread placement
	// strategy, valid values are instanceId (or host, which has the same effect),
	// or any platform or custom attribute that's applied to a container instance,
	// such as attribute:ecs.availability-zone. For the binpack placement strategy,
	// valid values are cpu and memory. For the random placement strategy, this
	// field is not used.
	Field *string `locationName:"field" type:"string"`

	// The type of placement strategy. The random placement strategy randomly places
	// tasks on available candidates. The spread placement strategy spreads placement
	// across available candidates evenly based on the field parameter. The binpack
	// strategy places tasks on available candidates that have the least available
	// amount of the resource that's specified with the field parameter. For example,
	// if you binpack on memory, a task is placed on the instance with the least
	// amount of remaining memory but still enough to run the task.
	Type *string `locationName:"type" type:"string" enum:"PlacementStrategyType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PlacementStrategy) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PlacementStrategy) GoString() string {
	return s.String()
}

// SetField sets the Field field's value.
func (s *PlacementStrategy) SetField(v string) *PlacementStrategy {
	s.Field = &v
	return s
}

// SetType sets the Type field's value.
func (s *PlacementStrategy) SetType(v string) *PlacementStrategy {
	s.Type = &v
	return s
}

// The devices that are available on the container instance. The only supported
// device type is a GPU.
type PlatformDevice struct {
	_ struct{} `type:"structure"`

	// The ID for the GPUs on the container instance. The available GPU IDs can
	// also be obtained on the container instance in the /var/lib/ecs/gpu/nvidia_gpu_info.json
	// file.
	//
	// Id is a required field
	Id *string `locationName:"id" type:"string" required:"true"`

	// The type of device that's available on the container instance. The only supported
	// value is GPU.
	//
	// Type is a required field
	Type *string `locationName:"type" type:"string" required:"true" enum:"PlatformDeviceType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PlatformDevice) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PlatformDevice) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PlatformDevice) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PlatformDevice"}
	if s.Id == nil {
		invalidParams.Add(request.NewErrParamRequired("Id"))
	}
	if s.Type == nil {
		invalidParams.Add(request.NewErrParamRequired("Type"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetId sets the Id field's value.
func (s *PlatformDevice) SetId(v string) *PlatformDevice {
	s.Id = &v
	return s
}

// SetType sets the Type field's value.
func (s *PlatformDevice) SetType(v string) *PlatformDevice {
	s.Type = &v
	return s
}

// The specified platform version doesn't satisfy the required capabilities
// of the task definition.
type PlatformTaskDefinitionIncompatibilityException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PlatformTaskDefinitionIncompatibilityException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PlatformTaskDefinitionIncompatibilityException) GoString() string {
	return s.String()
}

func newErrorPlatformTaskDefinitionIncompatibilityException(v protocol.ResponseMetadata) error {
	return &PlatformTaskDefinitionIncompatibilityException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *PlatformTaskDefinitionIncompatibilityException) Code() string {
	return "PlatformTaskDefinitionIncompatibilityException"
}

// Message returns the exception's message.
func (s *PlatformTaskDefinitionIncompatibilityException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *PlatformTaskDefinitionIncompatibilityException) OrigErr() error {
	return nil
}

func (s *PlatformTaskDefinitionIncompatibilityException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *PlatformTaskDefinitionIncompatibilityException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *PlatformTaskDefinitionIncompatibilityException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The specified platform version doesn't exist.
type PlatformUnknownException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PlatformUnknownException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PlatformUnknownException) GoString() string {
	return s.String()
}

func newErrorPlatformUnknownException(v protocol.ResponseMetadata) error {
	return &PlatformUnknownException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *PlatformUnknownException) Code() string {
	return "PlatformUnknownException"
}

// Message returns the exception's message.
func (s *PlatformUnknownException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *PlatformUnknownException) OrigErr() error {
	return nil
}

func (s *PlatformUnknownException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *PlatformUnknownException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *PlatformUnknownException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Port mappings allow containers to access ports on the host container instance
// to send or receive traffic. Port mappings are specified as part of the container
// definition.
//
// If you use containers in a task with the awsvpc or host network mode, specify
// the exposed ports using containerPort. The hostPort can be left blank or
// it must be the same value as the containerPort.
//
// Most fields of this parameter (containerPort, hostPort, protocol) maps to
// PortBindings in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
// and the --publish option to docker run (https://docs.docker.com/engine/reference/commandline/run/).
// If the network mode of a task definition is set to host, host ports must
// either be undefined or match the container port in the port mapping.
//
// You can't expose the same container port for multiple protocols. If you attempt
// this, an error is returned.
//
// After a task reaches the RUNNING status, manual and automatic host and container
// port assignments are visible in the networkBindings section of DescribeTasks
// API responses.
type PortMapping struct {
	_ struct{} `type:"structure"`

	// The application protocol that's used for the port mapping. This parameter
	// only applies to Service Connect. We recommend that you set this parameter
	// to be consistent with the protocol that your application uses. If you set
	// this parameter, Amazon ECS adds protocol-specific connection handling to
	// the Service Connect proxy. If you set this parameter, Amazon ECS adds protocol-specific
	// telemetry in the Amazon ECS console and CloudWatch.
	//
	// If you don't set a value for this parameter, then TCP is used. However, Amazon
	// ECS doesn't add protocol-specific telemetry for TCP.
	//
	// appProtocol is immutable in a Service Connect service. Updating this field
	// requires a service deletion and redeployment.
	//
	// Tasks that run in a namespace can use short names to connect to services
	// in the namespace. Tasks can connect to services across all of the clusters
	// in the namespace. Tasks connect through a managed proxy container that collects
	// logs and metrics for increased visibility. Only the tasks that Amazon ECS
	// services create are supported with Service Connect. For more information,
	// see Service Connect (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html)
	// in the Amazon Elastic Container Service Developer Guide.
	AppProtocol *string `locationName:"appProtocol" type:"string" enum:"ApplicationProtocol"`

	// The port number on the container that's bound to the user-specified or automatically
	// assigned host port.
	//
	// If you use containers in a task with the awsvpc or host network mode, specify
	// the exposed ports using containerPort.
	//
	// If you use containers in a task with the bridge network mode and you specify
	// a container port and not a host port, your container automatically receives
	// a host port in the ephemeral port range. For more information, see hostPort.
	// Port mappings that are automatically assigned in this way do not count toward
	// the 100 reserved ports limit of a container instance.
	ContainerPort *int64 `locationName:"containerPort" type:"integer"`

	// The port number range on the container that's bound to the dynamically mapped
	// host port range.
	//
	// The following rules apply when you specify a containerPortRange:
	//
	//    * You must use either the bridge network mode or the awsvpc network mode.
	//
	//    * This parameter is available for both the EC2 and Fargate launch types.
	//
	//    * This parameter is available for both the Linux and Windows operating
	//    systems.
	//
	//    * The container instance must have at least version 1.67.0 of the container
	//    agent and at least version 1.67.0-1 of the ecs-init package
	//
	//    * You can specify a maximum of 100 port ranges per container.
	//
	//    * You do not specify a hostPortRange. The value of the hostPortRange is
	//    set as follows: For containers in a task with the awsvpc network mode,
	//    the hostPortRange is set to the same value as the containerPortRange.
	//    This is a static mapping strategy. For containers in a task with the bridge
	//    network mode, the Amazon ECS agent finds open host ports from the default
	//    ephemeral range and passes it to docker to bind them to the container
	//    ports.
	//
	//    * The containerPortRange valid values are between 1 and 65535.
	//
	//    * A port can only be included in one port mapping per container.
	//
	//    * You cannot specify overlapping port ranges.
	//
	//    * The first port in the range must be less than last port in the range.
	//
	//    * Docker recommends that you turn off the docker-proxy in the Docker daemon
	//    config file when you have a large number of ports. For more information,
	//    see Issue #11185 (https://github.com/moby/moby/issues/11185) on the Github
	//    website. For information about how to turn off the docker-proxy in the
	//    Docker daemon config file, see Docker daemon (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/bootstrap_container_instance.html#bootstrap_docker_daemon)
	//    in the Amazon ECS Developer Guide.
	//
	// You can call DescribeTasks (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTasks.html)
	// to view the hostPortRange which are the host ports that are bound to the
	// container ports.
	ContainerPortRange *string `locationName:"containerPortRange" type:"string"`

	// The port number on the container instance to reserve for your container.
	//
	// If you specify a containerPortRange, leave this field empty and the value
	// of the hostPort is set as follows:
	//
	//    * For containers in a task with the awsvpc network mode, the hostPort
	//    is set to the same value as the containerPort. This is a static mapping
	//    strategy.
	//
	//    * For containers in a task with the bridge network mode, the Amazon ECS
	//    agent finds open ports on the host and automatically binds them to the
	//    container ports. This is a dynamic mapping strategy.
	//
	// If you use containers in a task with the awsvpc or host network mode, the
	// hostPort can either be left blank or set to the same value as the containerPort.
	//
	// If you use containers in a task with the bridge network mode, you can specify
	// a non-reserved host port for your container port mapping, or you can omit
	// the hostPort (or set it to 0) while specifying a containerPort and your container
	// automatically receives a port in the ephemeral port range for your container
	// instance operating system and Docker version.
	//
	// The default ephemeral port range for Docker version 1.6.0 and later is listed
	// on the instance under /proc/sys/net/ipv4/ip_local_port_range. If this kernel
	// parameter is unavailable, the default ephemeral port range from 49153 through
	// 65535 (Linux) or 49152 through 65535 (Windows) is used. Do not attempt to
	// specify a host port in the ephemeral port range as these are reserved for
	// automatic assignment. In general, ports below 32768 are outside of the ephemeral
	// port range.
	//
	// The default reserved ports are 22 for SSH, the Docker ports 2375 and 2376,
	// and the Amazon ECS container agent ports 51678-51680. Any host port that
	// was previously specified in a running task is also reserved while the task
	// is running. That is, after a task stops, the host port is released. The current
	// reserved ports are displayed in the remainingResources of DescribeContainerInstances
	// (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeContainerInstances.html)
	// output. A container instance can have up to 100 reserved ports at a time.
	// This number includes the default reserved ports. Automatically assigned ports
	// aren't included in the 100 reserved ports quota.
	HostPort *int64 `locationName:"hostPort" type:"integer"`

	// The name that's used for the port mapping. This parameter only applies to
	// Service Connect. This parameter is the name that you use in the serviceConnectConfiguration
	// of a service. The name can include up to 64 characters. The characters can
	// include lowercase letters, numbers, underscores (_), and hyphens (-). The
	// name can't start with a hyphen.
	//
	// For more information, see Service Connect (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html)
	// in the Amazon Elastic Container Service Developer Guide.
	Name *string `locationName:"name" type:"string"`

	// The protocol used for the port mapping. Valid values are tcp and udp. The
	// default is tcp. protocol is immutable in a Service Connect service. Updating
	// this field requires a service deletion and redeployment.
	Protocol *string `locationName:"protocol" type:"string" enum:"TransportProtocol"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PortMapping) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PortMapping) GoString() string {
	return s.String()
}

// SetAppProtocol sets the AppProtocol field's value.
func (s *PortMapping) SetAppProtocol(v string) *PortMapping {
	s.AppProtocol = &v
	return s
}

// SetContainerPort sets the ContainerPort field's value.
func (s *PortMapping) SetContainerPort(v int64) *PortMapping {
	s.ContainerPort = &v
	return s
}

// SetContainerPortRange sets the ContainerPortRange field's value.
func (s *PortMapping) SetContainerPortRange(v string) *PortMapping {
	s.ContainerPortRange = &v
	return s
}

// SetHostPort sets the HostPort field's value.
func (s *PortMapping) SetHostPort(v int64) *PortMapping {
	s.HostPort = &v
	return s
}

// SetName sets the Name field's value.
func (s *PortMapping) SetName(v string) *PortMapping {
	s.Name = &v
	return s
}

// SetProtocol sets the Protocol field's value.
func (s *PortMapping) SetProtocol(v string) *PortMapping {
	s.Protocol = &v
	return s
}

// An object representing the protection status details for a task. You can
// set the protection status with the UpdateTaskProtection API and get the status
// of tasks with the GetTaskProtection API.
type ProtectedTask struct {
	_ struct{} `type:"structure"`

	// The epoch time when protection for the task will expire.
	ExpirationDate *time.Time `locationName:"expirationDate" type:"timestamp"`

	// The protection status of the task. If scale-in protection is on for a task,
	// the value is true. Otherwise, it is false.
	ProtectionEnabled *bool `locationName:"protectionEnabled" type:"boolean"`

	// The task ARN.
	TaskArn *string `locationName:"taskArn" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ProtectedTask) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ProtectedTask) GoString() string {
	return s.String()
}

// SetExpirationDate sets the ExpirationDate field's value.
func (s *ProtectedTask) SetExpirationDate(v time.Time) *ProtectedTask {
	s.ExpirationDate = &v
	return s
}

// SetProtectionEnabled sets the ProtectionEnabled field's value.
func (s *ProtectedTask) SetProtectionEnabled(v bool) *ProtectedTask {
	s.ProtectionEnabled = &v
	return s
}

// SetTaskArn sets the TaskArn field's value.
func (s *ProtectedTask) SetTaskArn(v string) *ProtectedTask {
	s.TaskArn = &v
	return s
}

// The configuration details for the App Mesh proxy.
//
// For tasks that use the EC2 launch type, the container instances require at
// least version 1.26.0 of the container agent and at least version 1.26.0-1
// of the ecs-init package to use a proxy configuration. If your container instances
// are launched from the Amazon ECS optimized AMI version 20190301 or later,
// then they contain the required versions of the container agent and ecs-init.
// For more information, see Amazon ECS-optimized Linux AMI (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html)
type ProxyConfiguration struct {
	_ struct{} `type:"structure"`

	// The name of the container that will serve as the App Mesh proxy.
	//
	// ContainerName is a required field
	ContainerName *string `locationName:"containerName" type:"string" required:"true"`

	// The set of network configuration parameters to provide the Container Network
	// Interface (CNI) plugin, specified as key-value pairs.
	//
	//    * IgnoredUID - (Required) The user ID (UID) of the proxy container as
	//    defined by the user parameter in a container definition. This is used
	//    to ensure the proxy ignores its own traffic. If IgnoredGID is specified,
	//    this field can be empty.
	//
	//    * IgnoredGID - (Required) The group ID (GID) of the proxy container as
	//    defined by the user parameter in a container definition. This is used
	//    to ensure the proxy ignores its own traffic. If IgnoredUID is specified,
	//    this field can be empty.
	//
	//    * AppPorts - (Required) The list of ports that the application uses. Network
	//    traffic to these ports is forwarded to the ProxyIngressPort and ProxyEgressPort.
	//
	//    * ProxyIngressPort - (Required) Specifies the port that incoming traffic
	//    to the AppPorts is directed to.
	//
	//    * ProxyEgressPort - (Required) Specifies the port that outgoing traffic
	//    from the AppPorts is directed to.
	//
	//    * EgressIgnoredPorts - (Required) The egress traffic going to the specified
	//    ports is ignored and not redirected to the ProxyEgressPort. It can be
	//    an empty list.
	//
	//    * EgressIgnoredIPs - (Required) The egress traffic going to the specified
	//    IP addresses is ignored and not redirected to the ProxyEgressPort. It
	//    can be an empty list.
	Properties []*KeyValuePair `locationName:"properties" type:"list"`

	// The proxy type. The only supported value is APPMESH.
	Type *string `locationName:"type" type:"string" enum:"ProxyConfigurationType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ProxyConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ProxyConfiguration) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ProxyConfiguration) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ProxyConfiguration"}
	if s.ContainerName == nil {
		invalidParams.Add(request.NewErrParamRequired("ContainerName"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetContainerName sets the ContainerName field's value.
func (s *ProxyConfiguration) SetContainerName(v string) *ProxyConfiguration {
	s.ContainerName = &v
	return s
}

// SetProperties sets the Properties field's value.
func (s *ProxyConfiguration) SetProperties(v []*KeyValuePair) *ProxyConfiguration {
	s.Properties = v
	return s
}

// SetType sets the Type field's value.
func (s *ProxyConfiguration) SetType(v string) *ProxyConfiguration {
	s.Type = &v
	return s
}

type PutAccountSettingDefaultInput struct {
	_ struct{} `type:"structure"`

	// The resource name for which to modify the account setting. If you specify
	// serviceLongArnFormat, the ARN for your Amazon ECS services is affected. If
	// you specify taskLongArnFormat, the ARN and resource ID for your Amazon ECS
	// tasks is affected. If you specify containerInstanceLongArnFormat, the ARN
	// and resource ID for your Amazon ECS container instances is affected. If you
	// specify awsvpcTrunking, the ENI limit for your Amazon ECS container instances
	// is affected. If you specify containerInsights, the default setting for Amazon
	// Web Services CloudWatch Container Insights for your clusters is affected.
	// If you specify tagResourceAuthorization, the opt-in option for tagging resources
	// on creation is affected. For information about the opt-in timeline, see Tagging
	// authorization timeline (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#tag-resources)
	// in the Amazon ECS Developer Guide. If you specify fargateTaskRetirementWaitPeriod,
	// the default wait time to retire a Fargate task due to required maintenance
	// is affected.
	//
	// When you specify fargateFIPSMode for the name and enabled for the value,
	// Fargate uses FIPS-140 compliant cryptographic algorithms on your tasks. For
	// more information about FIPS-140 compliance with Fargate, see Amazon Web Services
	// Fargate Federal Information Processing Standard (FIPS) 140-2 compliance (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-fips-compliance.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// When Amazon Web Services determines that a security or infrastructure update
	// is needed for an Amazon ECS task hosted on Fargate, the tasks need to be
	// stopped and new tasks launched to replace them. Use fargateTaskRetirementWaitPeriod
	// to set the wait time to retire a Fargate task to the default. For information
	// about the Fargate tasks maintenance, see Amazon Web Services Fargate task
	// maintenance (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-maintenance.html)
	// in the Amazon ECS Developer Guide.
	//
	// The guardDutyActivate parameter is read-only in Amazon ECS and indicates
	// whether Amazon ECS Runtime Monitoring is enabled or disabled by your security
	// administrator in your Amazon ECS account. Amazon GuardDuty controls this
	// account setting on your behalf. For more information, see Protecting Amazon
	// ECS workloads with Amazon ECS Runtime Monitoring (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-guard-duty-integration.html).
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true" enum:"SettingName"`

	// The account setting value for the specified principal ARN. Accepted values
	// are enabled, disabled, on, and off.
	//
	// When you specify fargateTaskRetirementWaitPeriod for the name, the following
	// are the valid values:
	//
	//    * 0 - Amazon Web Services sends the notification, and immediately retires
	//    the affected tasks.
	//
	//    * 7 - Amazon Web Services sends the notification, and waits 7 calendar
	//    days to retire the tasks.
	//
	//    * 14 - Amazon Web Services sends the notification, and waits 14 calendar
	//    days to retire the tasks.
	//
	// Value is a required field
	Value *string `locationName:"value" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutAccountSettingDefaultInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutAccountSettingDefaultInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PutAccountSettingDefaultInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PutAccountSettingDefaultInput"}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Value == nil {
		invalidParams.Add(request.NewErrParamRequired("Value"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetName sets the Name field's value.
func (s *PutAccountSettingDefaultInput) SetName(v string) *PutAccountSettingDefaultInput {
	s.Name = &v
	return s
}

// SetValue sets the Value field's value.
func (s *PutAccountSettingDefaultInput) SetValue(v string) *PutAccountSettingDefaultInput {
	s.Value = &v
	return s
}

type PutAccountSettingDefaultOutput struct {
	_ struct{} `type:"structure"`

	// The current setting for a resource.
	Setting *Setting `locationName:"setting" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutAccountSettingDefaultOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutAccountSettingDefaultOutput) GoString() string {
	return s.String()
}

// SetSetting sets the Setting field's value.
func (s *PutAccountSettingDefaultOutput) SetSetting(v *Setting) *PutAccountSettingDefaultOutput {
	s.Setting = v
	return s
}

type PutAccountSettingInput struct {
	_ struct{} `type:"structure"`

	// The Amazon ECS resource name for which to modify the account setting. If
	// you specify serviceLongArnFormat, the ARN for your Amazon ECS services is
	// affected. If you specify taskLongArnFormat, the ARN and resource ID for your
	// Amazon ECS tasks is affected. If you specify containerInstanceLongArnFormat,
	// the ARN and resource ID for your Amazon ECS container instances is affected.
	// If you specify awsvpcTrunking, the elastic network interface (ENI) limit
	// for your Amazon ECS container instances is affected. If you specify containerInsights,
	// the default setting for Amazon Web Services CloudWatch Container Insights
	// for your clusters is affected. If you specify fargateFIPSMode, Fargate FIPS
	// 140 compliance is affected. If you specify tagResourceAuthorization, the
	// opt-in option for tagging resources on creation is affected. For information
	// about the opt-in timeline, see Tagging authorization timeline (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#tag-resources)
	// in the Amazon ECS Developer Guide. If you specify fargateTaskRetirementWaitPeriod,
	// the wait time to retire a Fargate task is affected.
	//
	// The guardDutyActivate parameter is read-only in Amazon ECS and indicates
	// whether Amazon ECS Runtime Monitoring is enabled or disabled by your security
	// administrator in your Amazon ECS account. Amazon GuardDuty controls this
	// account setting on your behalf. For more information, see Protecting Amazon
	// ECS workloads with Amazon ECS Runtime Monitoring (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-guard-duty-integration.html).
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true" enum:"SettingName"`

	// The ARN of the principal, which can be a user, role, or the root user. If
	// you specify the root user, it modifies the account setting for all users,
	// roles, and the root user of the account unless a user or role explicitly
	// overrides these settings. If this field is omitted, the setting is changed
	// only for the authenticated user.
	//
	// You must use the root user when you set the Fargate wait time (fargateTaskRetirementWaitPeriod).
	//
	// Federated users assume the account setting of the root user and can't have
	// explicit account settings set for them.
	PrincipalArn *string `locationName:"principalArn" type:"string"`

	// The account setting value for the specified principal ARN. Accepted values
	// are enabled, disabled, on, and off.
	//
	// When you specify fargateTaskRetirementWaitPeriod for the name, the following
	// are the valid values:
	//
	//    * 0 - Amazon Web Services sends the notification, and immediately retires
	//    the affected tasks.
	//
	//    * 7 - Amazon Web Services sends the notification, and waits 7 calendar
	//    days to retire the tasks.
	//
	//    * 14 - Amazon Web Services sends the notification, and waits 14 calendar
	//    days to retire the tasks.
	//
	// Value is a required field
	Value *string `locationName:"value" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutAccountSettingInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutAccountSettingInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PutAccountSettingInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PutAccountSettingInput"}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Value == nil {
		invalidParams.Add(request.NewErrParamRequired("Value"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetName sets the Name field's value.
func (s *PutAccountSettingInput) SetName(v string) *PutAccountSettingInput {
	s.Name = &v
	return s
}

// SetPrincipalArn sets the PrincipalArn field's value.
func (s *PutAccountSettingInput) SetPrincipalArn(v string) *PutAccountSettingInput {
	s.PrincipalArn = &v
	return s
}

// SetValue sets the Value field's value.
func (s *PutAccountSettingInput) SetValue(v string) *PutAccountSettingInput {
	s.Value = &v
	return s
}

type PutAccountSettingOutput struct {
	_ struct{} `type:"structure"`

	// The current account setting for a resource.
	Setting *Setting `locationName:"setting" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutAccountSettingOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutAccountSettingOutput) GoString() string {
	return s.String()
}

// SetSetting sets the Setting field's value.
func (s *PutAccountSettingOutput) SetSetting(v *Setting) *PutAccountSettingOutput {
	s.Setting = v
	return s
}

type PutAttributesInput struct {
	_ struct{} `type:"structure"`

	// The attributes to apply to your resource. You can specify up to 10 custom
	// attributes for each resource. You can specify up to 10 attributes in a single
	// call.
	//
	// Attributes is a required field
	Attributes []*Attribute `locationName:"attributes" type:"list" required:"true"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that contains
	// the resource to apply attributes. If you do not specify a cluster, the default
	// cluster is assumed.
	Cluster *string `locationName:"cluster" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutAttributesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutAttributesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PutAttributesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PutAttributesInput"}
	if s.Attributes == nil {
		invalidParams.Add(request.NewErrParamRequired("Attributes"))
	}
	if s.Attributes != nil {
		for i, v := range s.Attributes {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Attributes", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAttributes sets the Attributes field's value.
func (s *PutAttributesInput) SetAttributes(v []*Attribute) *PutAttributesInput {
	s.Attributes = v
	return s
}

// SetCluster sets the Cluster field's value.
func (s *PutAttributesInput) SetCluster(v string) *PutAttributesInput {
	s.Cluster = &v
	return s
}

type PutAttributesOutput struct {
	_ struct{} `type:"structure"`

	// The attributes applied to your resource.
	Attributes []*Attribute `locationName:"attributes" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutAttributesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutAttributesOutput) GoString() string {
	return s.String()
}

// SetAttributes sets the Attributes field's value.
func (s *PutAttributesOutput) SetAttributes(v []*Attribute) *PutAttributesOutput {
	s.Attributes = v
	return s
}

type PutClusterCapacityProvidersInput struct {
	_ struct{} `type:"structure"`

	// The name of one or more capacity providers to associate with the cluster.
	//
	// If specifying a capacity provider that uses an Auto Scaling group, the capacity
	// provider must already be created. New capacity providers can be created with
	// the CreateCapacityProvider API operation.
	//
	// To use a Fargate capacity provider, specify either the FARGATE or FARGATE_SPOT
	// capacity providers. The Fargate capacity providers are available to all accounts
	// and only need to be associated with a cluster to be used.
	//
	// CapacityProviders is a required field
	CapacityProviders []*string `locationName:"capacityProviders" type:"list" required:"true"`

	// The short name or full Amazon Resource Name (ARN) of the cluster to modify
	// the capacity provider settings for. If you don't specify a cluster, the default
	// cluster is assumed.
	//
	// Cluster is a required field
	Cluster *string `locationName:"cluster" type:"string" required:"true"`

	// The capacity provider strategy to use by default for the cluster.
	//
	// When creating a service or running a task on a cluster, if no capacity provider
	// or launch type is specified then the default capacity provider strategy for
	// the cluster is used.
	//
	// A capacity provider strategy consists of one or more capacity providers along
	// with the base and weight to assign to them. A capacity provider must be associated
	// with the cluster to be used in a capacity provider strategy. The PutClusterCapacityProviders
	// API is used to associate a capacity provider with a cluster. Only capacity
	// providers with an ACTIVE or UPDATING status can be used.
	//
	// If specifying a capacity provider that uses an Auto Scaling group, the capacity
	// provider must already be created. New capacity providers can be created with
	// the CreateCapacityProvider API operation.
	//
	// To use a Fargate capacity provider, specify either the FARGATE or FARGATE_SPOT
	// capacity providers. The Fargate capacity providers are available to all accounts
	// and only need to be associated with a cluster to be used.
	//
	// DefaultCapacityProviderStrategy is a required field
	DefaultCapacityProviderStrategy []*CapacityProviderStrategyItem `locationName:"defaultCapacityProviderStrategy" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutClusterCapacityProvidersInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutClusterCapacityProvidersInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PutClusterCapacityProvidersInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PutClusterCapacityProvidersInput"}
	if s.CapacityProviders == nil {
		invalidParams.Add(request.NewErrParamRequired("CapacityProviders"))
	}
	if s.Cluster == nil {
		invalidParams.Add(request.NewErrParamRequired("Cluster"))
	}
	if s.DefaultCapacityProviderStrategy == nil {
		invalidParams.Add(request.NewErrParamRequired("DefaultCapacityProviderStrategy"))
	}
	if s.DefaultCapacityProviderStrategy != nil {
		for i, v := range s.DefaultCapacityProviderStrategy {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "DefaultCapacityProviderStrategy", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCapacityProviders sets the CapacityProviders field's value.
func (s *PutClusterCapacityProvidersInput) SetCapacityProviders(v []*string) *PutClusterCapacityProvidersInput {
	s.CapacityProviders = v
	return s
}

// SetCluster sets the Cluster field's value.
func (s *PutClusterCapacityProvidersInput) SetCluster(v string) *PutClusterCapacityProvidersInput {
	s.Cluster = &v
	return s
}

// SetDefaultCapacityProviderStrategy sets the DefaultCapacityProviderStrategy field's value.
func (s *PutClusterCapacityProvidersInput) SetDefaultCapacityProviderStrategy(v []*CapacityProviderStrategyItem) *PutClusterCapacityProvidersInput {
	s.DefaultCapacityProviderStrategy = v
	return s
}

type PutClusterCapacityProvidersOutput struct {
	_ struct{} `type:"structure"`

	// Details about the cluster.
	Cluster *Cluster `locationName:"cluster" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutClusterCapacityProvidersOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutClusterCapacityProvidersOutput) GoString() string {
	return s.String()
}

// SetCluster sets the Cluster field's value.
func (s *PutClusterCapacityProvidersOutput) SetCluster(v *Cluster) *PutClusterCapacityProvidersOutput {
	s.Cluster = v
	return s
}

type RegisterContainerInstanceInput struct {
	_ struct{} `type:"structure"`

	// The container instance attributes that this container instance supports.
	Attributes []*Attribute `locationName:"attributes" type:"list"`

	// The short name or full Amazon Resource Name (ARN) of the cluster to register
	// your container instance with. If you do not specify a cluster, the default
	// cluster is assumed.
	Cluster *string `locationName:"cluster" type:"string"`

	// The ARN of the container instance (if it was previously registered).
	ContainerInstanceArn *string `locationName:"containerInstanceArn" type:"string"`

	// The instance identity document for the EC2 instance to register. This document
	// can be found by running the following command from the instance: curl http://169.254.169.254/latest/dynamic/instance-identity/document/
	InstanceIdentityDocument *string `locationName:"instanceIdentityDocument" type:"string"`

	// The instance identity document signature for the EC2 instance to register.
	// This signature can be found by running the following command from the instance:
	// curl http://169.254.169.254/latest/dynamic/instance-identity/signature/
	InstanceIdentityDocumentSignature *string `locationName:"instanceIdentityDocumentSignature" type:"string"`

	// The devices that are available on the container instance. The only supported
	// device type is a GPU.
	PlatformDevices []*PlatformDevice `locationName:"platformDevices" type:"list"`

	// The metadata that you apply to the container instance to help you categorize
	// and organize them. Each tag consists of a key and an optional value. You
	// define both.
	//
	// The following basic restrictions apply to tags:
	//
	//    * Maximum number of tags per resource - 50
	//
	//    * For each resource, each tag key must be unique, and each tag key can
	//    have only one value.
	//
	//    * Maximum key length - 128 Unicode characters in UTF-8
	//
	//    * Maximum value length - 256 Unicode characters in UTF-8
	//
	//    * If your tagging schema is used across multiple services and resources,
	//    remember that other services may have restrictions on allowed characters.
	//    Generally allowed characters are: letters, numbers, and spaces representable
	//    in UTF-8, and the following characters: + - = . _ : / @.
	//
	//    * Tag keys and values are case-sensitive.
	//
	//    * Do not use aws:, AWS:, or any upper or lowercase combination of such
	//    as a prefix for either keys or values as it is reserved for Amazon Web
	//    Services use. You cannot edit or delete tag keys or values with this prefix.
	//    Tags with this prefix do not count against your tags per resource limit.
	Tags []*Tag `locationName:"tags" type:"list"`

	// The resources available on the instance.
	TotalResources []*Resource `locationName:"totalResources" type:"list"`

	// The version information for the Amazon ECS container agent and Docker daemon
	// that runs on the container instance.
	VersionInfo *VersionInfo `locationName:"versionInfo" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterContainerInstanceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterContainerInstanceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RegisterContainerInstanceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RegisterContainerInstanceInput"}
	if s.Attributes != nil {
		for i, v := range s.Attributes {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Attributes", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.PlatformDevices != nil {
		for i, v := range s.PlatformDevices {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PlatformDevices", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAttributes sets the Attributes field's value.
func (s *RegisterContainerInstanceInput) SetAttributes(v []*Attribute) *RegisterContainerInstanceInput {
	s.Attributes = v
	return s
}

// SetCluster sets the Cluster field's value.
func (s *RegisterContainerInstanceInput) SetCluster(v string) *RegisterContainerInstanceInput {
	s.Cluster = &v
	return s
}

// SetContainerInstanceArn sets the ContainerInstanceArn field's value.
func (s *RegisterContainerInstanceInput) SetContainerInstanceArn(v string) *RegisterContainerInstanceInput {
	s.ContainerInstanceArn = &v
	return s
}

// SetInstanceIdentityDocument sets the InstanceIdentityDocument field's value.
func (s *RegisterContainerInstanceInput) SetInstanceIdentityDocument(v string) *RegisterContainerInstanceInput {
	s.InstanceIdentityDocument = &v
	return s
}

// SetInstanceIdentityDocumentSignature sets the InstanceIdentityDocumentSignature field's value.
func (s *RegisterContainerInstanceInput) SetInstanceIdentityDocumentSignature(v string) *RegisterContainerInstanceInput {
	s.InstanceIdentityDocumentSignature = &v
	return s
}

// SetPlatformDevices sets the PlatformDevices field's value.
func (s *RegisterContainerInstanceInput) SetPlatformDevices(v []*PlatformDevice) *RegisterContainerInstanceInput {
	s.PlatformDevices = v
	return s
}

// SetTags sets the Tags field's value.
func (s *RegisterContainerInstanceInput) SetTags(v []*Tag) *RegisterContainerInstanceInput {
	s.Tags = v
	return s
}

// SetTotalResources sets the TotalResources field's value.
func (s *RegisterContainerInstanceInput) SetTotalResources(v []*Resource) *RegisterContainerInstanceInput {
	s.TotalResources = v
	return s
}

// SetVersionInfo sets the VersionInfo field's value.
func (s *RegisterContainerInstanceInput) SetVersionInfo(v *VersionInfo) *RegisterContainerInstanceInput {
	s.VersionInfo = v
	return s
}

type RegisterContainerInstanceOutput struct {
	_ struct{} `type:"structure"`

	// The container instance that was registered.
	ContainerInstance *ContainerInstance `locationName:"containerInstance" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterContainerInstanceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterContainerInstanceOutput) GoString() string {
	return s.String()
}

// SetContainerInstance sets the ContainerInstance field's value.
func (s *RegisterContainerInstanceOutput) SetContainerInstance(v *ContainerInstance) *RegisterContainerInstanceOutput {
	s.ContainerInstance = v
	return s
}

type RegisterTaskDefinitionInput struct {
	_ struct{} `type:"structure"`

	// A list of container definitions in JSON format that describe the different
	// containers that make up your task.
	//
	// ContainerDefinitions is a required field
	ContainerDefinitions []*ContainerDefinition `locationName:"containerDefinitions" type:"list" required:"true"`

	// The number of CPU units used by the task. It can be expressed as an integer
	// using CPU units (for example, 1024) or as a string using vCPUs (for example,
	// 1 vCPU or 1 vcpu) in a task definition. String values are converted to an
	// integer indicating the CPU units when the task definition is registered.
	//
	// Task-level CPU and memory parameters are ignored for Windows containers.
	// We recommend specifying container-level resources for Windows containers.
	//
	// If you're using the EC2 launch type, this field is optional. Supported values
	// are between 128 CPU units (0.125 vCPUs) and 10240 CPU units (10 vCPUs). If
	// you do not specify a value, the parameter is ignored.
	//
	// If you're using the Fargate launch type, this field is required and you must
	// use one of the following values, which determines your range of supported
	// values for the memory parameter:
	//
	// The CPU units cannot be less than 1 vCPU when you use Windows containers
	// on Fargate.
	//
	//    * 256 (.25 vCPU) - Available memory values: 512 (0.5 GB), 1024 (1 GB),
	//    2048 (2 GB)
	//
	//    * 512 (.5 vCPU) - Available memory values: 1024 (1 GB), 2048 (2 GB), 3072
	//    (3 GB), 4096 (4 GB)
	//
	//    * 1024 (1 vCPU) - Available memory values: 2048 (2 GB), 3072 (3 GB), 4096
	//    (4 GB), 5120 (5 GB), 6144 (6 GB), 7168 (7 GB), 8192 (8 GB)
	//
	//    * 2048 (2 vCPU) - Available memory values: 4096 (4 GB) and 16384 (16 GB)
	//    in increments of 1024 (1 GB)
	//
	//    * 4096 (4 vCPU) - Available memory values: 8192 (8 GB) and 30720 (30 GB)
	//    in increments of 1024 (1 GB)
	//
	//    * 8192 (8 vCPU) - Available memory values: 16 GB and 60 GB in 4 GB increments
	//    This option requires Linux platform 1.4.0 or later.
	//
	//    * 16384 (16vCPU) - Available memory values: 32GB and 120 GB in 8 GB increments
	//    This option requires Linux platform 1.4.0 or later.
	Cpu *string `locationName:"cpu" type:"string"`

	// The amount of ephemeral storage to allocate for the task. This parameter
	// is used to expand the total amount of ephemeral storage available, beyond
	// the default amount, for tasks hosted on Fargate. For more information, see
	// Fargate task storage (https://docs.aws.amazon.com/AmazonECS/latest/userguide/using_data_volumes.html)
	// in the Amazon ECS User Guide for Fargate.
	//
	// For tasks using the Fargate launch type, the task requires the following
	// platforms:
	//
	//    * Linux platform version 1.4.0 or later.
	//
	//    * Windows platform version 1.0.0 or later.
	EphemeralStorage *EphemeralStorage `locationName:"ephemeralStorage" type:"structure"`

	// The Amazon Resource Name (ARN) of the task execution role that grants the
	// Amazon ECS container agent permission to make Amazon Web Services API calls
	// on your behalf. The task execution IAM role is required depending on the
	// requirements of your task. For more information, see Amazon ECS task execution
	// IAM role (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html)
	// in the Amazon Elastic Container Service Developer Guide.
	ExecutionRoleArn *string `locationName:"executionRoleArn" type:"string"`

	// You must specify a family for a task definition. You can use it track multiple
	// versions of the same task definition. The family is used as a name for your
	// task definition. Up to 255 letters (uppercase and lowercase), numbers, underscores,
	// and hyphens are allowed.
	//
	// Family is a required field
	Family *string `locationName:"family" type:"string" required:"true"`

	// The Elastic Inference accelerators to use for the containers in the task.
	InferenceAccelerators []*InferenceAccelerator `locationName:"inferenceAccelerators" type:"list"`

	// The IPC resource namespace to use for the containers in the task. The valid
	// values are host, task, or none. If host is specified, then all containers
	// within the tasks that specified the host IPC mode on the same container instance
	// share the same IPC resources with the host Amazon EC2 instance. If task is
	// specified, all containers within the specified task share the same IPC resources.
	// If none is specified, then IPC resources within the containers of a task
	// are private and not shared with other containers in a task or on the container
	// instance. If no value is specified, then the IPC resource namespace sharing
	// depends on the Docker daemon setting on the container instance. For more
	// information, see IPC settings (https://docs.docker.com/engine/reference/run/#ipc-settings---ipc)
	// in the Docker run reference.
	//
	// If the host IPC mode is used, be aware that there is a heightened risk of
	// undesired IPC namespace expose. For more information, see Docker security
	// (https://docs.docker.com/engine/security/security/).
	//
	// If you are setting namespaced kernel parameters using systemControls for
	// the containers in the task, the following will apply to your IPC resource
	// namespace. For more information, see System Controls (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	//    * For tasks that use the host IPC mode, IPC namespace related systemControls
	//    are not supported.
	//
	//    * For tasks that use the task IPC mode, IPC namespace related systemControls
	//    will apply to all containers within a task.
	//
	// This parameter is not supported for Windows containers or tasks run on Fargate.
	IpcMode *string `locationName:"ipcMode" type:"string" enum:"IpcMode"`

	// The amount of memory (in MiB) used by the task. It can be expressed as an
	// integer using MiB (for example ,1024) or as a string using GB (for example,
	// 1GB or 1 GB) in a task definition. String values are converted to an integer
	// indicating the MiB when the task definition is registered.
	//
	// Task-level CPU and memory parameters are ignored for Windows containers.
	// We recommend specifying container-level resources for Windows containers.
	//
	// If using the EC2 launch type, this field is optional.
	//
	// If using the Fargate launch type, this field is required and you must use
	// one of the following values. This determines your range of supported values
	// for the cpu parameter.
	//
	// The CPU units cannot be less than 1 vCPU when you use Windows containers
	// on Fargate.
	//
	//    * 512 (0.5 GB), 1024 (1 GB), 2048 (2 GB) - Available cpu values: 256 (.25
	//    vCPU)
	//
	//    * 1024 (1 GB), 2048 (2 GB), 3072 (3 GB), 4096 (4 GB) - Available cpu values:
	//    512 (.5 vCPU)
	//
	//    * 2048 (2 GB), 3072 (3 GB), 4096 (4 GB), 5120 (5 GB), 6144 (6 GB), 7168
	//    (7 GB), 8192 (8 GB) - Available cpu values: 1024 (1 vCPU)
	//
	//    * Between 4096 (4 GB) and 16384 (16 GB) in increments of 1024 (1 GB) -
	//    Available cpu values: 2048 (2 vCPU)
	//
	//    * Between 8192 (8 GB) and 30720 (30 GB) in increments of 1024 (1 GB) -
	//    Available cpu values: 4096 (4 vCPU)
	//
	//    * Between 16 GB and 60 GB in 4 GB increments - Available cpu values: 8192
	//    (8 vCPU) This option requires Linux platform 1.4.0 or later.
	//
	//    * Between 32GB and 120 GB in 8 GB increments - Available cpu values: 16384
	//    (16 vCPU) This option requires Linux platform 1.4.0 or later.
	Memory *string `locationName:"memory" type:"string"`

	// The Docker networking mode to use for the containers in the task. The valid
	// values are none, bridge, awsvpc, and host. If no network mode is specified,
	// the default is bridge.
	//
	// For Amazon ECS tasks on Fargate, the awsvpc network mode is required. For
	// Amazon ECS tasks on Amazon EC2 Linux instances, any network mode can be used.
	// For Amazon ECS tasks on Amazon EC2 Windows instances, <default> or awsvpc
	// can be used. If the network mode is set to none, you cannot specify port
	// mappings in your container definitions, and the tasks containers do not have
	// external connectivity. The host and awsvpc network modes offer the highest
	// networking performance for containers because they use the EC2 network stack
	// instead of the virtualized network stack provided by the bridge mode.
	//
	// With the host and awsvpc network modes, exposed container ports are mapped
	// directly to the corresponding host port (for the host network mode) or the
	// attached elastic network interface port (for the awsvpc network mode), so
	// you cannot take advantage of dynamic host port mappings.
	//
	// When using the host network mode, you should not run containers using the
	// root user (UID 0). It is considered best practice to use a non-root user.
	//
	// If the network mode is awsvpc, the task is allocated an elastic network interface,
	// and you must specify a NetworkConfiguration value when you create a service
	// or run a task with the task definition. For more information, see Task Networking
	// (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// If the network mode is host, you cannot run multiple instantiations of the
	// same task on a single container instance when port mappings are used.
	//
	// For more information, see Network settings (https://docs.docker.com/engine/reference/run/#network-settings)
	// in the Docker run reference.
	NetworkMode *string `locationName:"networkMode" type:"string" enum:"NetworkMode"`

	// The process namespace to use for the containers in the task. The valid values
	// are host or task. On Fargate for Linux containers, the only valid value is
	// task. For example, monitoring sidecars might need pidMode to access information
	// about other containers running in the same task.
	//
	// If host is specified, all containers within the tasks that specified the
	// host PID mode on the same container instance share the same process namespace
	// with the host Amazon EC2 instance.
	//
	// If task is specified, all containers within the specified task share the
	// same process namespace.
	//
	// If no value is specified, the default is a private namespace for each container.
	// For more information, see PID settings (https://docs.docker.com/engine/reference/run/#pid-settings---pid)
	// in the Docker run reference.
	//
	// If the host PID mode is used, there's a heightened risk of undesired process
	// namespace exposure. For more information, see Docker security (https://docs.docker.com/engine/security/security/).
	//
	// This parameter is not supported for Windows containers.
	//
	// This parameter is only supported for tasks that are hosted on Fargate if
	// the tasks are using platform version 1.4.0 or later (Linux). This isn't supported
	// for Windows containers on Fargate.
	PidMode *string `locationName:"pidMode" type:"string" enum:"PidMode"`

	// An array of placement constraint objects to use for the task. You can specify
	// a maximum of 10 constraints for each task. This limit includes constraints
	// in the task definition and those specified at runtime.
	PlacementConstraints []*TaskDefinitionPlacementConstraint `locationName:"placementConstraints" type:"list"`

	// The configuration details for the App Mesh proxy.
	//
	// For tasks hosted on Amazon EC2 instances, the container instances require
	// at least version 1.26.0 of the container agent and at least version 1.26.0-1
	// of the ecs-init package to use a proxy configuration. If your container instances
	// are launched from the Amazon ECS-optimized AMI version 20190301 or later,
	// then they contain the required versions of the container agent and ecs-init.
	// For more information, see Amazon ECS-optimized AMI versions (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-ami-versions.html)
	// in the Amazon Elastic Container Service Developer Guide.
	ProxyConfiguration *ProxyConfiguration `locationName:"proxyConfiguration" type:"structure"`

	// The task launch type that Amazon ECS validates the task definition against.
	// A client exception is returned if the task definition doesn't validate against
	// the compatibilities specified. If no value is specified, the parameter is
	// omitted from the response.
	RequiresCompatibilities []*string `locationName:"requiresCompatibilities" type:"list" enum:"Compatibility"`

	// The operating system that your tasks definitions run on. A platform family
	// is specified only for tasks using the Fargate launch type.
	//
	// When you specify a task definition in a service, this value must match the
	// runtimePlatform value of the service.
	RuntimePlatform *RuntimePlatform `locationName:"runtimePlatform" type:"structure"`

	// The metadata that you apply to the task definition to help you categorize
	// and organize them. Each tag consists of a key and an optional value. You
	// define both of them.
	//
	// The following basic restrictions apply to tags:
	//
	//    * Maximum number of tags per resource - 50
	//
	//    * For each resource, each tag key must be unique, and each tag key can
	//    have only one value.
	//
	//    * Maximum key length - 128 Unicode characters in UTF-8
	//
	//    * Maximum value length - 256 Unicode characters in UTF-8
	//
	//    * If your tagging schema is used across multiple services and resources,
	//    remember that other services may have restrictions on allowed characters.
	//    Generally allowed characters are: letters, numbers, and spaces representable
	//    in UTF-8, and the following characters: + - = . _ : / @.
	//
	//    * Tag keys and values are case-sensitive.
	//
	//    * Do not use aws:, AWS:, or any upper or lowercase combination of such
	//    as a prefix for either keys or values as it is reserved for Amazon Web
	//    Services use. You cannot edit or delete tag keys or values with this prefix.
	//    Tags with this prefix do not count against your tags per resource limit.
	Tags []*Tag `locationName:"tags" type:"list"`

	// The short name or full Amazon Resource Name (ARN) of the IAM role that containers
	// in this task can assume. All containers in this task are granted the permissions
	// that are specified in this role. For more information, see IAM Roles for
	// Tasks (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)
	// in the Amazon Elastic Container Service Developer Guide.
	TaskRoleArn *string `locationName:"taskRoleArn" type:"string"`

	// A list of volume definitions in JSON format that containers in your task
	// might use.
	Volumes []*Volume `locationName:"volumes" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterTaskDefinitionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterTaskDefinitionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RegisterTaskDefinitionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RegisterTaskDefinitionInput"}
	if s.ContainerDefinitions == nil {
		invalidParams.Add(request.NewErrParamRequired("ContainerDefinitions"))
	}
	if s.Family == nil {
		invalidParams.Add(request.NewErrParamRequired("Family"))
	}
	if s.ContainerDefinitions != nil {
		for i, v := range s.ContainerDefinitions {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ContainerDefinitions", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.EphemeralStorage != nil {
		if err := s.EphemeralStorage.Validate(); err != nil {
			invalidParams.AddNested("EphemeralStorage", err.(request.ErrInvalidParams))
		}
	}
	if s.InferenceAccelerators != nil {
		for i, v := range s.InferenceAccelerators {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "InferenceAccelerators", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.ProxyConfiguration != nil {
		if err := s.ProxyConfiguration.Validate(); err != nil {
			invalidParams.AddNested("ProxyConfiguration", err.(request.ErrInvalidParams))
		}
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.Volumes != nil {
		for i, v := range s.Volumes {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Volumes", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetContainerDefinitions sets the ContainerDefinitions field's value.
func (s *RegisterTaskDefinitionInput) SetContainerDefinitions(v []*ContainerDefinition) *RegisterTaskDefinitionInput {
	s.ContainerDefinitions = v
	return s
}

// SetCpu sets the Cpu field's value.
func (s *RegisterTaskDefinitionInput) SetCpu(v string) *RegisterTaskDefinitionInput {
	s.Cpu = &v
	return s
}

// SetEphemeralStorage sets the EphemeralStorage field's value.
func (s *RegisterTaskDefinitionInput) SetEphemeralStorage(v *EphemeralStorage) *RegisterTaskDefinitionInput {
	s.EphemeralStorage = v
	return s
}

// SetExecutionRoleArn sets the ExecutionRoleArn field's value.
func (s *RegisterTaskDefinitionInput) SetExecutionRoleArn(v string) *RegisterTaskDefinitionInput {
	s.ExecutionRoleArn = &v
	return s
}

// SetFamily sets the Family field's value.
func (s *RegisterTaskDefinitionInput) SetFamily(v string) *RegisterTaskDefinitionInput {
	s.Family = &v
	return s
}

// SetInferenceAccelerators sets the InferenceAccelerators field's value.
func (s *RegisterTaskDefinitionInput) SetInferenceAccelerators(v []*InferenceAccelerator) *RegisterTaskDefinitionInput {
	s.InferenceAccelerators = v
	return s
}

// SetIpcMode sets the IpcMode field's value.
func (s *RegisterTaskDefinitionInput) SetIpcMode(v string) *RegisterTaskDefinitionInput {
	s.IpcMode = &v
	return s
}

// SetMemory sets the Memory field's value.
func (s *RegisterTaskDefinitionInput) SetMemory(v string) *RegisterTaskDefinitionInput {
	s.Memory = &v
	return s
}

// SetNetworkMode sets the NetworkMode field's value.
func (s *RegisterTaskDefinitionInput) SetNetworkMode(v string) *RegisterTaskDefinitionInput {
	s.NetworkMode = &v
	return s
}

// SetPidMode sets the PidMode field's value.
func (s *RegisterTaskDefinitionInput) SetPidMode(v string) *RegisterTaskDefinitionInput {
	s.PidMode = &v
	return s
}

// SetPlacementConstraints sets the PlacementConstraints field's value.
func (s *RegisterTaskDefinitionInput) SetPlacementConstraints(v []*TaskDefinitionPlacementConstraint) *RegisterTaskDefinitionInput {
	s.PlacementConstraints = v
	return s
}

// SetProxyConfiguration sets the ProxyConfiguration field's value.
func (s *RegisterTaskDefinitionInput) SetProxyConfiguration(v *ProxyConfiguration) *RegisterTaskDefinitionInput {
	s.ProxyConfiguration = v
	return s
}

// SetRequiresCompatibilities sets the RequiresCompatibilities field's value.
func (s *RegisterTaskDefinitionInput) SetRequiresCompatibilities(v []*string) *RegisterTaskDefinitionInput {
	s.RequiresCompatibilities = v
	return s
}

// SetRuntimePlatform sets the RuntimePlatform field's value.
func (s *RegisterTaskDefinitionInput) SetRuntimePlatform(v *RuntimePlatform) *RegisterTaskDefinitionInput {
	s.RuntimePlatform = v
	return s
}

// SetTags sets the Tags field's value.
func (s *RegisterTaskDefinitionInput) SetTags(v []*Tag) *RegisterTaskDefinitionInput {
	s.Tags = v
	return s
}

// SetTaskRoleArn sets the TaskRoleArn field's value.
func (s *RegisterTaskDefinitionInput) SetTaskRoleArn(v string) *RegisterTaskDefinitionInput {
	s.TaskRoleArn = &v
	return s
}

// SetVolumes sets the Volumes field's value.
func (s *RegisterTaskDefinitionInput) SetVolumes(v []*Volume) *RegisterTaskDefinitionInput {
	s.Volumes = v
	return s
}

type RegisterTaskDefinitionOutput struct {
	_ struct{} `type:"structure"`

	// The list of tags associated with the task definition.
	Tags []*Tag `locationName:"tags" type:"list"`

	// The full description of the registered task definition.
	TaskDefinition *TaskDefinition `locationName:"taskDefinition" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterTaskDefinitionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterTaskDefinitionOutput) GoString() string {
	return s.String()
}

// SetTags sets the Tags field's value.
func (s *RegisterTaskDefinitionOutput) SetTags(v []*Tag) *RegisterTaskDefinitionOutput {
	s.Tags = v
	return s
}

// SetTaskDefinition sets the TaskDefinition field's value.
func (s *RegisterTaskDefinitionOutput) SetTaskDefinition(v *TaskDefinition) *RegisterTaskDefinitionOutput {
	s.TaskDefinition = v
	return s
}

// The repository credentials for private registry authentication.
type RepositoryCredentials struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the secret containing the private repository
	// credentials.
	//
	// When you use the Amazon ECS API, CLI, or Amazon Web Services SDK, if the
	// secret exists in the same Region as the task that you're launching then you
	// can use either the full ARN or the name of the secret. When you use the Amazon
	// Web Services Management Console, you must specify the full ARN of the secret.
	//
	// CredentialsParameter is a required field
	CredentialsParameter *string `locationName:"credentialsParameter" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RepositoryCredentials) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RepositoryCredentials) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RepositoryCredentials) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RepositoryCredentials"}
	if s.CredentialsParameter == nil {
		invalidParams.Add(request.NewErrParamRequired("CredentialsParameter"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCredentialsParameter sets the CredentialsParameter field's value.
func (s *RepositoryCredentials) SetCredentialsParameter(v string) *RepositoryCredentials {
	s.CredentialsParameter = &v
	return s
}

// Describes the resources available for a container instance.
type Resource struct {
	_ struct{} `type:"structure"`

	// When the doubleValue type is set, the value of the resource must be a double
	// precision floating-point type.
	DoubleValue *float64 `locationName:"doubleValue" type:"double"`

	// When the integerValue type is set, the value of the resource must be an integer.
	IntegerValue *int64 `locationName:"integerValue" type:"integer"`

	// When the longValue type is set, the value of the resource must be an extended
	// precision floating-point type.
	LongValue *int64 `locationName:"longValue" type:"long"`

	// The name of the resource, such as CPU, MEMORY, PORTS, PORTS_UDP, or a user-defined
	// resource.
	Name *string `locationName:"name" type:"string"`

	// When the stringSetValue type is set, the value of the resource must be a
	// string type.
	StringSetValue []*string `locationName:"stringSetValue" type:"list"`

	// The type of the resource. Valid values: INTEGER, DOUBLE, LONG, or STRINGSET.
	Type *string `locationName:"type" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Resource) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Resource) GoString() string {
	return s.String()
}

// SetDoubleValue sets the DoubleValue field's value.
func (s *Resource) SetDoubleValue(v float64) *Resource {
	s.DoubleValue = &v
	return s
}

// SetIntegerValue sets the IntegerValue field's value.
func (s *Resource) SetIntegerValue(v int64) *Resource {
	s.IntegerValue = &v
	return s
}

// SetLongValue sets the LongValue field's value.
func (s *Resource) SetLongValue(v int64) *Resource {
	s.LongValue = &v
	return s
}

// SetName sets the Name field's value.
func (s *Resource) SetName(v string) *Resource {
	s.Name = &v
	return s
}

// SetStringSetValue sets the StringSetValue field's value.
func (s *Resource) SetStringSetValue(v []*string) *Resource {
	s.StringSetValue = v
	return s
}

// SetType sets the Type field's value.
func (s *Resource) SetType(v string) *Resource {
	s.Type = &v
	return s
}

// The specified resource is in-use and can't be removed.
type ResourceInUseException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ResourceInUseException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ResourceInUseException) GoString() string {
	return s.String()
}

func newErrorResourceInUseException(v protocol.ResponseMetadata) error {
	return &ResourceInUseException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ResourceInUseException) Code() string {
	return "ResourceInUseException"
}

// Message returns the exception's message.
func (s *ResourceInUseException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ResourceInUseException) OrigErr() error {
	return nil
}

func (s *ResourceInUseException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *ResourceInUseException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ResourceInUseException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The specified resource wasn't found.
type ResourceNotFoundException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ResourceNotFoundException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ResourceNotFoundException) GoString() string {
	return s.String()
}

func newErrorResourceNotFoundException(v protocol.ResponseMetadata) error {
	return &ResourceNotFoundException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ResourceNotFoundException) Code() string {
	return "ResourceNotFoundException"
}

// Message returns the exception's message.
func (s *ResourceNotFoundException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ResourceNotFoundException) OrigErr() error {
	return nil
}

func (s *ResourceNotFoundException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *ResourceNotFoundException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ResourceNotFoundException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The type and amount of a resource to assign to a container. The supported
// resource types are GPUs and Elastic Inference accelerators. For more information,
// see Working with GPUs on Amazon ECS (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-gpu.html)
// or Working with Amazon Elastic Inference on Amazon ECS (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-inference.html)
// in the Amazon Elastic Container Service Developer Guide
type ResourceRequirement struct {
	_ struct{} `type:"structure"`

	// The type of resource to assign to a container. The supported values are GPU
	// or InferenceAccelerator.
	//
	// Type is a required field
	Type *string `locationName:"type" type:"string" required:"true" enum:"ResourceType"`

	// The value for the specified resource type.
	//
	// If the GPU type is used, the value is the number of physical GPUs the Amazon
	// ECS container agent reserves for the container. The number of GPUs that's
	// reserved for all containers in a task can't exceed the number of available
	// GPUs on the container instance that the task is launched on.
	//
	// If the InferenceAccelerator type is used, the value matches the deviceName
	// for an InferenceAccelerator (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_InferenceAccelerator.html)
	// specified in a task definition.
	//
	// Value is a required field
	Value *string `locationName:"value" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ResourceRequirement) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ResourceRequirement) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ResourceRequirement) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ResourceRequirement"}
	if s.Type == nil {
		invalidParams.Add(request.NewErrParamRequired("Type"))
	}
	if s.Value == nil {
		invalidParams.Add(request.NewErrParamRequired("Value"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetType sets the Type field's value.
func (s *ResourceRequirement) SetType(v string) *ResourceRequirement {
	s.Type = &v
	return s
}

// SetValue sets the Value field's value.
func (s *ResourceRequirement) SetValue(v string) *ResourceRequirement {
	s.Value = &v
	return s
}

type RunTaskInput struct {
	_ struct{} `type:"structure"`

	// The capacity provider strategy to use for the task.
	//
	// If a capacityProviderStrategy is specified, the launchType parameter must
	// be omitted. If no capacityProviderStrategy or launchType is specified, the
	// defaultCapacityProviderStrategy for the cluster is used.
	//
	// When you use cluster auto scaling, you must specify capacityProviderStrategy
	// and not launchType.
	//
	// A capacity provider strategy may contain a maximum of 6 capacity providers.
	CapacityProviderStrategy []*CapacityProviderStrategyItem `locationName:"capacityProviderStrategy" type:"list"`

	// An identifier that you provide to ensure the idempotency of the request.
	// It must be unique and is case sensitive. Up to 64 characters are allowed.
	// The valid characters are characters in the range of 33-126, inclusive. For
	// more information, see Ensuring idempotency (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/ECS_Idempotency.html).
	ClientToken *string `locationName:"clientToken" type:"string" idempotencyToken:"true"`

	// The short name or full Amazon Resource Name (ARN) of the cluster to run your
	// task on. If you do not specify a cluster, the default cluster is assumed.
	Cluster *string `locationName:"cluster" type:"string"`

	// The number of instantiations of the specified task to place on your cluster.
	// You can specify up to 10 tasks for each call.
	Count *int64 `locationName:"count" type:"integer"`

	// Specifies whether to use Amazon ECS managed tags for the task. For more information,
	// see Tagging Your Amazon ECS Resources (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-using-tags.html)
	// in the Amazon Elastic Container Service Developer Guide.
	EnableECSManagedTags *bool `locationName:"enableECSManagedTags" type:"boolean"`

	// Determines whether to use the execute command functionality for the containers
	// in this task. If true, this enables execute command functionality on all
	// containers in the task.
	//
	// If true, then the task definition must have a task role, or you must provide
	// one as an override.
	EnableExecuteCommand *bool `locationName:"enableExecuteCommand" type:"boolean"`

	// The name of the task group to associate with the task. The default value
	// is the family name of the task definition (for example, family:my-family-name).
	Group *string `locationName:"group" type:"string"`

	// The infrastructure to run your standalone task on. For more information,
	// see Amazon ECS launch types (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// The FARGATE launch type runs your tasks on Fargate On-Demand infrastructure.
	//
	// Fargate Spot infrastructure is available for use but a capacity provider
	// strategy must be used. For more information, see Fargate capacity providers
	// (https://docs.aws.amazon.com/AmazonECS/latest/userguide/fargate-capacity-providers.html)
	// in the Amazon ECS User Guide for Fargate.
	//
	// The EC2 launch type runs your tasks on Amazon EC2 instances registered to
	// your cluster.
	//
	// The EXTERNAL launch type runs your tasks on your on-premises server or virtual
	// machine (VM) capacity registered to your cluster.
	//
	// A task can use either a launch type or a capacity provider strategy. If a
	// launchType is specified, the capacityProviderStrategy parameter must be omitted.
	//
	// When you use cluster auto scaling, you must specify capacityProviderStrategy
	// and not launchType.
	LaunchType *string `locationName:"launchType" type:"string" enum:"LaunchType"`

	// The network configuration for the task. This parameter is required for task
	// definitions that use the awsvpc network mode to receive their own elastic
	// network interface, and it isn't supported for other network modes. For more
	// information, see Task networking (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html)
	// in the Amazon Elastic Container Service Developer Guide.
	NetworkConfiguration *NetworkConfiguration `locationName:"networkConfiguration" type:"structure"`

	// A list of container overrides in JSON format that specify the name of a container
	// in the specified task definition and the overrides it should receive. You
	// can override the default command for a container (that's specified in the
	// task definition or Docker image) with a command override. You can also override
	// existing environment variables (that are specified in the task definition
	// or Docker image) on a container or add new environment variables to it with
	// an environment override.
	//
	// A total of 8192 characters are allowed for overrides. This limit includes
	// the JSON formatting characters of the override structure.
	Overrides *TaskOverride `locationName:"overrides" type:"structure"`

	// An array of placement constraint objects to use for the task. You can specify
	// up to 10 constraints for each task (including constraints in the task definition
	// and those specified at runtime).
	PlacementConstraints []*PlacementConstraint `locationName:"placementConstraints" type:"list"`

	// The placement strategy objects to use for the task. You can specify a maximum
	// of 5 strategy rules for each task.
	PlacementStrategy []*PlacementStrategy `locationName:"placementStrategy" type:"list"`

	// The platform version the task uses. A platform version is only specified
	// for tasks hosted on Fargate. If one isn't specified, the LATEST platform
	// version is used. For more information, see Fargate platform versions (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html)
	// in the Amazon Elastic Container Service Developer Guide.
	PlatformVersion *string `locationName:"platformVersion" type:"string"`

	// Specifies whether to propagate the tags from the task definition to the task.
	// If no value is specified, the tags aren't propagated. Tags can only be propagated
	// to the task during task creation. To add tags to a task after task creation,
	// use the TagResource API action.
	//
	// An error will be received if you specify the SERVICE option when running
	// a task.
	PropagateTags *string `locationName:"propagateTags" type:"string" enum:"PropagateTags"`

	// The reference ID to use for the task. The reference ID can have a maximum
	// length of 1024 characters.
	ReferenceId *string `locationName:"referenceId" type:"string"`

	// An optional tag specified when a task is started. For example, if you automatically
	// trigger a task to run a batch process job, you could apply a unique identifier
	// for that job to your task with the startedBy parameter. You can then identify
	// which tasks belong to that job by filtering the results of a ListTasks call
	// with the startedBy value. Up to 128 letters (uppercase and lowercase), numbers,
	// hyphens (-), and underscores (_) are allowed.
	//
	// If a task is started by an Amazon ECS service, then the startedBy parameter
	// contains the deployment ID of the service that starts it.
	StartedBy *string `locationName:"startedBy" type:"string"`

	// The metadata that you apply to the task to help you categorize and organize
	// them. Each tag consists of a key and an optional value, both of which you
	// define.
	//
	// The following basic restrictions apply to tags:
	//
	//    * Maximum number of tags per resource - 50
	//
	//    * For each resource, each tag key must be unique, and each tag key can
	//    have only one value.
	//
	//    * Maximum key length - 128 Unicode characters in UTF-8
	//
	//    * Maximum value length - 256 Unicode characters in UTF-8
	//
	//    * If your tagging schema is used across multiple services and resources,
	//    remember that other services may have restrictions on allowed characters.
	//    Generally allowed characters are: letters, numbers, and spaces representable
	//    in UTF-8, and the following characters: + - = . _ : / @.
	//
	//    * Tag keys and values are case-sensitive.
	//
	//    * Do not use aws:, AWS:, or any upper or lowercase combination of such
	//    as a prefix for either keys or values as it is reserved for Amazon Web
	//    Services use. You cannot edit or delete tag keys or values with this prefix.
	//    Tags with this prefix do not count against your tags per resource limit.
	Tags []*Tag `locationName:"tags" type:"list"`

	// The family and revision (family:revision) or full ARN of the task definition
	// to run. If a revision isn't specified, the latest ACTIVE revision is used.
	//
	// When you create a policy for run-task, you can set the resource to be the
	// latest task definition revision, or a specific revision.
	//
	// The full ARN value must match the value that you specified as the Resource
	// of the principal's permissions policy.
	//
	// When you specify the policy resource as the latest task definition version
	// (by setting the Resource in the policy to arn:aws:ecs:us-east-1:111122223333:task-definition/TaskFamilyName),
	// then set this value to arn:aws:ecs:us-east-1:111122223333:task-definition/TaskFamilyName.
	//
	// When you specify the policy resource as a specific task definition version
	// (by setting the Resource in the policy to arn:aws:ecs:us-east-1:111122223333:task-definition/TaskFamilyName:1
	// or arn:aws:ecs:us-east-1:111122223333:task-definition/TaskFamilyName:*),
	// then set this value to arn:aws:ecs:us-east-1:111122223333:task-definition/TaskFamilyName:1.
	//
	// For more information, see Policy Resources for Amazon ECS (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/security_iam_service-with-iam.html#security_iam_service-with-iam-id-based-policies-resources)
	// in the Amazon Elastic Container Service developer Guide.
	//
	// TaskDefinition is a required field
	TaskDefinition *string `locationName:"taskDefinition" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RunTaskInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RunTaskInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RunTaskInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RunTaskInput"}
	if s.TaskDefinition == nil {
		invalidParams.Add(request.NewErrParamRequired("TaskDefinition"))
	}
	if s.CapacityProviderStrategy != nil {
		for i, v := range s.CapacityProviderStrategy {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "CapacityProviderStrategy", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.NetworkConfiguration != nil {
		if err := s.NetworkConfiguration.Validate(); err != nil {
			invalidParams.AddNested("NetworkConfiguration", err.(request.ErrInvalidParams))
		}
	}
	if s.Overrides != nil {
		if err := s.Overrides.Validate(); err != nil {
			invalidParams.AddNested("Overrides", err.(request.ErrInvalidParams))
		}
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCapacityProviderStrategy sets the CapacityProviderStrategy field's value.
func (s *RunTaskInput) SetCapacityProviderStrategy(v []*CapacityProviderStrategyItem) *RunTaskInput {
	s.CapacityProviderStrategy = v
	return s
}

// SetClientToken sets the ClientToken field's value.
func (s *RunTaskInput) SetClientToken(v string) *RunTaskInput {
	s.ClientToken = &v
	return s
}

// SetCluster sets the Cluster field's value.
func (s *RunTaskInput) SetCluster(v string) *RunTaskInput {
	s.Cluster = &v
	return s
}

// SetCount sets the Count field's value.
func (s *RunTaskInput) SetCount(v int64) *RunTaskInput {
	s.Count = &v
	return s
}

// SetEnableECSManagedTags sets the EnableECSManagedTags field's value.
func (s *RunTaskInput) SetEnableECSManagedTags(v bool) *RunTaskInput {
	s.EnableECSManagedTags = &v
	return s
}

// SetEnableExecuteCommand sets the EnableExecuteCommand field's value.
func (s *RunTaskInput) SetEnableExecuteCommand(v bool) *RunTaskInput {
	s.EnableExecuteCommand = &v
	return s
}

// SetGroup sets the Group field's value.
func (s *RunTaskInput) SetGroup(v string) *RunTaskInput {
	s.Group = &v
	return s
}

// SetLaunchType sets the LaunchType field's value.
func (s *RunTaskInput) SetLaunchType(v string) *RunTaskInput {
	s.LaunchType = &v
	return s
}

// SetNetworkConfiguration sets the NetworkConfiguration field's value.
func (s *RunTaskInput) SetNetworkConfiguration(v *NetworkConfiguration) *RunTaskInput {
	s.NetworkConfiguration = v
	return s
}

// SetOverrides sets the Overrides field's value.
func (s *RunTaskInput) SetOverrides(v *TaskOverride) *RunTaskInput {
	s.Overrides = v
	return s
}

// SetPlacementConstraints sets the PlacementConstraints field's value.
func (s *RunTaskInput) SetPlacementConstraints(v []*PlacementConstraint) *RunTaskInput {
	s.PlacementConstraints = v
	return s
}

// SetPlacementStrategy sets the PlacementStrategy field's value.
func (s *RunTaskInput) SetPlacementStrategy(v []*PlacementStrategy) *RunTaskInput {
	s.PlacementStrategy = v
	return s
}

// SetPlatformVersion sets the PlatformVersion field's value.
func (s *RunTaskInput) SetPlatformVersion(v string) *RunTaskInput {
	s.PlatformVersion = &v
	return s
}

// SetPropagateTags sets the PropagateTags field's value.
func (s *RunTaskInput) SetPropagateTags(v string) *RunTaskInput {
	s.PropagateTags = &v
	return s
}

// SetReferenceId sets the ReferenceId field's value.
func (s *RunTaskInput) SetReferenceId(v string) *RunTaskInput {
	s.ReferenceId = &v
	return s
}

// SetStartedBy sets the StartedBy field's value.
func (s *RunTaskInput) SetStartedBy(v string) *RunTaskInput {
	s.StartedBy = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *RunTaskInput) SetTags(v []*Tag) *RunTaskInput {
	s.Tags = v
	return s
}

// SetTaskDefinition sets the TaskDefinition field's value.
func (s *RunTaskInput) SetTaskDefinition(v string) *RunTaskInput {
	s.TaskDefinition = &v
	return s
}

type RunTaskOutput struct {
	_ struct{} `type:"structure"`

	// Any failures associated with the call.
	Failures []*Failure `locationName:"failures" type:"list"`

	// A full description of the tasks that were run. The tasks that were successfully
	// placed on your cluster are described here.
	Tasks []*Task `locationName:"tasks" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RunTaskOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RunTaskOutput) GoString() string {
	return s.String()
}

// SetFailures sets the Failures field's value.
func (s *RunTaskOutput) SetFailures(v []*Failure) *RunTaskOutput {
	s.Failures = v
	return s
}

// SetTasks sets the Tasks field's value.
func (s *RunTaskOutput) SetTasks(v []*Task) *RunTaskOutput {
	s.Tasks = v
	return s
}

// Information about the platform for the Amazon ECS service or task.
//
// For more information about RuntimePlatform, see RuntimePlatform (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#runtime-platform)
// in the Amazon Elastic Container Service Developer Guide.
type RuntimePlatform struct {
	_ struct{} `type:"structure"`

	// The CPU architecture.
	//
	// You can run your Linux tasks on an ARM-based platform by setting the value
	// to ARM64. This option is available for tasks that run on Linux Amazon EC2
	// instance or Linux containers on Fargate.
	CpuArchitecture *string `locationName:"cpuArchitecture" type:"string" enum:"CPUArchitecture"`

	// The operating system.
	OperatingSystemFamily *string `locationName:"operatingSystemFamily" type:"string" enum:"OSFamily"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RuntimePlatform) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RuntimePlatform) GoString() string {
	return s.String()
}

// SetCpuArchitecture sets the CpuArchitecture field's value.
func (s *RuntimePlatform) SetCpuArchitecture(v string) *RuntimePlatform {
	s.CpuArchitecture = &v
	return s
}

// SetOperatingSystemFamily sets the OperatingSystemFamily field's value.
func (s *RuntimePlatform) SetOperatingSystemFamily(v string) *RuntimePlatform {
	s.OperatingSystemFamily = &v
	return s
}

// A floating-point percentage of the desired number of tasks to place and keep
// running in the task set.
type Scale struct {
	_ struct{} `type:"structure"`

	// The unit of measure for the scale value.
	Unit *string `locationName:"unit" type:"string" enum:"ScaleUnit"`

	// The value, specified as a percent total of a service's desiredCount, to scale
	// the task set. Accepted values are numbers between 0 and 100.
	Value *float64 `locationName:"value" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Scale) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Scale) GoString() string {
	return s.String()
}

// SetUnit sets the Unit field's value.
func (s *Scale) SetUnit(v string) *Scale {
	s.Unit = &v
	return s
}

// SetValue sets the Value field's value.
func (s *Scale) SetValue(v float64) *Scale {
	s.Value = &v
	return s
}

// An object representing the secret to expose to your container. Secrets can
// be exposed to a container in the following ways:
//
//   - To inject sensitive data into your containers as environment variables,
//     use the secrets container definition parameter.
//
//   - To reference sensitive information in the log configuration of a container,
//     use the secretOptions container definition parameter.
//
// For more information, see Specifying sensitive data (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data.html)
// in the Amazon Elastic Container Service Developer Guide.
type Secret struct {
	_ struct{} `type:"structure"`

	// The name of the secret.
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true"`

	// The secret to expose to the container. The supported values are either the
	// full ARN of the Secrets Manager secret or the full ARN of the parameter in
	// the SSM Parameter Store.
	//
	// For information about the require Identity and Access Management permissions,
	// see Required IAM permissions for Amazon ECS secrets (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data-secrets.html#secrets-iam)
	// (for Secrets Manager) or Required IAM permissions for Amazon ECS secrets
	// (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data-parameters.html)
	// (for Systems Manager Parameter store) in the Amazon Elastic Container Service
	// Developer Guide.
	//
	// If the SSM Parameter Store parameter exists in the same Region as the task
	// you're launching, then you can use either the full ARN or name of the parameter.
	// If the parameter exists in a different Region, then the full ARN must be
	// specified.
	//
	// ValueFrom is a required field
	ValueFrom *string `locationName:"valueFrom" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Secret) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Secret) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *Secret) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Secret"}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.ValueFrom == nil {
		invalidParams.Add(request.NewErrParamRequired("ValueFrom"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetName sets the Name field's value.
func (s *Secret) SetName(v string) *Secret {
	s.Name = &v
	return s
}

// SetValueFrom sets the ValueFrom field's value.
func (s *Secret) SetValueFrom(v string) *Secret {
	s.ValueFrom = &v
	return s
}

// These errors are usually caused by a server issue.
type ServerException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServerException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServerException) GoString() string {
	return s.String()
}

func newErrorServerException(v protocol.ResponseMetadata) error {
	return &ServerException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ServerException) Code() string {
	return "ServerException"
}

// Message returns the exception's message.
func (s *ServerException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ServerException) OrigErr() error {
	return nil
}

func (s *ServerException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *ServerException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ServerException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Details on a service within a cluster.
type Service struct {
	_ struct{} `type:"structure"`

	// The capacity provider strategy the service uses. When using the DescribeServices
	// API, this field is omitted if the service was created using a launch type.
	CapacityProviderStrategy []*CapacityProviderStrategyItem `locationName:"capacityProviderStrategy" type:"list"`

	// The Amazon Resource Name (ARN) of the cluster that hosts the service.
	ClusterArn *string `locationName:"clusterArn" type:"string"`

	// The Unix timestamp for the time when the service was created.
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp"`

	// The principal that created the service.
	CreatedBy *string `locationName:"createdBy" type:"string"`

	// Optional deployment parameters that control how many tasks run during the
	// deployment and the ordering of stopping and starting tasks.
	DeploymentConfiguration *DeploymentConfiguration `locationName:"deploymentConfiguration" type:"structure"`

	// The deployment controller type the service is using.
	DeploymentController *DeploymentController `locationName:"deploymentController" type:"structure"`

	// The current state of deployments for the service.
	Deployments []*Deployment `locationName:"deployments" type:"list"`

	// The desired number of instantiations of the task definition to keep running
	// on the service. This value is specified when the service is created with
	// CreateService, and it can be modified with UpdateService.
	DesiredCount *int64 `locationName:"desiredCount" type:"integer"`

	// Determines whether to use Amazon ECS managed tags for the tasks in the service.
	// For more information, see Tagging Your Amazon ECS Resources (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-using-tags.html)
	// in the Amazon Elastic Container Service Developer Guide.
	EnableECSManagedTags *bool `locationName:"enableECSManagedTags" type:"boolean"`

	// Determines whether the execute command functionality is turned on for the
	// service. If true, the execute command functionality is turned on for all
	// containers in tasks as part of the service.
	EnableExecuteCommand *bool `locationName:"enableExecuteCommand" type:"boolean"`

	// The event stream for your service. A maximum of 100 of the latest events
	// are displayed.
	Events []*ServiceEvent `locationName:"events" type:"list"`

	// The period of time, in seconds, that the Amazon ECS service scheduler ignores
	// unhealthy Elastic Load Balancing target health checks after a task has first
	// started.
	HealthCheckGracePeriodSeconds *int64 `locationName:"healthCheckGracePeriodSeconds" type:"integer"`

	// The launch type the service is using. When using the DescribeServices API,
	// this field is omitted if the service was created using a capacity provider
	// strategy.
	LaunchType *string `locationName:"launchType" type:"string" enum:"LaunchType"`

	// A list of Elastic Load Balancing load balancer objects. It contains the load
	// balancer name, the container name, and the container port to access from
	// the load balancer. The container name is as it appears in a container definition.
	LoadBalancers []*LoadBalancer `locationName:"loadBalancers" type:"list"`

	// The VPC subnet and security group configuration for tasks that receive their
	// own elastic network interface by using the awsvpc networking mode.
	NetworkConfiguration *NetworkConfiguration `locationName:"networkConfiguration" type:"structure"`

	// The number of tasks in the cluster that are in the PENDING state.
	PendingCount *int64 `locationName:"pendingCount" type:"integer"`

	// The placement constraints for the tasks in the service.
	PlacementConstraints []*PlacementConstraint `locationName:"placementConstraints" type:"list"`

	// The placement strategy that determines how tasks for the service are placed.
	PlacementStrategy []*PlacementStrategy `locationName:"placementStrategy" type:"list"`

	// The operating system that your tasks in the service run on. A platform family
	// is specified only for tasks using the Fargate launch type.
	//
	// All tasks that run as part of this service must use the same platformFamily
	// value as the service (for example, LINUX).
	PlatformFamily *string `locationName:"platformFamily" type:"string"`

	// The platform version to run your service on. A platform version is only specified
	// for tasks that are hosted on Fargate. If one isn't specified, the LATEST
	// platform version is used. For more information, see Fargate Platform Versions
	// (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html)
	// in the Amazon Elastic Container Service Developer Guide.
	PlatformVersion *string `locationName:"platformVersion" type:"string"`

	// Determines whether to propagate the tags from the task definition or the
	// service to the task. If no value is specified, the tags aren't propagated.
	PropagateTags *string `locationName:"propagateTags" type:"string" enum:"PropagateTags"`

	// The ARN of the IAM role that's associated with the service. It allows the
	// Amazon ECS container agent to register container instances with an Elastic
	// Load Balancing load balancer.
	RoleArn *string `locationName:"roleArn" type:"string"`

	// The number of tasks in the cluster that are in the RUNNING state.
	RunningCount *int64 `locationName:"runningCount" type:"integer"`

	// The scheduling strategy to use for the service. For more information, see
	// Services (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html).
	//
	// There are two service scheduler strategies available.
	//
	//    * REPLICA-The replica scheduling strategy places and maintains the desired
	//    number of tasks across your cluster. By default, the service scheduler
	//    spreads tasks across Availability Zones. You can use task placement strategies
	//    and constraints to customize task placement decisions.
	//
	//    * DAEMON-The daemon scheduling strategy deploys exactly one task on each
	//    active container instance. This task meets all of the task placement constraints
	//    that you specify in your cluster. The service scheduler also evaluates
	//    the task placement constraints for running tasks. It stop tasks that don't
	//    meet the placement constraints. Fargate tasks don't support the DAEMON
	//    scheduling strategy.
	SchedulingStrategy *string `locationName:"schedulingStrategy" type:"string" enum:"SchedulingStrategy"`

	// The ARN that identifies the service. For more information about the ARN format,
	// see Amazon Resource Name (ARN) (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids)
	// in the Amazon ECS Developer Guide.
	ServiceArn *string `locationName:"serviceArn" type:"string"`

	// The name of your service. Up to 255 letters (uppercase and lowercase), numbers,
	// underscores, and hyphens are allowed. Service names must be unique within
	// a cluster. However, you can have similarly named services in multiple clusters
	// within a Region or across multiple Regions.
	ServiceName *string `locationName:"serviceName" type:"string"`

	// The details for the service discovery registries to assign to this service.
	// For more information, see Service Discovery (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-discovery.html).
	ServiceRegistries []*ServiceRegistry `locationName:"serviceRegistries" type:"list"`

	// The status of the service. The valid values are ACTIVE, DRAINING, or INACTIVE.
	Status *string `locationName:"status" type:"string"`

	// The metadata that you apply to the service to help you categorize and organize
	// them. Each tag consists of a key and an optional value. You define bot the
	// key and value.
	//
	// The following basic restrictions apply to tags:
	//
	//    * Maximum number of tags per resource - 50
	//
	//    * For each resource, each tag key must be unique, and each tag key can
	//    have only one value.
	//
	//    * Maximum key length - 128 Unicode characters in UTF-8
	//
	//    * Maximum value length - 256 Unicode characters in UTF-8
	//
	//    * If your tagging schema is used across multiple services and resources,
	//    remember that other services may have restrictions on allowed characters.
	//    Generally allowed characters are: letters, numbers, and spaces representable
	//    in UTF-8, and the following characters: + - = . _ : / @.
	//
	//    * Tag keys and values are case-sensitive.
	//
	//    * Do not use aws:, AWS:, or any upper or lowercase combination of such
	//    as a prefix for either keys or values as it is reserved for Amazon Web
	//    Services use. You cannot edit or delete tag keys or values with this prefix.
	//    Tags with this prefix do not count against your tags per resource limit.
	Tags []*Tag `locationName:"tags" type:"list"`

	// The task definition to use for tasks in the service. This value is specified
	// when the service is created with CreateService, and it can be modified with
	// UpdateService.
	TaskDefinition *string `locationName:"taskDefinition" type:"string"`

	// Information about a set of Amazon ECS tasks in either an CodeDeploy or an
	// EXTERNAL deployment. An Amazon ECS task set includes details such as the
	// desired number of tasks, how many tasks are running, and whether the task
	// set serves production traffic.
	TaskSets []*TaskSet `locationName:"taskSets" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Service) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Service) GoString() string {
	return s.String()
}

// SetCapacityProviderStrategy sets the CapacityProviderStrategy field's value.
func (s *Service) SetCapacityProviderStrategy(v []*CapacityProviderStrategyItem) *Service {
	s.CapacityProviderStrategy = v
	return s
}

// SetClusterArn sets the ClusterArn field's value.
func (s *Service) SetClusterArn(v string) *Service {
	s.ClusterArn = &v
	return s
}

// SetCreatedAt sets the CreatedAt field's value.
func (s *Service) SetCreatedAt(v time.Time) *Service {
	s.CreatedAt = &v
	return s
}

// SetCreatedBy sets the CreatedBy field's value.
func (s *Service) SetCreatedBy(v string) *Service {
	s.CreatedBy = &v
	return s
}

// SetDeploymentConfiguration sets the DeploymentConfiguration field's value.
func (s *Service) SetDeploymentConfiguration(v *DeploymentConfiguration) *Service {
	s.DeploymentConfiguration = v
	return s
}

// SetDeploymentController sets the DeploymentController field's value.
func (s *Service) SetDeploymentController(v *DeploymentController) *Service {
	s.DeploymentController = v
	return s
}

// SetDeployments sets the Deployments field's value.
func (s *Service) SetDeployments(v []*Deployment) *Service {
	s.Deployments = v
	return s
}

// SetDesiredCount sets the DesiredCount field's value.
func (s *Service) SetDesiredCount(v int64) *Service {
	s.DesiredCount = &v
	return s
}

// SetEnableECSManagedTags sets the EnableECSManagedTags field's value.
func (s *Service) SetEnableECSManagedTags(v bool) *Service {
	s.EnableECSManagedTags = &v
	return s
}

// SetEnableExecuteCommand sets the EnableExecuteCommand field's value.
func (s *Service) SetEnableExecuteCommand(v bool) *Service {
	s.EnableExecuteCommand = &v
	return s
}

// SetEvents sets the Events field's value.
func (s *Service) SetEvents(v []*ServiceEvent) *Service {
	s.Events = v
	return s
}

// SetHealthCheckGracePeriodSeconds sets the HealthCheckGracePeriodSeconds field's value.
func (s *Service) SetHealthCheckGracePeriodSeconds(v int64) *Service {
	s.HealthCheckGracePeriodSeconds = &v
	return s
}

// SetLaunchType sets the LaunchType field's value.
func (s *Service) SetLaunchType(v string) *Service {
	s.LaunchType = &v
	return s
}

// SetLoadBalancers sets the LoadBalancers field's value.
func (s *Service) SetLoadBalancers(v []*LoadBalancer) *Service {
	s.LoadBalancers = v
	return s
}

// SetNetworkConfiguration sets the NetworkConfiguration field's value.
func (s *Service) SetNetworkConfiguration(v *NetworkConfiguration) *Service {
	s.NetworkConfiguration = v
	return s
}

// SetPendingCount sets the PendingCount field's value.
func (s *Service) SetPendingCount(v int64) *Service {
	s.PendingCount = &v
	return s
}

// SetPlacementConstraints sets the PlacementConstraints field's value.
func (s *Service) SetPlacementConstraints(v []*PlacementConstraint) *Service {
	s.PlacementConstraints = v
	return s
}

// SetPlacementStrategy sets the PlacementStrategy field's value.
func (s *Service) SetPlacementStrategy(v []*PlacementStrategy) *Service {
	s.PlacementStrategy = v
	return s
}

// SetPlatformFamily sets the PlatformFamily field's value.
func (s *Service) SetPlatformFamily(v string) *Service {
	s.PlatformFamily = &v
	return s
}

// SetPlatformVersion sets the PlatformVersion field's value.
func (s *Service) SetPlatformVersion(v string) *Service {
	s.PlatformVersion = &v
	return s
}

// SetPropagateTags sets the PropagateTags field's value.
func (s *Service) SetPropagateTags(v string) *Service {
	s.PropagateTags = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *Service) SetRoleArn(v string) *Service {
	s.RoleArn = &v
	return s
}

// SetRunningCount sets the RunningCount field's value.
func (s *Service) SetRunningCount(v int64) *Service {
	s.RunningCount = &v
	return s
}

// SetSchedulingStrategy sets the SchedulingStrategy field's value.
func (s *Service) SetSchedulingStrategy(v string) *Service {
	s.SchedulingStrategy = &v
	return s
}

// SetServiceArn sets the ServiceArn field's value.
func (s *Service) SetServiceArn(v string) *Service {
	s.ServiceArn = &v
	return s
}

// SetServiceName sets the ServiceName field's value.
func (s *Service) SetServiceName(v string) *Service {
	s.ServiceName = &v
	return s
}

// SetServiceRegistries sets the ServiceRegistries field's value.
func (s *Service) SetServiceRegistries(v []*ServiceRegistry) *Service {
	s.ServiceRegistries = v
	return s
}

// SetStatus sets the Status field's value.
func (s *Service) SetStatus(v string) *Service {
	s.Status = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *Service) SetTags(v []*Tag) *Service {
	s.Tags = v
	return s
}

// SetTaskDefinition sets the TaskDefinition field's value.
func (s *Service) SetTaskDefinition(v string) *Service {
	s.TaskDefinition = &v
	return s
}

// SetTaskSets sets the TaskSets field's value.
func (s *Service) SetTaskSets(v []*TaskSet) *Service {
	s.TaskSets = v
	return s
}

// Each alias ("endpoint") is a fully-qualified name and port number that other
// tasks ("clients") can use to connect to this service.
//
// Each name and port mapping must be unique within the namespace.
//
// Tasks that run in a namespace can use short names to connect to services
// in the namespace. Tasks can connect to services across all of the clusters
// in the namespace. Tasks connect through a managed proxy container that collects
// logs and metrics for increased visibility. Only the tasks that Amazon ECS
// services create are supported with Service Connect. For more information,
// see Service Connect (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html)
// in the Amazon Elastic Container Service Developer Guide.
type ServiceConnectClientAlias struct {
	_ struct{} `type:"structure"`

	// The dnsName is the name that you use in the applications of client tasks
	// to connect to this service. The name must be a valid DNS name but doesn't
	// need to be fully-qualified. The name can include up to 127 characters. The
	// name can include lowercase letters, numbers, underscores (_), hyphens (-),
	// and periods (.). The name can't start with a hyphen.
	//
	// If this parameter isn't specified, the default value of discoveryName.namespace
	// is used. If the discoveryName isn't specified, the port mapping name from
	// the task definition is used in portName.namespace.
	//
	// To avoid changing your applications in client Amazon ECS services, set this
	// to the same name that the client application uses by default. For example,
	// a few common names are database, db, or the lowercase name of a database,
	// such as mysql or redis. For more information, see Service Connect (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html)
	// in the Amazon Elastic Container Service Developer Guide.
	DnsName *string `locationName:"dnsName" type:"string"`

	// The listening port number for the Service Connect proxy. This port is available
	// inside of all of the tasks within the same namespace.
	//
	// To avoid changing your applications in client Amazon ECS services, set this
	// to the same port that the client application uses by default. For more information,
	// see Service Connect (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// Port is a required field
	Port *int64 `locationName:"port" type:"integer" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceConnectClientAlias) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceConnectClientAlias) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ServiceConnectClientAlias) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ServiceConnectClientAlias"}
	if s.Port == nil {
		invalidParams.Add(request.NewErrParamRequired("Port"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDnsName sets the DnsName field's value.
func (s *ServiceConnectClientAlias) SetDnsName(v string) *ServiceConnectClientAlias {
	s.DnsName = &v
	return s
}

// SetPort sets the Port field's value.
func (s *ServiceConnectClientAlias) SetPort(v int64) *ServiceConnectClientAlias {
	s.Port = &v
	return s
}

// The Service Connect configuration of your Amazon ECS service. The configuration
// for this service to discover and connect to services, and be discovered by,
// and connected from, other services within a namespace.
//
// Tasks that run in a namespace can use short names to connect to services
// in the namespace. Tasks can connect to services across all of the clusters
// in the namespace. Tasks connect through a managed proxy container that collects
// logs and metrics for increased visibility. Only the tasks that Amazon ECS
// services create are supported with Service Connect. For more information,
// see Service Connect (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html)
// in the Amazon Elastic Container Service Developer Guide.
type ServiceConnectConfiguration struct {
	_ struct{} `type:"structure"`

	// Specifies whether to use Service Connect with this service.
	//
	// Enabled is a required field
	Enabled *bool `locationName:"enabled" type:"boolean" required:"true"`

	// The log configuration for the container. This parameter maps to LogConfig
	// in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
	// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
	// and the --log-driver option to docker run (https://docs.docker.com/engine/reference/commandline/run/).
	//
	// By default, containers use the same logging driver that the Docker daemon
	// uses. However, the container might use a different logging driver than the
	// Docker daemon by specifying a log driver configuration in the container definition.
	// For more information about the options for different supported log drivers,
	// see Configure logging drivers (https://docs.docker.com/engine/admin/logging/overview/)
	// in the Docker documentation.
	//
	// Understand the following when specifying a log configuration for your containers.
	//
	//    * Amazon ECS currently supports a subset of the logging drivers available
	//    to the Docker daemon. Additional log drivers may be available in future
	//    releases of the Amazon ECS container agent. For tasks on Fargate, the
	//    supported log drivers are awslogs, splunk, and awsfirelens. For tasks
	//    hosted on Amazon EC2 instances, the supported log drivers are awslogs,
	//    fluentd, gelf, json-file, journald, logentries,syslog, splunk, and awsfirelens.
	//
	//    * This parameter requires version 1.18 of the Docker Remote API or greater
	//    on your container instance.
	//
	//    * For tasks that are hosted on Amazon EC2 instances, the Amazon ECS container
	//    agent must register the available logging drivers with the ECS_AVAILABLE_LOGGING_DRIVERS
	//    environment variable before containers placed on that instance can use
	//    these log configuration options. For more information, see Amazon ECS
	//    container agent configuration (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html)
	//    in the Amazon Elastic Container Service Developer Guide.
	//
	//    * For tasks that are on Fargate, because you don't have access to the
	//    underlying infrastructure your tasks are hosted on, any additional software
	//    needed must be installed outside of the task. For example, the Fluentd
	//    output aggregators or a remote host running Logstash to send Gelf logs
	//    to.
	LogConfiguration *LogConfiguration `locationName:"logConfiguration" type:"structure"`

	// The namespace name or full Amazon Resource Name (ARN) of the Cloud Map namespace
	// for use with Service Connect. The namespace must be in the same Amazon Web
	// Services Region as the Amazon ECS service and cluster. The type of namespace
	// doesn't affect Service Connect. For more information about Cloud Map, see
	// Working with Services (https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-services.html)
	// in the Cloud Map Developer Guide.
	Namespace *string `locationName:"namespace" type:"string"`

	// The list of Service Connect service objects. These are names and aliases
	// (also known as endpoints) that are used by other Amazon ECS services to connect
	// to this service.
	//
	// This field is not required for a "client" Amazon ECS service that's a member
	// of a namespace only to connect to other services within the namespace. An
	// example of this would be a frontend application that accepts incoming requests
	// from either a load balancer that's attached to the service or by other means.
	//
	// An object selects a port from the task definition, assigns a name for the
	// Cloud Map service, and a list of aliases (endpoints) and ports for client
	// applications to refer to this service.
	Services []*ServiceConnectService `locationName:"services" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceConnectConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceConnectConfiguration) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ServiceConnectConfiguration) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ServiceConnectConfiguration"}
	if s.Enabled == nil {
		invalidParams.Add(request.NewErrParamRequired("Enabled"))
	}
	if s.LogConfiguration != nil {
		if err := s.LogConfiguration.Validate(); err != nil {
			invalidParams.AddNested("LogConfiguration", err.(request.ErrInvalidParams))
		}
	}
	if s.Services != nil {
		for i, v := range s.Services {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Services", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetEnabled sets the Enabled field's value.
func (s *ServiceConnectConfiguration) SetEnabled(v bool) *ServiceConnectConfiguration {
	s.Enabled = &v
	return s
}

// SetLogConfiguration sets the LogConfiguration field's value.
func (s *ServiceConnectConfiguration) SetLogConfiguration(v *LogConfiguration) *ServiceConnectConfiguration {
	s.LogConfiguration = v
	return s
}

// SetNamespace sets the Namespace field's value.
func (s *ServiceConnectConfiguration) SetNamespace(v string) *ServiceConnectConfiguration {
	s.Namespace = &v
	return s
}

// SetServices sets the Services field's value.
func (s *ServiceConnectConfiguration) SetServices(v []*ServiceConnectService) *ServiceConnectConfiguration {
	s.Services = v
	return s
}

// The Service Connect service object configuration. For more information, see
// Service Connect (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html)
// in the Amazon Elastic Container Service Developer Guide.
type ServiceConnectService struct {
	_ struct{} `type:"structure"`

	// The list of client aliases for this Service Connect service. You use these
	// to assign names that can be used by client applications. The maximum number
	// of client aliases that you can have in this list is 1.
	//
	// Each alias ("endpoint") is a fully-qualified name and port number that other
	// Amazon ECS tasks ("clients") can use to connect to this service.
	//
	// Each name and port mapping must be unique within the namespace.
	//
	// For each ServiceConnectService, you must provide at least one clientAlias
	// with one port.
	ClientAliases []*ServiceConnectClientAlias `locationName:"clientAliases" type:"list"`

	// The discoveryName is the name of the new Cloud Map service that Amazon ECS
	// creates for this Amazon ECS service. This must be unique within the Cloud
	// Map namespace. The name can contain up to 64 characters. The name can include
	// lowercase letters, numbers, underscores (_), and hyphens (-). The name can't
	// start with a hyphen.
	//
	// If the discoveryName isn't specified, the port mapping name from the task
	// definition is used in portName.namespace.
	DiscoveryName *string `locationName:"discoveryName" type:"string"`

	// The port number for the Service Connect proxy to listen on.
	//
	// Use the value of this field to bypass the proxy for traffic on the port number
	// specified in the named portMapping in the task definition of this application,
	// and then use it in your VPC security groups to allow traffic into the proxy
	// for this Amazon ECS service.
	//
	// In awsvpc mode and Fargate, the default value is the container port number.
	// The container port number is in the portMapping in the task definition. In
	// bridge mode, the default value is the ephemeral port of the Service Connect
	// proxy.
	IngressPortOverride *int64 `locationName:"ingressPortOverride" type:"integer"`

	// The portName must match the name of one of the portMappings from all the
	// containers in the task definition of this Amazon ECS service.
	//
	// PortName is a required field
	PortName *string `locationName:"portName" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceConnectService) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceConnectService) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ServiceConnectService) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ServiceConnectService"}
	if s.PortName == nil {
		invalidParams.Add(request.NewErrParamRequired("PortName"))
	}
	if s.ClientAliases != nil {
		for i, v := range s.ClientAliases {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ClientAliases", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetClientAliases sets the ClientAliases field's value.
func (s *ServiceConnectService) SetClientAliases(v []*ServiceConnectClientAlias) *ServiceConnectService {
	s.ClientAliases = v
	return s
}

// SetDiscoveryName sets the DiscoveryName field's value.
func (s *ServiceConnectService) SetDiscoveryName(v string) *ServiceConnectService {
	s.DiscoveryName = &v
	return s
}

// SetIngressPortOverride sets the IngressPortOverride field's value.
func (s *ServiceConnectService) SetIngressPortOverride(v int64) *ServiceConnectService {
	s.IngressPortOverride = &v
	return s
}

// SetPortName sets the PortName field's value.
func (s *ServiceConnectService) SetPortName(v string) *ServiceConnectService {
	s.PortName = &v
	return s
}

// The Service Connect resource. Each configuration maps a discovery name to
// a Cloud Map service name. The data is stored in Cloud Map as part of the
// Service Connect configuration for each discovery name of this Amazon ECS
// service.
//
// A task can resolve the dnsName for each of the clientAliases of a service.
// However a task can't resolve the discovery names. If you want to connect
// to a service, refer to the ServiceConnectConfiguration of that service for
// the list of clientAliases that you can use.
type ServiceConnectServiceResource struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) for the namespace in Cloud Map that matches
	// the discovery name for this Service Connect resource. You can use this ARN
	// in other integrations with Cloud Map. However, Service Connect can't ensure
	// connectivity outside of Amazon ECS.
	DiscoveryArn *string `locationName:"discoveryArn" type:"string"`

	// The discovery name of this Service Connect resource.
	//
	// The discoveryName is the name of the new Cloud Map service that Amazon ECS
	// creates for this Amazon ECS service. This must be unique within the Cloud
	// Map namespace. The name can contain up to 64 characters. The name can include
	// lowercase letters, numbers, underscores (_), and hyphens (-). The name can't
	// start with a hyphen.
	//
	// If the discoveryName isn't specified, the port mapping name from the task
	// definition is used in portName.namespace.
	DiscoveryName *string `locationName:"discoveryName" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceConnectServiceResource) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceConnectServiceResource) GoString() string {
	return s.String()
}

// SetDiscoveryArn sets the DiscoveryArn field's value.
func (s *ServiceConnectServiceResource) SetDiscoveryArn(v string) *ServiceConnectServiceResource {
	s.DiscoveryArn = &v
	return s
}

// SetDiscoveryName sets the DiscoveryName field's value.
func (s *ServiceConnectServiceResource) SetDiscoveryName(v string) *ServiceConnectServiceResource {
	s.DiscoveryName = &v
	return s
}

// The details for an event that's associated with a service.
type ServiceEvent struct {
	_ struct{} `type:"structure"`

	// The Unix timestamp for the time when the event was triggered.
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp"`

	// The ID string for the event.
	Id *string `locationName:"id" type:"string"`

	// The event message.
	Message *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceEvent) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceEvent) GoString() string {
	return s.String()
}

// SetCreatedAt sets the CreatedAt field's value.
func (s *ServiceEvent) SetCreatedAt(v time.Time) *ServiceEvent {
	s.CreatedAt = &v
	return s
}

// SetId sets the Id field's value.
func (s *ServiceEvent) SetId(v string) *ServiceEvent {
	s.Id = &v
	return s
}

// SetMessage sets the Message field's value.
func (s *ServiceEvent) SetMessage(v string) *ServiceEvent {
	s.Message = &v
	return s
}

// The specified service isn't active. You can't update a service that's inactive.
// If you have previously deleted a service, you can re-create it with CreateService.
type ServiceNotActiveException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceNotActiveException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceNotActiveException) GoString() string {
	return s.String()
}

func newErrorServiceNotActiveException(v protocol.ResponseMetadata) error {
	return &ServiceNotActiveException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ServiceNotActiveException) Code() string {
	return "ServiceNotActiveException"
}

// Message returns the exception's message.
func (s *ServiceNotActiveException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ServiceNotActiveException) OrigErr() error {
	return nil
}

func (s *ServiceNotActiveException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *ServiceNotActiveException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ServiceNotActiveException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The specified service wasn't found. You can view your available services
// with ListServices. Amazon ECS services are cluster specific and Region specific.
type ServiceNotFoundException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceNotFoundException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceNotFoundException) GoString() string {
	return s.String()
}

func newErrorServiceNotFoundException(v protocol.ResponseMetadata) error {
	return &ServiceNotFoundException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ServiceNotFoundException) Code() string {
	return "ServiceNotFoundException"
}

// Message returns the exception's message.
func (s *ServiceNotFoundException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ServiceNotFoundException) OrigErr() error {
	return nil
}

func (s *ServiceNotFoundException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *ServiceNotFoundException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ServiceNotFoundException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The details for the service registry.
//
// Each service may be associated with one service registry. Multiple service
// registries for each service are not supported.
//
// When you add, update, or remove the service registries configuration, Amazon
// ECS starts a new deployment. New tasks are registered and deregistered to
// the updated service registry configuration.
type ServiceRegistry struct {
	_ struct{} `type:"structure"`

	// The container name value to be used for your service discovery service. It's
	// already specified in the task definition. If the task definition that your
	// service task specifies uses the bridge or host network mode, you must specify
	// a containerName and containerPort combination from the task definition. If
	// the task definition that your service task specifies uses the awsvpc network
	// mode and a type SRV DNS record is used, you must specify either a containerName
	// and containerPort combination or a port value. However, you can't specify
	// both.
	ContainerName *string `locationName:"containerName" type:"string"`

	// The port value to be used for your service discovery service. It's already
	// specified in the task definition. If the task definition your service task
	// specifies uses the bridge or host network mode, you must specify a containerName
	// and containerPort combination from the task definition. If the task definition
	// your service task specifies uses the awsvpc network mode and a type SRV DNS
	// record is used, you must specify either a containerName and containerPort
	// combination or a port value. However, you can't specify both.
	ContainerPort *int64 `locationName:"containerPort" type:"integer"`

	// The port value used if your service discovery service specified an SRV record.
	// This field might be used if both the awsvpc network mode and SRV records
	// are used.
	Port *int64 `locationName:"port" type:"integer"`

	// The Amazon Resource Name (ARN) of the service registry. The currently supported
	// service registry is Cloud Map. For more information, see CreateService (https://docs.aws.amazon.com/cloud-map/latest/api/API_CreateService.html).
	RegistryArn *string `locationName:"registryArn" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceRegistry) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceRegistry) GoString() string {
	return s.String()
}

// SetContainerName sets the ContainerName field's value.
func (s *ServiceRegistry) SetContainerName(v string) *ServiceRegistry {
	s.ContainerName = &v
	return s
}

// SetContainerPort sets the ContainerPort field's value.
func (s *ServiceRegistry) SetContainerPort(v int64) *ServiceRegistry {
	s.ContainerPort = &v
	return s
}

// SetPort sets the Port field's value.
func (s *ServiceRegistry) SetPort(v int64) *ServiceRegistry {
	s.Port = &v
	return s
}

// SetRegistryArn sets the RegistryArn field's value.
func (s *ServiceRegistry) SetRegistryArn(v string) *ServiceRegistry {
	s.RegistryArn = &v
	return s
}

// The details for the execute command session.
type Session struct {
	_ struct{} `type:"structure"`

	// The ID of the execute command session.
	SessionId *string `locationName:"sessionId" type:"string"`

	// A URL to the managed agent on the container that the SSM Session Manager
	// client uses to send commands and receive output from the container.
	StreamUrl *string `locationName:"streamUrl" type:"string"`

	// An encrypted token value containing session and caller information. It's
	// used to authenticate the connection to the container.
	//
	// TokenValue is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by Session's
	// String and GoString methods.
	TokenValue *string `locationName:"tokenValue" type:"string" sensitive:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Session) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Session) GoString() string {
	return s.String()
}

// SetSessionId sets the SessionId field's value.
func (s *Session) SetSessionId(v string) *Session {
	s.SessionId = &v
	return s
}

// SetStreamUrl sets the StreamUrl field's value.
func (s *Session) SetStreamUrl(v string) *Session {
	s.StreamUrl = &v
	return s
}

// SetTokenValue sets the TokenValue field's value.
func (s *Session) SetTokenValue(v string) *Session {
	s.TokenValue = &v
	return s
}

// The current account setting for a resource.
type Setting struct {
	_ struct{} `type:"structure"`

	// The Amazon ECS resource name.
	Name *string `locationName:"name" type:"string" enum:"SettingName"`

	// The ARN of the principal. It can be a user, role, or the root user. If this
	// field is omitted, the authenticated user is assumed.
	PrincipalArn *string `locationName:"principalArn" type:"string"`

	// Indicates whether Amazon Web Services manages the account setting, or if
	// the user manages it.
	//
	// aws_managed account settings are read-only, as Amazon Web Services manages
	// such on the customer's behalf. Currently, the guardDutyActivate account setting
	// is the only one Amazon Web Services manages.
	Type *string `locationName:"type" type:"string" enum:"SettingType"`

	// Determines whether the account setting is on or off for the specified resource.
	Value *string `locationName:"value" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Setting) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Setting) GoString() string {
	return s.String()
}

// SetName sets the Name field's value.
func (s *Setting) SetName(v string) *Setting {
	s.Name = &v
	return s
}

// SetPrincipalArn sets the PrincipalArn field's value.
func (s *Setting) SetPrincipalArn(v string) *Setting {
	s.PrincipalArn = &v
	return s
}

// SetType sets the Type field's value.
func (s *Setting) SetType(v string) *Setting {
	s.Type = &v
	return s
}

// SetValue sets the Value field's value.
func (s *Setting) SetValue(v string) *Setting {
	s.Value = &v
	return s
}

type StartTaskInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the cluster where to
	// start your task. If you do not specify a cluster, the default cluster is
	// assumed.
	Cluster *string `locationName:"cluster" type:"string"`

	// The container instance IDs or full ARN entries for the container instances
	// where you would like to place your task. You can specify up to 10 container
	// instances.
	//
	// ContainerInstances is a required field
	ContainerInstances []*string `locationName:"containerInstances" type:"list" required:"true"`

	// Specifies whether to use Amazon ECS managed tags for the task. For more information,
	// see Tagging Your Amazon ECS Resources (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-using-tags.html)
	// in the Amazon Elastic Container Service Developer Guide.
	EnableECSManagedTags *bool `locationName:"enableECSManagedTags" type:"boolean"`

	// Whether or not the execute command functionality is turned on for the task.
	// If true, this turns on the execute command functionality on all containers
	// in the task.
	EnableExecuteCommand *bool `locationName:"enableExecuteCommand" type:"boolean"`

	// The name of the task group to associate with the task. The default value
	// is the family name of the task definition (for example, family:my-family-name).
	Group *string `locationName:"group" type:"string"`

	// The VPC subnet and security group configuration for tasks that receive their
	// own elastic network interface by using the awsvpc networking mode.
	NetworkConfiguration *NetworkConfiguration `locationName:"networkConfiguration" type:"structure"`

	// A list of container overrides in JSON format that specify the name of a container
	// in the specified task definition and the overrides it receives. You can override
	// the default command for a container (that's specified in the task definition
	// or Docker image) with a command override. You can also override existing
	// environment variables (that are specified in the task definition or Docker
	// image) on a container or add new environment variables to it with an environment
	// override.
	//
	// A total of 8192 characters are allowed for overrides. This limit includes
	// the JSON formatting characters of the override structure.
	Overrides *TaskOverride `locationName:"overrides" type:"structure"`

	// Specifies whether to propagate the tags from the task definition or the service
	// to the task. If no value is specified, the tags aren't propagated.
	PropagateTags *string `locationName:"propagateTags" type:"string" enum:"PropagateTags"`

	// The reference ID to use for the task.
	ReferenceId *string `locationName:"referenceId" type:"string"`

	// An optional tag specified when a task is started. For example, if you automatically
	// trigger a task to run a batch process job, you could apply a unique identifier
	// for that job to your task with the startedBy parameter. You can then identify
	// which tasks belong to that job by filtering the results of a ListTasks call
	// with the startedBy value. Up to 36 letters (uppercase and lowercase), numbers,
	// hyphens (-), and underscores (_) are allowed.
	//
	// If a task is started by an Amazon ECS service, the startedBy parameter contains
	// the deployment ID of the service that starts it.
	StartedBy *string `locationName:"startedBy" type:"string"`

	// The metadata that you apply to the task to help you categorize and organize
	// them. Each tag consists of a key and an optional value, both of which you
	// define.
	//
	// The following basic restrictions apply to tags:
	//
	//    * Maximum number of tags per resource - 50
	//
	//    * For each resource, each tag key must be unique, and each tag key can
	//    have only one value.
	//
	//    * Maximum key length - 128 Unicode characters in UTF-8
	//
	//    * Maximum value length - 256 Unicode characters in UTF-8
	//
	//    * If your tagging schema is used across multiple services and resources,
	//    remember that other services may have restrictions on allowed characters.
	//    Generally allowed characters are: letters, numbers, and spaces representable
	//    in UTF-8, and the following characters: + - = . _ : / @.
	//
	//    * Tag keys and values are case-sensitive.
	//
	//    * Do not use aws:, AWS:, or any upper or lowercase combination of such
	//    as a prefix for either keys or values as it is reserved for Amazon Web
	//    Services use. You cannot edit or delete tag keys or values with this prefix.
	//    Tags with this prefix do not count against your tags per resource limit.
	Tags []*Tag `locationName:"tags" type:"list"`

	// The family and revision (family:revision) or full ARN of the task definition
	// to start. If a revision isn't specified, the latest ACTIVE revision is used.
	//
	// TaskDefinition is a required field
	TaskDefinition *string `locationName:"taskDefinition" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartTaskInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartTaskInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StartTaskInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StartTaskInput"}
	if s.ContainerInstances == nil {
		invalidParams.Add(request.NewErrParamRequired("ContainerInstances"))
	}
	if s.TaskDefinition == nil {
		invalidParams.Add(request.NewErrParamRequired("TaskDefinition"))
	}
	if s.NetworkConfiguration != nil {
		if err := s.NetworkConfiguration.Validate(); err != nil {
			invalidParams.AddNested("NetworkConfiguration", err.(request.ErrInvalidParams))
		}
	}
	if s.Overrides != nil {
		if err := s.Overrides.Validate(); err != nil {
			invalidParams.AddNested("Overrides", err.(request.ErrInvalidParams))
		}
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCluster sets the Cluster field's value.
func (s *StartTaskInput) SetCluster(v string) *StartTaskInput {
	s.Cluster = &v
	return s
}

// SetContainerInstances sets the ContainerInstances field's value.
func (s *StartTaskInput) SetContainerInstances(v []*string) *StartTaskInput {
	s.ContainerInstances = v
	return s
}

// SetEnableECSManagedTags sets the EnableECSManagedTags field's value.
func (s *StartTaskInput) SetEnableECSManagedTags(v bool) *StartTaskInput {
	s.EnableECSManagedTags = &v
	return s
}

// SetEnableExecuteCommand sets the EnableExecuteCommand field's value.
func (s *StartTaskInput) SetEnableExecuteCommand(v bool) *StartTaskInput {
	s.EnableExecuteCommand = &v
	return s
}

// SetGroup sets the Group field's value.
func (s *StartTaskInput) SetGroup(v string) *StartTaskInput {
	s.Group = &v
	return s
}

// SetNetworkConfiguration sets the NetworkConfiguration field's value.
func (s *StartTaskInput) SetNetworkConfiguration(v *NetworkConfiguration) *StartTaskInput {
	s.NetworkConfiguration = v
	return s
}

// SetOverrides sets the Overrides field's value.
func (s *StartTaskInput) SetOverrides(v *TaskOverride) *StartTaskInput {
	s.Overrides = v
	return s
}

// SetPropagateTags sets the PropagateTags field's value.
func (s *StartTaskInput) SetPropagateTags(v string) *StartTaskInput {
	s.PropagateTags = &v
	return s
}

// SetReferenceId sets the ReferenceId field's value.
func (s *StartTaskInput) SetReferenceId(v string) *StartTaskInput {
	s.ReferenceId = &v
	return s
}

// SetStartedBy sets the StartedBy field's value.
func (s *StartTaskInput) SetStartedBy(v string) *StartTaskInput {
	s.StartedBy = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *StartTaskInput) SetTags(v []*Tag) *StartTaskInput {
	s.Tags = v
	return s
}

// SetTaskDefinition sets the TaskDefinition field's value.
func (s *StartTaskInput) SetTaskDefinition(v string) *StartTaskInput {
	s.TaskDefinition = &v
	return s
}

type StartTaskOutput struct {
	_ struct{} `type:"structure"`

	// Any failures associated with the call.
	Failures []*Failure `locationName:"failures" type:"list"`

	// A full description of the tasks that were started. Each task that was successfully
	// placed on your container instances is described.
	Tasks []*Task `locationName:"tasks" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartTaskOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartTaskOutput) GoString() string {
	return s.String()
}

// SetFailures sets the Failures field's value.
func (s *StartTaskOutput) SetFailures(v []*Failure) *StartTaskOutput {
	s.Failures = v
	return s
}

// SetTasks sets the Tasks field's value.
func (s *StartTaskOutput) SetTasks(v []*Task) *StartTaskOutput {
	s.Tasks = v
	return s
}

type StopTaskInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that hosts
	// the task to stop. If you do not specify a cluster, the default cluster is
	// assumed.
	Cluster *string `locationName:"cluster" type:"string"`

	// An optional message specified when a task is stopped. For example, if you're
	// using a custom scheduler, you can use this parameter to specify the reason
	// for stopping the task here, and the message appears in subsequent DescribeTasks
	// API operations on this task. Up to 255 characters are allowed in this message.
	Reason *string `locationName:"reason" type:"string"`

	// The task ID of the task to stop.
	//
	// Task is a required field
	Task *string `locationName:"task" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StopTaskInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StopTaskInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StopTaskInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StopTaskInput"}
	if s.Task == nil {
		invalidParams.Add(request.NewErrParamRequired("Task"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCluster sets the Cluster field's value.
func (s *StopTaskInput) SetCluster(v string) *StopTaskInput {
	s.Cluster = &v
	return s
}

// SetReason sets the Reason field's value.
func (s *StopTaskInput) SetReason(v string) *StopTaskInput {
	s.Reason = &v
	return s
}

// SetTask sets the Task field's value.
func (s *StopTaskInput) SetTask(v string) *StopTaskInput {
	s.Task = &v
	return s
}

type StopTaskOutput struct {
	_ struct{} `type:"structure"`

	// The task that was stopped.
	Task *Task `locationName:"task" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StopTaskOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StopTaskOutput) GoString() string {
	return s.String()
}

// SetTask sets the Task field's value.
func (s *StopTaskOutput) SetTask(v *Task) *StopTaskOutput {
	s.Task = v
	return s
}

type SubmitAttachmentStateChangesInput struct {
	_ struct{} `type:"structure"`

	// Any attachments associated with the state change request.
	//
	// Attachments is a required field
	Attachments []*AttachmentStateChange `locationName:"attachments" type:"list" required:"true"`

	// The short name or full ARN of the cluster that hosts the container instance
	// the attachment belongs to.
	Cluster *string `locationName:"cluster" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SubmitAttachmentStateChangesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SubmitAttachmentStateChangesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SubmitAttachmentStateChangesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SubmitAttachmentStateChangesInput"}
	if s.Attachments == nil {
		invalidParams.Add(request.NewErrParamRequired("Attachments"))
	}
	if s.Attachments != nil {
		for i, v := range s.Attachments {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Attachments", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAttachments sets the Attachments field's value.
func (s *SubmitAttachmentStateChangesInput) SetAttachments(v []*AttachmentStateChange) *SubmitAttachmentStateChangesInput {
	s.Attachments = v
	return s
}

// SetCluster sets the Cluster field's value.
func (s *SubmitAttachmentStateChangesInput) SetCluster(v string) *SubmitAttachmentStateChangesInput {
	s.Cluster = &v
	return s
}

type SubmitAttachmentStateChangesOutput struct {
	_ struct{} `type:"structure"`

	// Acknowledgement of the state change.
	Acknowledgment *string `locationName:"acknowledgment" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SubmitAttachmentStateChangesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SubmitAttachmentStateChangesOutput) GoString() string {
	return s.String()
}

// SetAcknowledgment sets the Acknowledgment field's value.
func (s *SubmitAttachmentStateChangesOutput) SetAcknowledgment(v string) *SubmitAttachmentStateChangesOutput {
	s.Acknowledgment = &v
	return s
}

type SubmitContainerStateChangeInput struct {
	_ struct{} `type:"structure"`

	// The short name or full ARN of the cluster that hosts the container.
	Cluster *string `locationName:"cluster" type:"string"`

	// The name of the container.
	ContainerName *string `locationName:"containerName" type:"string"`

	// The exit code that's returned for the state change request.
	ExitCode *int64 `locationName:"exitCode" type:"integer"`

	// The network bindings of the container.
	NetworkBindings []*NetworkBinding `locationName:"networkBindings" type:"list"`

	// The reason for the state change request.
	Reason *string `locationName:"reason" type:"string"`

	// The ID of the Docker container.
	RuntimeId *string `locationName:"runtimeId" type:"string"`

	// The status of the state change request.
	Status *string `locationName:"status" type:"string"`

	// The task ID or full Amazon Resource Name (ARN) of the task that hosts the
	// container.
	Task *string `locationName:"task" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SubmitContainerStateChangeInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SubmitContainerStateChangeInput) GoString() string {
	return s.String()
}

// SetCluster sets the Cluster field's value.
func (s *SubmitContainerStateChangeInput) SetCluster(v string) *SubmitContainerStateChangeInput {
	s.Cluster = &v
	return s
}

// SetContainerName sets the ContainerName field's value.
func (s *SubmitContainerStateChangeInput) SetContainerName(v string) *SubmitContainerStateChangeInput {
	s.ContainerName = &v
	return s
}

// SetExitCode sets the ExitCode field's value.
func (s *SubmitContainerStateChangeInput) SetExitCode(v int64) *SubmitContainerStateChangeInput {
	s.ExitCode = &v
	return s
}

// SetNetworkBindings sets the NetworkBindings field's value.
func (s *SubmitContainerStateChangeInput) SetNetworkBindings(v []*NetworkBinding) *SubmitContainerStateChangeInput {
	s.NetworkBindings = v
	return s
}

// SetReason sets the Reason field's value.
func (s *SubmitContainerStateChangeInput) SetReason(v string) *SubmitContainerStateChangeInput {
	s.Reason = &v
	return s
}

// SetRuntimeId sets the RuntimeId field's value.
func (s *SubmitContainerStateChangeInput) SetRuntimeId(v string) *SubmitContainerStateChangeInput {
	s.RuntimeId = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *SubmitContainerStateChangeInput) SetStatus(v string) *SubmitContainerStateChangeInput {
	s.Status = &v
	return s
}

// SetTask sets the Task field's value.
func (s *SubmitContainerStateChangeInput) SetTask(v string) *SubmitContainerStateChangeInput {
	s.Task = &v
	return s
}

type SubmitContainerStateChangeOutput struct {
	_ struct{} `type:"structure"`

	// Acknowledgement of the state change.
	Acknowledgment *string `locationName:"acknowledgment" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SubmitContainerStateChangeOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SubmitContainerStateChangeOutput) GoString() string {
	return s.String()
}

// SetAcknowledgment sets the Acknowledgment field's value.
func (s *SubmitContainerStateChangeOutput) SetAcknowledgment(v string) *SubmitContainerStateChangeOutput {
	s.Acknowledgment = &v
	return s
}

type SubmitTaskStateChangeInput struct {
	_ struct{} `type:"structure"`

	// Any attachments associated with the state change request.
	Attachments []*AttachmentStateChange `locationName:"attachments" type:"list"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that hosts
	// the task.
	Cluster *string `locationName:"cluster" type:"string"`

	// Any containers that's associated with the state change request.
	Containers []*ContainerStateChange `locationName:"containers" type:"list"`

	// The Unix timestamp for the time when the task execution stopped.
	ExecutionStoppedAt *time.Time `locationName:"executionStoppedAt" type:"timestamp"`

	// The details for the managed agent that's associated with the task.
	ManagedAgents []*ManagedAgentStateChange `locationName:"managedAgents" type:"list"`

	// The Unix timestamp for the time when the container image pull started.
	PullStartedAt *time.Time `locationName:"pullStartedAt" type:"timestamp"`

	// The Unix timestamp for the time when the container image pull completed.
	PullStoppedAt *time.Time `locationName:"pullStoppedAt" type:"timestamp"`

	// The reason for the state change request.
	Reason *string `locationName:"reason" type:"string"`

	// The status of the state change request.
	Status *string `locationName:"status" type:"string"`

	// The task ID or full ARN of the task in the state change request.
	Task *string `locationName:"task" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SubmitTaskStateChangeInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SubmitTaskStateChangeInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SubmitTaskStateChangeInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SubmitTaskStateChangeInput"}
	if s.Attachments != nil {
		for i, v := range s.Attachments {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Attachments", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.ManagedAgents != nil {
		for i, v := range s.ManagedAgents {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ManagedAgents", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAttachments sets the Attachments field's value.
func (s *SubmitTaskStateChangeInput) SetAttachments(v []*AttachmentStateChange) *SubmitTaskStateChangeInput {
	s.Attachments = v
	return s
}

// SetCluster sets the Cluster field's value.
func (s *SubmitTaskStateChangeInput) SetCluster(v string) *SubmitTaskStateChangeInput {
	s.Cluster = &v
	return s
}

// SetContainers sets the Containers field's value.
func (s *SubmitTaskStateChangeInput) SetContainers(v []*ContainerStateChange) *SubmitTaskStateChangeInput {
	s.Containers = v
	return s
}

// SetExecutionStoppedAt sets the ExecutionStoppedAt field's value.
func (s *SubmitTaskStateChangeInput) SetExecutionStoppedAt(v time.Time) *SubmitTaskStateChangeInput {
	s.ExecutionStoppedAt = &v
	return s
}

// SetManagedAgents sets the ManagedAgents field's value.
func (s *SubmitTaskStateChangeInput) SetManagedAgents(v []*ManagedAgentStateChange) *SubmitTaskStateChangeInput {
	s.ManagedAgents = v
	return s
}

// SetPullStartedAt sets the PullStartedAt field's value.
func (s *SubmitTaskStateChangeInput) SetPullStartedAt(v time.Time) *SubmitTaskStateChangeInput {
	s.PullStartedAt = &v
	return s
}

// SetPullStoppedAt sets the PullStoppedAt field's value.
func (s *SubmitTaskStateChangeInput) SetPullStoppedAt(v time.Time) *SubmitTaskStateChangeInput {
	s.PullStoppedAt = &v
	return s
}

// SetReason sets the Reason field's value.
func (s *SubmitTaskStateChangeInput) SetReason(v string) *SubmitTaskStateChangeInput {
	s.Reason = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *SubmitTaskStateChangeInput) SetStatus(v string) *SubmitTaskStateChangeInput {
	s.Status = &v
	return s
}

// SetTask sets the Task field's value.
func (s *SubmitTaskStateChangeInput) SetTask(v string) *SubmitTaskStateChangeInput {
	s.Task = &v
	return s
}

type SubmitTaskStateChangeOutput struct {
	_ struct{} `type:"structure"`

	// Acknowledgement of the state change.
	Acknowledgment *string `locationName:"acknowledgment" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SubmitTaskStateChangeOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SubmitTaskStateChangeOutput) GoString() string {
	return s.String()
}

// SetAcknowledgment sets the Acknowledgment field's value.
func (s *SubmitTaskStateChangeOutput) SetAcknowledgment(v string) *SubmitTaskStateChangeOutput {
	s.Acknowledgment = &v
	return s
}

// A list of namespaced kernel parameters to set in the container. This parameter
// maps to Sysctls in the Create a container (https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate)
// section of the Docker Remote API (https://docs.docker.com/engine/api/v1.35/)
// and the --sysctl option to docker run (https://docs.docker.com/engine/reference/run/#security-configuration).
//
// We don't recommend that you specify network-related systemControls parameters
// for multiple containers in a single task. This task also uses either the
// awsvpc or host network mode. It does it for the following reasons.
//
//   - For tasks that use the awsvpc network mode, if you set systemControls
//     for any container, it applies to all containers in the task. If you set
//     different systemControls for multiple containers in a single task, the
//     container that's started last determines which systemControls take effect.
//
//   - For tasks that use the host network mode, the systemControls parameter
//     applies to the container instance's kernel parameter and that of all containers
//     of any tasks running on that container instance.
type SystemControl struct {
	_ struct{} `type:"structure"`

	// The namespaced kernel parameter to set a value for.
	Namespace *string `locationName:"namespace" type:"string"`

	// The namespaced kernel parameter to set a value for.
	//
	// Valid IPC namespace values: "kernel.msgmax" | "kernel.msgmnb" | "kernel.msgmni"
	// | "kernel.sem" | "kernel.shmall" | "kernel.shmmax" | "kernel.shmmni" | "kernel.shm_rmid_forced",
	// and Sysctls that start with "fs.mqueue.*"
	//
	// Valid network namespace values: Sysctls that start with "net.*"
	//
	// All of these values are supported by Fargate.
	Value *string `locationName:"value" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SystemControl) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SystemControl) GoString() string {
	return s.String()
}

// SetNamespace sets the Namespace field's value.
func (s *SystemControl) SetNamespace(v string) *SystemControl {
	s.Namespace = &v
	return s
}

// SetValue sets the Value field's value.
func (s *SystemControl) SetValue(v string) *SystemControl {
	s.Value = &v
	return s
}

// The metadata that you apply to a resource to help you categorize and organize
// them. Each tag consists of a key and an optional value. You define them.
//
// The following basic restrictions apply to tags:
//
//   - Maximum number of tags per resource - 50
//
//   - For each resource, each tag key must be unique, and each tag key can
//     have only one value.
//
//   - Maximum key length - 128 Unicode characters in UTF-8
//
//   - Maximum value length - 256 Unicode characters in UTF-8
//
//   - If your tagging schema is used across multiple services and resources,
//     remember that other services may have restrictions on allowed characters.
//     Generally allowed characters are: letters, numbers, and spaces representable
//     in UTF-8, and the following characters: + - = . _ : / @.
//
//   - Tag keys and values are case-sensitive.
//
//   - Do not use aws:, AWS:, or any upper or lowercase combination of such
//     as a prefix for either keys or values as it is reserved for Amazon Web
//     Services use. You cannot edit or delete tag keys or values with this prefix.
//     Tags with this prefix do not count against your tags per resource limit.
type Tag struct {
	_ struct{} `type:"structure"`

	// One part of a key-value pair that make up a tag. A key is a general label
	// that acts like a category for more specific tag values.
	Key *string `locationName:"key" min:"1" type:"string"`

	// The optional part of a key-value pair that make up a tag. A value acts as
	// a descriptor within a tag category (key).
	Value *string `locationName:"value" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Tag) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Tag) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *Tag) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Tag"}
	if s.Key != nil && len(*s.Key) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Key", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetKey sets the Key field's value.
func (s *Tag) SetKey(v string) *Tag {
	s.Key = &v
	return s
}

// SetValue sets the Value field's value.
func (s *Tag) SetValue(v string) *Tag {
	s.Value = &v
	return s
}

type TagResourceInput struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the resource to add tags to. Currently,
	// the supported resources are Amazon ECS capacity providers, tasks, services,
	// task definitions, clusters, and container instances.
	//
	// ResourceArn is a required field
	ResourceArn *string `locationName:"resourceArn" type:"string" required:"true"`

	// The tags to add to the resource. A tag is an array of key-value pairs.
	//
	// The following basic restrictions apply to tags:
	//
	//    * Maximum number of tags per resource - 50
	//
	//    * For each resource, each tag key must be unique, and each tag key can
	//    have only one value.
	//
	//    * Maximum key length - 128 Unicode characters in UTF-8
	//
	//    * Maximum value length - 256 Unicode characters in UTF-8
	//
	//    * If your tagging schema is used across multiple services and resources,
	//    remember that other services may have restrictions on allowed characters.
	//    Generally allowed characters are: letters, numbers, and spaces representable
	//    in UTF-8, and the following characters: + - = . _ : / @.
	//
	//    * Tag keys and values are case-sensitive.
	//
	//    * Do not use aws:, AWS:, or any upper or lowercase combination of such
	//    as a prefix for either keys or values as it is reserved for Amazon Web
	//    Services use. You cannot edit or delete tag keys or values with this prefix.
	//    Tags with this prefix do not count against your tags per resource limit.
	//
	// Tags is a required field
	Tags []*Tag `locationName:"tags" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TagResourceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TagResourceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TagResourceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TagResourceInput"}
	if s.ResourceArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ResourceArn"))
	}
	if s.Tags == nil {
		invalidParams.Add(request.NewErrParamRequired("Tags"))
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetResourceArn sets the ResourceArn field's value.
func (s *TagResourceInput) SetResourceArn(v string) *TagResourceInput {
	s.ResourceArn = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *TagResourceInput) SetTags(v []*Tag) *TagResourceInput {
	s.Tags = v
	return s
}

type TagResourceOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TagResourceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TagResourceOutput) GoString() string {
	return s.String()
}

// The execute command cannot run. This error can be caused by any of the following
// configuration issues:
//
//   - Incorrect IAM permissions
//
//   - The SSM agent is not installed or is not running
//
//   - There is an interface Amazon VPC endpoint for Amazon ECS, but there
//     is not one for Systems Manager Session Manager
//
// For information about how to troubleshoot the issues, see Troubleshooting
// issues with ECS Exec (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html)
// in the Amazon Elastic Container Service Developer Guide.
type TargetNotConnectedException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TargetNotConnectedException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TargetNotConnectedException) GoString() string {
	return s.String()
}

func newErrorTargetNotConnectedException(v protocol.ResponseMetadata) error {
	return &TargetNotConnectedException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *TargetNotConnectedException) Code() string {
	return "TargetNotConnectedException"
}

// Message returns the exception's message.
func (s *TargetNotConnectedException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *TargetNotConnectedException) OrigErr() error {
	return nil
}

func (s *TargetNotConnectedException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *TargetNotConnectedException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *TargetNotConnectedException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The specified target wasn't found. You can view your available container
// instances with ListContainerInstances. Amazon ECS container instances are
// cluster-specific and Region-specific.
type TargetNotFoundException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TargetNotFoundException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TargetNotFoundException) GoString() string {
	return s.String()
}

func newErrorTargetNotFoundException(v protocol.ResponseMetadata) error {
	return &TargetNotFoundException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *TargetNotFoundException) Code() string {
	return "TargetNotFoundException"
}

// Message returns the exception's message.
func (s *TargetNotFoundException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *TargetNotFoundException) OrigErr() error {
	return nil
}

func (s *TargetNotFoundException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *TargetNotFoundException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *TargetNotFoundException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Details on a task in a cluster.
type Task struct {
	_ struct{} `type:"structure"`

	// The Elastic Network Adapter that's associated with the task if the task uses
	// the awsvpc network mode.
	Attachments []*Attachment `locationName:"attachments" type:"list"`

	// The attributes of the task
	Attributes []*Attribute `locationName:"attributes" type:"list"`

	// The Availability Zone for the task.
	AvailabilityZone *string `locationName:"availabilityZone" type:"string"`

	// The capacity provider that's associated with the task.
	CapacityProviderName *string `locationName:"capacityProviderName" type:"string"`

	// The ARN of the cluster that hosts the task.
	ClusterArn *string `locationName:"clusterArn" type:"string"`

	// The connectivity status of a task.
	Connectivity *string `locationName:"connectivity" type:"string" enum:"Connectivity"`

	// The Unix timestamp for the time when the task last went into CONNECTED status.
	ConnectivityAt *time.Time `locationName:"connectivityAt" type:"timestamp"`

	// The ARN of the container instances that host the task.
	ContainerInstanceArn *string `locationName:"containerInstanceArn" type:"string"`

	// The containers that's associated with the task.
	Containers []*Container `locationName:"containers" type:"list"`

	// The number of CPU units used by the task as expressed in a task definition.
	// It can be expressed as an integer using CPU units (for example, 1024). It
	// can also be expressed as a string using vCPUs (for example, 1 vCPU or 1 vcpu).
	// String values are converted to an integer that indicates the CPU units when
	// the task definition is registered.
	//
	// If you use the EC2 launch type, this field is optional. Supported values
	// are between 128 CPU units (0.125 vCPUs) and 10240 CPU units (10 vCPUs).
	//
	// If you use the Fargate launch type, this field is required. You must use
	// one of the following values. These values determine the range of supported
	// values for the memory parameter:
	//
	// The CPU units cannot be less than 1 vCPU when you use Windows containers
	// on Fargate.
	//
	//    * 256 (.25 vCPU) - Available memory values: 512 (0.5 GB), 1024 (1 GB),
	//    2048 (2 GB)
	//
	//    * 512 (.5 vCPU) - Available memory values: 1024 (1 GB), 2048 (2 GB), 3072
	//    (3 GB), 4096 (4 GB)
	//
	//    * 1024 (1 vCPU) - Available memory values: 2048 (2 GB), 3072 (3 GB), 4096
	//    (4 GB), 5120 (5 GB), 6144 (6 GB), 7168 (7 GB), 8192 (8 GB)
	//
	//    * 2048 (2 vCPU) - Available memory values: 4096 (4 GB) and 16384 (16 GB)
	//    in increments of 1024 (1 GB)
	//
	//    * 4096 (4 vCPU) - Available memory values: 8192 (8 GB) and 30720 (30 GB)
	//    in increments of 1024 (1 GB)
	//
	//    * 8192 (8 vCPU) - Available memory values: 16 GB and 60 GB in 4 GB increments
	//    This option requires Linux platform 1.4.0 or later.
	//
	//    * 16384 (16vCPU) - Available memory values: 32GB and 120 GB in 8 GB increments
	//    This option requires Linux platform 1.4.0 or later.
	Cpu *string `locationName:"cpu" type:"string"`

	// The Unix timestamp for the time when the task was created. More specifically,
	// it's for the time when the task entered the PENDING state.
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp"`

	// The desired status of the task. For more information, see Task Lifecycle
	// (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-lifecycle.html).
	DesiredStatus *string `locationName:"desiredStatus" type:"string"`

	// Determines whether execute command functionality is turned on for this task.
	// If true, execute command functionality is turned on all the containers in
	// the task.
	EnableExecuteCommand *bool `locationName:"enableExecuteCommand" type:"boolean"`

	// The ephemeral storage settings for the task.
	EphemeralStorage *EphemeralStorage `locationName:"ephemeralStorage" type:"structure"`

	// The Unix timestamp for the time when the task execution stopped.
	ExecutionStoppedAt *time.Time `locationName:"executionStoppedAt" type:"timestamp"`

	// The name of the task group that's associated with the task.
	Group *string `locationName:"group" type:"string"`

	// The health status for the task. It's determined by the health of the essential
	// containers in the task. If all essential containers in the task are reporting
	// as HEALTHY, the task status also reports as HEALTHY. If any essential containers
	// in the task are reporting as UNHEALTHY or UNKNOWN, the task status also reports
	// as UNHEALTHY or UNKNOWN.
	//
	// The Amazon ECS container agent doesn't monitor or report on Docker health
	// checks that are embedded in a container image and not specified in the container
	// definition. For example, this includes those specified in a parent image
	// or from the image's Dockerfile. Health check parameters that are specified
	// in a container definition override any Docker health checks that are found
	// in the container image.
	HealthStatus *string `locationName:"healthStatus" type:"string" enum:"HealthStatus"`

	// The Elastic Inference accelerator that's associated with the task.
	InferenceAccelerators []*InferenceAccelerator `locationName:"inferenceAccelerators" type:"list"`

	// The last known status for the task. For more information, see Task Lifecycle
	// (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-lifecycle.html).
	LastStatus *string `locationName:"lastStatus" type:"string"`

	// The infrastructure where your task runs on. For more information, see Amazon
	// ECS launch types (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html)
	// in the Amazon Elastic Container Service Developer Guide.
	LaunchType *string `locationName:"launchType" type:"string" enum:"LaunchType"`

	// The amount of memory (in MiB) that the task uses as expressed in a task definition.
	// It can be expressed as an integer using MiB (for example, 1024). If it's
	// expressed as a string using GB (for example, 1GB or 1 GB), it's converted
	// to an integer indicating the MiB when the task definition is registered.
	//
	// If you use the EC2 launch type, this field is optional.
	//
	// If you use the Fargate launch type, this field is required. You must use
	// one of the following values. The value that you choose determines the range
	// of supported values for the cpu parameter.
	//
	//    * 512 (0.5 GB), 1024 (1 GB), 2048 (2 GB) - Available cpu values: 256 (.25
	//    vCPU)
	//
	//    * 1024 (1 GB), 2048 (2 GB), 3072 (3 GB), 4096 (4 GB) - Available cpu values:
	//    512 (.5 vCPU)
	//
	//    * 2048 (2 GB), 3072 (3 GB), 4096 (4 GB), 5120 (5 GB), 6144 (6 GB), 7168
	//    (7 GB), 8192 (8 GB) - Available cpu values: 1024 (1 vCPU)
	//
	//    * Between 4096 (4 GB) and 16384 (16 GB) in increments of 1024 (1 GB) -
	//    Available cpu values: 2048 (2 vCPU)
	//
	//    * Between 8192 (8 GB) and 30720 (30 GB) in increments of 1024 (1 GB) -
	//    Available cpu values: 4096 (4 vCPU)
	//
	//    * Between 16 GB and 60 GB in 4 GB increments - Available cpu values: 8192
	//    (8 vCPU) This option requires Linux platform 1.4.0 or later.
	//
	//    * Between 32GB and 120 GB in 8 GB increments - Available cpu values: 16384
	//    (16 vCPU) This option requires Linux platform 1.4.0 or later.
	Memory *string `locationName:"memory" type:"string"`

	// One or more container overrides.
	Overrides *TaskOverride `locationName:"overrides" type:"structure"`

	// The operating system that your tasks are running on. A platform family is
	// specified only for tasks that use the Fargate launch type.
	//
	// All tasks that run as part of this service must use the same platformFamily
	// value as the service (for example, LINUX.).
	PlatformFamily *string `locationName:"platformFamily" type:"string"`

	// The platform version where your task runs on. A platform version is only
	// specified for tasks that use the Fargate launch type. If you didn't specify
	// one, the LATEST platform version is used. For more information, see Fargate
	// Platform Versions (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html)
	// in the Amazon Elastic Container Service Developer Guide.
	PlatformVersion *string `locationName:"platformVersion" type:"string"`

	// The Unix timestamp for the time when the container image pull began.
	PullStartedAt *time.Time `locationName:"pullStartedAt" type:"timestamp"`

	// The Unix timestamp for the time when the container image pull completed.
	PullStoppedAt *time.Time `locationName:"pullStoppedAt" type:"timestamp"`

	// The Unix timestamp for the time when the task started. More specifically,
	// it's for the time when the task transitioned from the PENDING state to the
	// RUNNING state.
	StartedAt *time.Time `locationName:"startedAt" type:"timestamp"`

	// The tag specified when a task is started. If an Amazon ECS service started
	// the task, the startedBy parameter contains the deployment ID of that service.
	StartedBy *string `locationName:"startedBy" type:"string"`

	// The stop code indicating why a task was stopped. The stoppedReason might
	// contain additional details.
	//
	// For more information about stop code, see Stopped tasks error codes (https://docs.aws.amazon.com/AmazonECS/latest/userguide/stopped-task-error-codes.html)
	// in the Amazon ECS User Guide.
	//
	// The following are valid values:
	//
	//    * TaskFailedToStart
	//
	//    * EssentialContainerExited
	//
	//    * UserInitiated
	//
	//    * TerminationNotice
	//
	//    * ServiceSchedulerInitiated
	//
	//    * SpotInterruption
	StopCode *string `locationName:"stopCode" type:"string" enum:"TaskStopCode"`

	// The Unix timestamp for the time when the task was stopped. More specifically,
	// it's for the time when the task transitioned from the RUNNING state to the
	// STOPPED state.
	StoppedAt *time.Time `locationName:"stoppedAt" type:"timestamp"`

	// The reason that the task was stopped.
	StoppedReason *string `locationName:"stoppedReason" type:"string"`

	// The Unix timestamp for the time when the task stops. More specifically, it's
	// for the time when the task transitions from the RUNNING state to STOPPING.
	StoppingAt *time.Time `locationName:"stoppingAt" type:"timestamp"`

	// The metadata that you apply to the task to help you categorize and organize
	// the task. Each tag consists of a key and an optional value. You define both
	// the key and value.
	//
	// The following basic restrictions apply to tags:
	//
	//    * Maximum number of tags per resource - 50
	//
	//    * For each resource, each tag key must be unique, and each tag key can
	//    have only one value.
	//
	//    * Maximum key length - 128 Unicode characters in UTF-8
	//
	//    * Maximum value length - 256 Unicode characters in UTF-8
	//
	//    * If your tagging schema is used across multiple services and resources,
	//    remember that other services may have restrictions on allowed characters.
	//    Generally allowed characters are: letters, numbers, and spaces representable
	//    in UTF-8, and the following characters: + - = . _ : / @.
	//
	//    * Tag keys and values are case-sensitive.
	//
	//    * Do not use aws:, AWS:, or any upper or lowercase combination of such
	//    as a prefix for either keys or values as it is reserved for Amazon Web
	//    Services use. You cannot edit or delete tag keys or values with this prefix.
	//    Tags with this prefix do not count against your tags per resource limit.
	Tags []*Tag `locationName:"tags" type:"list"`

	// The Amazon Resource Name (ARN) of the task.
	TaskArn *string `locationName:"taskArn" type:"string"`

	// The ARN of the task definition that creates the task.
	TaskDefinitionArn *string `locationName:"taskDefinitionArn" type:"string"`

	// The version counter for the task. Every time a task experiences a change
	// that starts a CloudWatch event, the version counter is incremented. If you
	// replicate your Amazon ECS task state with CloudWatch Events, you can compare
	// the version of a task reported by the Amazon ECS API actions with the version
	// reported in CloudWatch Events for the task (inside the detail object) to
	// verify that the version in your event stream is current.
	Version *int64 `locationName:"version" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Task) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Task) GoString() string {
	return s.String()
}

// SetAttachments sets the Attachments field's value.
func (s *Task) SetAttachments(v []*Attachment) *Task {
	s.Attachments = v
	return s
}

// SetAttributes sets the Attributes field's value.
func (s *Task) SetAttributes(v []*Attribute) *Task {
	s.Attributes = v
	return s
}

// SetAvailabilityZone sets the AvailabilityZone field's value.
func (s *Task) SetAvailabilityZone(v string) *Task {
	s.AvailabilityZone = &v
	return s
}

// SetCapacityProviderName sets the CapacityProviderName field's value.
func (s *Task) SetCapacityProviderName(v string) *Task {
	s.CapacityProviderName = &v
	return s
}

// SetClusterArn sets the ClusterArn field's value.
func (s *Task) SetClusterArn(v string) *Task {
	s.ClusterArn = &v
	return s
}

// SetConnectivity sets the Connectivity field's value.
func (s *Task) SetConnectivity(v string) *Task {
	s.Connectivity = &v
	return s
}

// SetConnectivityAt sets the ConnectivityAt field's value.
func (s *Task) SetConnectivityAt(v time.Time) *Task {
	s.ConnectivityAt = &v
	return s
}

// SetContainerInstanceArn sets the ContainerInstanceArn field's value.
func (s *Task) SetContainerInstanceArn(v string) *Task {
	s.ContainerInstanceArn = &v
	return s
}

// SetContainers sets the Containers field's value.
func (s *Task) SetContainers(v []*Container) *Task {
	s.Containers = v
	return s
}

// SetCpu sets the Cpu field's value.
func (s *Task) SetCpu(v string) *Task {
	s.Cpu = &v
	return s
}

// SetCreatedAt sets the CreatedAt field's value.
func (s *Task) SetCreatedAt(v time.Time) *Task {
	s.CreatedAt = &v
	return s
}

// SetDesiredStatus sets the DesiredStatus field's value.
func (s *Task) SetDesiredStatus(v string) *Task {
	s.DesiredStatus = &v
	return s
}

// SetEnableExecuteCommand sets the EnableExecuteCommand field's value.
func (s *Task) SetEnableExecuteCommand(v bool) *Task {
	s.EnableExecuteCommand = &v
	return s
}

// SetEphemeralStorage sets the EphemeralStorage field's value.
func (s *Task) SetEphemeralStorage(v *EphemeralStorage) *Task {
	s.EphemeralStorage = v
	return s
}

// SetExecutionStoppedAt sets the ExecutionStoppedAt field's value.
func (s *Task) SetExecutionStoppedAt(v time.Time) *Task {
	s.ExecutionStoppedAt = &v
	return s
}

// SetGroup sets the Group field's value.
func (s *Task) SetGroup(v string) *Task {
	s.Group = &v
	return s
}

// SetHealthStatus sets the HealthStatus field's value.
func (s *Task) SetHealthStatus(v string) *Task {
	s.HealthStatus = &v
	return s
}

// SetInferenceAccelerators sets the InferenceAccelerators field's value.
func (s *Task) SetInferenceAccelerators(v []*InferenceAccelerator) *Task {
	s.InferenceAccelerators = v
	return s
}

// SetLastStatus sets the LastStatus field's value.
func (s *Task) SetLastStatus(v string) *Task {
	s.LastStatus = &v
	return s
}

// SetLaunchType sets the LaunchType field's value.
func (s *Task) SetLaunchType(v string) *Task {
	s.LaunchType = &v
	return s
}

// SetMemory sets the Memory field's value.
func (s *Task) SetMemory(v string) *Task {
	s.Memory = &v
	return s
}

// SetOverrides sets the Overrides field's value.
func (s *Task) SetOverrides(v *TaskOverride) *Task {
	s.Overrides = v
	return s
}

// SetPlatformFamily sets the PlatformFamily field's value.
func (s *Task) SetPlatformFamily(v string) *Task {
	s.PlatformFamily = &v
	return s
}

// SetPlatformVersion sets the PlatformVersion field's value.
func (s *Task) SetPlatformVersion(v string) *Task {
	s.PlatformVersion = &v
	return s
}

// SetPullStartedAt sets the PullStartedAt field's value.
func (s *Task) SetPullStartedAt(v time.Time) *Task {
	s.PullStartedAt = &v
	return s
}

// SetPullStoppedAt sets the PullStoppedAt field's value.
func (s *Task) SetPullStoppedAt(v time.Time) *Task {
	s.PullStoppedAt = &v
	return s
}

// SetStartedAt sets the StartedAt field's value.
func (s *Task) SetStartedAt(v time.Time) *Task {
	s.StartedAt = &v
	return s
}

// SetStartedBy sets the StartedBy field's value.
func (s *Task) SetStartedBy(v string) *Task {
	s.StartedBy = &v
	return s
}

// SetStopCode sets the StopCode field's value.
func (s *Task) SetStopCode(v string) *Task {
	s.StopCode = &v
	return s
}

// SetStoppedAt sets the StoppedAt field's value.
func (s *Task) SetStoppedAt(v time.Time) *Task {
	s.StoppedAt = &v
	return s
}

// SetStoppedReason sets the StoppedReason field's value.
func (s *Task) SetStoppedReason(v string) *Task {
	s.StoppedReason = &v
	return s
}

// SetStoppingAt sets the StoppingAt field's value.
func (s *Task) SetStoppingAt(v time.Time) *Task {
	s.StoppingAt = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *Task) SetTags(v []*Tag) *Task {
	s.Tags = v
	return s
}

// SetTaskArn sets the TaskArn field's value.
func (s *Task) SetTaskArn(v string) *Task {
	s.TaskArn = &v
	return s
}

// SetTaskDefinitionArn sets the TaskDefinitionArn field's value.
func (s *Task) SetTaskDefinitionArn(v string) *Task {
	s.TaskDefinitionArn = &v
	return s
}

// SetVersion sets the Version field's value.
func (s *Task) SetVersion(v int64) *Task {
	s.Version = &v
	return s
}

// The details of a task definition which describes the container and volume
// definitions of an Amazon Elastic Container Service task. You can specify
// which Docker images to use, the required resources, and other configurations
// related to launching the task definition through an Amazon ECS service or
// task.
type TaskDefinition struct {
	_ struct{} `type:"structure"`

	// The task launch types the task definition validated against during task definition
	// registration. For more information, see Amazon ECS launch types (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html)
	// in the Amazon Elastic Container Service Developer Guide.
	Compatibilities []*string `locationName:"compatibilities" type:"list" enum:"Compatibility"`

	// A list of container definitions in JSON format that describe the different
	// containers that make up your task. For more information about container definition
	// parameters and defaults, see Amazon ECS Task Definitions (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_defintions.html)
	// in the Amazon Elastic Container Service Developer Guide.
	ContainerDefinitions []*ContainerDefinition `locationName:"containerDefinitions" type:"list"`

	// The number of cpu units used by the task. If you use the EC2 launch type,
	// this field is optional. Any value can be used. If you use the Fargate launch
	// type, this field is required. You must use one of the following values. The
	// value that you choose determines your range of valid values for the memory
	// parameter.
	//
	// The CPU units cannot be less than 1 vCPU when you use Windows containers
	// on Fargate.
	//
	//    * 256 (.25 vCPU) - Available memory values: 512 (0.5 GB), 1024 (1 GB),
	//    2048 (2 GB)
	//
	//    * 512 (.5 vCPU) - Available memory values: 1024 (1 GB), 2048 (2 GB), 3072
	//    (3 GB), 4096 (4 GB)
	//
	//    * 1024 (1 vCPU) - Available memory values: 2048 (2 GB), 3072 (3 GB), 4096
	//    (4 GB), 5120 (5 GB), 6144 (6 GB), 7168 (7 GB), 8192 (8 GB)
	//
	//    * 2048 (2 vCPU) - Available memory values: 4096 (4 GB) and 16384 (16 GB)
	//    in increments of 1024 (1 GB)
	//
	//    * 4096 (4 vCPU) - Available memory values: 8192 (8 GB) and 30720 (30 GB)
	//    in increments of 1024 (1 GB)
	//
	//    * 8192 (8 vCPU) - Available memory values: 16 GB and 60 GB in 4 GB increments
	//    This option requires Linux platform 1.4.0 or later.
	//
	//    * 16384 (16vCPU) - Available memory values: 32GB and 120 GB in 8 GB increments
	//    This option requires Linux platform 1.4.0 or later.
	Cpu *string `locationName:"cpu" type:"string"`

	// The Unix timestamp for the time when the task definition was deregistered.
	DeregisteredAt *time.Time `locationName:"deregisteredAt" type:"timestamp"`

	// The ephemeral storage settings to use for tasks run with the task definition.
	EphemeralStorage *EphemeralStorage `locationName:"ephemeralStorage" type:"structure"`

	// The Amazon Resource Name (ARN) of the task execution role that grants the
	// Amazon ECS container agent permission to make Amazon Web Services API calls
	// on your behalf. The task execution IAM role is required depending on the
	// requirements of your task. For more information, see Amazon ECS task execution
	// IAM role (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html)
	// in the Amazon Elastic Container Service Developer Guide.
	ExecutionRoleArn *string `locationName:"executionRoleArn" type:"string"`

	// The name of a family that this task definition is registered to. Up to 255
	// characters are allowed. Letters (both uppercase and lowercase letters), numbers,
	// hyphens (-), and underscores (_) are allowed.
	//
	// A family groups multiple versions of a task definition. Amazon ECS gives
	// the first task definition that you registered to a family a revision number
	// of 1. Amazon ECS gives sequential revision numbers to each task definition
	// that you add.
	Family *string `locationName:"family" type:"string"`

	// The Elastic Inference accelerator that's associated with the task.
	InferenceAccelerators []*InferenceAccelerator `locationName:"inferenceAccelerators" type:"list"`

	// The IPC resource namespace to use for the containers in the task. The valid
	// values are host, task, or none. If host is specified, then all containers
	// within the tasks that specified the host IPC mode on the same container instance
	// share the same IPC resources with the host Amazon EC2 instance. If task is
	// specified, all containers within the specified task share the same IPC resources.
	// If none is specified, then IPC resources within the containers of a task
	// are private and not shared with other containers in a task or on the container
	// instance. If no value is specified, then the IPC resource namespace sharing
	// depends on the Docker daemon setting on the container instance. For more
	// information, see IPC settings (https://docs.docker.com/engine/reference/run/#ipc-settings---ipc)
	// in the Docker run reference.
	//
	// If the host IPC mode is used, be aware that there is a heightened risk of
	// undesired IPC namespace expose. For more information, see Docker security
	// (https://docs.docker.com/engine/security/security/).
	//
	// If you are setting namespaced kernel parameters using systemControls for
	// the containers in the task, the following will apply to your IPC resource
	// namespace. For more information, see System Controls (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	//    * For tasks that use the host IPC mode, IPC namespace related systemControls
	//    are not supported.
	//
	//    * For tasks that use the task IPC mode, IPC namespace related systemControls
	//    will apply to all containers within a task.
	//
	// This parameter is not supported for Windows containers or tasks run on Fargate.
	IpcMode *string `locationName:"ipcMode" type:"string" enum:"IpcMode"`

	// The amount (in MiB) of memory used by the task.
	//
	// If your tasks runs on Amazon EC2 instances, you must specify either a task-level
	// memory value or a container-level memory value. This field is optional and
	// any value can be used. If a task-level memory value is specified, the container-level
	// memory value is optional. For more information regarding container-level
	// memory and memory reservation, see ContainerDefinition (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerDefinition.html).
	//
	// If your tasks runs on Fargate, this field is required. You must use one of
	// the following values. The value you choose determines your range of valid
	// values for the cpu parameter.
	//
	//    * 512 (0.5 GB), 1024 (1 GB), 2048 (2 GB) - Available cpu values: 256 (.25
	//    vCPU)
	//
	//    * 1024 (1 GB), 2048 (2 GB), 3072 (3 GB), 4096 (4 GB) - Available cpu values:
	//    512 (.5 vCPU)
	//
	//    * 2048 (2 GB), 3072 (3 GB), 4096 (4 GB), 5120 (5 GB), 6144 (6 GB), 7168
	//    (7 GB), 8192 (8 GB) - Available cpu values: 1024 (1 vCPU)
	//
	//    * Between 4096 (4 GB) and 16384 (16 GB) in increments of 1024 (1 GB) -
	//    Available cpu values: 2048 (2 vCPU)
	//
	//    * Between 8192 (8 GB) and 30720 (30 GB) in increments of 1024 (1 GB) -
	//    Available cpu values: 4096 (4 vCPU)
	//
	//    * Between 16 GB and 60 GB in 4 GB increments - Available cpu values: 8192
	//    (8 vCPU) This option requires Linux platform 1.4.0 or later.
	//
	//    * Between 32GB and 120 GB in 8 GB increments - Available cpu values: 16384
	//    (16 vCPU) This option requires Linux platform 1.4.0 or later.
	Memory *string `locationName:"memory" type:"string"`

	// The Docker networking mode to use for the containers in the task. The valid
	// values are none, bridge, awsvpc, and host. If no network mode is specified,
	// the default is bridge.
	//
	// For Amazon ECS tasks on Fargate, the awsvpc network mode is required. For
	// Amazon ECS tasks on Amazon EC2 Linux instances, any network mode can be used.
	// For Amazon ECS tasks on Amazon EC2 Windows instances, <default> or awsvpc
	// can be used. If the network mode is set to none, you cannot specify port
	// mappings in your container definitions, and the tasks containers do not have
	// external connectivity. The host and awsvpc network modes offer the highest
	// networking performance for containers because they use the EC2 network stack
	// instead of the virtualized network stack provided by the bridge mode.
	//
	// With the host and awsvpc network modes, exposed container ports are mapped
	// directly to the corresponding host port (for the host network mode) or the
	// attached elastic network interface port (for the awsvpc network mode), so
	// you cannot take advantage of dynamic host port mappings.
	//
	// When using the host network mode, you should not run containers using the
	// root user (UID 0). It is considered best practice to use a non-root user.
	//
	// If the network mode is awsvpc, the task is allocated an elastic network interface,
	// and you must specify a NetworkConfiguration value when you create a service
	// or run a task with the task definition. For more information, see Task Networking
	// (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// If the network mode is host, you cannot run multiple instantiations of the
	// same task on a single container instance when port mappings are used.
	//
	// For more information, see Network settings (https://docs.docker.com/engine/reference/run/#network-settings)
	// in the Docker run reference.
	NetworkMode *string `locationName:"networkMode" type:"string" enum:"NetworkMode"`

	// The process namespace to use for the containers in the task. The valid values
	// are host or task. On Fargate for Linux containers, the only valid value is
	// task. For example, monitoring sidecars might need pidMode to access information
	// about other containers running in the same task.
	//
	// If host is specified, all containers within the tasks that specified the
	// host PID mode on the same container instance share the same process namespace
	// with the host Amazon EC2 instance.
	//
	// If task is specified, all containers within the specified task share the
	// same process namespace.
	//
	// If no value is specified, the default is a private namespace for each container.
	// For more information, see PID settings (https://docs.docker.com/engine/reference/run/#pid-settings---pid)
	// in the Docker run reference.
	//
	// If the host PID mode is used, there's a heightened risk of undesired process
	// namespace exposure. For more information, see Docker security (https://docs.docker.com/engine/security/security/).
	//
	// This parameter is not supported for Windows containers.
	//
	// This parameter is only supported for tasks that are hosted on Fargate if
	// the tasks are using platform version 1.4.0 or later (Linux). This isn't supported
	// for Windows containers on Fargate.
	PidMode *string `locationName:"pidMode" type:"string" enum:"PidMode"`

	// An array of placement constraint objects to use for tasks.
	//
	// This parameter isn't supported for tasks run on Fargate.
	PlacementConstraints []*TaskDefinitionPlacementConstraint `locationName:"placementConstraints" type:"list"`

	// The configuration details for the App Mesh proxy.
	//
	// Your Amazon ECS container instances require at least version 1.26.0 of the
	// container agent and at least version 1.26.0-1 of the ecs-init package to
	// use a proxy configuration. If your container instances are launched from
	// the Amazon ECS optimized AMI version 20190301 or later, they contain the
	// required versions of the container agent and ecs-init. For more information,
	// see Amazon ECS-optimized Linux AMI (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html)
	// in the Amazon Elastic Container Service Developer Guide.
	ProxyConfiguration *ProxyConfiguration `locationName:"proxyConfiguration" type:"structure"`

	// The Unix timestamp for the time when the task definition was registered.
	RegisteredAt *time.Time `locationName:"registeredAt" type:"timestamp"`

	// The principal that registered the task definition.
	RegisteredBy *string `locationName:"registeredBy" type:"string"`

	// The container instance attributes required by your task. When an Amazon EC2
	// instance is registered to your cluster, the Amazon ECS container agent assigns
	// some standard attributes to the instance. You can apply custom attributes.
	// These are specified as key-value pairs using the Amazon ECS console or the
	// PutAttributes API. These attributes are used when determining task placement
	// for tasks hosted on Amazon EC2 instances. For more information, see Attributes
	// (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement-constraints.html#attributes)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// This parameter isn't supported for tasks run on Fargate.
	RequiresAttributes []*Attribute `locationName:"requiresAttributes" type:"list"`

	// The task launch types the task definition was validated against. The valid
	// values are EC2, FARGATE, and EXTERNAL. For more information, see Amazon ECS
	// launch types (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html)
	// in the Amazon Elastic Container Service Developer Guide.
	RequiresCompatibilities []*string `locationName:"requiresCompatibilities" type:"list" enum:"Compatibility"`

	// The revision of the task in a particular family. The revision is a version
	// number of a task definition in a family. When you register a task definition
	// for the first time, the revision is 1. Each time that you register a new
	// revision of a task definition in the same family, the revision value always
	// increases by one. This is even if you deregistered previous revisions in
	// this family.
	Revision *int64 `locationName:"revision" type:"integer"`

	// The operating system that your task definitions are running on. A platform
	// family is specified only for tasks using the Fargate launch type.
	//
	// When you specify a task in a service, this value must match the runtimePlatform
	// value of the service.
	RuntimePlatform *RuntimePlatform `locationName:"runtimePlatform" type:"structure"`

	// The status of the task definition.
	Status *string `locationName:"status" type:"string" enum:"TaskDefinitionStatus"`

	// The full Amazon Resource Name (ARN) of the task definition.
	TaskDefinitionArn *string `locationName:"taskDefinitionArn" type:"string"`

	// The short name or full Amazon Resource Name (ARN) of the Identity and Access
	// Management role that grants containers in the task permission to call Amazon
	// Web Services APIs on your behalf. For more information, see Amazon ECS Task
	// Role (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// IAM roles for tasks on Windows require that the -EnableTaskIAMRole option
	// is set when you launch the Amazon ECS-optimized Windows AMI. Your containers
	// must also run some configuration code to use the feature. For more information,
	// see Windows IAM roles for tasks (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/windows_task_IAM_roles.html)
	// in the Amazon Elastic Container Service Developer Guide.
	TaskRoleArn *string `locationName:"taskRoleArn" type:"string"`

	// The list of data volume definitions for the task. For more information, see
	// Using data volumes in tasks (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_data_volumes.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// The host and sourcePath parameters aren't supported for tasks run on Fargate.
	Volumes []*Volume `locationName:"volumes" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TaskDefinition) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TaskDefinition) GoString() string {
	return s.String()
}

// SetCompatibilities sets the Compatibilities field's value.
func (s *TaskDefinition) SetCompatibilities(v []*string) *TaskDefinition {
	s.Compatibilities = v
	return s
}

// SetContainerDefinitions sets the ContainerDefinitions field's value.
func (s *TaskDefinition) SetContainerDefinitions(v []*ContainerDefinition) *TaskDefinition {
	s.ContainerDefinitions = v
	return s
}

// SetCpu sets the Cpu field's value.
func (s *TaskDefinition) SetCpu(v string) *TaskDefinition {
	s.Cpu = &v
	return s
}

// SetDeregisteredAt sets the DeregisteredAt field's value.
func (s *TaskDefinition) SetDeregisteredAt(v time.Time) *TaskDefinition {
	s.DeregisteredAt = &v
	return s
}

// SetEphemeralStorage sets the EphemeralStorage field's value.
func (s *TaskDefinition) SetEphemeralStorage(v *EphemeralStorage) *TaskDefinition {
	s.EphemeralStorage = v
	return s
}

// SetExecutionRoleArn sets the ExecutionRoleArn field's value.
func (s *TaskDefinition) SetExecutionRoleArn(v string) *TaskDefinition {
	s.ExecutionRoleArn = &v
	return s
}

// SetFamily sets the Family field's value.
func (s *TaskDefinition) SetFamily(v string) *TaskDefinition {
	s.Family = &v
	return s
}

// SetInferenceAccelerators sets the InferenceAccelerators field's value.
func (s *TaskDefinition) SetInferenceAccelerators(v []*InferenceAccelerator) *TaskDefinition {
	s.InferenceAccelerators = v
	return s
}

// SetIpcMode sets the IpcMode field's value.
func (s *TaskDefinition) SetIpcMode(v string) *TaskDefinition {
	s.IpcMode = &v
	return s
}

// SetMemory sets the Memory field's value.
func (s *TaskDefinition) SetMemory(v string) *TaskDefinition {
	s.Memory = &v
	return s
}

// SetNetworkMode sets the NetworkMode field's value.
func (s *TaskDefinition) SetNetworkMode(v string) *TaskDefinition {
	s.NetworkMode = &v
	return s
}

// SetPidMode sets the PidMode field's value.
func (s *TaskDefinition) SetPidMode(v string) *TaskDefinition {
	s.PidMode = &v
	return s
}

// SetPlacementConstraints sets the PlacementConstraints field's value.
func (s *TaskDefinition) SetPlacementConstraints(v []*TaskDefinitionPlacementConstraint) *TaskDefinition {
	s.PlacementConstraints = v
	return s
}

// SetProxyConfiguration sets the ProxyConfiguration field's value.
func (s *TaskDefinition) SetProxyConfiguration(v *ProxyConfiguration) *TaskDefinition {
	s.ProxyConfiguration = v
	return s
}

// SetRegisteredAt sets the RegisteredAt field's value.
func (s *TaskDefinition) SetRegisteredAt(v time.Time) *TaskDefinition {
	s.RegisteredAt = &v
	return s
}

// SetRegisteredBy sets the RegisteredBy field's value.
func (s *TaskDefinition) SetRegisteredBy(v string) *TaskDefinition {
	s.RegisteredBy = &v
	return s
}

// SetRequiresAttributes sets the RequiresAttributes field's value.
func (s *TaskDefinition) SetRequiresAttributes(v []*Attribute) *TaskDefinition {
	s.RequiresAttributes = v
	return s
}

// SetRequiresCompatibilities sets the RequiresCompatibilities field's value.
func (s *TaskDefinition) SetRequiresCompatibilities(v []*string) *TaskDefinition {
	s.RequiresCompatibilities = v
	return s
}

// SetRevision sets the Revision field's value.
func (s *TaskDefinition) SetRevision(v int64) *TaskDefinition {
	s.Revision = &v
	return s
}

// SetRuntimePlatform sets the RuntimePlatform field's value.
func (s *TaskDefinition) SetRuntimePlatform(v *RuntimePlatform) *TaskDefinition {
	s.RuntimePlatform = v
	return s
}

// SetStatus sets the Status field's value.
func (s *TaskDefinition) SetStatus(v string) *TaskDefinition {
	s.Status = &v
	return s
}

// SetTaskDefinitionArn sets the TaskDefinitionArn field's value.
func (s *TaskDefinition) SetTaskDefinitionArn(v string) *TaskDefinition {
	s.TaskDefinitionArn = &v
	return s
}

// SetTaskRoleArn sets the TaskRoleArn field's value.
func (s *TaskDefinition) SetTaskRoleArn(v string) *TaskDefinition {
	s.TaskRoleArn = &v
	return s
}

// SetVolumes sets the Volumes field's value.
func (s *TaskDefinition) SetVolumes(v []*Volume) *TaskDefinition {
	s.Volumes = v
	return s
}

// The constraint on task placement in the task definition. For more information,
// see Task placement constraints (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement-constraints.html)
// in the Amazon Elastic Container Service Developer Guide.
//
// Task placement constraints aren't supported for tasks run on Fargate.
type TaskDefinitionPlacementConstraint struct {
	_ struct{} `type:"structure"`

	// A cluster query language expression to apply to the constraint. For more
	// information, see Cluster query language (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-query-language.html)
	// in the Amazon Elastic Container Service Developer Guide.
	Expression *string `locationName:"expression" type:"string"`

	// The type of constraint. The MemberOf constraint restricts selection to be
	// from a group of valid candidates.
	Type *string `locationName:"type" type:"string" enum:"TaskDefinitionPlacementConstraintType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TaskDefinitionPlacementConstraint) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TaskDefinitionPlacementConstraint) GoString() string {
	return s.String()
}

// SetExpression sets the Expression field's value.
func (s *TaskDefinitionPlacementConstraint) SetExpression(v string) *TaskDefinitionPlacementConstraint {
	s.Expression = &v
	return s
}

// SetType sets the Type field's value.
func (s *TaskDefinitionPlacementConstraint) SetType(v string) *TaskDefinitionPlacementConstraint {
	s.Type = &v
	return s
}

// The overrides that are associated with a task.
type TaskOverride struct {
	_ struct{} `type:"structure"`

	// One or more container overrides that are sent to a task.
	ContainerOverrides []*ContainerOverride `locationName:"containerOverrides" type:"list"`

	// The CPU override for the task.
	Cpu *string `locationName:"cpu" type:"string"`

	// The ephemeral storage setting override for the task.
	//
	// This parameter is only supported for tasks hosted on Fargate that use the
	// following platform versions:
	//
	//    * Linux platform version 1.4.0 or later.
	//
	//    * Windows platform version 1.0.0 or later.
	EphemeralStorage *EphemeralStorage `locationName:"ephemeralStorage" type:"structure"`

	// The Amazon Resource Name (ARN) of the task execution role override for the
	// task. For more information, see Amazon ECS task execution IAM role (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html)
	// in the Amazon Elastic Container Service Developer Guide.
	ExecutionRoleArn *string `locationName:"executionRoleArn" type:"string"`

	// The Elastic Inference accelerator override for the task.
	InferenceAcceleratorOverrides []*InferenceAcceleratorOverride `locationName:"inferenceAcceleratorOverrides" type:"list"`

	// The memory override for the task.
	Memory *string `locationName:"memory" type:"string"`

	// The Amazon Resource Name (ARN) of the role that containers in this task can
	// assume. All containers in this task are granted the permissions that are
	// specified in this role. For more information, see IAM Role for Tasks (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)
	// in the Amazon Elastic Container Service Developer Guide.
	TaskRoleArn *string `locationName:"taskRoleArn" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TaskOverride) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TaskOverride) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TaskOverride) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TaskOverride"}
	if s.ContainerOverrides != nil {
		for i, v := range s.ContainerOverrides {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ContainerOverrides", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.EphemeralStorage != nil {
		if err := s.EphemeralStorage.Validate(); err != nil {
			invalidParams.AddNested("EphemeralStorage", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetContainerOverrides sets the ContainerOverrides field's value.
func (s *TaskOverride) SetContainerOverrides(v []*ContainerOverride) *TaskOverride {
	s.ContainerOverrides = v
	return s
}

// SetCpu sets the Cpu field's value.
func (s *TaskOverride) SetCpu(v string) *TaskOverride {
	s.Cpu = &v
	return s
}

// SetEphemeralStorage sets the EphemeralStorage field's value.
func (s *TaskOverride) SetEphemeralStorage(v *EphemeralStorage) *TaskOverride {
	s.EphemeralStorage = v
	return s
}

// SetExecutionRoleArn sets the ExecutionRoleArn field's value.
func (s *TaskOverride) SetExecutionRoleArn(v string) *TaskOverride {
	s.ExecutionRoleArn = &v
	return s
}

// SetInferenceAcceleratorOverrides sets the InferenceAcceleratorOverrides field's value.
func (s *TaskOverride) SetInferenceAcceleratorOverrides(v []*InferenceAcceleratorOverride) *TaskOverride {
	s.InferenceAcceleratorOverrides = v
	return s
}

// SetMemory sets the Memory field's value.
func (s *TaskOverride) SetMemory(v string) *TaskOverride {
	s.Memory = &v
	return s
}

// SetTaskRoleArn sets the TaskRoleArn field's value.
func (s *TaskOverride) SetTaskRoleArn(v string) *TaskOverride {
	s.TaskRoleArn = &v
	return s
}

// Information about a set of Amazon ECS tasks in either an CodeDeploy or an
// EXTERNAL deployment. An Amazon ECS task set includes details such as the
// desired number of tasks, how many tasks are running, and whether the task
// set serves production traffic.
type TaskSet struct {
	_ struct{} `type:"structure"`

	// The capacity provider strategy that are associated with the task set.
	CapacityProviderStrategy []*CapacityProviderStrategyItem `locationName:"capacityProviderStrategy" type:"list"`

	// The Amazon Resource Name (ARN) of the cluster that the service that hosts
	// the task set exists in.
	ClusterArn *string `locationName:"clusterArn" type:"string"`

	// The computed desired count for the task set. This is calculated by multiplying
	// the service's desiredCount by the task set's scale percentage. The result
	// is always rounded up. For example, if the computed desired count is 1.2,
	// it rounds up to 2 tasks.
	ComputedDesiredCount *int64 `locationName:"computedDesiredCount" type:"integer"`

	// The Unix timestamp for the time when the task set was created.
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp"`

	// The external ID associated with the task set.
	//
	// If an CodeDeploy deployment created a task set, the externalId parameter
	// contains the CodeDeploy deployment ID.
	//
	// If a task set is created for an external deployment and is associated with
	// a service discovery registry, the externalId parameter contains the ECS_TASK_SET_EXTERNAL_ID
	// Cloud Map attribute.
	ExternalId *string `locationName:"externalId" type:"string"`

	// The ID of the task set.
	Id *string `locationName:"id" type:"string"`

	// The launch type the tasks in the task set are using. For more information,
	// see Amazon ECS launch types (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html)
	// in the Amazon Elastic Container Service Developer Guide.
	LaunchType *string `locationName:"launchType" type:"string" enum:"LaunchType"`

	// Details on a load balancer that are used with a task set.
	LoadBalancers []*LoadBalancer `locationName:"loadBalancers" type:"list"`

	// The network configuration for the task set.
	NetworkConfiguration *NetworkConfiguration `locationName:"networkConfiguration" type:"structure"`

	// The number of tasks in the task set that are in the PENDING status during
	// a deployment. A task in the PENDING state is preparing to enter the RUNNING
	// state. A task set enters the PENDING status when it launches for the first
	// time or when it's restarted after being in the STOPPED state.
	PendingCount *int64 `locationName:"pendingCount" type:"integer"`

	// The operating system that your tasks in the set are running on. A platform
	// family is specified only for tasks that use the Fargate launch type.
	//
	// All tasks in the set must have the same value.
	PlatformFamily *string `locationName:"platformFamily" type:"string"`

	// The Fargate platform version where the tasks in the task set are running.
	// A platform version is only specified for tasks run on Fargate. For more information,
	// see Fargate platform versions (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html)
	// in the Amazon Elastic Container Service Developer Guide.
	PlatformVersion *string `locationName:"platformVersion" type:"string"`

	// The number of tasks in the task set that are in the RUNNING status during
	// a deployment. A task in the RUNNING state is running and ready for use.
	RunningCount *int64 `locationName:"runningCount" type:"integer"`

	// A floating-point percentage of your desired number of tasks to place and
	// keep running in the task set.
	Scale *Scale `locationName:"scale" type:"structure"`

	// The Amazon Resource Name (ARN) of the service the task set exists in.
	ServiceArn *string `locationName:"serviceArn" type:"string"`

	// The details for the service discovery registries to assign to this task set.
	// For more information, see Service discovery (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-discovery.html).
	ServiceRegistries []*ServiceRegistry `locationName:"serviceRegistries" type:"list"`

	// The stability status. This indicates whether the task set has reached a steady
	// state. If the following conditions are met, the task set are in STEADY_STATE:
	//
	//    * The task runningCount is equal to the computedDesiredCount.
	//
	//    * The pendingCount is 0.
	//
	//    * There are no tasks that are running on container instances in the DRAINING
	//    status.
	//
	//    * All tasks are reporting a healthy status from the load balancers, service
	//    discovery, and container health checks.
	//
	// If any of those conditions aren't met, the stability status returns STABILIZING.
	StabilityStatus *string `locationName:"stabilityStatus" type:"string" enum:"StabilityStatus"`

	// The Unix timestamp for the time when the task set stability status was retrieved.
	StabilityStatusAt *time.Time `locationName:"stabilityStatusAt" type:"timestamp"`

	// The tag specified when a task set is started. If an CodeDeploy deployment
	// created the task set, the startedBy parameter is CODE_DEPLOY. If an external
	// deployment created the task set, the startedBy field isn't used.
	StartedBy *string `locationName:"startedBy" type:"string"`

	// The status of the task set. The following describes each state.
	//
	// PRIMARY
	//
	// The task set is serving production traffic.
	//
	// ACTIVE
	//
	// The task set isn't serving production traffic.
	//
	// DRAINING
	//
	// The tasks in the task set are being stopped, and their corresponding targets
	// are being deregistered from their target group.
	Status *string `locationName:"status" type:"string"`

	// The metadata that you apply to the task set to help you categorize and organize
	// them. Each tag consists of a key and an optional value. You define both.
	//
	// The following basic restrictions apply to tags:
	//
	//    * Maximum number of tags per resource - 50
	//
	//    * For each resource, each tag key must be unique, and each tag key can
	//    have only one value.
	//
	//    * Maximum key length - 128 Unicode characters in UTF-8
	//
	//    * Maximum value length - 256 Unicode characters in UTF-8
	//
	//    * If your tagging schema is used across multiple services and resources,
	//    remember that other services may have restrictions on allowed characters.
	//    Generally allowed characters are: letters, numbers, and spaces representable
	//    in UTF-8, and the following characters: + - = . _ : / @.
	//
	//    * Tag keys and values are case-sensitive.
	//
	//    * Do not use aws:, AWS:, or any upper or lowercase combination of such
	//    as a prefix for either keys or values as it is reserved for Amazon Web
	//    Services use. You cannot edit or delete tag keys or values with this prefix.
	//    Tags with this prefix do not count against your tags per resource limit.
	Tags []*Tag `locationName:"tags" type:"list"`

	// The task definition that the task set is using.
	TaskDefinition *string `locationName:"taskDefinition" type:"string"`

	// The Amazon Resource Name (ARN) of the task set.
	TaskSetArn *string `locationName:"taskSetArn" type:"string"`

	// The Unix timestamp for the time when the task set was last updated.
	UpdatedAt *time.Time `locationName:"updatedAt" type:"timestamp"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TaskSet) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TaskSet) GoString() string {
	return s.String()
}

// SetCapacityProviderStrategy sets the CapacityProviderStrategy field's value.
func (s *TaskSet) SetCapacityProviderStrategy(v []*CapacityProviderStrategyItem) *TaskSet {
	s.CapacityProviderStrategy = v
	return s
}

// SetClusterArn sets the ClusterArn field's value.
func (s *TaskSet) SetClusterArn(v string) *TaskSet {
	s.ClusterArn = &v
	return s
}

// SetComputedDesiredCount sets the ComputedDesiredCount field's value.
func (s *TaskSet) SetComputedDesiredCount(v int64) *TaskSet {
	s.ComputedDesiredCount = &v
	return s
}

// SetCreatedAt sets the CreatedAt field's value.
func (s *TaskSet) SetCreatedAt(v time.Time) *TaskSet {
	s.CreatedAt = &v
	return s
}

// SetExternalId sets the ExternalId field's value.
func (s *TaskSet) SetExternalId(v string) *TaskSet {
	s.ExternalId = &v
	return s
}

// SetId sets the Id field's value.
func (s *TaskSet) SetId(v string) *TaskSet {
	s.Id = &v
	return s
}

// SetLaunchType sets the LaunchType field's value.
func (s *TaskSet) SetLaunchType(v string) *TaskSet {
	s.LaunchType = &v
	return s
}

// SetLoadBalancers sets the LoadBalancers field's value.
func (s *TaskSet) SetLoadBalancers(v []*LoadBalancer) *TaskSet {
	s.LoadBalancers = v
	return s
}

// SetNetworkConfiguration sets the NetworkConfiguration field's value.
func (s *TaskSet) SetNetworkConfiguration(v *NetworkConfiguration) *TaskSet {
	s.NetworkConfiguration = v
	return s
}

// SetPendingCount sets the PendingCount field's value.
func (s *TaskSet) SetPendingCount(v int64) *TaskSet {
	s.PendingCount = &v
	return s
}

// SetPlatformFamily sets the PlatformFamily field's value.
func (s *TaskSet) SetPlatformFamily(v string) *TaskSet {
	s.PlatformFamily = &v
	return s
}

// SetPlatformVersion sets the PlatformVersion field's value.
func (s *TaskSet) SetPlatformVersion(v string) *TaskSet {
	s.PlatformVersion = &v
	return s
}

// SetRunningCount sets the RunningCount field's value.
func (s *TaskSet) SetRunningCount(v int64) *TaskSet {
	s.RunningCount = &v
	return s
}

// SetScale sets the Scale field's value.
func (s *TaskSet) SetScale(v *Scale) *TaskSet {
	s.Scale = v
	return s
}

// SetServiceArn sets the ServiceArn field's value.
func (s *TaskSet) SetServiceArn(v string) *TaskSet {
	s.ServiceArn = &v
	return s
}

// SetServiceRegistries sets the ServiceRegistries field's value.
func (s *TaskSet) SetServiceRegistries(v []*ServiceRegistry) *TaskSet {
	s.ServiceRegistries = v
	return s
}

// SetStabilityStatus sets the StabilityStatus field's value.
func (s *TaskSet) SetStabilityStatus(v string) *TaskSet {
	s.StabilityStatus = &v
	return s
}

// SetStabilityStatusAt sets the StabilityStatusAt field's value.
func (s *TaskSet) SetStabilityStatusAt(v time.Time) *TaskSet {
	s.StabilityStatusAt = &v
	return s
}

// SetStartedBy sets the StartedBy field's value.
func (s *TaskSet) SetStartedBy(v string) *TaskSet {
	s.StartedBy = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *TaskSet) SetStatus(v string) *TaskSet {
	s.Status = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *TaskSet) SetTags(v []*Tag) *TaskSet {
	s.Tags = v
	return s
}

// SetTaskDefinition sets the TaskDefinition field's value.
func (s *TaskSet) SetTaskDefinition(v string) *TaskSet {
	s.TaskDefinition = &v
	return s
}

// SetTaskSetArn sets the TaskSetArn field's value.
func (s *TaskSet) SetTaskSetArn(v string) *TaskSet {
	s.TaskSetArn = &v
	return s
}

// SetUpdatedAt sets the UpdatedAt field's value.
func (s *TaskSet) SetUpdatedAt(v time.Time) *TaskSet {
	s.UpdatedAt = &v
	return s
}

// The specified task set wasn't found. You can view your available task sets
// with DescribeTaskSets. Task sets are specific to each cluster, service and
// Region.
type TaskSetNotFoundException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TaskSetNotFoundException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TaskSetNotFoundException) GoString() string {
	return s.String()
}

func newErrorTaskSetNotFoundException(v protocol.ResponseMetadata) error {
	return &TaskSetNotFoundException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *TaskSetNotFoundException) Code() string {
	return "TaskSetNotFoundException"
}

// Message returns the exception's message.
func (s *TaskSetNotFoundException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *TaskSetNotFoundException) OrigErr() error {
	return nil
}

func (s *TaskSetNotFoundException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *TaskSetNotFoundException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *TaskSetNotFoundException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The container path, mount options, and size of the tmpfs mount.
type Tmpfs struct {
	_ struct{} `type:"structure"`

	// The absolute file path where the tmpfs volume is to be mounted.
	//
	// ContainerPath is a required field
	ContainerPath *string `locationName:"containerPath" type:"string" required:"true"`

	// The list of tmpfs volume mount options.
	//
	// Valid values: "defaults" | "ro" | "rw" | "suid" | "nosuid" | "dev" | "nodev"
	// | "exec" | "noexec" | "sync" | "async" | "dirsync" | "remount" | "mand" |
	// "nomand" | "atime" | "noatime" | "diratime" | "nodiratime" | "bind" | "rbind"
	// | "unbindable" | "runbindable" | "private" | "rprivate" | "shared" | "rshared"
	// | "slave" | "rslave" | "relatime" | "norelatime" | "strictatime" | "nostrictatime"
	// | "mode" | "uid" | "gid" | "nr_inodes" | "nr_blocks" | "mpol"
	MountOptions []*string `locationName:"mountOptions" type:"list"`

	// The maximum size (in MiB) of the tmpfs volume.
	//
	// Size is a required field
	Size *int64 `locationName:"size" type:"integer" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Tmpfs) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Tmpfs) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *Tmpfs) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Tmpfs"}
	if s.ContainerPath == nil {
		invalidParams.Add(request.NewErrParamRequired("ContainerPath"))
	}
	if s.Size == nil {
		invalidParams.Add(request.NewErrParamRequired("Size"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetContainerPath sets the ContainerPath field's value.
func (s *Tmpfs) SetContainerPath(v string) *Tmpfs {
	s.ContainerPath = &v
	return s
}

// SetMountOptions sets the MountOptions field's value.
func (s *Tmpfs) SetMountOptions(v []*string) *Tmpfs {
	s.MountOptions = v
	return s
}

// SetSize sets the Size field's value.
func (s *Tmpfs) SetSize(v int64) *Tmpfs {
	s.Size = &v
	return s
}

// The ulimit settings to pass to the container.
//
// Amazon ECS tasks hosted on Fargate use the default resource limit values
// set by the operating system with the exception of the nofile resource limit
// parameter which Fargate overrides. The nofile resource limit sets a restriction
// on the number of open files that a container can use. The default nofile
// soft limit is 1024 and the default hard limit is 4096.
//
// You can specify the ulimit settings for a container in a task definition.
type Ulimit struct {
	_ struct{} `type:"structure"`

	// The hard limit for the ulimit type.
	//
	// HardLimit is a required field
	HardLimit *int64 `locationName:"hardLimit" type:"integer" required:"true"`

	// The type of the ulimit.
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true" enum:"UlimitName"`

	// The soft limit for the ulimit type.
	//
	// SoftLimit is a required field
	SoftLimit *int64 `locationName:"softLimit" type:"integer" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Ulimit) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Ulimit) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *Ulimit) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Ulimit"}
	if s.HardLimit == nil {
		invalidParams.Add(request.NewErrParamRequired("HardLimit"))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.SoftLimit == nil {
		invalidParams.Add(request.NewErrParamRequired("SoftLimit"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetHardLimit sets the HardLimit field's value.
func (s *Ulimit) SetHardLimit(v int64) *Ulimit {
	s.HardLimit = &v
	return s
}

// SetName sets the Name field's value.
func (s *Ulimit) SetName(v string) *Ulimit {
	s.Name = &v
	return s
}

// SetSoftLimit sets the SoftLimit field's value.
func (s *Ulimit) SetSoftLimit(v int64) *Ulimit {
	s.SoftLimit = &v
	return s
}

// The specified task isn't supported in this Region.
type UnsupportedFeatureException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UnsupportedFeatureException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UnsupportedFeatureException) GoString() string {
	return s.String()
}

func newErrorUnsupportedFeatureException(v protocol.ResponseMetadata) error {
	return &UnsupportedFeatureException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *UnsupportedFeatureException) Code() string {
	return "UnsupportedFeatureException"
}

// Message returns the exception's message.
func (s *UnsupportedFeatureException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *UnsupportedFeatureException) OrigErr() error {
	return nil
}

func (s *UnsupportedFeatureException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *UnsupportedFeatureException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *UnsupportedFeatureException) RequestID() string {
	return s.RespMetadata.RequestID
}

type UntagResourceInput struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the resource to delete tags from. Currently,
	// the supported resources are Amazon ECS capacity providers, tasks, services,
	// task definitions, clusters, and container instances.
	//
	// ResourceArn is a required field
	ResourceArn *string `locationName:"resourceArn" type:"string" required:"true"`

	// The keys of the tags to be removed.
	//
	// TagKeys is a required field
	TagKeys []*string `locationName:"tagKeys" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UntagResourceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UntagResourceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UntagResourceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UntagResourceInput"}
	if s.ResourceArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ResourceArn"))
	}
	if s.TagKeys == nil {
		invalidParams.Add(request.NewErrParamRequired("TagKeys"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetResourceArn sets the ResourceArn field's value.
func (s *UntagResourceInput) SetResourceArn(v string) *UntagResourceInput {
	s.ResourceArn = &v
	return s
}

// SetTagKeys sets the TagKeys field's value.
func (s *UntagResourceInput) SetTagKeys(v []*string) *UntagResourceInput {
	s.TagKeys = v
	return s
}

type UntagResourceOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UntagResourceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UntagResourceOutput) GoString() string {
	return s.String()
}

type UpdateCapacityProviderInput struct {
	_ struct{} `type:"structure"`

	// An object that represent the parameters to update for the Auto Scaling group
	// capacity provider.
	//
	// AutoScalingGroupProvider is a required field
	AutoScalingGroupProvider *AutoScalingGroupProviderUpdate `locationName:"autoScalingGroupProvider" type:"structure" required:"true"`

	// The name of the capacity provider to update.
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCapacityProviderInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCapacityProviderInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateCapacityProviderInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateCapacityProviderInput"}
	if s.AutoScalingGroupProvider == nil {
		invalidParams.Add(request.NewErrParamRequired("AutoScalingGroupProvider"))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.AutoScalingGroupProvider != nil {
		if err := s.AutoScalingGroupProvider.Validate(); err != nil {
			invalidParams.AddNested("AutoScalingGroupProvider", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAutoScalingGroupProvider sets the AutoScalingGroupProvider field's value.
func (s *UpdateCapacityProviderInput) SetAutoScalingGroupProvider(v *AutoScalingGroupProviderUpdate) *UpdateCapacityProviderInput {
	s.AutoScalingGroupProvider = v
	return s
}

// SetName sets the Name field's value.
func (s *UpdateCapacityProviderInput) SetName(v string) *UpdateCapacityProviderInput {
	s.Name = &v
	return s
}

type UpdateCapacityProviderOutput struct {
	_ struct{} `type:"structure"`

	// Details about the capacity provider.
	CapacityProvider *CapacityProvider `locationName:"capacityProvider" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCapacityProviderOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCapacityProviderOutput) GoString() string {
	return s.String()
}

// SetCapacityProvider sets the CapacityProvider field's value.
func (s *UpdateCapacityProviderOutput) SetCapacityProvider(v *CapacityProvider) *UpdateCapacityProviderOutput {
	s.CapacityProvider = v
	return s
}

type UpdateClusterInput struct {
	_ struct{} `type:"structure"`

	// The name of the cluster to modify the settings for.
	//
	// Cluster is a required field
	Cluster *string `locationName:"cluster" type:"string" required:"true"`

	// The execute command configuration for the cluster.
	Configuration *ClusterConfiguration `locationName:"configuration" type:"structure"`

	// Use this parameter to set a default Service Connect namespace. After you
	// set a default Service Connect namespace, any new services with Service Connect
	// turned on that are created in the cluster are added as client services in
	// the namespace. This setting only applies to new services that set the enabled
	// parameter to true in the ServiceConnectConfiguration. You can set the namespace
	// of each service individually in the ServiceConnectConfiguration to override
	// this default parameter.
	//
	// Tasks that run in a namespace can use short names to connect to services
	// in the namespace. Tasks can connect to services across all of the clusters
	// in the namespace. Tasks connect through a managed proxy container that collects
	// logs and metrics for increased visibility. Only the tasks that Amazon ECS
	// services create are supported with Service Connect. For more information,
	// see Service Connect (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html)
	// in the Amazon Elastic Container Service Developer Guide.
	ServiceConnectDefaults *ClusterServiceConnectDefaultsRequest `locationName:"serviceConnectDefaults" type:"structure"`

	// The cluster settings for your cluster.
	Settings []*ClusterSetting `locationName:"settings" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateClusterInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateClusterInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateClusterInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateClusterInput"}
	if s.Cluster == nil {
		invalidParams.Add(request.NewErrParamRequired("Cluster"))
	}
	if s.ServiceConnectDefaults != nil {
		if err := s.ServiceConnectDefaults.Validate(); err != nil {
			invalidParams.AddNested("ServiceConnectDefaults", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCluster sets the Cluster field's value.
func (s *UpdateClusterInput) SetCluster(v string) *UpdateClusterInput {
	s.Cluster = &v
	return s
}

// SetConfiguration sets the Configuration field's value.
func (s *UpdateClusterInput) SetConfiguration(v *ClusterConfiguration) *UpdateClusterInput {
	s.Configuration = v
	return s
}

// SetServiceConnectDefaults sets the ServiceConnectDefaults field's value.
func (s *UpdateClusterInput) SetServiceConnectDefaults(v *ClusterServiceConnectDefaultsRequest) *UpdateClusterInput {
	s.ServiceConnectDefaults = v
	return s
}

// SetSettings sets the Settings field's value.
func (s *UpdateClusterInput) SetSettings(v []*ClusterSetting) *UpdateClusterInput {
	s.Settings = v
	return s
}

type UpdateClusterOutput struct {
	_ struct{} `type:"structure"`

	// Details about the cluster.
	Cluster *Cluster `locationName:"cluster" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateClusterOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateClusterOutput) GoString() string {
	return s.String()
}

// SetCluster sets the Cluster field's value.
func (s *UpdateClusterOutput) SetCluster(v *Cluster) *UpdateClusterOutput {
	s.Cluster = v
	return s
}

type UpdateClusterSettingsInput struct {
	_ struct{} `type:"structure"`

	// The name of the cluster to modify the settings for.
	//
	// Cluster is a required field
	Cluster *string `locationName:"cluster" type:"string" required:"true"`

	// The setting to use by default for a cluster. This parameter is used to turn
	// on CloudWatch Container Insights for a cluster. If this value is specified,
	// it overrides the containerInsights value set with PutAccountSetting or PutAccountSettingDefault.
	//
	// Currently, if you delete an existing cluster that does not have Container
	// Insights turned on, and then create a new cluster with the same name with
	// Container Insights tuned on, Container Insights will not actually be turned
	// on. If you want to preserve the same name for your existing cluster and turn
	// on Container Insights, you must wait 7 days before you can re-create it.
	//
	// Settings is a required field
	Settings []*ClusterSetting `locationName:"settings" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateClusterSettingsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateClusterSettingsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateClusterSettingsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateClusterSettingsInput"}
	if s.Cluster == nil {
		invalidParams.Add(request.NewErrParamRequired("Cluster"))
	}
	if s.Settings == nil {
		invalidParams.Add(request.NewErrParamRequired("Settings"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCluster sets the Cluster field's value.
func (s *UpdateClusterSettingsInput) SetCluster(v string) *UpdateClusterSettingsInput {
	s.Cluster = &v
	return s
}

// SetSettings sets the Settings field's value.
func (s *UpdateClusterSettingsInput) SetSettings(v []*ClusterSetting) *UpdateClusterSettingsInput {
	s.Settings = v
	return s
}

type UpdateClusterSettingsOutput struct {
	_ struct{} `type:"structure"`

	// Details about the cluster
	Cluster *Cluster `locationName:"cluster" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateClusterSettingsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateClusterSettingsOutput) GoString() string {
	return s.String()
}

// SetCluster sets the Cluster field's value.
func (s *UpdateClusterSettingsOutput) SetCluster(v *Cluster) *UpdateClusterSettingsOutput {
	s.Cluster = v
	return s
}

type UpdateContainerAgentInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that your
	// container instance is running on. If you do not specify a cluster, the default
	// cluster is assumed.
	Cluster *string `locationName:"cluster" type:"string"`

	// The container instance ID or full ARN entries for the container instance
	// where you would like to update the Amazon ECS container agent.
	//
	// ContainerInstance is a required field
	ContainerInstance *string `locationName:"containerInstance" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateContainerAgentInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateContainerAgentInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateContainerAgentInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateContainerAgentInput"}
	if s.ContainerInstance == nil {
		invalidParams.Add(request.NewErrParamRequired("ContainerInstance"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCluster sets the Cluster field's value.
func (s *UpdateContainerAgentInput) SetCluster(v string) *UpdateContainerAgentInput {
	s.Cluster = &v
	return s
}

// SetContainerInstance sets the ContainerInstance field's value.
func (s *UpdateContainerAgentInput) SetContainerInstance(v string) *UpdateContainerAgentInput {
	s.ContainerInstance = &v
	return s
}

type UpdateContainerAgentOutput struct {
	_ struct{} `type:"structure"`

	// The container instance that the container agent was updated for.
	ContainerInstance *ContainerInstance `locationName:"containerInstance" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateContainerAgentOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateContainerAgentOutput) GoString() string {
	return s.String()
}

// SetContainerInstance sets the ContainerInstance field's value.
func (s *UpdateContainerAgentOutput) SetContainerInstance(v *ContainerInstance) *UpdateContainerAgentOutput {
	s.ContainerInstance = v
	return s
}

type UpdateContainerInstancesStateInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that hosts
	// the container instance to update. If you do not specify a cluster, the default
	// cluster is assumed.
	Cluster *string `locationName:"cluster" type:"string"`

	// A list of up to 10 container instance IDs or full ARN entries.
	//
	// ContainerInstances is a required field
	ContainerInstances []*string `locationName:"containerInstances" type:"list" required:"true"`

	// The container instance state to update the container instance with. The only
	// valid values for this action are ACTIVE and DRAINING. A container instance
	// can only be updated to DRAINING status once it has reached an ACTIVE state.
	// If a container instance is in REGISTERING, DEREGISTERING, or REGISTRATION_FAILED
	// state you can describe the container instance but can't update the container
	// instance state.
	//
	// Status is a required field
	Status *string `locationName:"status" type:"string" required:"true" enum:"ContainerInstanceStatus"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateContainerInstancesStateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateContainerInstancesStateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateContainerInstancesStateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateContainerInstancesStateInput"}
	if s.ContainerInstances == nil {
		invalidParams.Add(request.NewErrParamRequired("ContainerInstances"))
	}
	if s.Status == nil {
		invalidParams.Add(request.NewErrParamRequired("Status"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCluster sets the Cluster field's value.
func (s *UpdateContainerInstancesStateInput) SetCluster(v string) *UpdateContainerInstancesStateInput {
	s.Cluster = &v
	return s
}

// SetContainerInstances sets the ContainerInstances field's value.
func (s *UpdateContainerInstancesStateInput) SetContainerInstances(v []*string) *UpdateContainerInstancesStateInput {
	s.ContainerInstances = v
	return s
}

// SetStatus sets the Status field's value.
func (s *UpdateContainerInstancesStateInput) SetStatus(v string) *UpdateContainerInstancesStateInput {
	s.Status = &v
	return s
}

type UpdateContainerInstancesStateOutput struct {
	_ struct{} `type:"structure"`

	// The list of container instances.
	ContainerInstances []*ContainerInstance `locationName:"containerInstances" type:"list"`

	// Any failures associated with the call.
	Failures []*Failure `locationName:"failures" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateContainerInstancesStateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateContainerInstancesStateOutput) GoString() string {
	return s.String()
}

// SetContainerInstances sets the ContainerInstances field's value.
func (s *UpdateContainerInstancesStateOutput) SetContainerInstances(v []*ContainerInstance) *UpdateContainerInstancesStateOutput {
	s.ContainerInstances = v
	return s
}

// SetFailures sets the Failures field's value.
func (s *UpdateContainerInstancesStateOutput) SetFailures(v []*Failure) *UpdateContainerInstancesStateOutput {
	s.Failures = v
	return s
}

// There's already a current Amazon ECS container agent update in progress on
// the container instance that's specified. If the container agent becomes disconnected
// while it's in a transitional stage, such as PENDING or STAGING, the update
// process can get stuck in that state. However, when the agent reconnects,
// it resumes where it stopped previously.
type UpdateInProgressException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateInProgressException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateInProgressException) GoString() string {
	return s.String()
}

func newErrorUpdateInProgressException(v protocol.ResponseMetadata) error {
	return &UpdateInProgressException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *UpdateInProgressException) Code() string {
	return "UpdateInProgressException"
}

// Message returns the exception's message.
func (s *UpdateInProgressException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *UpdateInProgressException) OrigErr() error {
	return nil
}

func (s *UpdateInProgressException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *UpdateInProgressException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *UpdateInProgressException) RequestID() string {
	return s.RespMetadata.RequestID
}

type UpdateServiceInput struct {
	_ struct{} `type:"structure"`

	// The capacity provider strategy to update the service to use.
	//
	// if the service uses the default capacity provider strategy for the cluster,
	// the service can be updated to use one or more capacity providers as opposed
	// to the default capacity provider strategy. However, when a service is using
	// a capacity provider strategy that's not the default capacity provider strategy,
	// the service can't be updated to use the cluster's default capacity provider
	// strategy.
	//
	// A capacity provider strategy consists of one or more capacity providers along
	// with the base and weight to assign to them. A capacity provider must be associated
	// with the cluster to be used in a capacity provider strategy. The PutClusterCapacityProviders
	// API is used to associate a capacity provider with a cluster. Only capacity
	// providers with an ACTIVE or UPDATING status can be used.
	//
	// If specifying a capacity provider that uses an Auto Scaling group, the capacity
	// provider must already be created. New capacity providers can be created with
	// the CreateCapacityProvider API operation.
	//
	// To use a Fargate capacity provider, specify either the FARGATE or FARGATE_SPOT
	// capacity providers. The Fargate capacity providers are available to all accounts
	// and only need to be associated with a cluster to be used.
	//
	// The PutClusterCapacityProviders API operation is used to update the list
	// of available capacity providers for a cluster after the cluster is created.
	CapacityProviderStrategy []*CapacityProviderStrategyItem `locationName:"capacityProviderStrategy" type:"list"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that your
	// service runs on. If you do not specify a cluster, the default cluster is
	// assumed.
	Cluster *string `locationName:"cluster" type:"string"`

	// Optional deployment parameters that control how many tasks run during the
	// deployment and the ordering of stopping and starting tasks.
	DeploymentConfiguration *DeploymentConfiguration `locationName:"deploymentConfiguration" type:"structure"`

	// The number of instantiations of the task to place and keep running in your
	// service.
	DesiredCount *int64 `locationName:"desiredCount" type:"integer"`

	// Determines whether to turn on Amazon ECS managed tags for the tasks in the
	// service. For more information, see Tagging Your Amazon ECS Resources (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-using-tags.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// Only tasks launched after the update will reflect the update. To update the
	// tags on all tasks, set forceNewDeployment to true, so that Amazon ECS starts
	// new tasks with the updated tags.
	EnableECSManagedTags *bool `locationName:"enableECSManagedTags" type:"boolean"`

	// If true, this enables execute command functionality on all task containers.
	//
	// If you do not want to override the value that was set when the service was
	// created, you can set this to null when performing this action.
	EnableExecuteCommand *bool `locationName:"enableExecuteCommand" type:"boolean"`

	// Determines whether to force a new deployment of the service. By default,
	// deployments aren't forced. You can use this option to start a new deployment
	// with no service definition changes. For example, you can update a service's
	// tasks to use a newer Docker image with the same image/tag combination (my_image:latest)
	// or to roll Fargate tasks onto a newer platform version.
	ForceNewDeployment *bool `locationName:"forceNewDeployment" type:"boolean"`

	// The period of time, in seconds, that the Amazon ECS service scheduler ignores
	// unhealthy Elastic Load Balancing target health checks after a task has first
	// started. This is only valid if your service is configured to use a load balancer.
	// If your service's tasks take a while to start and respond to Elastic Load
	// Balancing health checks, you can specify a health check grace period of up
	// to 2,147,483,647 seconds. During that time, the Amazon ECS service scheduler
	// ignores the Elastic Load Balancing health check status. This grace period
	// can prevent the ECS service scheduler from marking tasks as unhealthy and
	// stopping them before they have time to come up.
	HealthCheckGracePeriodSeconds *int64 `locationName:"healthCheckGracePeriodSeconds" type:"integer"`

	// A list of Elastic Load Balancing load balancer objects. It contains the load
	// balancer name, the container name, and the container port to access from
	// the load balancer. The container name is as it appears in a container definition.
	//
	// When you add, update, or remove a load balancer configuration, Amazon ECS
	// starts new tasks with the updated Elastic Load Balancing configuration, and
	// then stops the old tasks when the new tasks are running.
	//
	// For services that use rolling updates, you can add, update, or remove Elastic
	// Load Balancing target groups. You can update from a single target group to
	// multiple target groups and from multiple target groups to a single target
	// group.
	//
	// For services that use blue/green deployments, you can update Elastic Load
	// Balancing target groups by using CreateDeployment (https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_CreateDeployment.html)
	// through CodeDeploy. Note that multiple target groups are not supported for
	// blue/green deployments. For more information see Register multiple target
	// groups with a service (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/register-multiple-targetgroups.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// For services that use the external deployment controller, you can add, update,
	// or remove load balancers by using CreateTaskSet (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateTaskSet.html).
	// Note that multiple target groups are not supported for external deployments.
	// For more information see Register multiple target groups with a service (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/register-multiple-targetgroups.html)
	// in the Amazon Elastic Container Service Developer Guide.
	//
	// You can remove existing loadBalancers by passing an empty list.
	LoadBalancers []*LoadBalancer `locationName:"loadBalancers" type:"list"`

	// An object representing the network configuration for the service.
	NetworkConfiguration *NetworkConfiguration `locationName:"networkConfiguration" type:"structure"`

	// An array of task placement constraint objects to update the service to use.
	// If no value is specified, the existing placement constraints for the service
	// will remain unchanged. If this value is specified, it will override any existing
	// placement constraints defined for the service. To remove all existing placement
	// constraints, specify an empty array.
	//
	// You can specify a maximum of 10 constraints for each task. This limit includes
	// constraints in the task definition and those specified at runtime.
	PlacementConstraints []*PlacementConstraint `locationName:"placementConstraints" type:"list"`

	// The task placement strategy objects to update the service to use. If no value
	// is specified, the existing placement strategy for the service will remain
	// unchanged. If this value is specified, it will override the existing placement
	// strategy defined for the service. To remove an existing placement strategy,
	// specify an empty object.
	//
	// You can specify a maximum of five strategy rules for each service.
	PlacementStrategy []*PlacementStrategy `locationName:"placementStrategy" type:"list"`

	// The platform version that your tasks in the service run on. A platform version
	// is only specified for tasks using the Fargate launch type. If a platform
	// version is not specified, the LATEST platform version is used. For more information,
	// see Fargate Platform Versions (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html)
	// in the Amazon Elastic Container Service Developer Guide.
	PlatformVersion *string `locationName:"platformVersion" type:"string"`

	// Determines whether to propagate the tags from the task definition or the
	// service to the task. If no value is specified, the tags aren't propagated.
	//
	// Only tasks launched after the update will reflect the update. To update the
	// tags on all tasks, set forceNewDeployment to true, so that Amazon ECS starts
	// new tasks with the updated tags.
	PropagateTags *string `locationName:"propagateTags" type:"string" enum:"PropagateTags"`

	// The name of the service to update.
	//
	// Service is a required field
	Service *string `locationName:"service" type:"string" required:"true"`

	// The configuration for this service to discover and connect to services, and
	// be discovered by, and connected from, other services within a namespace.
	//
	// Tasks that run in a namespace can use short names to connect to services
	// in the namespace. Tasks can connect to services across all of the clusters
	// in the namespace. Tasks connect through a managed proxy container that collects
	// logs and metrics for increased visibility. Only the tasks that Amazon ECS
	// services create are supported with Service Connect. For more information,
	// see Service Connect (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html)
	// in the Amazon Elastic Container Service Developer Guide.
	ServiceConnectConfiguration *ServiceConnectConfiguration `locationName:"serviceConnectConfiguration" type:"structure"`

	// The details for the service discovery registries to assign to this service.
	// For more information, see Service Discovery (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-discovery.html).
	//
	// When you add, update, or remove the service registries configuration, Amazon
	// ECS starts new tasks with the updated service registries configuration, and
	// then stops the old tasks when the new tasks are running.
	//
	// You can remove existing serviceRegistries by passing an empty list.
	ServiceRegistries []*ServiceRegistry `locationName:"serviceRegistries" type:"list"`

	// The family and revision (family:revision) or full ARN of the task definition
	// to run in your service. If a revision is not specified, the latest ACTIVE
	// revision is used. If you modify the task definition with UpdateService, Amazon
	// ECS spawns a task with the new version of the task definition and then stops
	// an old task after the new version is running.
	TaskDefinition *string `locationName:"taskDefinition" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateServiceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateServiceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateServiceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateServiceInput"}
	if s.Service == nil {
		invalidParams.Add(request.NewErrParamRequired("Service"))
	}
	if s.CapacityProviderStrategy != nil {
		for i, v := range s.CapacityProviderStrategy {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "CapacityProviderStrategy", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.DeploymentConfiguration != nil {
		if err := s.DeploymentConfiguration.Validate(); err != nil {
			invalidParams.AddNested("DeploymentConfiguration", err.(request.ErrInvalidParams))
		}
	}
	if s.NetworkConfiguration != nil {
		if err := s.NetworkConfiguration.Validate(); err != nil {
			invalidParams.AddNested("NetworkConfiguration", err.(request.ErrInvalidParams))
		}
	}
	if s.ServiceConnectConfiguration != nil {
		if err := s.ServiceConnectConfiguration.Validate(); err != nil {
			invalidParams.AddNested("ServiceConnectConfiguration", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCapacityProviderStrategy sets the CapacityProviderStrategy field's value.
func (s *UpdateServiceInput) SetCapacityProviderStrategy(v []*CapacityProviderStrategyItem) *UpdateServiceInput {
	s.CapacityProviderStrategy = v
	return s
}

// SetCluster sets the Cluster field's value.
func (s *UpdateServiceInput) SetCluster(v string) *UpdateServiceInput {
	s.Cluster = &v
	return s
}

// SetDeploymentConfiguration sets the DeploymentConfiguration field's value.
func (s *UpdateServiceInput) SetDeploymentConfiguration(v *DeploymentConfiguration) *UpdateServiceInput {
	s.DeploymentConfiguration = v
	return s
}

// SetDesiredCount sets the DesiredCount field's value.
func (s *UpdateServiceInput) SetDesiredCount(v int64) *UpdateServiceInput {
	s.DesiredCount = &v
	return s
}

// SetEnableECSManagedTags sets the EnableECSManagedTags field's value.
func (s *UpdateServiceInput) SetEnableECSManagedTags(v bool) *UpdateServiceInput {
	s.EnableECSManagedTags = &v
	return s
}

// SetEnableExecuteCommand sets the EnableExecuteCommand field's value.
func (s *UpdateServiceInput) SetEnableExecuteCommand(v bool) *UpdateServiceInput {
	s.EnableExecuteCommand = &v
	return s
}

// SetForceNewDeployment sets the ForceNewDeployment field's value.
func (s *UpdateServiceInput) SetForceNewDeployment(v bool) *UpdateServiceInput {
	s.ForceNewDeployment = &v
	return s
}

// SetHealthCheckGracePeriodSeconds sets the HealthCheckGracePeriodSeconds field's value.
func (s *UpdateServiceInput) SetHealthCheckGracePeriodSeconds(v int64) *UpdateServiceInput {
	s.HealthCheckGracePeriodSeconds = &v
	return s
}

// SetLoadBalancers sets the LoadBalancers field's value.
func (s *UpdateServiceInput) SetLoadBalancers(v []*LoadBalancer) *UpdateServiceInput {
	s.LoadBalancers = v
	return s
}

// SetNetworkConfiguration sets the NetworkConfiguration field's value.
func (s *UpdateServiceInput) SetNetworkConfiguration(v *NetworkConfiguration) *UpdateServiceInput {
	s.NetworkConfiguration = v
	return s
}

// SetPlacementConstraints sets the PlacementConstraints field's value.
func (s *UpdateServiceInput) SetPlacementConstraints(v []*PlacementConstraint) *UpdateServiceInput {
	s.PlacementConstraints = v
	return s
}

// SetPlacementStrategy sets the PlacementStrategy field's value.
func (s *UpdateServiceInput) SetPlacementStrategy(v []*PlacementStrategy) *UpdateServiceInput {
	s.PlacementStrategy = v
	return s
}

// SetPlatformVersion sets the PlatformVersion field's value.
func (s *UpdateServiceInput) SetPlatformVersion(v string) *UpdateServiceInput {
	s.PlatformVersion = &v
	return s
}

// SetPropagateTags sets the PropagateTags field's value.
func (s *UpdateServiceInput) SetPropagateTags(v string) *UpdateServiceInput {
	s.PropagateTags = &v
	return s
}

// SetService sets the Service field's value.
func (s *UpdateServiceInput) SetService(v string) *UpdateServiceInput {
	s.Service = &v
	return s
}

// SetServiceConnectConfiguration sets the ServiceConnectConfiguration field's value.
func (s *UpdateServiceInput) SetServiceConnectConfiguration(v *ServiceConnectConfiguration) *UpdateServiceInput {
	s.ServiceConnectConfiguration = v
	return s
}

// SetServiceRegistries sets the ServiceRegistries field's value.
func (s *UpdateServiceInput) SetServiceRegistries(v []*ServiceRegistry) *UpdateServiceInput {
	s.ServiceRegistries = v
	return s
}

// SetTaskDefinition sets the TaskDefinition field's value.
func (s *UpdateServiceInput) SetTaskDefinition(v string) *UpdateServiceInput {
	s.TaskDefinition = &v
	return s
}

type UpdateServiceOutput struct {
	_ struct{} `type:"structure"`

	// The full description of your service following the update call.
	Service *Service `locationName:"service" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateServiceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateServiceOutput) GoString() string {
	return s.String()
}

// SetService sets the Service field's value.
func (s *UpdateServiceOutput) SetService(v *Service) *UpdateServiceOutput {
	s.Service = v
	return s
}

type UpdateServicePrimaryTaskSetInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that hosts
	// the service that the task set exists in.
	//
	// Cluster is a required field
	Cluster *string `locationName:"cluster" type:"string" required:"true"`

	// The short name or full Amazon Resource Name (ARN) of the task set to set
	// as the primary task set in the deployment.
	//
	// PrimaryTaskSet is a required field
	PrimaryTaskSet *string `locationName:"primaryTaskSet" type:"string" required:"true"`

	// The short name or full Amazon Resource Name (ARN) of the service that the
	// task set exists in.
	//
	// Service is a required field
	Service *string `locationName:"service" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateServicePrimaryTaskSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateServicePrimaryTaskSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateServicePrimaryTaskSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateServicePrimaryTaskSetInput"}
	if s.Cluster == nil {
		invalidParams.Add(request.NewErrParamRequired("Cluster"))
	}
	if s.PrimaryTaskSet == nil {
		invalidParams.Add(request.NewErrParamRequired("PrimaryTaskSet"))
	}
	if s.Service == nil {
		invalidParams.Add(request.NewErrParamRequired("Service"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCluster sets the Cluster field's value.
func (s *UpdateServicePrimaryTaskSetInput) SetCluster(v string) *UpdateServicePrimaryTaskSetInput {
	s.Cluster = &v
	return s
}

// SetPrimaryTaskSet sets the PrimaryTaskSet field's value.
func (s *UpdateServicePrimaryTaskSetInput) SetPrimaryTaskSet(v string) *UpdateServicePrimaryTaskSetInput {
	s.PrimaryTaskSet = &v
	return s
}

// SetService sets the Service field's value.
func (s *UpdateServicePrimaryTaskSetInput) SetService(v string) *UpdateServicePrimaryTaskSetInput {
	s.Service = &v
	return s
}

type UpdateServicePrimaryTaskSetOutput struct {
	_ struct{} `type:"structure"`

	// The details about the task set.
	TaskSet *TaskSet `locationName:"taskSet" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateServicePrimaryTaskSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateServicePrimaryTaskSetOutput) GoString() string {
	return s.String()
}

// SetTaskSet sets the TaskSet field's value.
func (s *UpdateServicePrimaryTaskSetOutput) SetTaskSet(v *TaskSet) *UpdateServicePrimaryTaskSetOutput {
	s.TaskSet = v
	return s
}

type UpdateTaskProtectionInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that hosts
	// the service that the task sets exist in.
	//
	// Cluster is a required field
	Cluster *string `locationName:"cluster" type:"string" required:"true"`

	// If you set protectionEnabled to true, you can specify the duration for task
	// protection in minutes. You can specify a value from 1 minute to up to 2,880
	// minutes (48 hours). During this time, your task will not be terminated by
	// scale-in events from Service Auto Scaling or deployments. After this time
	// period lapses, protectionEnabled will be reset to false.
	//
	// If you don’t specify the time, then the task is automatically protected
	// for 120 minutes (2 hours).
	ExpiresInMinutes *int64 `locationName:"expiresInMinutes" type:"integer"`

	// Specify true to mark a task for protection and false to unset protection,
	// making it eligible for termination.
	//
	// ProtectionEnabled is a required field
	ProtectionEnabled *bool `locationName:"protectionEnabled" type:"boolean" required:"true"`

	// A list of up to 10 task IDs or full ARN entries.
	//
	// Tasks is a required field
	Tasks []*string `locationName:"tasks" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateTaskProtectionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateTaskProtectionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateTaskProtectionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateTaskProtectionInput"}
	if s.Cluster == nil {
		invalidParams.Add(request.NewErrParamRequired("Cluster"))
	}
	if s.ProtectionEnabled == nil {
		invalidParams.Add(request.NewErrParamRequired("ProtectionEnabled"))
	}
	if s.Tasks == nil {
		invalidParams.Add(request.NewErrParamRequired("Tasks"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCluster sets the Cluster field's value.
func (s *UpdateTaskProtectionInput) SetCluster(v string) *UpdateTaskProtectionInput {
	s.Cluster = &v
	return s
}

// SetExpiresInMinutes sets the ExpiresInMinutes field's value.
func (s *UpdateTaskProtectionInput) SetExpiresInMinutes(v int64) *UpdateTaskProtectionInput {
	s.ExpiresInMinutes = &v
	return s
}

// SetProtectionEnabled sets the ProtectionEnabled field's value.
func (s *UpdateTaskProtectionInput) SetProtectionEnabled(v bool) *UpdateTaskProtectionInput {
	s.ProtectionEnabled = &v
	return s
}

// SetTasks sets the Tasks field's value.
func (s *UpdateTaskProtectionInput) SetTasks(v []*string) *UpdateTaskProtectionInput {
	s.Tasks = v
	return s
}

type UpdateTaskProtectionOutput struct {
	_ struct{} `type:"structure"`

	// Any failures associated with the call.
	Failures []*Failure `locationName:"failures" type:"list"`

	// A list of tasks with the following information.
	//
	//    * taskArn: The task ARN.
	//
	//    * protectionEnabled: The protection status of the task. If scale-in protection
	//    is turned on for a task, the value is true. Otherwise, it is false.
	//
	//    * expirationDate: The epoch time when protection for the task will expire.
	ProtectedTasks []*ProtectedTask `locationName:"protectedTasks" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateTaskProtectionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateTaskProtectionOutput) GoString() string {
	return s.String()
}

// SetFailures sets the Failures field's value.
func (s *UpdateTaskProtectionOutput) SetFailures(v []*Failure) *UpdateTaskProtectionOutput {
	s.Failures = v
	return s
}

// SetProtectedTasks sets the ProtectedTasks field's value.
func (s *UpdateTaskProtectionOutput) SetProtectedTasks(v []*ProtectedTask) *UpdateTaskProtectionOutput {
	s.ProtectedTasks = v
	return s
}

type UpdateTaskSetInput struct {
	_ struct{} `type:"structure"`

	// The short name or full Amazon Resource Name (ARN) of the cluster that hosts
	// the service that the task set is found in.
	//
	// Cluster is a required field
	Cluster *string `locationName:"cluster" type:"string" required:"true"`

	// A floating-point percentage of the desired number of tasks to place and keep
	// running in the task set.
	//
	// Scale is a required field
	Scale *Scale `locationName:"scale" type:"structure" required:"true"`

	// The short name or full Amazon Resource Name (ARN) of the service that the
	// task set is found in.
	//
	// Service is a required field
	Service *string `locationName:"service" type:"string" required:"true"`

	// The short name or full Amazon Resource Name (ARN) of the task set to update.
	//
	// TaskSet is a required field
	TaskSet *string `locationName:"taskSet" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateTaskSetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateTaskSetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateTaskSetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateTaskSetInput"}
	if s.Cluster == nil {
		invalidParams.Add(request.NewErrParamRequired("Cluster"))
	}
	if s.Scale == nil {
		invalidParams.Add(request.NewErrParamRequired("Scale"))
	}
	if s.Service == nil {
		invalidParams.Add(request.NewErrParamRequired("Service"))
	}
	if s.TaskSet == nil {
		invalidParams.Add(request.NewErrParamRequired("TaskSet"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCluster sets the Cluster field's value.
func (s *UpdateTaskSetInput) SetCluster(v string) *UpdateTaskSetInput {
	s.Cluster = &v
	return s
}

// SetScale sets the Scale field's value.
func (s *UpdateTaskSetInput) SetScale(v *Scale) *UpdateTaskSetInput {
	s.Scale = v
	return s
}

// SetService sets the Service field's value.
func (s *UpdateTaskSetInput) SetService(v string) *UpdateTaskSetInput {
	s.Service = &v
	return s
}

// SetTaskSet sets the TaskSet field's value.
func (s *UpdateTaskSetInput) SetTaskSet(v string) *UpdateTaskSetInput {
	s.TaskSet = &v
	return s
}

type UpdateTaskSetOutput struct {
	_ struct{} `type:"structure"`

	// Details about the task set.
	TaskSet *TaskSet `locationName:"taskSet" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateTaskSetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateTaskSetOutput) GoString() string {
	return s.String()
}

// SetTaskSet sets the TaskSet field's value.
func (s *UpdateTaskSetOutput) SetTaskSet(v *TaskSet) *UpdateTaskSetOutput {
	s.TaskSet = v
	return s
}

// The Docker and Amazon ECS container agent version information about a container
// instance.
type VersionInfo struct {
	_ struct{} `type:"structure"`

	// The Git commit hash for the Amazon ECS container agent build on the amazon-ecs-agent
	// (https://github.com/aws/amazon-ecs-agent/commits/master) GitHub repository.
	AgentHash *string `locationName:"agentHash" type:"string"`

	// The version number of the Amazon ECS container agent.
	AgentVersion *string `locationName:"agentVersion" type:"string"`

	// The Docker version that's running on the container instance.
	DockerVersion *string `locationName:"dockerVersion" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VersionInfo) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VersionInfo) GoString() string {
	return s.String()
}

// SetAgentHash sets the AgentHash field's value.
func (s *VersionInfo) SetAgentHash(v string) *VersionInfo {
	s.AgentHash = &v
	return s
}

// SetAgentVersion sets the AgentVersion field's value.
func (s *VersionInfo) SetAgentVersion(v string) *VersionInfo {
	s.AgentVersion = &v
	return s
}

// SetDockerVersion sets the DockerVersion field's value.
func (s *VersionInfo) SetDockerVersion(v string) *VersionInfo {
	s.DockerVersion = &v
	return s
}

// A data volume that's used in a task definition. For tasks that use the Amazon
// Elastic File System (Amazon EFS), specify an efsVolumeConfiguration. For
// Windows tasks that use Amazon FSx for Windows File Server file system, specify
// a fsxWindowsFileServerVolumeConfiguration. For tasks that use a Docker volume,
// specify a DockerVolumeConfiguration. For tasks that use a bind mount host
// volume, specify a host and optional sourcePath. For more information, see
// Using Data Volumes in Tasks (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_data_volumes.html).
type Volume struct {
	_ struct{} `type:"structure"`

	// This parameter is specified when you use Docker volumes.
	//
	// Windows containers only support the use of the local driver. To use bind
	// mounts, specify the host parameter instead.
	//
	// Docker volumes aren't supported by tasks run on Fargate.
	DockerVolumeConfiguration *DockerVolumeConfiguration `locationName:"dockerVolumeConfiguration" type:"structure"`

	// This parameter is specified when you use an Amazon Elastic File System file
	// system for task storage.
	EfsVolumeConfiguration *EFSVolumeConfiguration `locationName:"efsVolumeConfiguration" type:"structure"`

	// This parameter is specified when you use Amazon FSx for Windows File Server
	// file system for task storage.
	FsxWindowsFileServerVolumeConfiguration *FSxWindowsFileServerVolumeConfiguration `locationName:"fsxWindowsFileServerVolumeConfiguration" type:"structure"`

	// This parameter is specified when you use bind mount host volumes. The contents
	// of the host parameter determine whether your bind mount host volume persists
	// on the host container instance and where it's stored. If the host parameter
	// is empty, then the Docker daemon assigns a host path for your data volume.
	// However, the data isn't guaranteed to persist after the containers that are
	// associated with it stop running.
	//
	// Windows containers can mount whole directories on the same drive as $env:ProgramData.
	// Windows containers can't mount directories on a different drive, and mount
	// point can't be across drives. For example, you can mount C:\my\path:C:\my\path
	// and D:\:D:\, but not D:\my\path:C:\my\path or D:\:C:\my\path.
	Host *HostVolumeProperties `locationName:"host" type:"structure"`

	// The name of the volume. Up to 255 letters (uppercase and lowercase), numbers,
	// underscores, and hyphens are allowed. This name is referenced in the sourceVolume
	// parameter of container definition mountPoints.
	//
	// This is required wwhen you use an Amazon EFS volume.
	Name *string `locationName:"name" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Volume) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Volume) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *Volume) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Volume"}
	if s.EfsVolumeConfiguration != nil {
		if err := s.EfsVolumeConfiguration.Validate(); err != nil {
			invalidParams.AddNested("EfsVolumeConfiguration", err.(request.ErrInvalidParams))
		}
	}
	if s.FsxWindowsFileServerVolumeConfiguration != nil {
		if err := s.FsxWindowsFileServerVolumeConfiguration.Validate(); err != nil {
			invalidParams.AddNested("FsxWindowsFileServerVolumeConfiguration", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDockerVolumeConfiguration sets the DockerVolumeConfiguration field's value.
func (s *Volume) SetDockerVolumeConfiguration(v *DockerVolumeConfiguration) *Volume {
	s.DockerVolumeConfiguration = v
	return s
}

// SetEfsVolumeConfiguration sets the EfsVolumeConfiguration field's value.
func (s *Volume) SetEfsVolumeConfiguration(v *EFSVolumeConfiguration) *Volume {
	s.EfsVolumeConfiguration = v
	return s
}

// SetFsxWindowsFileServerVolumeConfiguration sets the FsxWindowsFileServerVolumeConfiguration field's value.
func (s *Volume) SetFsxWindowsFileServerVolumeConfiguration(v *FSxWindowsFileServerVolumeConfiguration) *Volume {
	s.FsxWindowsFileServerVolumeConfiguration = v
	return s
}

// SetHost sets the Host field's value.
func (s *Volume) SetHost(v *HostVolumeProperties) *Volume {
	s.Host = v
	return s
}

// SetName sets the Name field's value.
func (s *Volume) SetName(v string) *Volume {
	s.Name = &v
	return s
}

// Details on a data volume from another container in the same task definition.
type VolumeFrom struct {
	_ struct{} `type:"structure"`

	// If this value is true, the container has read-only access to the volume.
	// If this value is false, then the container can write to the volume. The default
	// value is false.
	ReadOnly *bool `locationName:"readOnly" type:"boolean"`

	// The name of another container within the same task definition to mount volumes
	// from.
	SourceContainer *string `locationName:"sourceContainer" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VolumeFrom) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VolumeFrom) GoString() string {
	return s.String()
}

// SetReadOnly sets the ReadOnly field's value.
func (s *VolumeFrom) SetReadOnly(v bool) *VolumeFrom {
	s.ReadOnly = &v
	return s
}

// SetSourceContainer sets the SourceContainer field's value.
func (s *VolumeFrom) SetSourceContainer(v string) *VolumeFrom {
	s.SourceContainer = &v
	return s
}

const (
	// AgentUpdateStatusPending is a AgentUpdateStatus enum value
	AgentUpdateStatusPending = "PENDING"

	// AgentUpdateStatusStaging is a AgentUpdateStatus enum value
	AgentUpdateStatusStaging = "STAGING"

	// AgentUpdateStatusStaged is a AgentUpdateStatus enum value
	AgentUpdateStatusStaged = "STAGED"

	// AgentUpdateStatusUpdating is a AgentUpdateStatus enum value
	AgentUpdateStatusUpdating = "UPDATING"

	// AgentUpdateStatusUpdated is a AgentUpdateStatus enum value
	AgentUpdateStatusUpdated = "UPDATED"

	// AgentUpdateStatusFailed is a AgentUpdateStatus enum value
	AgentUpdateStatusFailed = "FAILED"
)

// AgentUpdateStatus_Values returns all elements of the AgentUpdateStatus enum
func AgentUpdateStatus_Values() []string {
	return []string{
		AgentUpdateStatusPending,
		AgentUpdateStatusStaging,
		AgentUpdateStatusStaged,
		AgentUpdateStatusUpdating,
		AgentUpdateStatusUpdated,
		AgentUpdateStatusFailed,
	}
}

const (
	// ApplicationProtocolHttp is a ApplicationProtocol enum value
	ApplicationProtocolHttp = "http"

	// ApplicationProtocolHttp2 is a ApplicationProtocol enum value
	ApplicationProtocolHttp2 = "http2"

	// ApplicationProtocolGrpc is a ApplicationProtocol enum value
	ApplicationProtocolGrpc = "grpc"
)

// ApplicationProtocol_Values returns all elements of the ApplicationProtocol enum
func ApplicationProtocol_Values() []string {
	return []string{
		ApplicationProtocolHttp,
		ApplicationProtocolHttp2,
		ApplicationProtocolGrpc,
	}
}

const (
	// AssignPublicIpEnabled is a AssignPublicIp enum value
	AssignPublicIpEnabled = "ENABLED"

	// AssignPublicIpDisabled is a AssignPublicIp enum value
	AssignPublicIpDisabled = "DISABLED"
)

// AssignPublicIp_Values returns all elements of the AssignPublicIp enum
func AssignPublicIp_Values() []string {
	return []string{
		AssignPublicIpEnabled,
		AssignPublicIpDisabled,
	}
}

const (
	// CPUArchitectureX8664 is a CPUArchitecture enum value
	CPUArchitectureX8664 = "X86_64"

	// CPUArchitectureArm64 is a CPUArchitecture enum value
	CPUArchitectureArm64 = "ARM64"
)

// CPUArchitecture_Values returns all elements of the CPUArchitecture enum
func CPUArchitecture_Values() []string {
	return []string{
		CPUArchitectureX8664,
		CPUArchitectureArm64,
	}
}

const (
	// CapacityProviderFieldTags is a CapacityProviderField enum value
	CapacityProviderFieldTags = "TAGS"
)

// CapacityProviderField_Values returns all elements of the CapacityProviderField enum
func CapacityProviderField_Values() []string {
	return []string{
		CapacityProviderFieldTags,
	}
}

const (
	// CapacityProviderStatusActive is a CapacityProviderStatus enum value
	CapacityProviderStatusActive = "ACTIVE"

	// CapacityProviderStatusInactive is a CapacityProviderStatus enum value
	CapacityProviderStatusInactive = "INACTIVE"
)

// CapacityProviderStatus_Values returns all elements of the CapacityProviderStatus enum
func CapacityProviderStatus_Values() []string {
	return []string{
		CapacityProviderStatusActive,
		CapacityProviderStatusInactive,
	}
}

const (
	// CapacityProviderUpdateStatusDeleteInProgress is a CapacityProviderUpdateStatus enum value
	CapacityProviderUpdateStatusDeleteInProgress = "DELETE_IN_PROGRESS"

	// CapacityProviderUpdateStatusDeleteComplete is a CapacityProviderUpdateStatus enum value
	CapacityProviderUpdateStatusDeleteComplete = "DELETE_COMPLETE"

	// CapacityProviderUpdateStatusDeleteFailed is a CapacityProviderUpdateStatus enum value
	CapacityProviderUpdateStatusDeleteFailed = "DELETE_FAILED"

	// CapacityProviderUpdateStatusUpdateInProgress is a CapacityProviderUpdateStatus enum value
	CapacityProviderUpdateStatusUpdateInProgress = "UPDATE_IN_PROGRESS"

	// CapacityProviderUpdateStatusUpdateComplete is a CapacityProviderUpdateStatus enum value
	CapacityProviderUpdateStatusUpdateComplete = "UPDATE_COMPLETE"

	// CapacityProviderUpdateStatusUpdateFailed is a CapacityProviderUpdateStatus enum value
	CapacityProviderUpdateStatusUpdateFailed = "UPDATE_FAILED"
)

// CapacityProviderUpdateStatus_Values returns all elements of the CapacityProviderUpdateStatus enum
func CapacityProviderUpdateStatus_Values() []string {
	return []string{
		CapacityProviderUpdateStatusDeleteInProgress,
		CapacityProviderUpdateStatusDeleteComplete,
		CapacityProviderUpdateStatusDeleteFailed,
		CapacityProviderUpdateStatusUpdateInProgress,
		CapacityProviderUpdateStatusUpdateComplete,
		CapacityProviderUpdateStatusUpdateFailed,
	}
}

const (
	// ClusterFieldAttachments is a ClusterField enum value
	ClusterFieldAttachments = "ATTACHMENTS"

	// ClusterFieldConfigurations is a ClusterField enum value
	ClusterFieldConfigurations = "CONFIGURATIONS"

	// ClusterFieldSettings is a ClusterField enum value
	ClusterFieldSettings = "SETTINGS"

	// ClusterFieldStatistics is a ClusterField enum value
	ClusterFieldStatistics = "STATISTICS"

	// ClusterFieldTags is a ClusterField enum value
	ClusterFieldTags = "TAGS"
)

// ClusterField_Values returns all elements of the ClusterField enum
func ClusterField_Values() []string {
	return []string{
		ClusterFieldAttachments,
		ClusterFieldConfigurations,
		ClusterFieldSettings,
		ClusterFieldStatistics,
		ClusterFieldTags,
	}
}

const (
	// ClusterSettingNameContainerInsights is a ClusterSettingName enum value
	ClusterSettingNameContainerInsights = "containerInsights"
)

// ClusterSettingName_Values returns all elements of the ClusterSettingName enum
func ClusterSettingName_Values() []string {
	return []string{
		ClusterSettingNameContainerInsights,
	}
}

const (
	// CompatibilityEc2 is a Compatibility enum value
	CompatibilityEc2 = "EC2"

	// CompatibilityFargate is a Compatibility enum value
	CompatibilityFargate = "FARGATE"

	// CompatibilityExternal is a Compatibility enum value
	CompatibilityExternal = "EXTERNAL"
)

// Compatibility_Values returns all elements of the Compatibility enum
func Compatibility_Values() []string {
	return []string{
		CompatibilityEc2,
		CompatibilityFargate,
		CompatibilityExternal,
	}
}

const (
	// ConnectivityConnected is a Connectivity enum value
	ConnectivityConnected = "CONNECTED"

	// ConnectivityDisconnected is a Connectivity enum value
	ConnectivityDisconnected = "DISCONNECTED"
)

// Connectivity_Values returns all elements of the Connectivity enum
func Connectivity_Values() []string {
	return []string{
		ConnectivityConnected,
		ConnectivityDisconnected,
	}
}

const (
	// ContainerConditionStart is a ContainerCondition enum value
	ContainerConditionStart = "START"

	// ContainerConditionComplete is a ContainerCondition enum value
	ContainerConditionComplete = "COMPLETE"

	// ContainerConditionSuccess is a ContainerCondition enum value
	ContainerConditionSuccess = "SUCCESS"

	// ContainerConditionHealthy is a ContainerCondition enum value
	ContainerConditionHealthy = "HEALTHY"
)

// ContainerCondition_Values returns all elements of the ContainerCondition enum
func ContainerCondition_Values() []string {
	return []string{
		ContainerConditionStart,
		ContainerConditionComplete,
		ContainerConditionSuccess,
		ContainerConditionHealthy,
	}
}

const (
	// ContainerInstanceFieldTags is a ContainerInstanceField enum value
	ContainerInstanceFieldTags = "TAGS"

	// ContainerInstanceFieldContainerInstanceHealth is a ContainerInstanceField enum value
	ContainerInstanceFieldContainerInstanceHealth = "CONTAINER_INSTANCE_HEALTH"
)

// ContainerInstanceField_Values returns all elements of the ContainerInstanceField enum
func ContainerInstanceField_Values() []string {
	return []string{
		ContainerInstanceFieldTags,
		ContainerInstanceFieldContainerInstanceHealth,
	}
}

const (
	// ContainerInstanceStatusActive is a ContainerInstanceStatus enum value
	ContainerInstanceStatusActive = "ACTIVE"

	// ContainerInstanceStatusDraining is a ContainerInstanceStatus enum value
	ContainerInstanceStatusDraining = "DRAINING"

	// ContainerInstanceStatusRegistering is a ContainerInstanceStatus enum value
	ContainerInstanceStatusRegistering = "REGISTERING"

	// ContainerInstanceStatusDeregistering is a ContainerInstanceStatus enum value
	ContainerInstanceStatusDeregistering = "DEREGISTERING"

	// ContainerInstanceStatusRegistrationFailed is a ContainerInstanceStatus enum value
	ContainerInstanceStatusRegistrationFailed = "REGISTRATION_FAILED"
)

// ContainerInstanceStatus_Values returns all elements of the ContainerInstanceStatus enum
func ContainerInstanceStatus_Values() []string {
	return []string{
		ContainerInstanceStatusActive,
		ContainerInstanceStatusDraining,
		ContainerInstanceStatusRegistering,
		ContainerInstanceStatusDeregistering,
		ContainerInstanceStatusRegistrationFailed,
	}
}

const (
	// DeploymentControllerTypeEcs is a DeploymentControllerType enum value
	DeploymentControllerTypeEcs = "ECS"

	// DeploymentControllerTypeCodeDeploy is a DeploymentControllerType enum value
	DeploymentControllerTypeCodeDeploy = "CODE_DEPLOY"

	// DeploymentControllerTypeExternal is a DeploymentControllerType enum value
	DeploymentControllerTypeExternal = "EXTERNAL"
)

// DeploymentControllerType_Values returns all elements of the DeploymentControllerType enum
func DeploymentControllerType_Values() []string {
	return []string{
		DeploymentControllerTypeEcs,
		DeploymentControllerTypeCodeDeploy,
		DeploymentControllerTypeExternal,
	}
}

const (
	// DeploymentRolloutStateCompleted is a DeploymentRolloutState enum value
	DeploymentRolloutStateCompleted = "COMPLETED"

	// DeploymentRolloutStateFailed is a DeploymentRolloutState enum value
	DeploymentRolloutStateFailed = "FAILED"

	// DeploymentRolloutStateInProgress is a DeploymentRolloutState enum value
	DeploymentRolloutStateInProgress = "IN_PROGRESS"
)

// DeploymentRolloutState_Values returns all elements of the DeploymentRolloutState enum
func DeploymentRolloutState_Values() []string {
	return []string{
		DeploymentRolloutStateCompleted,
		DeploymentRolloutStateFailed,
		DeploymentRolloutStateInProgress,
	}
}

const (
	// DesiredStatusRunning is a DesiredStatus enum value
	DesiredStatusRunning = "RUNNING"

	// DesiredStatusPending is a DesiredStatus enum value
	DesiredStatusPending = "PENDING"

	// DesiredStatusStopped is a DesiredStatus enum value
	DesiredStatusStopped = "STOPPED"
)

// DesiredStatus_Values returns all elements of the DesiredStatus enum
func DesiredStatus_Values() []string {
	return []string{
		DesiredStatusRunning,
		DesiredStatusPending,
		DesiredStatusStopped,
	}
}

const (
	// DeviceCgroupPermissionRead is a DeviceCgroupPermission enum value
	DeviceCgroupPermissionRead = "read"

	// DeviceCgroupPermissionWrite is a DeviceCgroupPermission enum value
	DeviceCgroupPermissionWrite = "write"

	// DeviceCgroupPermissionMknod is a DeviceCgroupPermission enum value
	DeviceCgroupPermissionMknod = "mknod"
)

// DeviceCgroupPermission_Values returns all elements of the DeviceCgroupPermission enum
func DeviceCgroupPermission_Values() []string {
	return []string{
		DeviceCgroupPermissionRead,
		DeviceCgroupPermissionWrite,
		DeviceCgroupPermissionMknod,
	}
}

const (
	// EFSAuthorizationConfigIAMEnabled is a EFSAuthorizationConfigIAM enum value
	EFSAuthorizationConfigIAMEnabled = "ENABLED"

	// EFSAuthorizationConfigIAMDisabled is a EFSAuthorizationConfigIAM enum value
	EFSAuthorizationConfigIAMDisabled = "DISABLED"
)

// EFSAuthorizationConfigIAM_Values returns all elements of the EFSAuthorizationConfigIAM enum
func EFSAuthorizationConfigIAM_Values() []string {
	return []string{
		EFSAuthorizationConfigIAMEnabled,
		EFSAuthorizationConfigIAMDisabled,
	}
}

const (
	// EFSTransitEncryptionEnabled is a EFSTransitEncryption enum value
	EFSTransitEncryptionEnabled = "ENABLED"

	// EFSTransitEncryptionDisabled is a EFSTransitEncryption enum value
	EFSTransitEncryptionDisabled = "DISABLED"
)

// EFSTransitEncryption_Values returns all elements of the EFSTransitEncryption enum
func EFSTransitEncryption_Values() []string {
	return []string{
		EFSTransitEncryptionEnabled,
		EFSTransitEncryptionDisabled,
	}
}

const (
	// EnvironmentFileTypeS3 is a EnvironmentFileType enum value
	EnvironmentFileTypeS3 = "s3"
)

// EnvironmentFileType_Values returns all elements of the EnvironmentFileType enum
func EnvironmentFileType_Values() []string {
	return []string{
		EnvironmentFileTypeS3,
	}
}

const (
	// ExecuteCommandLoggingNone is a ExecuteCommandLogging enum value
	ExecuteCommandLoggingNone = "NONE"

	// ExecuteCommandLoggingDefault is a ExecuteCommandLogging enum value
	ExecuteCommandLoggingDefault = "DEFAULT"

	// ExecuteCommandLoggingOverride is a ExecuteCommandLogging enum value
	ExecuteCommandLoggingOverride = "OVERRIDE"
)

// ExecuteCommandLogging_Values returns all elements of the ExecuteCommandLogging enum
func ExecuteCommandLogging_Values() []string {
	return []string{
		ExecuteCommandLoggingNone,
		ExecuteCommandLoggingDefault,
		ExecuteCommandLoggingOverride,
	}
}

const (
	// FirelensConfigurationTypeFluentd is a FirelensConfigurationType enum value
	FirelensConfigurationTypeFluentd = "fluentd"

	// FirelensConfigurationTypeFluentbit is a FirelensConfigurationType enum value
	FirelensConfigurationTypeFluentbit = "fluentbit"
)

// FirelensConfigurationType_Values returns all elements of the FirelensConfigurationType enum
func FirelensConfigurationType_Values() []string {
	return []string{
		FirelensConfigurationTypeFluentd,
		FirelensConfigurationTypeFluentbit,
	}
}

const (
	// HealthStatusHealthy is a HealthStatus enum value
	HealthStatusHealthy = "HEALTHY"

	// HealthStatusUnhealthy is a HealthStatus enum value
	HealthStatusUnhealthy = "UNHEALTHY"

	// HealthStatusUnknown is a HealthStatus enum value
	HealthStatusUnknown = "UNKNOWN"
)

// HealthStatus_Values returns all elements of the HealthStatus enum
func HealthStatus_Values() []string {
	return []string{
		HealthStatusHealthy,
		HealthStatusUnhealthy,
		HealthStatusUnknown,
	}
}

const (
	// InstanceHealthCheckStateOk is a InstanceHealthCheckState enum value
	InstanceHealthCheckStateOk = "OK"

	// InstanceHealthCheckStateImpaired is a InstanceHealthCheckState enum value
	InstanceHealthCheckStateImpaired = "IMPAIRED"

	// InstanceHealthCheckStateInsufficientData is a InstanceHealthCheckState enum value
	InstanceHealthCheckStateInsufficientData = "INSUFFICIENT_DATA"

	// InstanceHealthCheckStateInitializing is a InstanceHealthCheckState enum value
	InstanceHealthCheckStateInitializing = "INITIALIZING"
)

// InstanceHealthCheckState_Values returns all elements of the InstanceHealthCheckState enum
func InstanceHealthCheckState_Values() []string {
	return []string{
		InstanceHealthCheckStateOk,
		InstanceHealthCheckStateImpaired,
		InstanceHealthCheckStateInsufficientData,
		InstanceHealthCheckStateInitializing,
	}
}

const (
	// InstanceHealthCheckTypeContainerRuntime is a InstanceHealthCheckType enum value
	InstanceHealthCheckTypeContainerRuntime = "CONTAINER_RUNTIME"
)

// InstanceHealthCheckType_Values returns all elements of the InstanceHealthCheckType enum
func InstanceHealthCheckType_Values() []string {
	return []string{
		InstanceHealthCheckTypeContainerRuntime,
	}
}

const (
	// IpcModeHost is a IpcMode enum value
	IpcModeHost = "host"

	// IpcModeTask is a IpcMode enum value
	IpcModeTask = "task"

	// IpcModeNone is a IpcMode enum value
	IpcModeNone = "none"
)

// IpcMode_Values returns all elements of the IpcMode enum
func IpcMode_Values() []string {
	return []string{
		IpcModeHost,
		IpcModeTask,
		IpcModeNone,
	}
}

const (
	// LaunchTypeEc2 is a LaunchType enum value
	LaunchTypeEc2 = "EC2"

	// LaunchTypeFargate is a LaunchType enum value
	LaunchTypeFargate = "FARGATE"

	// LaunchTypeExternal is a LaunchType enum value
	LaunchTypeExternal = "EXTERNAL"
)

// LaunchType_Values returns all elements of the LaunchType enum
func LaunchType_Values() []string {
	return []string{
		LaunchTypeEc2,
		LaunchTypeFargate,
		LaunchTypeExternal,
	}
}

const (
	// LogDriverJsonFile is a LogDriver enum value
	LogDriverJsonFile = "json-file"

	// LogDriverSyslog is a LogDriver enum value
	LogDriverSyslog = "syslog"

	// LogDriverJournald is a LogDriver enum value
	LogDriverJournald = "journald"

	// LogDriverGelf is a LogDriver enum value
	LogDriverGelf = "gelf"

	// LogDriverFluentd is a LogDriver enum value
	LogDriverFluentd = "fluentd"

	// LogDriverAwslogs is a LogDriver enum value
	LogDriverAwslogs = "awslogs"

	// LogDriverSplunk is a LogDriver enum value
	LogDriverSplunk = "splunk"

	// LogDriverAwsfirelens is a LogDriver enum value
	LogDriverAwsfirelens = "awsfirelens"
)

// LogDriver_Values returns all elements of the LogDriver enum
func LogDriver_Values() []string {
	return []string{
		LogDriverJsonFile,
		LogDriverSyslog,
		LogDriverJournald,
		LogDriverGelf,
		LogDriverFluentd,
		LogDriverAwslogs,
		LogDriverSplunk,
		LogDriverAwsfirelens,
	}
}

const (
	// ManagedAgentNameExecuteCommandAgent is a ManagedAgentName enum value
	ManagedAgentNameExecuteCommandAgent = "ExecuteCommandAgent"
)

// ManagedAgentName_Values returns all elements of the ManagedAgentName enum
func ManagedAgentName_Values() []string {
	return []string{
		ManagedAgentNameExecuteCommandAgent,
	}
}

const (
	// ManagedScalingStatusEnabled is a ManagedScalingStatus enum value
	ManagedScalingStatusEnabled = "ENABLED"

	// ManagedScalingStatusDisabled is a ManagedScalingStatus enum value
	ManagedScalingStatusDisabled = "DISABLED"
)

// ManagedScalingStatus_Values returns all elements of the ManagedScalingStatus enum
func ManagedScalingStatus_Values() []string {
	return []string{
		ManagedScalingStatusEnabled,
		ManagedScalingStatusDisabled,
	}
}

const (
	// ManagedTerminationProtectionEnabled is a ManagedTerminationProtection enum value
	ManagedTerminationProtectionEnabled = "ENABLED"

	// ManagedTerminationProtectionDisabled is a ManagedTerminationProtection enum value
	ManagedTerminationProtectionDisabled = "DISABLED"
)

// ManagedTerminationProtection_Values returns all elements of the ManagedTerminationProtection enum
func ManagedTerminationProtection_Values() []string {
	return []string{
		ManagedTerminationProtectionEnabled,
		ManagedTerminationProtectionDisabled,
	}
}

const (
	// NetworkModeBridge is a NetworkMode enum value
	NetworkModeBridge = "bridge"

	// NetworkModeHost is a NetworkMode enum value
	NetworkModeHost = "host"

	// NetworkModeAwsvpc is a NetworkMode enum value
	NetworkModeAwsvpc = "awsvpc"

	// NetworkModeNone is a NetworkMode enum value
	NetworkModeNone = "none"
)

// NetworkMode_Values returns all elements of the NetworkMode enum
func NetworkMode_Values() []string {
	return []string{
		NetworkModeBridge,
		NetworkModeHost,
		NetworkModeAwsvpc,
		NetworkModeNone,
	}
}

const (
	// OSFamilyWindowsServer2019Full is a OSFamily enum value
	OSFamilyWindowsServer2019Full = "WINDOWS_SERVER_2019_FULL"

	// OSFamilyWindowsServer2019Core is a OSFamily enum value
	OSFamilyWindowsServer2019Core = "WINDOWS_SERVER_2019_CORE"

	// OSFamilyWindowsServer2016Full is a OSFamily enum value
	OSFamilyWindowsServer2016Full = "WINDOWS_SERVER_2016_FULL"

	// OSFamilyWindowsServer2004Core is a OSFamily enum value
	OSFamilyWindowsServer2004Core = "WINDOWS_SERVER_2004_CORE"

	// OSFamilyWindowsServer2022Core is a OSFamily enum value
	OSFamilyWindowsServer2022Core = "WINDOWS_SERVER_2022_CORE"

	// OSFamilyWindowsServer2022Full is a OSFamily enum value
	OSFamilyWindowsServer2022Full = "WINDOWS_SERVER_2022_FULL"

	// OSFamilyWindowsServer20h2Core is a OSFamily enum value
	OSFamilyWindowsServer20h2Core = "WINDOWS_SERVER_20H2_CORE"

	// OSFamilyLinux is a OSFamily enum value
	OSFamilyLinux = "LINUX"
)

// OSFamily_Values returns all elements of the OSFamily enum
func OSFamily_Values() []string {
	return []string{
		OSFamilyWindowsServer2019Full,
		OSFamilyWindowsServer2019Core,
		OSFamilyWindowsServer2016Full,
		OSFamilyWindowsServer2004Core,
		OSFamilyWindowsServer2022Core,
		OSFamilyWindowsServer2022Full,
		OSFamilyWindowsServer20h2Core,
		OSFamilyLinux,
	}
}

const (
	// PidModeHost is a PidMode enum value
	PidModeHost = "host"

	// PidModeTask is a PidMode enum value
	PidModeTask = "task"
)

// PidMode_Values returns all elements of the PidMode enum
func PidMode_Values() []string {
	return []string{
		PidModeHost,
		PidModeTask,
	}
}

const (
	// PlacementConstraintTypeDistinctInstance is a PlacementConstraintType enum value
	PlacementConstraintTypeDistinctInstance = "distinctInstance"

	// PlacementConstraintTypeMemberOf is a PlacementConstraintType enum value
	PlacementConstraintTypeMemberOf = "memberOf"
)

// PlacementConstraintType_Values returns all elements of the PlacementConstraintType enum
func PlacementConstraintType_Values() []string {
	return []string{
		PlacementConstraintTypeDistinctInstance,
		PlacementConstraintTypeMemberOf,
	}
}

const (
	// PlacementStrategyTypeRandom is a PlacementStrategyType enum value
	PlacementStrategyTypeRandom = "random"

	// PlacementStrategyTypeSpread is a PlacementStrategyType enum value
	PlacementStrategyTypeSpread = "spread"

	// PlacementStrategyTypeBinpack is a PlacementStrategyType enum value
	PlacementStrategyTypeBinpack = "binpack"
)

// PlacementStrategyType_Values returns all elements of the PlacementStrategyType enum
func PlacementStrategyType_Values() []string {
	return []string{
		PlacementStrategyTypeRandom,
		PlacementStrategyTypeSpread,
		PlacementStrategyTypeBinpack,
	}
}

const (
	// PlatformDeviceTypeGpu is a PlatformDeviceType enum value
	PlatformDeviceTypeGpu = "GPU"
)

// PlatformDeviceType_Values returns all elements of the PlatformDeviceType enum
func PlatformDeviceType_Values() []string {
	return []string{
		PlatformDeviceTypeGpu,
	}
}

const (
	// PropagateTagsTaskDefinition is a PropagateTags enum value
	PropagateTagsTaskDefinition = "TASK_DEFINITION"

	// PropagateTagsService is a PropagateTags enum value
	PropagateTagsService = "SERVICE"

	// PropagateTagsNone is a PropagateTags enum value
	PropagateTagsNone = "NONE"
)

// PropagateTags_Values returns all elements of the PropagateTags enum
func PropagateTags_Values() []string {
	return []string{
		PropagateTagsTaskDefinition,
		PropagateTagsService,
		PropagateTagsNone,
	}
}

const (
	// ProxyConfigurationTypeAppmesh is a ProxyConfigurationType enum value
	ProxyConfigurationTypeAppmesh = "APPMESH"
)

// ProxyConfigurationType_Values returns all elements of the ProxyConfigurationType enum
func ProxyConfigurationType_Values() []string {
	return []string{
		ProxyConfigurationTypeAppmesh,
	}
}

const (
	// ResourceTypeGpu is a ResourceType enum value
	ResourceTypeGpu = "GPU"

	// ResourceTypeInferenceAccelerator is a ResourceType enum value
	ResourceTypeInferenceAccelerator = "InferenceAccelerator"
)

// ResourceType_Values returns all elements of the ResourceType enum
func ResourceType_Values() []string {
	return []string{
		ResourceTypeGpu,
		ResourceTypeInferenceAccelerator,
	}
}

const (
	// ScaleUnitPercent is a ScaleUnit enum value
	ScaleUnitPercent = "PERCENT"
)

// ScaleUnit_Values returns all elements of the ScaleUnit enum
func ScaleUnit_Values() []string {
	return []string{
		ScaleUnitPercent,
	}
}

const (
	// SchedulingStrategyReplica is a SchedulingStrategy enum value
	SchedulingStrategyReplica = "REPLICA"

	// SchedulingStrategyDaemon is a SchedulingStrategy enum value
	SchedulingStrategyDaemon = "DAEMON"
)

// SchedulingStrategy_Values returns all elements of the SchedulingStrategy enum
func SchedulingStrategy_Values() []string {
	return []string{
		SchedulingStrategyReplica,
		SchedulingStrategyDaemon,
	}
}

const (
	// ScopeTask is a Scope enum value
	ScopeTask = "task"

	// ScopeShared is a Scope enum value
	ScopeShared = "shared"
)

// Scope_Values returns all elements of the Scope enum
func Scope_Values() []string {
	return []string{
		ScopeTask,
		ScopeShared,
	}
}

const (
	// ServiceFieldTags is a ServiceField enum value
	ServiceFieldTags = "TAGS"
)

// ServiceField_Values returns all elements of the ServiceField enum
func ServiceField_Values() []string {
	return []string{
		ServiceFieldTags,
	}
}

const (
	// SettingNameServiceLongArnFormat is a SettingName enum value
	SettingNameServiceLongArnFormat = "serviceLongArnFormat"

	// SettingNameTaskLongArnFormat is a SettingName enum value
	SettingNameTaskLongArnFormat = "taskLongArnFormat"

	// SettingNameContainerInstanceLongArnFormat is a SettingName enum value
	SettingNameContainerInstanceLongArnFormat = "containerInstanceLongArnFormat"

	// SettingNameAwsvpcTrunking is a SettingName enum value
	SettingNameAwsvpcTrunking = "awsvpcTrunking"

	// SettingNameContainerInsights is a SettingName enum value
	SettingNameContainerInsights = "containerInsights"

	// SettingNameFargateFipsmode is a SettingName enum value
	SettingNameFargateFipsmode = "fargateFIPSMode"

	// SettingNameTagResourceAuthorization is a SettingName enum value
	SettingNameTagResourceAuthorization = "tagResourceAuthorization"

	// SettingNameFargateTaskRetirementWaitPeriod is a SettingName enum value
	SettingNameFargateTaskRetirementWaitPeriod = "fargateTaskRetirementWaitPeriod"

	// SettingNameGuardDutyActivate is a SettingName enum value
	SettingNameGuardDutyActivate = "guardDutyActivate"
)

// SettingName_Values returns all elements of the SettingName enum
func SettingName_Values() []string {
	return []string{
		SettingNameServiceLongArnFormat,
		SettingNameTaskLongArnFormat,
		SettingNameContainerInstanceLongArnFormat,
		SettingNameAwsvpcTrunking,
		SettingNameContainerInsights,
		SettingNameFargateFipsmode,
		SettingNameTagResourceAuthorization,
		SettingNameFargateTaskRetirementWaitPeriod,
		SettingNameGuardDutyActivate,
	}
}

const (
	// SettingTypeUser is a SettingType enum value
	SettingTypeUser = "user"

	// SettingTypeAwsManaged is a SettingType enum value
	SettingTypeAwsManaged = "aws_managed"
)

// SettingType_Values returns all elements of the SettingType enum
func SettingType_Values() []string {
	return []string{
		SettingTypeUser,
		SettingTypeAwsManaged,
	}
}

const (
	// SortOrderAsc is a SortOrder enum value
	SortOrderAsc = "ASC"

	// SortOrderDesc is a SortOrder enum value
	SortOrderDesc = "DESC"
)

// SortOrder_Values returns all elements of the SortOrder enum
func SortOrder_Values() []string {
	return []string{
		SortOrderAsc,
		SortOrderDesc,
	}
}

const (
	// StabilityStatusSteadyState is a StabilityStatus enum value
	StabilityStatusSteadyState = "STEADY_STATE"

	// StabilityStatusStabilizing is a StabilityStatus enum value
	StabilityStatusStabilizing = "STABILIZING"
)

// StabilityStatus_Values returns all elements of the StabilityStatus enum
func StabilityStatus_Values() []string {
	return []string{
		StabilityStatusSteadyState,
		StabilityStatusStabilizing,
	}
}

const (
	// TargetTypeContainerInstance is a TargetType enum value
	TargetTypeContainerInstance = "container-instance"
)

// TargetType_Values returns all elements of the TargetType enum
func TargetType_Values() []string {
	return []string{
		TargetTypeContainerInstance,
	}
}

const (
	// TaskDefinitionFamilyStatusActive is a TaskDefinitionFamilyStatus enum value
	TaskDefinitionFamilyStatusActive = "ACTIVE"

	// TaskDefinitionFamilyStatusInactive is a TaskDefinitionFamilyStatus enum value
	TaskDefinitionFamilyStatusInactive = "INACTIVE"

	// TaskDefinitionFamilyStatusAll is a TaskDefinitionFamilyStatus enum value
	TaskDefinitionFamilyStatusAll = "ALL"
)

// TaskDefinitionFamilyStatus_Values returns all elements of the TaskDefinitionFamilyStatus enum
func TaskDefinitionFamilyStatus_Values() []string {
	return []string{
		TaskDefinitionFamilyStatusActive,
		TaskDefinitionFamilyStatusInactive,
		TaskDefinitionFamilyStatusAll,
	}
}

const (
	// TaskDefinitionFieldTags is a TaskDefinitionField enum value
	TaskDefinitionFieldTags = "TAGS"
)

// TaskDefinitionField_Values returns all elements of the TaskDefinitionField enum
func TaskDefinitionField_Values() []string {
	return []string{
		TaskDefinitionFieldTags,
	}
}

const (
	// TaskDefinitionPlacementConstraintTypeMemberOf is a TaskDefinitionPlacementConstraintType enum value
	TaskDefinitionPlacementConstraintTypeMemberOf = "memberOf"
)

// TaskDefinitionPlacementConstraintType_Values returns all elements of the TaskDefinitionPlacementConstraintType enum
func TaskDefinitionPlacementConstraintType_Values() []string {
	return []string{
		TaskDefinitionPlacementConstraintTypeMemberOf,
	}
}

const (
	// TaskDefinitionStatusActive is a TaskDefinitionStatus enum value
	TaskDefinitionStatusActive = "ACTIVE"

	// TaskDefinitionStatusInactive is a TaskDefinitionStatus enum value
	TaskDefinitionStatusInactive = "INACTIVE"

	// TaskDefinitionStatusDeleteInProgress is a TaskDefinitionStatus enum value
	TaskDefinitionStatusDeleteInProgress = "DELETE_IN_PROGRESS"
)

// TaskDefinitionStatus_Values returns all elements of the TaskDefinitionStatus enum
func TaskDefinitionStatus_Values() []string {
	return []string{
		TaskDefinitionStatusActive,
		TaskDefinitionStatusInactive,
		TaskDefinitionStatusDeleteInProgress,
	}
}

const (
	// TaskFieldTags is a TaskField enum value
	TaskFieldTags = "TAGS"
)

// TaskField_Values returns all elements of the TaskField enum
func TaskField_Values() []string {
	return []string{
		TaskFieldTags,
	}
}

const (
	// TaskSetFieldTags is a TaskSetField enum value
	TaskSetFieldTags = "TAGS"
)

// TaskSetField_Values returns all elements of the TaskSetField enum
func TaskSetField_Values() []string {
	return []string{
		TaskSetFieldTags,
	}
}

const (
	// TaskStopCodeTaskFailedToStart is a TaskStopCode enum value
	TaskStopCodeTaskFailedToStart = "TaskFailedToStart"

	// TaskStopCodeEssentialContainerExited is a TaskStopCode enum value
	TaskStopCodeEssentialContainerExited = "EssentialContainerExited"

	// TaskStopCodeUserInitiated is a TaskStopCode enum value
	TaskStopCodeUserInitiated = "UserInitiated"

	// TaskStopCodeServiceSchedulerInitiated is a TaskStopCode enum value
	TaskStopCodeServiceSchedulerInitiated = "ServiceSchedulerInitiated"

	// TaskStopCodeSpotInterruption is a TaskStopCode enum value
	TaskStopCodeSpotInterruption = "SpotInterruption"

	// TaskStopCodeTerminationNotice is a TaskStopCode enum value
	TaskStopCodeTerminationNotice = "TerminationNotice"
)

// TaskStopCode_Values returns all elements of the TaskStopCode enum
func TaskStopCode_Values() []string {
	return []string{
		TaskStopCodeTaskFailedToStart,
		TaskStopCodeEssentialContainerExited,
		TaskStopCodeUserInitiated,
		TaskStopCodeServiceSchedulerInitiated,
		TaskStopCodeSpotInterruption,
		TaskStopCodeTerminationNotice,
	}
}

const (
	// TransportProtocolTcp is a TransportProtocol enum value
	TransportProtocolTcp = "tcp"

	// TransportProtocolUdp is a TransportProtocol enum value
	TransportProtocolUdp = "udp"
)

// TransportProtocol_Values returns all elements of the TransportProtocol enum
func TransportProtocol_Values() []string {
	return []string{
		TransportProtocolTcp,
		TransportProtocolUdp,
	}
}

const (
	// UlimitNameCore is a UlimitName enum value
	UlimitNameCore = "core"

	// UlimitNameCpu is a UlimitName enum value
	UlimitNameCpu = "cpu"

	// UlimitNameData is a UlimitName enum value
	UlimitNameData = "data"

	// UlimitNameFsize is a UlimitName enum value
	UlimitNameFsize = "fsize"

	// UlimitNameLocks is a UlimitName enum value
	UlimitNameLocks = "locks"

	// UlimitNameMemlock is a UlimitName enum value
	UlimitNameMemlock = "memlock"

	// UlimitNameMsgqueue is a UlimitName enum value
	UlimitNameMsgqueue = "msgqueue"

	// UlimitNameNice is a UlimitName enum value
	UlimitNameNice = "nice"

	// UlimitNameNofile is a UlimitName enum value
	UlimitNameNofile = "nofile"

	// UlimitNameNproc is a UlimitName enum value
	UlimitNameNproc = "nproc"

	// UlimitNameRss is a UlimitName enum value
	UlimitNameRss = "rss"

	// UlimitNameRtprio is a UlimitName enum value
	UlimitNameRtprio = "rtprio"

	// UlimitNameRttime is a UlimitName enum value
	UlimitNameRttime = "rttime"

	// UlimitNameSigpending is a UlimitName enum value
	UlimitNameSigpending = "sigpending"

	// UlimitNameStack is a UlimitName enum value
	UlimitNameStack = "stack"
)

// UlimitName_Values returns all elements of the UlimitName enum
func UlimitName_Values() []string {
	return []string{
		UlimitNameCore,
		UlimitNameCpu,
		UlimitNameData,
		UlimitNameFsize,
		UlimitNameLocks,
		UlimitNameMemlock,
		UlimitNameMsgqueue,
		UlimitNameNice,
		UlimitNameNofile,
		UlimitNameNproc,
		UlimitNameRss,
		UlimitNameRtprio,
		UlimitNameRttime,
		UlimitNameSigpending,
		UlimitNameStack,
	}
}
