diff --git a/go.mod b/go.mod
index d3d0a7a960d4..576cbf69aa72 100644
--- a/go.mod
+++ b/go.mod
@@ -4,7 +4,7 @@ require (
 	github.com/apparentlymart/go-cidr v1.0.0 // indirect
 	github.com/apparentlymart/go-textseg v1.0.0 // indirect
 	github.com/armon/go-radix v1.0.0 // indirect
-	github.com/aws/aws-sdk-go v1.19.1
+	github.com/aws/aws-sdk-go v1.19.4
 	github.com/beevik/etree v1.0.1
 	github.com/bgentry/speakeasy v0.1.0 // indirect
 	github.com/blang/semver v3.5.1+incompatible // indirect
diff --git a/go.sum b/go.sum
index 4222e25741f8..fe8e70a7c9c1 100644
--- a/go.sum
+++ b/go.sum
@@ -36,8 +36,8 @@ github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI=
 github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
 github.com/aws/aws-sdk-go v1.14.31/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0=
 github.com/aws/aws-sdk-go v1.16.36/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
-github.com/aws/aws-sdk-go v1.19.1 h1:8kOP0/XGJwXIFlYoD1DAtA39cAjc15Iv/QiDMKitD9U=
-github.com/aws/aws-sdk-go v1.19.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
+github.com/aws/aws-sdk-go v1.19.4 h1:TcCgjX1fscA9WKg/vxzvL28evDWsLd5oOS5WpS90u3A=
+github.com/aws/aws-sdk-go v1.19.4/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
 github.com/beevik/etree v0.0.0-20171015221209-af219c0c7ea1/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A=
 github.com/beevik/etree v1.0.1 h1:lWzdj5v/Pj1X360EV7bUudox5SRipy4qZLjY0rhb0ck=
 github.com/beevik/etree v1.0.1/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A=
diff --git a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go
index a694cb415220..4a2277917206 100644
--- a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go
+++ b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go
@@ -2544,6 +2544,9 @@ var awsPartition = partition{
 				"eu-west-2": endpoint{
 					Protocols: []string{"https"},
 				},
+				"eu-west-3": endpoint{
+					Protocols: []string{"https"},
+				},
 				"sa-east-1": endpoint{
 					Protocols: []string{"https"},
 				},
diff --git a/vendor/github.com/aws/aws-sdk-go/aws/version.go b/vendor/github.com/aws/aws-sdk-go/aws/version.go
index cd95b1bfce26..5a3f1ffc18a3 100644
--- a/vendor/github.com/aws/aws-sdk-go/aws/version.go
+++ b/vendor/github.com/aws/aws-sdk-go/aws/version.go
@@ -5,4 +5,4 @@ package aws
 const SDKName = "aws-sdk-go"
 
 // SDKVersion is the version of this SDK
-const SDKVersion = "1.19.1"
+const SDKVersion = "1.19.4"
diff --git a/vendor/github.com/aws/aws-sdk-go/service/appmesh/api.go b/vendor/github.com/aws/aws-sdk-go/service/appmesh/api.go
index 07d1a4bdb4d7..fc69ab8e8815 100644
--- a/vendor/github.com/aws/aws-sdk-go/service/appmesh/api.go
+++ b/vendor/github.com/aws/aws-sdk-go/service/appmesh/api.go
@@ -9,6 +9,8 @@ import (
 	"github.com/aws/aws-sdk-go/aws"
 	"github.com/aws/aws-sdk-go/aws/awsutil"
 	"github.com/aws/aws-sdk-go/aws/request"
+	"github.com/aws/aws-sdk-go/private/protocol"
+	"github.com/aws/aws-sdk-go/private/protocol/restjson"
 )
 
 const opCreateMesh = "CreateMesh"
@@ -55,7 +57,7 @@ func (c *AppMesh) CreateMeshRequest(input *CreateMeshInput) (req *request.Reques
 
 // CreateMesh API operation for AWS App Mesh.
 //
-// Creates a new service mesh. A service mesh is a logical boundary for network
+// Creates a service mesh. A service mesh is a logical boundary for network
 // traffic between the services that reside within it.
 //
 // After you create your service mesh, you can create virtual services, virtual
@@ -167,12 +169,12 @@ func (c *AppMesh) CreateRouteRequest(input *CreateRouteInput) (req *request.Requ
 
 // CreateRoute API operation for AWS App Mesh.
 //
-// Creates a new route that is associated with a virtual router.
+// Creates a route that is associated with a virtual router.
 //
 // You can use the prefix parameter in your route specification for path-based
-// routing of requests. For example, if your virtual router service name is
-// my-service.local, and you want the route to match requests to my-service.local/metrics,
-// then your prefix should be /metrics.
+// routing of requests. For example, if your virtual service name is my-service.local
+// and you want the route to match requests to my-service.local/metrics, your
+// prefix should be /metrics.
 //
 // If your route matches a request, you can distribute traffic to one or more
 // target virtual nodes with relative weighting.
@@ -282,10 +284,10 @@ func (c *AppMesh) CreateVirtualNodeRequest(input *CreateVirtualNodeInput) (req *
 
 // CreateVirtualNode API operation for AWS App Mesh.
 //
-// Creates a new virtual node within a service mesh.
+// Creates a virtual node within a service mesh.
 //
-// A virtual node acts as logical pointer to a particular task group, such as
-// an Amazon ECS service or a Kubernetes deployment. When you create a virtual
+// A virtual node acts as a logical pointer to a particular task group, such
+// as an Amazon ECS service or a Kubernetes deployment. When you create a virtual
 // node, you must specify the DNS service discovery hostname for your task group.
 //
 // Any inbound traffic that your virtual node expects should be specified as
@@ -294,7 +296,7 @@ func (c *AppMesh) CreateVirtualNodeRequest(input *CreateVirtualNodeInput) (req *
 //
 // The response metadata for your new virtual node contains the arn that is
 // associated with the virtual node. Set this value (either the full ARN or
-// the truncated resource name, for example, mesh/default/virtualNode/simpleapp,
+// the truncated resource name: for example, mesh/default/virtualNode/simpleapp)
 // as the APPMESH_VIRTUAL_NODE_NAME environment variable for your task group's
 // Envoy proxy container in your task definition or pod spec. This is then mapped
 // to the node.id and node.cluster Envoy parameters.
@@ -408,12 +410,12 @@ func (c *AppMesh) CreateVirtualRouterRequest(input *CreateVirtualRouterInput) (r
 
 // CreateVirtualRouter API operation for AWS App Mesh.
 //
-// Creates a new virtual router within a service mesh.
+// Creates a virtual router within a service mesh.
 //
 // Any inbound traffic that your virtual router expects should be specified
 // as a listener.
 //
-// Virtual routers handle traffic for one or more service names within your
+// Virtual routers handle traffic for one or more virtual services within your
 // mesh. After you create your virtual router, create and associate routes for
 // your virtual router that direct incoming requests to different virtual nodes.
 //
@@ -524,8 +526,8 @@ func (c *AppMesh) CreateVirtualServiceRequest(input *CreateVirtualServiceInput)
 //
 // Creates a virtual service within a service mesh.
 //
-// A virtual service is an abstraction of a real service that is either provided
-// by a virtual node directly, or indirectly by means of a virtual router. Dependent
+// A virtual service is an abstraction of a real service that is provided by
+// a virtual node directly or indirectly by means of a virtual router. Dependent
 // services call your virtual service by its virtualServiceName, and those requests
 // are routed to the virtual node or virtual router that is specified as the
 // provider for the virtual service.
@@ -638,7 +640,7 @@ func (c *AppMesh) DeleteMeshRequest(input *DeleteMeshInput) (req *request.Reques
 // Deletes an existing service mesh.
 //
 // You must delete all resources (virtual services, routes, virtual routers,
-// virtual nodes) in the service mesh before you can delete the mesh itself.
+// and virtual nodes) in the service mesh before you can delete the mesh itself.
 //
 // 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
@@ -1892,6 +1894,151 @@ func (c *AppMesh) ListRoutesPagesWithContext(ctx aws.Context, input *ListRoutesI
 	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/appmesh-2019-01-25/ListTagsForResource
+func (c *AppMesh) ListTagsForResourceRequest(input *ListTagsForResourceInput) (req *request.Request, output *ListTagsForResourceOutput) {
+	op := &request.Operation{
+		Name:       opListTagsForResource,
+		HTTPMethod: "GET",
+		HTTPPath:   "/v20190125/tags",
+		Paginator: &request.Paginator{
+			InputTokens:     []string{"nextToken"},
+			OutputTokens:    []string{"nextToken"},
+			LimitToken:      "limit",
+			TruncationToken: "",
+		},
+	}
+
+	if input == nil {
+		input = &ListTagsForResourceInput{}
+	}
+
+	output = &ListTagsForResourceOutput{}
+	req = c.newRequest(op, input, output)
+	return
+}
+
+// ListTagsForResource API operation for AWS App Mesh.
+//
+// List the tags for an App Mesh 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 AWS App Mesh's
+// API operation ListTagsForResource for usage and error information.
+//
+// Returned Error Codes:
+//   * ErrCodeBadRequestException "BadRequestException"
+//   The request syntax was malformed. Check your request syntax and try again.
+//
+//   * ErrCodeInternalServerErrorException "InternalServerErrorException"
+//   The request processing has failed because of an unknown error, exception,
+//   or failure.
+//
+//   * ErrCodeNotFoundException "NotFoundException"
+//   The specified resource doesn't exist. Check your request syntax and try again.
+//
+//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
+//   The request has failed due to a temporary failure of the service.
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/ListTagsForResource
+func (c *AppMesh) 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 *AppMesh) 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()
+}
+
+// ListTagsForResourcePages iterates over the pages of a ListTagsForResource operation,
+// calling the "fn" function with the response data for each page. To stop
+// iterating, return false from the fn function.
+//
+// See ListTagsForResource 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 ListTagsForResource operation.
+//    pageNum := 0
+//    err := client.ListTagsForResourcePages(params,
+//        func(page *ListTagsForResourceOutput, lastPage bool) bool {
+//            pageNum++
+//            fmt.Println(page)
+//            return pageNum <= 3
+//        })
+//
+func (c *AppMesh) ListTagsForResourcePages(input *ListTagsForResourceInput, fn func(*ListTagsForResourceOutput, bool) bool) error {
+	return c.ListTagsForResourcePagesWithContext(aws.BackgroundContext(), input, fn)
+}
+
+// ListTagsForResourcePagesWithContext same as ListTagsForResourcePages 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 *AppMesh) ListTagsForResourcePagesWithContext(ctx aws.Context, input *ListTagsForResourceInput, fn func(*ListTagsForResourceOutput, bool) bool, opts ...request.Option) error {
+	p := request.Pagination{
+		NewRequest: func() (*request.Request, error) {
+			var inCpy *ListTagsForResourceInput
+			if input != nil {
+				tmp := *input
+				inCpy = &tmp
+			}
+			req, _ := c.ListTagsForResourceRequest(inCpy)
+			req.SetContext(ctx)
+			req.ApplyOptions(opts...)
+			return req, nil
+		},
+	}
+
+	cont := true
+	for p.Next() && cont {
+		cont = fn(p.Page().(*ListTagsForResourceOutput), !p.HasNextPage())
+	}
+	return p.Err()
+}
+
 const opListVirtualNodes = "ListVirtualNodes"
 
 // ListVirtualNodesRequest generates a "aws/request.Request" representing the
@@ -2351,272 +2498,246 @@ func (c *AppMesh) ListVirtualServicesPagesWithContext(ctx aws.Context, input *Li
 	return p.Err()
 }
 
-const opUpdateRoute = "UpdateRoute"
+const opTagResource = "TagResource"
 
-// UpdateRouteRequest generates a "aws/request.Request" representing the
-// client's request for the UpdateRoute operation. The "output" return
+// 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 UpdateRoute for more information on using the UpdateRoute
+// 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 UpdateRouteRequest method.
-//    req, resp := client.UpdateRouteRequest(params)
+//    // 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/appmesh-2019-01-25/UpdateRoute
-func (c *AppMesh) UpdateRouteRequest(input *UpdateRouteInput) (req *request.Request, output *UpdateRouteOutput) {
+// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/TagResource
+func (c *AppMesh) TagResourceRequest(input *TagResourceInput) (req *request.Request, output *TagResourceOutput) {
 	op := &request.Operation{
-		Name:       opUpdateRoute,
+		Name:       opTagResource,
 		HTTPMethod: "PUT",
-		HTTPPath:   "/v20190125/meshes/{meshName}/virtualRouter/{virtualRouterName}/routes/{routeName}",
+		HTTPPath:   "/v20190125/tag",
 	}
 
 	if input == nil {
-		input = &UpdateRouteInput{}
+		input = &TagResourceInput{}
 	}
 
-	output = &UpdateRouteOutput{}
+	output = &TagResourceOutput{}
 	req = c.newRequest(op, input, output)
+	req.Handlers.Unmarshal.Swap(restjson.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
 	return
 }
 
-// UpdateRoute API operation for AWS App Mesh.
+// TagResource API operation for AWS App Mesh.
 //
-// Updates an existing route for a specified service mesh and virtual router.
+// 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 associated with
+// that resource are also deleted.
 //
 // 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 AWS App Mesh's
-// API operation UpdateRoute for usage and error information.
+// API operation TagResource for usage and error information.
 //
 // Returned Error Codes:
 //   * ErrCodeBadRequestException "BadRequestException"
 //   The request syntax was malformed. Check your request syntax and try again.
 //
-//   * ErrCodeConflictException "ConflictException"
-//   The request contains a client token that was used for a previous update resource
-//   call with different specifications. Try the request again with a new client
-//   token.
-//
-//   * ErrCodeForbiddenException "ForbiddenException"
-//   You don't have permissions to perform this action.
-//
 //   * ErrCodeInternalServerErrorException "InternalServerErrorException"
 //   The request processing has failed because of an unknown error, exception,
 //   or failure.
 //
-//   * ErrCodeLimitExceededException "LimitExceededException"
-//   You have exceeded a service limit for your account. For more information,
-//   see Service Limits (https://docs.aws.amazon.com/app-mesh/latest/userguide/service_limits.html)
-//   in the AWS App Mesh User Guide.
-//
 //   * ErrCodeNotFoundException "NotFoundException"
 //   The specified resource doesn't exist. Check your request syntax and try again.
 //
 //   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
 //   The request has failed due to a temporary failure of the service.
 //
-//   * ErrCodeTooManyRequestsException "TooManyRequestsException"
-//   The maximum request rate permitted by the App Mesh APIs has been exceeded
-//   for your account. For best results, use an increasing or variable sleep interval
-//   between requests.
+//   * ErrCodeTooManyTagsException "TooManyTagsException"
+//   The request exceeds the maximum allowed number of tags allowed per resource.
+//   The current limit is 50 user tags per resource. You must reduce the number
+//   of tags in the request. None of the tags in this request were applied.
 //
-// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/UpdateRoute
-func (c *AppMesh) UpdateRoute(input *UpdateRouteInput) (*UpdateRouteOutput, error) {
-	req, out := c.UpdateRouteRequest(input)
+// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/TagResource
+func (c *AppMesh) TagResource(input *TagResourceInput) (*TagResourceOutput, error) {
+	req, out := c.TagResourceRequest(input)
 	return out, req.Send()
 }
 
-// UpdateRouteWithContext is the same as UpdateRoute with the addition of
+// TagResourceWithContext is the same as TagResource with the addition of
 // the ability to pass a context and additional request options.
 //
-// See UpdateRoute for details on how to use this API operation.
+// 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 *AppMesh) UpdateRouteWithContext(ctx aws.Context, input *UpdateRouteInput, opts ...request.Option) (*UpdateRouteOutput, error) {
-	req, out := c.UpdateRouteRequest(input)
+func (c *AppMesh) 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 opUpdateVirtualNode = "UpdateVirtualNode"
+const opUntagResource = "UntagResource"
 
-// UpdateVirtualNodeRequest generates a "aws/request.Request" representing the
-// client's request for the UpdateVirtualNode operation. The "output" return
+// 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 UpdateVirtualNode for more information on using the UpdateVirtualNode
+// 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 UpdateVirtualNodeRequest method.
-//    req, resp := client.UpdateVirtualNodeRequest(params)
+//    // 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/appmesh-2019-01-25/UpdateVirtualNode
-func (c *AppMesh) UpdateVirtualNodeRequest(input *UpdateVirtualNodeInput) (req *request.Request, output *UpdateVirtualNodeOutput) {
+// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/UntagResource
+func (c *AppMesh) UntagResourceRequest(input *UntagResourceInput) (req *request.Request, output *UntagResourceOutput) {
 	op := &request.Operation{
-		Name:       opUpdateVirtualNode,
+		Name:       opUntagResource,
 		HTTPMethod: "PUT",
-		HTTPPath:   "/v20190125/meshes/{meshName}/virtualNodes/{virtualNodeName}",
+		HTTPPath:   "/v20190125/untag",
 	}
 
 	if input == nil {
-		input = &UpdateVirtualNodeInput{}
+		input = &UntagResourceInput{}
 	}
 
-	output = &UpdateVirtualNodeOutput{}
+	output = &UntagResourceOutput{}
 	req = c.newRequest(op, input, output)
+	req.Handlers.Unmarshal.Swap(restjson.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
 	return
 }
 
-// UpdateVirtualNode API operation for AWS App Mesh.
+// UntagResource API operation for AWS App Mesh.
 //
-// Updates an existing virtual node in a specified service mesh.
+// 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 AWS App Mesh's
-// API operation UpdateVirtualNode for usage and error information.
+// API operation UntagResource for usage and error information.
 //
 // Returned Error Codes:
 //   * ErrCodeBadRequestException "BadRequestException"
 //   The request syntax was malformed. Check your request syntax and try again.
 //
-//   * ErrCodeConflictException "ConflictException"
-//   The request contains a client token that was used for a previous update resource
-//   call with different specifications. Try the request again with a new client
-//   token.
-//
-//   * ErrCodeForbiddenException "ForbiddenException"
-//   You don't have permissions to perform this action.
-//
 //   * ErrCodeInternalServerErrorException "InternalServerErrorException"
 //   The request processing has failed because of an unknown error, exception,
 //   or failure.
 //
-//   * ErrCodeLimitExceededException "LimitExceededException"
-//   You have exceeded a service limit for your account. For more information,
-//   see Service Limits (https://docs.aws.amazon.com/app-mesh/latest/userguide/service_limits.html)
-//   in the AWS App Mesh User Guide.
-//
 //   * ErrCodeNotFoundException "NotFoundException"
 //   The specified resource doesn't exist. Check your request syntax and try again.
 //
 //   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
 //   The request has failed due to a temporary failure of the service.
 //
-//   * ErrCodeTooManyRequestsException "TooManyRequestsException"
-//   The maximum request rate permitted by the App Mesh APIs has been exceeded
-//   for your account. For best results, use an increasing or variable sleep interval
-//   between requests.
-//
-// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/UpdateVirtualNode
-func (c *AppMesh) UpdateVirtualNode(input *UpdateVirtualNodeInput) (*UpdateVirtualNodeOutput, error) {
-	req, out := c.UpdateVirtualNodeRequest(input)
+// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/UntagResource
+func (c *AppMesh) UntagResource(input *UntagResourceInput) (*UntagResourceOutput, error) {
+	req, out := c.UntagResourceRequest(input)
 	return out, req.Send()
 }
 
-// UpdateVirtualNodeWithContext is the same as UpdateVirtualNode with the addition of
+// UntagResourceWithContext is the same as UntagResource with the addition of
 // the ability to pass a context and additional request options.
 //
-// See UpdateVirtualNode for details on how to use this API operation.
+// 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 *AppMesh) UpdateVirtualNodeWithContext(ctx aws.Context, input *UpdateVirtualNodeInput, opts ...request.Option) (*UpdateVirtualNodeOutput, error) {
-	req, out := c.UpdateVirtualNodeRequest(input)
+func (c *AppMesh) 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 opUpdateVirtualRouter = "UpdateVirtualRouter"
+const opUpdateMesh = "UpdateMesh"
 
-// UpdateVirtualRouterRequest generates a "aws/request.Request" representing the
-// client's request for the UpdateVirtualRouter operation. The "output" return
+// UpdateMeshRequest generates a "aws/request.Request" representing the
+// client's request for the UpdateMesh 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 UpdateVirtualRouter for more information on using the UpdateVirtualRouter
+// See UpdateMesh for more information on using the UpdateMesh
 // 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 UpdateVirtualRouterRequest method.
-//    req, resp := client.UpdateVirtualRouterRequest(params)
+//    // Example sending a request using the UpdateMeshRequest method.
+//    req, resp := client.UpdateMeshRequest(params)
 //
 //    err := req.Send()
 //    if err == nil { // resp is now filled
 //        fmt.Println(resp)
 //    }
 //
-// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/UpdateVirtualRouter
-func (c *AppMesh) UpdateVirtualRouterRequest(input *UpdateVirtualRouterInput) (req *request.Request, output *UpdateVirtualRouterOutput) {
+// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/UpdateMesh
+func (c *AppMesh) UpdateMeshRequest(input *UpdateMeshInput) (req *request.Request, output *UpdateMeshOutput) {
 	op := &request.Operation{
-		Name:       opUpdateVirtualRouter,
+		Name:       opUpdateMesh,
 		HTTPMethod: "PUT",
-		HTTPPath:   "/v20190125/meshes/{meshName}/virtualRouters/{virtualRouterName}",
+		HTTPPath:   "/v20190125/meshes/{meshName}",
 	}
 
 	if input == nil {
-		input = &UpdateVirtualRouterInput{}
+		input = &UpdateMeshInput{}
 	}
 
-	output = &UpdateVirtualRouterOutput{}
+	output = &UpdateMeshOutput{}
 	req = c.newRequest(op, input, output)
 	return
 }
 
-// UpdateVirtualRouter API operation for AWS App Mesh.
+// UpdateMesh API operation for AWS App Mesh.
 //
-// Updates an existing virtual router in a specified service mesh.
+// Updates an existing service mesh.
 //
 // 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 AWS App Mesh's
-// API operation UpdateVirtualRouter for usage and error information.
+// API operation UpdateMesh for usage and error information.
 //
 // Returned Error Codes:
 //   * ErrCodeBadRequestException "BadRequestException"
@@ -2634,11 +2755,6 @@ func (c *AppMesh) UpdateVirtualRouterRequest(input *UpdateVirtualRouterInput) (r
 //   The request processing has failed because of an unknown error, exception,
 //   or failure.
 //
-//   * ErrCodeLimitExceededException "LimitExceededException"
-//   You have exceeded a service limit for your account. For more information,
-//   see Service Limits (https://docs.aws.amazon.com/app-mesh/latest/userguide/service_limits.html)
-//   in the AWS App Mesh User Guide.
-//
 //   * ErrCodeNotFoundException "NotFoundException"
 //   The specified resource doesn't exist. Check your request syntax and try again.
 //
@@ -2650,80 +2766,80 @@ func (c *AppMesh) UpdateVirtualRouterRequest(input *UpdateVirtualRouterInput) (r
 //   for your account. For best results, use an increasing or variable sleep interval
 //   between requests.
 //
-// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/UpdateVirtualRouter
-func (c *AppMesh) UpdateVirtualRouter(input *UpdateVirtualRouterInput) (*UpdateVirtualRouterOutput, error) {
-	req, out := c.UpdateVirtualRouterRequest(input)
+// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/UpdateMesh
+func (c *AppMesh) UpdateMesh(input *UpdateMeshInput) (*UpdateMeshOutput, error) {
+	req, out := c.UpdateMeshRequest(input)
 	return out, req.Send()
 }
 
-// UpdateVirtualRouterWithContext is the same as UpdateVirtualRouter with the addition of
+// UpdateMeshWithContext is the same as UpdateMesh with the addition of
 // the ability to pass a context and additional request options.
 //
-// See UpdateVirtualRouter for details on how to use this API operation.
+// See UpdateMesh 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 *AppMesh) UpdateVirtualRouterWithContext(ctx aws.Context, input *UpdateVirtualRouterInput, opts ...request.Option) (*UpdateVirtualRouterOutput, error) {
-	req, out := c.UpdateVirtualRouterRequest(input)
+func (c *AppMesh) UpdateMeshWithContext(ctx aws.Context, input *UpdateMeshInput, opts ...request.Option) (*UpdateMeshOutput, error) {
+	req, out := c.UpdateMeshRequest(input)
 	req.SetContext(ctx)
 	req.ApplyOptions(opts...)
 	return out, req.Send()
 }
 
-const opUpdateVirtualService = "UpdateVirtualService"
+const opUpdateRoute = "UpdateRoute"
 
-// UpdateVirtualServiceRequest generates a "aws/request.Request" representing the
-// client's request for the UpdateVirtualService operation. The "output" return
+// UpdateRouteRequest generates a "aws/request.Request" representing the
+// client's request for the UpdateRoute 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 UpdateVirtualService for more information on using the UpdateVirtualService
+// See UpdateRoute for more information on using the UpdateRoute
 // 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 UpdateVirtualServiceRequest method.
-//    req, resp := client.UpdateVirtualServiceRequest(params)
+//    // Example sending a request using the UpdateRouteRequest method.
+//    req, resp := client.UpdateRouteRequest(params)
 //
 //    err := req.Send()
 //    if err == nil { // resp is now filled
 //        fmt.Println(resp)
 //    }
 //
-// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/UpdateVirtualService
-func (c *AppMesh) UpdateVirtualServiceRequest(input *UpdateVirtualServiceInput) (req *request.Request, output *UpdateVirtualServiceOutput) {
+// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/UpdateRoute
+func (c *AppMesh) UpdateRouteRequest(input *UpdateRouteInput) (req *request.Request, output *UpdateRouteOutput) {
 	op := &request.Operation{
-		Name:       opUpdateVirtualService,
+		Name:       opUpdateRoute,
 		HTTPMethod: "PUT",
-		HTTPPath:   "/v20190125/meshes/{meshName}/virtualServices/{virtualServiceName}",
+		HTTPPath:   "/v20190125/meshes/{meshName}/virtualRouter/{virtualRouterName}/routes/{routeName}",
 	}
 
 	if input == nil {
-		input = &UpdateVirtualServiceInput{}
+		input = &UpdateRouteInput{}
 	}
 
-	output = &UpdateVirtualServiceOutput{}
+	output = &UpdateRouteOutput{}
 	req = c.newRequest(op, input, output)
 	return
 }
 
-// UpdateVirtualService API operation for AWS App Mesh.
+// UpdateRoute API operation for AWS App Mesh.
 //
-// Updates an existing virtual service in a specified service mesh.
+// Updates an existing route for a specified service mesh and virtual router.
 //
 // 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 AWS App Mesh's
-// API operation UpdateVirtualService for usage and error information.
+// API operation UpdateRoute for usage and error information.
 //
 // Returned Error Codes:
 //   * ErrCodeBadRequestException "BadRequestException"
@@ -2757,53 +2873,895 @@ func (c *AppMesh) UpdateVirtualServiceRequest(input *UpdateVirtualServiceInput)
 //   for your account. For best results, use an increasing or variable sleep interval
 //   between requests.
 //
-// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/UpdateVirtualService
-func (c *AppMesh) UpdateVirtualService(input *UpdateVirtualServiceInput) (*UpdateVirtualServiceOutput, error) {
-	req, out := c.UpdateVirtualServiceRequest(input)
+// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/UpdateRoute
+func (c *AppMesh) UpdateRoute(input *UpdateRouteInput) (*UpdateRouteOutput, error) {
+	req, out := c.UpdateRouteRequest(input)
 	return out, req.Send()
 }
 
-// UpdateVirtualServiceWithContext is the same as UpdateVirtualService with the addition of
+// UpdateRouteWithContext is the same as UpdateRoute with the addition of
 // the ability to pass a context and additional request options.
 //
-// See UpdateVirtualService for details on how to use this API operation.
+// See UpdateRoute 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 *AppMesh) UpdateVirtualServiceWithContext(ctx aws.Context, input *UpdateVirtualServiceInput, opts ...request.Option) (*UpdateVirtualServiceOutput, error) {
-	req, out := c.UpdateVirtualServiceRequest(input)
+func (c *AppMesh) UpdateRouteWithContext(ctx aws.Context, input *UpdateRouteInput, opts ...request.Option) (*UpdateRouteOutput, error) {
+	req, out := c.UpdateRouteRequest(input)
+	req.SetContext(ctx)
+	req.ApplyOptions(opts...)
+	return out, req.Send()
+}
+
+const opUpdateVirtualNode = "UpdateVirtualNode"
+
+// UpdateVirtualNodeRequest generates a "aws/request.Request" representing the
+// client's request for the UpdateVirtualNode 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 UpdateVirtualNode for more information on using the UpdateVirtualNode
+// 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 UpdateVirtualNodeRequest method.
+//    req, resp := client.UpdateVirtualNodeRequest(params)
+//
+//    err := req.Send()
+//    if err == nil { // resp is now filled
+//        fmt.Println(resp)
+//    }
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/UpdateVirtualNode
+func (c *AppMesh) UpdateVirtualNodeRequest(input *UpdateVirtualNodeInput) (req *request.Request, output *UpdateVirtualNodeOutput) {
+	op := &request.Operation{
+		Name:       opUpdateVirtualNode,
+		HTTPMethod: "PUT",
+		HTTPPath:   "/v20190125/meshes/{meshName}/virtualNodes/{virtualNodeName}",
+	}
+
+	if input == nil {
+		input = &UpdateVirtualNodeInput{}
+	}
+
+	output = &UpdateVirtualNodeOutput{}
+	req = c.newRequest(op, input, output)
+	return
+}
+
+// UpdateVirtualNode API operation for AWS App Mesh.
+//
+// Updates an existing virtual node in a specified service mesh.
+//
+// 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 AWS App Mesh's
+// API operation UpdateVirtualNode for usage and error information.
+//
+// Returned Error Codes:
+//   * ErrCodeBadRequestException "BadRequestException"
+//   The request syntax was malformed. Check your request syntax and try again.
+//
+//   * ErrCodeConflictException "ConflictException"
+//   The request contains a client token that was used for a previous update resource
+//   call with different specifications. Try the request again with a new client
+//   token.
+//
+//   * ErrCodeForbiddenException "ForbiddenException"
+//   You don't have permissions to perform this action.
+//
+//   * ErrCodeInternalServerErrorException "InternalServerErrorException"
+//   The request processing has failed because of an unknown error, exception,
+//   or failure.
+//
+//   * ErrCodeLimitExceededException "LimitExceededException"
+//   You have exceeded a service limit for your account. For more information,
+//   see Service Limits (https://docs.aws.amazon.com/app-mesh/latest/userguide/service_limits.html)
+//   in the AWS App Mesh User Guide.
+//
+//   * ErrCodeNotFoundException "NotFoundException"
+//   The specified resource doesn't exist. Check your request syntax and try again.
+//
+//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
+//   The request has failed due to a temporary failure of the service.
+//
+//   * ErrCodeTooManyRequestsException "TooManyRequestsException"
+//   The maximum request rate permitted by the App Mesh APIs has been exceeded
+//   for your account. For best results, use an increasing or variable sleep interval
+//   between requests.
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/UpdateVirtualNode
+func (c *AppMesh) UpdateVirtualNode(input *UpdateVirtualNodeInput) (*UpdateVirtualNodeOutput, error) {
+	req, out := c.UpdateVirtualNodeRequest(input)
+	return out, req.Send()
+}
+
+// UpdateVirtualNodeWithContext is the same as UpdateVirtualNode with the addition of
+// the ability to pass a context and additional request options.
+//
+// See UpdateVirtualNode 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 *AppMesh) UpdateVirtualNodeWithContext(ctx aws.Context, input *UpdateVirtualNodeInput, opts ...request.Option) (*UpdateVirtualNodeOutput, error) {
+	req, out := c.UpdateVirtualNodeRequest(input)
+	req.SetContext(ctx)
+	req.ApplyOptions(opts...)
+	return out, req.Send()
+}
+
+const opUpdateVirtualRouter = "UpdateVirtualRouter"
+
+// UpdateVirtualRouterRequest generates a "aws/request.Request" representing the
+// client's request for the UpdateVirtualRouter 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 UpdateVirtualRouter for more information on using the UpdateVirtualRouter
+// 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 UpdateVirtualRouterRequest method.
+//    req, resp := client.UpdateVirtualRouterRequest(params)
+//
+//    err := req.Send()
+//    if err == nil { // resp is now filled
+//        fmt.Println(resp)
+//    }
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/UpdateVirtualRouter
+func (c *AppMesh) UpdateVirtualRouterRequest(input *UpdateVirtualRouterInput) (req *request.Request, output *UpdateVirtualRouterOutput) {
+	op := &request.Operation{
+		Name:       opUpdateVirtualRouter,
+		HTTPMethod: "PUT",
+		HTTPPath:   "/v20190125/meshes/{meshName}/virtualRouters/{virtualRouterName}",
+	}
+
+	if input == nil {
+		input = &UpdateVirtualRouterInput{}
+	}
+
+	output = &UpdateVirtualRouterOutput{}
+	req = c.newRequest(op, input, output)
+	return
+}
+
+// UpdateVirtualRouter API operation for AWS App Mesh.
+//
+// Updates an existing virtual router in a specified service mesh.
+//
+// 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 AWS App Mesh's
+// API operation UpdateVirtualRouter for usage and error information.
+//
+// Returned Error Codes:
+//   * ErrCodeBadRequestException "BadRequestException"
+//   The request syntax was malformed. Check your request syntax and try again.
+//
+//   * ErrCodeConflictException "ConflictException"
+//   The request contains a client token that was used for a previous update resource
+//   call with different specifications. Try the request again with a new client
+//   token.
+//
+//   * ErrCodeForbiddenException "ForbiddenException"
+//   You don't have permissions to perform this action.
+//
+//   * ErrCodeInternalServerErrorException "InternalServerErrorException"
+//   The request processing has failed because of an unknown error, exception,
+//   or failure.
+//
+//   * ErrCodeLimitExceededException "LimitExceededException"
+//   You have exceeded a service limit for your account. For more information,
+//   see Service Limits (https://docs.aws.amazon.com/app-mesh/latest/userguide/service_limits.html)
+//   in the AWS App Mesh User Guide.
+//
+//   * ErrCodeNotFoundException "NotFoundException"
+//   The specified resource doesn't exist. Check your request syntax and try again.
+//
+//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
+//   The request has failed due to a temporary failure of the service.
+//
+//   * ErrCodeTooManyRequestsException "TooManyRequestsException"
+//   The maximum request rate permitted by the App Mesh APIs has been exceeded
+//   for your account. For best results, use an increasing or variable sleep interval
+//   between requests.
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/UpdateVirtualRouter
+func (c *AppMesh) UpdateVirtualRouter(input *UpdateVirtualRouterInput) (*UpdateVirtualRouterOutput, error) {
+	req, out := c.UpdateVirtualRouterRequest(input)
+	return out, req.Send()
+}
+
+// UpdateVirtualRouterWithContext is the same as UpdateVirtualRouter with the addition of
+// the ability to pass a context and additional request options.
+//
+// See UpdateVirtualRouter 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 *AppMesh) UpdateVirtualRouterWithContext(ctx aws.Context, input *UpdateVirtualRouterInput, opts ...request.Option) (*UpdateVirtualRouterOutput, error) {
+	req, out := c.UpdateVirtualRouterRequest(input)
 	req.SetContext(ctx)
 	req.ApplyOptions(opts...)
 	return out, req.Send()
 }
 
-// An object representing the backends that a virtual node is expected to send
-// outbound traffic to.
-type Backend struct {
+const opUpdateVirtualService = "UpdateVirtualService"
+
+// UpdateVirtualServiceRequest generates a "aws/request.Request" representing the
+// client's request for the UpdateVirtualService 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 UpdateVirtualService for more information on using the UpdateVirtualService
+// 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 UpdateVirtualServiceRequest method.
+//    req, resp := client.UpdateVirtualServiceRequest(params)
+//
+//    err := req.Send()
+//    if err == nil { // resp is now filled
+//        fmt.Println(resp)
+//    }
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/UpdateVirtualService
+func (c *AppMesh) UpdateVirtualServiceRequest(input *UpdateVirtualServiceInput) (req *request.Request, output *UpdateVirtualServiceOutput) {
+	op := &request.Operation{
+		Name:       opUpdateVirtualService,
+		HTTPMethod: "PUT",
+		HTTPPath:   "/v20190125/meshes/{meshName}/virtualServices/{virtualServiceName}",
+	}
+
+	if input == nil {
+		input = &UpdateVirtualServiceInput{}
+	}
+
+	output = &UpdateVirtualServiceOutput{}
+	req = c.newRequest(op, input, output)
+	return
+}
+
+// UpdateVirtualService API operation for AWS App Mesh.
+//
+// Updates an existing virtual service in a specified service mesh.
+//
+// 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 AWS App Mesh's
+// API operation UpdateVirtualService for usage and error information.
+//
+// Returned Error Codes:
+//   * ErrCodeBadRequestException "BadRequestException"
+//   The request syntax was malformed. Check your request syntax and try again.
+//
+//   * ErrCodeConflictException "ConflictException"
+//   The request contains a client token that was used for a previous update resource
+//   call with different specifications. Try the request again with a new client
+//   token.
+//
+//   * ErrCodeForbiddenException "ForbiddenException"
+//   You don't have permissions to perform this action.
+//
+//   * ErrCodeInternalServerErrorException "InternalServerErrorException"
+//   The request processing has failed because of an unknown error, exception,
+//   or failure.
+//
+//   * ErrCodeLimitExceededException "LimitExceededException"
+//   You have exceeded a service limit for your account. For more information,
+//   see Service Limits (https://docs.aws.amazon.com/app-mesh/latest/userguide/service_limits.html)
+//   in the AWS App Mesh User Guide.
+//
+//   * ErrCodeNotFoundException "NotFoundException"
+//   The specified resource doesn't exist. Check your request syntax and try again.
+//
+//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
+//   The request has failed due to a temporary failure of the service.
+//
+//   * ErrCodeTooManyRequestsException "TooManyRequestsException"
+//   The maximum request rate permitted by the App Mesh APIs has been exceeded
+//   for your account. For best results, use an increasing or variable sleep interval
+//   between requests.
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/appmesh-2019-01-25/UpdateVirtualService
+func (c *AppMesh) UpdateVirtualService(input *UpdateVirtualServiceInput) (*UpdateVirtualServiceOutput, error) {
+	req, out := c.UpdateVirtualServiceRequest(input)
+	return out, req.Send()
+}
+
+// UpdateVirtualServiceWithContext is the same as UpdateVirtualService with the addition of
+// the ability to pass a context and additional request options.
+//
+// See UpdateVirtualService 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 *AppMesh) UpdateVirtualServiceWithContext(ctx aws.Context, input *UpdateVirtualServiceInput, opts ...request.Option) (*UpdateVirtualServiceOutput, error) {
+	req, out := c.UpdateVirtualServiceRequest(input)
+	req.SetContext(ctx)
+	req.ApplyOptions(opts...)
+	return out, req.Send()
+}
+
+// An object representing the access logging information for a virtual node.
+type AccessLog struct {
+	_ struct{} `type:"structure"`
+
+	// The file object to send virtual node access logs to.
+	File *FileAccessLog `locationName:"file" type:"structure"`
+}
+
+// String returns the string representation
+func (s AccessLog) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s AccessLog) GoString() string {
+	return s.String()
+}
+
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *AccessLog) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "AccessLog"}
+	if s.File != nil {
+		if err := s.File.Validate(); err != nil {
+			invalidParams.AddNested("File", err.(request.ErrInvalidParams))
+		}
+	}
+
+	if invalidParams.Len() > 0 {
+		return invalidParams
+	}
+	return nil
+}
+
+// SetFile sets the File field's value.
+func (s *AccessLog) SetFile(v *FileAccessLog) *AccessLog {
+	s.File = v
+	return s
+}
+
+// An object representing the backends that a virtual node is expected to send
+// outbound traffic to.
+type Backend struct {
+	_ struct{} `type:"structure"`
+
+	// Specifies a virtual service to use as a backend for a virtual node.
+	VirtualService *VirtualServiceBackend `locationName:"virtualService" type:"structure"`
+}
+
+// String returns the string representation
+func (s Backend) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s Backend) GoString() string {
+	return s.String()
+}
+
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *Backend) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "Backend"}
+	if s.VirtualService != nil {
+		if err := s.VirtualService.Validate(); err != nil {
+			invalidParams.AddNested("VirtualService", err.(request.ErrInvalidParams))
+		}
+	}
+
+	if invalidParams.Len() > 0 {
+		return invalidParams
+	}
+	return nil
+}
+
+// SetVirtualService sets the VirtualService field's value.
+func (s *Backend) SetVirtualService(v *VirtualServiceBackend) *Backend {
+	s.VirtualService = v
+	return s
+}
+
+type CreateMeshInput struct {
+	_ struct{} `type:"structure"`
+
+	// Unique, case-sensitive identifier that you provide to ensure the idempotency
+	// of therequest. Up to 36 letters, numbers, hyphens, and underscores are allowed.
+	ClientToken *string `locationName:"clientToken" type:"string" idempotencyToken:"true"`
+
+	// The name to use for the service mesh.
+	//
+	// MeshName is a required field
+	MeshName *string `locationName:"meshName" min:"1" type:"string" required:"true"`
+
+	// The service mesh specification to apply.
+	Spec *MeshSpec `locationName:"spec" type:"structure"`
+
+	// Optional metadata that you can apply to the service mesh to assist with categorization
+	// and organization. Each tag consists of a key and an optional value, both
+	// of which you define. Tag keys can have a maximum character length of 128
+	// characters, and tag values can have a maximum length of 256 characters.
+	Tags []*TagRef `locationName:"tags" type:"list"`
+}
+
+// String returns the string representation
+func (s CreateMeshInput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s CreateMeshInput) GoString() string {
+	return s.String()
+}
+
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *CreateMeshInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "CreateMeshInput"}
+	if s.MeshName == nil {
+		invalidParams.Add(request.NewErrParamRequired("MeshName"))
+	}
+	if s.MeshName != nil && len(*s.MeshName) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("MeshName", 1))
+	}
+	if s.Spec != nil {
+		if err := s.Spec.Validate(); err != nil {
+			invalidParams.AddNested("Spec", 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
+}
+
+// SetClientToken sets the ClientToken field's value.
+func (s *CreateMeshInput) SetClientToken(v string) *CreateMeshInput {
+	s.ClientToken = &v
+	return s
+}
+
+// SetMeshName sets the MeshName field's value.
+func (s *CreateMeshInput) SetMeshName(v string) *CreateMeshInput {
+	s.MeshName = &v
+	return s
+}
+
+// SetSpec sets the Spec field's value.
+func (s *CreateMeshInput) SetSpec(v *MeshSpec) *CreateMeshInput {
+	s.Spec = v
+	return s
+}
+
+// SetTags sets the Tags field's value.
+func (s *CreateMeshInput) SetTags(v []*TagRef) *CreateMeshInput {
+	s.Tags = v
+	return s
+}
+
+type CreateMeshOutput struct {
+	_ struct{} `type:"structure" payload:"Mesh"`
+
+	// The full description of your service mesh following the create call.
+	//
+	// Mesh is a required field
+	Mesh *MeshData `locationName:"mesh" type:"structure" required:"true"`
+}
+
+// String returns the string representation
+func (s CreateMeshOutput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s CreateMeshOutput) GoString() string {
+	return s.String()
+}
+
+// SetMesh sets the Mesh field's value.
+func (s *CreateMeshOutput) SetMesh(v *MeshData) *CreateMeshOutput {
+	s.Mesh = v
+	return s
+}
+
+type CreateRouteInput struct {
+	_ struct{} `type:"structure"`
+
+	// Unique, case-sensitive identifier that you provide to ensure the idempotency
+	// of therequest. Up to 36 letters, numbers, hyphens, and underscores are allowed.
+	ClientToken *string `locationName:"clientToken" type:"string" idempotencyToken:"true"`
+
+	// The name of the service mesh to create the route in.
+	//
+	// MeshName is a required field
+	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
+
+	// The name to use for the route.
+	//
+	// RouteName is a required field
+	RouteName *string `locationName:"routeName" min:"1" type:"string" required:"true"`
+
+	// The route specification to apply.
+	//
+	// Spec is a required field
+	Spec *RouteSpec `locationName:"spec" type:"structure" required:"true"`
+
+	// Optional metadata that you can apply to the route to assist with categorization
+	// and organization. Each tag consists of a key and an optional value, both
+	// of which you define. Tag keys can have a maximum character length of 128
+	// characters, and tag values can have a maximum length of 256 characters.
+	Tags []*TagRef `locationName:"tags" type:"list"`
+
+	// The name of the virtual router in which to create the route.
+	//
+	// VirtualRouterName is a required field
+	VirtualRouterName *string `location:"uri" locationName:"virtualRouterName" min:"1" type:"string" required:"true"`
+}
+
+// String returns the string representation
+func (s CreateRouteInput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s CreateRouteInput) GoString() string {
+	return s.String()
+}
+
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *CreateRouteInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "CreateRouteInput"}
+	if s.MeshName == nil {
+		invalidParams.Add(request.NewErrParamRequired("MeshName"))
+	}
+	if s.MeshName != nil && len(*s.MeshName) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("MeshName", 1))
+	}
+	if s.RouteName == nil {
+		invalidParams.Add(request.NewErrParamRequired("RouteName"))
+	}
+	if s.RouteName != nil && len(*s.RouteName) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("RouteName", 1))
+	}
+	if s.Spec == nil {
+		invalidParams.Add(request.NewErrParamRequired("Spec"))
+	}
+	if s.VirtualRouterName == nil {
+		invalidParams.Add(request.NewErrParamRequired("VirtualRouterName"))
+	}
+	if s.VirtualRouterName != nil && len(*s.VirtualRouterName) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("VirtualRouterName", 1))
+	}
+	if s.Spec != nil {
+		if err := s.Spec.Validate(); err != nil {
+			invalidParams.AddNested("Spec", 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
+}
+
+// SetClientToken sets the ClientToken field's value.
+func (s *CreateRouteInput) SetClientToken(v string) *CreateRouteInput {
+	s.ClientToken = &v
+	return s
+}
+
+// SetMeshName sets the MeshName field's value.
+func (s *CreateRouteInput) SetMeshName(v string) *CreateRouteInput {
+	s.MeshName = &v
+	return s
+}
+
+// SetRouteName sets the RouteName field's value.
+func (s *CreateRouteInput) SetRouteName(v string) *CreateRouteInput {
+	s.RouteName = &v
+	return s
+}
+
+// SetSpec sets the Spec field's value.
+func (s *CreateRouteInput) SetSpec(v *RouteSpec) *CreateRouteInput {
+	s.Spec = v
+	return s
+}
+
+// SetTags sets the Tags field's value.
+func (s *CreateRouteInput) SetTags(v []*TagRef) *CreateRouteInput {
+	s.Tags = v
+	return s
+}
+
+// SetVirtualRouterName sets the VirtualRouterName field's value.
+func (s *CreateRouteInput) SetVirtualRouterName(v string) *CreateRouteInput {
+	s.VirtualRouterName = &v
+	return s
+}
+
+type CreateRouteOutput struct {
+	_ struct{} `type:"structure" payload:"Route"`
+
+	// The full description of your mesh following the create call.
+	//
+	// Route is a required field
+	Route *RouteData `locationName:"route" type:"structure" required:"true"`
+}
+
+// String returns the string representation
+func (s CreateRouteOutput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s CreateRouteOutput) GoString() string {
+	return s.String()
+}
+
+// SetRoute sets the Route field's value.
+func (s *CreateRouteOutput) SetRoute(v *RouteData) *CreateRouteOutput {
+	s.Route = v
+	return s
+}
+
+type CreateVirtualNodeInput struct {
+	_ struct{} `type:"structure"`
+
+	// Unique, case-sensitive identifier that you provide to ensure the idempotency
+	// of therequest. Up to 36 letters, numbers, hyphens, and underscores are allowed.
+	ClientToken *string `locationName:"clientToken" type:"string" idempotencyToken:"true"`
+
+	// The name of the service mesh to create the virtual node in.
+	//
+	// MeshName is a required field
+	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
+
+	// The virtual node specification to apply.
+	//
+	// Spec is a required field
+	Spec *VirtualNodeSpec `locationName:"spec" type:"structure" required:"true"`
+
+	// Optional metadata that you can apply to the virtual node to assist with categorization
+	// and organization. Each tag consists of a key and an optional value, both
+	// of which you define. Tag keys can have a maximum character length of 128
+	// characters, and tag values can have a maximum length of 256 characters.
+	Tags []*TagRef `locationName:"tags" type:"list"`
+
+	// The name to use for the virtual node.
+	//
+	// VirtualNodeName is a required field
+	VirtualNodeName *string `locationName:"virtualNodeName" min:"1" type:"string" required:"true"`
+}
+
+// String returns the string representation
+func (s CreateVirtualNodeInput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s CreateVirtualNodeInput) GoString() string {
+	return s.String()
+}
+
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *CreateVirtualNodeInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "CreateVirtualNodeInput"}
+	if s.MeshName == nil {
+		invalidParams.Add(request.NewErrParamRequired("MeshName"))
+	}
+	if s.MeshName != nil && len(*s.MeshName) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("MeshName", 1))
+	}
+	if s.Spec == nil {
+		invalidParams.Add(request.NewErrParamRequired("Spec"))
+	}
+	if s.VirtualNodeName == nil {
+		invalidParams.Add(request.NewErrParamRequired("VirtualNodeName"))
+	}
+	if s.VirtualNodeName != nil && len(*s.VirtualNodeName) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("VirtualNodeName", 1))
+	}
+	if s.Spec != nil {
+		if err := s.Spec.Validate(); err != nil {
+			invalidParams.AddNested("Spec", 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
+}
+
+// SetClientToken sets the ClientToken field's value.
+func (s *CreateVirtualNodeInput) SetClientToken(v string) *CreateVirtualNodeInput {
+	s.ClientToken = &v
+	return s
+}
+
+// SetMeshName sets the MeshName field's value.
+func (s *CreateVirtualNodeInput) SetMeshName(v string) *CreateVirtualNodeInput {
+	s.MeshName = &v
+	return s
+}
+
+// SetSpec sets the Spec field's value.
+func (s *CreateVirtualNodeInput) SetSpec(v *VirtualNodeSpec) *CreateVirtualNodeInput {
+	s.Spec = v
+	return s
+}
+
+// SetTags sets the Tags field's value.
+func (s *CreateVirtualNodeInput) SetTags(v []*TagRef) *CreateVirtualNodeInput {
+	s.Tags = v
+	return s
+}
+
+// SetVirtualNodeName sets the VirtualNodeName field's value.
+func (s *CreateVirtualNodeInput) SetVirtualNodeName(v string) *CreateVirtualNodeInput {
+	s.VirtualNodeName = &v
+	return s
+}
+
+type CreateVirtualNodeOutput struct {
+	_ struct{} `type:"structure" payload:"VirtualNode"`
+
+	// The full description of your virtual node following the create call.
+	//
+	// VirtualNode is a required field
+	VirtualNode *VirtualNodeData `locationName:"virtualNode" type:"structure" required:"true"`
+}
+
+// String returns the string representation
+func (s CreateVirtualNodeOutput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s CreateVirtualNodeOutput) GoString() string {
+	return s.String()
+}
+
+// SetVirtualNode sets the VirtualNode field's value.
+func (s *CreateVirtualNodeOutput) SetVirtualNode(v *VirtualNodeData) *CreateVirtualNodeOutput {
+	s.VirtualNode = v
+	return s
+}
+
+type CreateVirtualRouterInput struct {
 	_ struct{} `type:"structure"`
 
-	// Specifies a virtual service to use as a backend for a virtual node.
-	VirtualService *VirtualServiceBackend `locationName:"virtualService" type:"structure"`
+	// Unique, case-sensitive identifier that you provide to ensure the idempotency
+	// of therequest. Up to 36 letters, numbers, hyphens, and underscores are allowed.
+	ClientToken *string `locationName:"clientToken" type:"string" idempotencyToken:"true"`
+
+	// The name of the service mesh to create the virtual router in.
+	//
+	// MeshName is a required field
+	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
+
+	// The virtual router specification to apply.
+	//
+	// Spec is a required field
+	Spec *VirtualRouterSpec `locationName:"spec" type:"structure" required:"true"`
+
+	// Optional metadata that you can apply to the virtual router to assist with
+	// categorization and organization. Each tag consists of a key and an optional
+	// value, both of which you define. Tag keys can have a maximum character length
+	// of 128 characters, and tag values can have a maximum length of 256 characters.
+	Tags []*TagRef `locationName:"tags" type:"list"`
+
+	// The name to use for the virtual router.
+	//
+	// VirtualRouterName is a required field
+	VirtualRouterName *string `locationName:"virtualRouterName" min:"1" type:"string" required:"true"`
 }
 
 // String returns the string representation
-func (s Backend) String() string {
+func (s CreateVirtualRouterInput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s Backend) GoString() string {
+func (s CreateVirtualRouterInput) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *Backend) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "Backend"}
-	if s.VirtualService != nil {
-		if err := s.VirtualService.Validate(); err != nil {
-			invalidParams.AddNested("VirtualService", err.(request.ErrInvalidParams))
+func (s *CreateVirtualRouterInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "CreateVirtualRouterInput"}
+	if s.MeshName == nil {
+		invalidParams.Add(request.NewErrParamRequired("MeshName"))
+	}
+	if s.MeshName != nil && len(*s.MeshName) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("MeshName", 1))
+	}
+	if s.Spec == nil {
+		invalidParams.Add(request.NewErrParamRequired("Spec"))
+	}
+	if s.VirtualRouterName == nil {
+		invalidParams.Add(request.NewErrParamRequired("VirtualRouterName"))
+	}
+	if s.VirtualRouterName != nil && len(*s.VirtualRouterName) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("VirtualRouterName", 1))
+	}
+	if s.Spec != nil {
+		if err := s.Spec.Validate(); err != nil {
+			invalidParams.AddNested("Spec", 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))
+			}
 		}
 	}
 
@@ -2813,38 +3771,214 @@ func (s *Backend) Validate() error {
 	return nil
 }
 
-// SetVirtualService sets the VirtualService field's value.
-func (s *Backend) SetVirtualService(v *VirtualServiceBackend) *Backend {
-	s.VirtualService = v
+// SetClientToken sets the ClientToken field's value.
+func (s *CreateVirtualRouterInput) SetClientToken(v string) *CreateVirtualRouterInput {
+	s.ClientToken = &v
 	return s
 }
 
-type CreateMeshInput struct {
+// SetMeshName sets the MeshName field's value.
+func (s *CreateVirtualRouterInput) SetMeshName(v string) *CreateVirtualRouterInput {
+	s.MeshName = &v
+	return s
+}
+
+// SetSpec sets the Spec field's value.
+func (s *CreateVirtualRouterInput) SetSpec(v *VirtualRouterSpec) *CreateVirtualRouterInput {
+	s.Spec = v
+	return s
+}
+
+// SetTags sets the Tags field's value.
+func (s *CreateVirtualRouterInput) SetTags(v []*TagRef) *CreateVirtualRouterInput {
+	s.Tags = v
+	return s
+}
+
+// SetVirtualRouterName sets the VirtualRouterName field's value.
+func (s *CreateVirtualRouterInput) SetVirtualRouterName(v string) *CreateVirtualRouterInput {
+	s.VirtualRouterName = &v
+	return s
+}
+
+type CreateVirtualRouterOutput struct {
+	_ struct{} `type:"structure" payload:"VirtualRouter"`
+
+	// The full description of your virtual router following the create call.
+	//
+	// VirtualRouter is a required field
+	VirtualRouter *VirtualRouterData `locationName:"virtualRouter" type:"structure" required:"true"`
+}
+
+// String returns the string representation
+func (s CreateVirtualRouterOutput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s CreateVirtualRouterOutput) GoString() string {
+	return s.String()
+}
+
+// SetVirtualRouter sets the VirtualRouter field's value.
+func (s *CreateVirtualRouterOutput) SetVirtualRouter(v *VirtualRouterData) *CreateVirtualRouterOutput {
+	s.VirtualRouter = v
+	return s
+}
+
+type CreateVirtualServiceInput struct {
 	_ struct{} `type:"structure"`
 
 	// Unique, case-sensitive identifier that you provide to ensure the idempotency
 	// of therequest. Up to 36 letters, numbers, hyphens, and underscores are allowed.
 	ClientToken *string `locationName:"clientToken" type:"string" idempotencyToken:"true"`
 
-	// The name to use for the service mesh.
+	// The name of the service mesh to create the virtual service in.
+	//
+	// MeshName is a required field
+	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
+
+	// The virtual service specification to apply.
+	//
+	// Spec is a required field
+	Spec *VirtualServiceSpec `locationName:"spec" type:"structure" required:"true"`
+
+	// Optional metadata that you can apply to the virtual service to assist with
+	// categorization and organization. Each tag consists of a key and an optional
+	// value, both of which you define. Tag keys can have a maximum character length
+	// of 128 characters, and tag values can have a maximum length of 256 characters.
+	Tags []*TagRef `locationName:"tags" type:"list"`
+
+	// The name to use for the virtual service.
+	//
+	// VirtualServiceName is a required field
+	VirtualServiceName *string `locationName:"virtualServiceName" type:"string" required:"true"`
+}
+
+// String returns the string representation
+func (s CreateVirtualServiceInput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s CreateVirtualServiceInput) GoString() string {
+	return s.String()
+}
+
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *CreateVirtualServiceInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "CreateVirtualServiceInput"}
+	if s.MeshName == nil {
+		invalidParams.Add(request.NewErrParamRequired("MeshName"))
+	}
+	if s.MeshName != nil && len(*s.MeshName) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("MeshName", 1))
+	}
+	if s.Spec == nil {
+		invalidParams.Add(request.NewErrParamRequired("Spec"))
+	}
+	if s.VirtualServiceName == nil {
+		invalidParams.Add(request.NewErrParamRequired("VirtualServiceName"))
+	}
+	if s.Spec != nil {
+		if err := s.Spec.Validate(); err != nil {
+			invalidParams.AddNested("Spec", 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
+}
+
+// SetClientToken sets the ClientToken field's value.
+func (s *CreateVirtualServiceInput) SetClientToken(v string) *CreateVirtualServiceInput {
+	s.ClientToken = &v
+	return s
+}
+
+// SetMeshName sets the MeshName field's value.
+func (s *CreateVirtualServiceInput) SetMeshName(v string) *CreateVirtualServiceInput {
+	s.MeshName = &v
+	return s
+}
+
+// SetSpec sets the Spec field's value.
+func (s *CreateVirtualServiceInput) SetSpec(v *VirtualServiceSpec) *CreateVirtualServiceInput {
+	s.Spec = v
+	return s
+}
+
+// SetTags sets the Tags field's value.
+func (s *CreateVirtualServiceInput) SetTags(v []*TagRef) *CreateVirtualServiceInput {
+	s.Tags = v
+	return s
+}
+
+// SetVirtualServiceName sets the VirtualServiceName field's value.
+func (s *CreateVirtualServiceInput) SetVirtualServiceName(v string) *CreateVirtualServiceInput {
+	s.VirtualServiceName = &v
+	return s
+}
+
+type CreateVirtualServiceOutput struct {
+	_ struct{} `type:"structure" payload:"VirtualService"`
+
+	// The full description of your virtual service following the create call.
+	//
+	// VirtualService is a required field
+	VirtualService *VirtualServiceData `locationName:"virtualService" type:"structure" required:"true"`
+}
+
+// String returns the string representation
+func (s CreateVirtualServiceOutput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s CreateVirtualServiceOutput) GoString() string {
+	return s.String()
+}
+
+// SetVirtualService sets the VirtualService field's value.
+func (s *CreateVirtualServiceOutput) SetVirtualService(v *VirtualServiceData) *CreateVirtualServiceOutput {
+	s.VirtualService = v
+	return s
+}
+
+type DeleteMeshInput struct {
+	_ struct{} `type:"structure"`
+
+	// The name of the service mesh to delete.
 	//
 	// MeshName is a required field
-	MeshName *string `locationName:"meshName" min:"1" type:"string" required:"true"`
+	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
 }
 
 // String returns the string representation
-func (s CreateMeshInput) String() string {
+func (s DeleteMeshInput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s CreateMeshInput) GoString() string {
+func (s DeleteMeshInput) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *CreateMeshInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "CreateMeshInput"}
+func (s *DeleteMeshInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "DeleteMeshInput"}
 	if s.MeshName == nil {
 		invalidParams.Add(request.NewErrParamRequired("MeshName"))
 	}
@@ -2858,84 +3992,69 @@ func (s *CreateMeshInput) Validate() error {
 	return nil
 }
 
-// SetClientToken sets the ClientToken field's value.
-func (s *CreateMeshInput) SetClientToken(v string) *CreateMeshInput {
-	s.ClientToken = &v
-	return s
-}
-
 // SetMeshName sets the MeshName field's value.
-func (s *CreateMeshInput) SetMeshName(v string) *CreateMeshInput {
+func (s *DeleteMeshInput) SetMeshName(v string) *DeleteMeshInput {
 	s.MeshName = &v
 	return s
 }
 
-type CreateMeshOutput struct {
+type DeleteMeshOutput struct {
 	_ struct{} `type:"structure" payload:"Mesh"`
 
-	// The full description of your service mesh following the create call.
+	// The service mesh that was deleted.
 	//
 	// Mesh is a required field
 	Mesh *MeshData `locationName:"mesh" type:"structure" required:"true"`
 }
 
 // String returns the string representation
-func (s CreateMeshOutput) String() string {
+func (s DeleteMeshOutput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s CreateMeshOutput) GoString() string {
+func (s DeleteMeshOutput) GoString() string {
 	return s.String()
 }
 
 // SetMesh sets the Mesh field's value.
-func (s *CreateMeshOutput) SetMesh(v *MeshData) *CreateMeshOutput {
+func (s *DeleteMeshOutput) SetMesh(v *MeshData) *DeleteMeshOutput {
 	s.Mesh = v
 	return s
 }
 
-type CreateRouteInput struct {
+type DeleteRouteInput struct {
 	_ struct{} `type:"structure"`
 
-	// Unique, case-sensitive identifier that you provide to ensure the idempotency
-	// of therequest. Up to 36 letters, numbers, hyphens, and underscores are allowed.
-	ClientToken *string `locationName:"clientToken" type:"string" idempotencyToken:"true"`
-
-	// The name of the service mesh in which to create the route.
+	// The name of the service mesh to delete the route in.
 	//
 	// MeshName is a required field
 	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
 
-	// The name to use for the route.
+	// The name of the route to delete.
 	//
 	// RouteName is a required field
-	RouteName *string `locationName:"routeName" min:"1" type:"string" required:"true"`
-
-	// The route specification to apply.
-	//
-	// Spec is a required field
-	Spec *RouteSpec `locationName:"spec" type:"structure" required:"true"`
+	RouteName *string `location:"uri" locationName:"routeName" min:"1" type:"string" required:"true"`
 
-	// The name of the virtual router in which to create the route.
+	// The name of the virtual router to delete the route in.
 	//
 	// VirtualRouterName is a required field
 	VirtualRouterName *string `location:"uri" locationName:"virtualRouterName" min:"1" type:"string" required:"true"`
 }
 
 // String returns the string representation
-func (s CreateRouteInput) String() string {
+func (s DeleteRouteInput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s CreateRouteInput) GoString() string {
+func (s DeleteRouteInput) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *CreateRouteInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "CreateRouteInput"}
+func (s *DeleteRouteInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "DeleteRouteInput"}
 	if s.MeshName == nil {
 		invalidParams.Add(request.NewErrParamRequired("MeshName"))
 	}
@@ -2948,20 +4067,12 @@ func (s *CreateRouteInput) Validate() error {
 	if s.RouteName != nil && len(*s.RouteName) < 1 {
 		invalidParams.Add(request.NewErrParamMinLen("RouteName", 1))
 	}
-	if s.Spec == nil {
-		invalidParams.Add(request.NewErrParamRequired("Spec"))
-	}
 	if s.VirtualRouterName == nil {
 		invalidParams.Add(request.NewErrParamRequired("VirtualRouterName"))
 	}
 	if s.VirtualRouterName != nil && len(*s.VirtualRouterName) < 1 {
 		invalidParams.Add(request.NewErrParamMinLen("VirtualRouterName", 1))
 	}
-	if s.Spec != nil {
-		if err := s.Spec.Validate(); err != nil {
-			invalidParams.AddNested("Spec", err.(request.ErrInvalidParams))
-		}
-	}
 
 	if invalidParams.Len() > 0 {
 		return invalidParams
@@ -2969,117 +4080,88 @@ func (s *CreateRouteInput) Validate() error {
 	return nil
 }
 
-// SetClientToken sets the ClientToken field's value.
-func (s *CreateRouteInput) SetClientToken(v string) *CreateRouteInput {
-	s.ClientToken = &v
-	return s
-}
-
 // SetMeshName sets the MeshName field's value.
-func (s *CreateRouteInput) SetMeshName(v string) *CreateRouteInput {
+func (s *DeleteRouteInput) SetMeshName(v string) *DeleteRouteInput {
 	s.MeshName = &v
 	return s
 }
 
 // SetRouteName sets the RouteName field's value.
-func (s *CreateRouteInput) SetRouteName(v string) *CreateRouteInput {
+func (s *DeleteRouteInput) SetRouteName(v string) *DeleteRouteInput {
 	s.RouteName = &v
 	return s
 }
 
-// SetSpec sets the Spec field's value.
-func (s *CreateRouteInput) SetSpec(v *RouteSpec) *CreateRouteInput {
-	s.Spec = v
-	return s
-}
-
 // SetVirtualRouterName sets the VirtualRouterName field's value.
-func (s *CreateRouteInput) SetVirtualRouterName(v string) *CreateRouteInput {
+func (s *DeleteRouteInput) SetVirtualRouterName(v string) *DeleteRouteInput {
 	s.VirtualRouterName = &v
 	return s
 }
 
-type CreateRouteOutput struct {
+type DeleteRouteOutput struct {
 	_ struct{} `type:"structure" payload:"Route"`
 
-	// The full description of your mesh following the create call.
+	// The route that was deleted.
 	//
 	// Route is a required field
 	Route *RouteData `locationName:"route" type:"structure" required:"true"`
 }
 
 // String returns the string representation
-func (s CreateRouteOutput) String() string {
+func (s DeleteRouteOutput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s CreateRouteOutput) GoString() string {
+func (s DeleteRouteOutput) GoString() string {
 	return s.String()
 }
 
 // SetRoute sets the Route field's value.
-func (s *CreateRouteOutput) SetRoute(v *RouteData) *CreateRouteOutput {
+func (s *DeleteRouteOutput) SetRoute(v *RouteData) *DeleteRouteOutput {
 	s.Route = v
 	return s
 }
 
-type CreateVirtualNodeInput struct {
+type DeleteVirtualNodeInput struct {
 	_ struct{} `type:"structure"`
 
-	// Unique, case-sensitive identifier that you provide to ensure the idempotency
-	// of therequest. Up to 36 letters, numbers, hyphens, and underscores are allowed.
-	ClientToken *string `locationName:"clientToken" type:"string" idempotencyToken:"true"`
-
-	// The name of the service mesh in which to create the virtual node.
+	// The name of the service mesh to delete the virtual node in.
 	//
 	// MeshName is a required field
 	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
 
-	// The virtual node specification to apply.
-	//
-	// Spec is a required field
-	Spec *VirtualNodeSpec `locationName:"spec" type:"structure" required:"true"`
-
-	// The name to use for the virtual node.
+	// The name of the virtual node to delete.
 	//
 	// VirtualNodeName is a required field
-	VirtualNodeName *string `locationName:"virtualNodeName" min:"1" type:"string" required:"true"`
+	VirtualNodeName *string `location:"uri" locationName:"virtualNodeName" min:"1" type:"string" required:"true"`
 }
 
 // String returns the string representation
-func (s CreateVirtualNodeInput) String() string {
+func (s DeleteVirtualNodeInput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s CreateVirtualNodeInput) GoString() string {
+func (s DeleteVirtualNodeInput) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *CreateVirtualNodeInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "CreateVirtualNodeInput"}
+func (s *DeleteVirtualNodeInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "DeleteVirtualNodeInput"}
 	if s.MeshName == nil {
 		invalidParams.Add(request.NewErrParamRequired("MeshName"))
 	}
 	if s.MeshName != nil && len(*s.MeshName) < 1 {
 		invalidParams.Add(request.NewErrParamMinLen("MeshName", 1))
 	}
-	if s.Spec == nil {
-		invalidParams.Add(request.NewErrParamRequired("Spec"))
-	}
 	if s.VirtualNodeName == nil {
 		invalidParams.Add(request.NewErrParamRequired("VirtualNodeName"))
 	}
 	if s.VirtualNodeName != nil && len(*s.VirtualNodeName) < 1 {
 		invalidParams.Add(request.NewErrParamMinLen("VirtualNodeName", 1))
 	}
-	if s.Spec != nil {
-		if err := s.Spec.Validate(); err != nil {
-			invalidParams.AddNested("Spec", err.(request.ErrInvalidParams))
-		}
-	}
 
 	if invalidParams.Len() > 0 {
 		return invalidParams
@@ -3087,111 +4169,82 @@ func (s *CreateVirtualNodeInput) Validate() error {
 	return nil
 }
 
-// SetClientToken sets the ClientToken field's value.
-func (s *CreateVirtualNodeInput) SetClientToken(v string) *CreateVirtualNodeInput {
-	s.ClientToken = &v
-	return s
-}
-
 // SetMeshName sets the MeshName field's value.
-func (s *CreateVirtualNodeInput) SetMeshName(v string) *CreateVirtualNodeInput {
+func (s *DeleteVirtualNodeInput) SetMeshName(v string) *DeleteVirtualNodeInput {
 	s.MeshName = &v
 	return s
 }
 
-// SetSpec sets the Spec field's value.
-func (s *CreateVirtualNodeInput) SetSpec(v *VirtualNodeSpec) *CreateVirtualNodeInput {
-	s.Spec = v
-	return s
-}
-
 // SetVirtualNodeName sets the VirtualNodeName field's value.
-func (s *CreateVirtualNodeInput) SetVirtualNodeName(v string) *CreateVirtualNodeInput {
+func (s *DeleteVirtualNodeInput) SetVirtualNodeName(v string) *DeleteVirtualNodeInput {
 	s.VirtualNodeName = &v
 	return s
 }
 
-type CreateVirtualNodeOutput struct {
+type DeleteVirtualNodeOutput struct {
 	_ struct{} `type:"structure" payload:"VirtualNode"`
 
-	// The full description of your virtual node following the create call.
+	// The virtual node that was deleted.
 	//
 	// VirtualNode is a required field
 	VirtualNode *VirtualNodeData `locationName:"virtualNode" type:"structure" required:"true"`
 }
 
 // String returns the string representation
-func (s CreateVirtualNodeOutput) String() string {
+func (s DeleteVirtualNodeOutput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s CreateVirtualNodeOutput) GoString() string {
+func (s DeleteVirtualNodeOutput) GoString() string {
 	return s.String()
 }
 
 // SetVirtualNode sets the VirtualNode field's value.
-func (s *CreateVirtualNodeOutput) SetVirtualNode(v *VirtualNodeData) *CreateVirtualNodeOutput {
+func (s *DeleteVirtualNodeOutput) SetVirtualNode(v *VirtualNodeData) *DeleteVirtualNodeOutput {
 	s.VirtualNode = v
 	return s
 }
 
-type CreateVirtualRouterInput struct {
+type DeleteVirtualRouterInput struct {
 	_ struct{} `type:"structure"`
 
-	// Unique, case-sensitive identifier that you provide to ensure the idempotency
-	// of therequest. Up to 36 letters, numbers, hyphens, and underscores are allowed.
-	ClientToken *string `locationName:"clientToken" type:"string" idempotencyToken:"true"`
-
-	// The name of the service mesh to create the virtual router in.
+	// The name of the service mesh to delete the virtual router in.
 	//
 	// MeshName is a required field
 	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
 
-	// The virtual router specification to apply.
-	//
-	// Spec is a required field
-	Spec *VirtualRouterSpec `locationName:"spec" type:"structure" required:"true"`
-
-	// The name to use for the virtual router.
+	// The name of the virtual router to delete.
 	//
 	// VirtualRouterName is a required field
-	VirtualRouterName *string `locationName:"virtualRouterName" min:"1" type:"string" required:"true"`
+	VirtualRouterName *string `location:"uri" locationName:"virtualRouterName" min:"1" type:"string" required:"true"`
 }
 
 // String returns the string representation
-func (s CreateVirtualRouterInput) String() string {
+func (s DeleteVirtualRouterInput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s CreateVirtualRouterInput) GoString() string {
+func (s DeleteVirtualRouterInput) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *CreateVirtualRouterInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "CreateVirtualRouterInput"}
+func (s *DeleteVirtualRouterInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "DeleteVirtualRouterInput"}
 	if s.MeshName == nil {
 		invalidParams.Add(request.NewErrParamRequired("MeshName"))
 	}
 	if s.MeshName != nil && len(*s.MeshName) < 1 {
 		invalidParams.Add(request.NewErrParamMinLen("MeshName", 1))
 	}
-	if s.Spec == nil {
-		invalidParams.Add(request.NewErrParamRequired("Spec"))
-	}
 	if s.VirtualRouterName == nil {
 		invalidParams.Add(request.NewErrParamRequired("VirtualRouterName"))
 	}
 	if s.VirtualRouterName != nil && len(*s.VirtualRouterName) < 1 {
 		invalidParams.Add(request.NewErrParamMinLen("VirtualRouterName", 1))
 	}
-	if s.Spec != nil {
-		if err := s.Spec.Validate(); err != nil {
-			invalidParams.AddNested("Spec", err.(request.ErrInvalidParams))
-		}
-	}
 
 	if invalidParams.Len() > 0 {
 		return invalidParams
@@ -3199,107 +4252,81 @@ func (s *CreateVirtualRouterInput) Validate() error {
 	return nil
 }
 
-// SetClientToken sets the ClientToken field's value.
-func (s *CreateVirtualRouterInput) SetClientToken(v string) *CreateVirtualRouterInput {
-	s.ClientToken = &v
-	return s
-}
-
 // SetMeshName sets the MeshName field's value.
-func (s *CreateVirtualRouterInput) SetMeshName(v string) *CreateVirtualRouterInput {
+func (s *DeleteVirtualRouterInput) SetMeshName(v string) *DeleteVirtualRouterInput {
 	s.MeshName = &v
 	return s
 }
 
-// SetSpec sets the Spec field's value.
-func (s *CreateVirtualRouterInput) SetSpec(v *VirtualRouterSpec) *CreateVirtualRouterInput {
-	s.Spec = v
-	return s
-}
-
 // SetVirtualRouterName sets the VirtualRouterName field's value.
-func (s *CreateVirtualRouterInput) SetVirtualRouterName(v string) *CreateVirtualRouterInput {
+func (s *DeleteVirtualRouterInput) SetVirtualRouterName(v string) *DeleteVirtualRouterInput {
 	s.VirtualRouterName = &v
 	return s
 }
 
-type CreateVirtualRouterOutput struct {
+type DeleteVirtualRouterOutput struct {
 	_ struct{} `type:"structure" payload:"VirtualRouter"`
 
-	// The full description of your virtual router following the create call.
+	// The virtual router that was deleted.
 	//
 	// VirtualRouter is a required field
 	VirtualRouter *VirtualRouterData `locationName:"virtualRouter" type:"structure" required:"true"`
 }
 
 // String returns the string representation
-func (s CreateVirtualRouterOutput) String() string {
+func (s DeleteVirtualRouterOutput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s CreateVirtualRouterOutput) GoString() string {
+func (s DeleteVirtualRouterOutput) GoString() string {
 	return s.String()
 }
 
 // SetVirtualRouter sets the VirtualRouter field's value.
-func (s *CreateVirtualRouterOutput) SetVirtualRouter(v *VirtualRouterData) *CreateVirtualRouterOutput {
+func (s *DeleteVirtualRouterOutput) SetVirtualRouter(v *VirtualRouterData) *DeleteVirtualRouterOutput {
 	s.VirtualRouter = v
 	return s
 }
 
-type CreateVirtualServiceInput struct {
+type DeleteVirtualServiceInput struct {
 	_ struct{} `type:"structure"`
 
-	// Unique, case-sensitive identifier that you provide to ensure the idempotency
-	// of therequest. Up to 36 letters, numbers, hyphens, and underscores are allowed.
-	ClientToken *string `locationName:"clientToken" type:"string" idempotencyToken:"true"`
-
-	// The name of the service mesh in which to create the virtual service.
+	// The name of the service mesh to delete the virtual service in.
 	//
 	// MeshName is a required field
 	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
 
-	// The virtual service specification to apply.
-	//
-	// Spec is a required field
-	Spec *VirtualServiceSpec `locationName:"spec" type:"structure" required:"true"`
-
-	// The name to use for the virtual service.
+	// The name of the virtual service to delete.
 	//
 	// VirtualServiceName is a required field
-	VirtualServiceName *string `locationName:"virtualServiceName" type:"string" required:"true"`
+	VirtualServiceName *string `location:"uri" locationName:"virtualServiceName" type:"string" required:"true"`
 }
 
 // String returns the string representation
-func (s CreateVirtualServiceInput) String() string {
+func (s DeleteVirtualServiceInput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s CreateVirtualServiceInput) GoString() string {
+func (s DeleteVirtualServiceInput) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *CreateVirtualServiceInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "CreateVirtualServiceInput"}
+func (s *DeleteVirtualServiceInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "DeleteVirtualServiceInput"}
 	if s.MeshName == nil {
 		invalidParams.Add(request.NewErrParamRequired("MeshName"))
 	}
 	if s.MeshName != nil && len(*s.MeshName) < 1 {
 		invalidParams.Add(request.NewErrParamMinLen("MeshName", 1))
 	}
-	if s.Spec == nil {
-		invalidParams.Add(request.NewErrParamRequired("Spec"))
-	}
 	if s.VirtualServiceName == nil {
 		invalidParams.Add(request.NewErrParamRequired("VirtualServiceName"))
 	}
-	if s.Spec != nil {
-		if err := s.Spec.Validate(); err != nil {
-			invalidParams.AddNested("Spec", err.(request.ErrInvalidParams))
-		}
+	if s.VirtualServiceName != nil && len(*s.VirtualServiceName) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("VirtualServiceName", 1))
 	}
 
 	if invalidParams.Len() > 0 {
@@ -3308,77 +4335,65 @@ func (s *CreateVirtualServiceInput) Validate() error {
 	return nil
 }
 
-// SetClientToken sets the ClientToken field's value.
-func (s *CreateVirtualServiceInput) SetClientToken(v string) *CreateVirtualServiceInput {
-	s.ClientToken = &v
-	return s
-}
-
 // SetMeshName sets the MeshName field's value.
-func (s *CreateVirtualServiceInput) SetMeshName(v string) *CreateVirtualServiceInput {
+func (s *DeleteVirtualServiceInput) SetMeshName(v string) *DeleteVirtualServiceInput {
 	s.MeshName = &v
 	return s
 }
 
-// SetSpec sets the Spec field's value.
-func (s *CreateVirtualServiceInput) SetSpec(v *VirtualServiceSpec) *CreateVirtualServiceInput {
-	s.Spec = v
-	return s
-}
-
 // SetVirtualServiceName sets the VirtualServiceName field's value.
-func (s *CreateVirtualServiceInput) SetVirtualServiceName(v string) *CreateVirtualServiceInput {
+func (s *DeleteVirtualServiceInput) SetVirtualServiceName(v string) *DeleteVirtualServiceInput {
 	s.VirtualServiceName = &v
 	return s
 }
 
-type CreateVirtualServiceOutput struct {
+type DeleteVirtualServiceOutput struct {
 	_ struct{} `type:"structure" payload:"VirtualService"`
 
-	// The full description of your virtual service following the create call.
+	// The virtual service that was deleted.
 	//
 	// VirtualService is a required field
 	VirtualService *VirtualServiceData `locationName:"virtualService" type:"structure" required:"true"`
 }
 
 // String returns the string representation
-func (s CreateVirtualServiceOutput) String() string {
+func (s DeleteVirtualServiceOutput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s CreateVirtualServiceOutput) GoString() string {
+func (s DeleteVirtualServiceOutput) GoString() string {
 	return s.String()
 }
 
 // SetVirtualService sets the VirtualService field's value.
-func (s *CreateVirtualServiceOutput) SetVirtualService(v *VirtualServiceData) *CreateVirtualServiceOutput {
+func (s *DeleteVirtualServiceOutput) SetVirtualService(v *VirtualServiceData) *DeleteVirtualServiceOutput {
 	s.VirtualService = v
 	return s
 }
 
-type DeleteMeshInput struct {
+type DescribeMeshInput struct {
 	_ struct{} `type:"structure"`
 
-	// The name of the service mesh to delete.
+	// The name of the service mesh to describe.
 	//
 	// MeshName is a required field
 	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
 }
 
 // String returns the string representation
-func (s DeleteMeshInput) String() string {
+func (s DescribeMeshInput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s DeleteMeshInput) GoString() string {
+func (s DescribeMeshInput) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *DeleteMeshInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "DeleteMeshInput"}
+func (s *DescribeMeshInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "DescribeMeshInput"}
 	if s.MeshName == nil {
 		invalidParams.Add(request.NewErrParamRequired("MeshName"))
 	}
@@ -3393,68 +4408,68 @@ func (s *DeleteMeshInput) Validate() error {
 }
 
 // SetMeshName sets the MeshName field's value.
-func (s *DeleteMeshInput) SetMeshName(v string) *DeleteMeshInput {
+func (s *DescribeMeshInput) SetMeshName(v string) *DescribeMeshInput {
 	s.MeshName = &v
 	return s
 }
 
-type DeleteMeshOutput struct {
+type DescribeMeshOutput struct {
 	_ struct{} `type:"structure" payload:"Mesh"`
 
-	// The service mesh that was deleted.
+	// The full description of your service mesh.
 	//
 	// Mesh is a required field
 	Mesh *MeshData `locationName:"mesh" type:"structure" required:"true"`
 }
 
 // String returns the string representation
-func (s DeleteMeshOutput) String() string {
+func (s DescribeMeshOutput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s DeleteMeshOutput) GoString() string {
+func (s DescribeMeshOutput) GoString() string {
 	return s.String()
 }
 
 // SetMesh sets the Mesh field's value.
-func (s *DeleteMeshOutput) SetMesh(v *MeshData) *DeleteMeshOutput {
+func (s *DescribeMeshOutput) SetMesh(v *MeshData) *DescribeMeshOutput {
 	s.Mesh = v
 	return s
 }
 
-type DeleteRouteInput struct {
+type DescribeRouteInput struct {
 	_ struct{} `type:"structure"`
 
-	// The name of the service mesh to delete the route in.
+	// The name of the service mesh that the route resides in.
 	//
 	// MeshName is a required field
 	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
 
-	// The name of the route to delete.
+	// The name of the route to describe.
 	//
 	// RouteName is a required field
 	RouteName *string `location:"uri" locationName:"routeName" min:"1" type:"string" required:"true"`
 
-	// The name of the virtual router to delete the route in.
+	// The name of the virtual router that the route is associated with.
 	//
 	// VirtualRouterName is a required field
 	VirtualRouterName *string `location:"uri" locationName:"virtualRouterName" min:"1" type:"string" required:"true"`
 }
 
 // String returns the string representation
-func (s DeleteRouteInput) String() string {
+func (s DescribeRouteInput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s DeleteRouteInput) GoString() string {
+func (s DescribeRouteInput) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *DeleteRouteInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "DeleteRouteInput"}
+func (s *DescribeRouteInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "DescribeRouteInput"}
 	if s.MeshName == nil {
 		invalidParams.Add(request.NewErrParamRequired("MeshName"))
 	}
@@ -3481,75 +4496,75 @@ func (s *DeleteRouteInput) Validate() error {
 }
 
 // SetMeshName sets the MeshName field's value.
-func (s *DeleteRouteInput) SetMeshName(v string) *DeleteRouteInput {
+func (s *DescribeRouteInput) SetMeshName(v string) *DescribeRouteInput {
 	s.MeshName = &v
 	return s
 }
 
 // SetRouteName sets the RouteName field's value.
-func (s *DeleteRouteInput) SetRouteName(v string) *DeleteRouteInput {
+func (s *DescribeRouteInput) SetRouteName(v string) *DescribeRouteInput {
 	s.RouteName = &v
 	return s
 }
 
 // SetVirtualRouterName sets the VirtualRouterName field's value.
-func (s *DeleteRouteInput) SetVirtualRouterName(v string) *DeleteRouteInput {
+func (s *DescribeRouteInput) SetVirtualRouterName(v string) *DescribeRouteInput {
 	s.VirtualRouterName = &v
 	return s
 }
 
-type DeleteRouteOutput struct {
+type DescribeRouteOutput struct {
 	_ struct{} `type:"structure" payload:"Route"`
 
-	// The route that was deleted.
+	// The full description of your route.
 	//
 	// Route is a required field
 	Route *RouteData `locationName:"route" type:"structure" required:"true"`
 }
 
 // String returns the string representation
-func (s DeleteRouteOutput) String() string {
+func (s DescribeRouteOutput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s DeleteRouteOutput) GoString() string {
+func (s DescribeRouteOutput) GoString() string {
 	return s.String()
 }
 
 // SetRoute sets the Route field's value.
-func (s *DeleteRouteOutput) SetRoute(v *RouteData) *DeleteRouteOutput {
+func (s *DescribeRouteOutput) SetRoute(v *RouteData) *DescribeRouteOutput {
 	s.Route = v
 	return s
 }
 
-type DeleteVirtualNodeInput struct {
+type DescribeVirtualNodeInput struct {
 	_ struct{} `type:"structure"`
 
-	// The name of the service mesh to delete the virtual node in.
+	// The name of the service mesh that the virtual node resides in.
 	//
 	// MeshName is a required field
 	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
 
-	// The name of the virtual node to delete.
+	// The name of the virtual node to describe.
 	//
 	// VirtualNodeName is a required field
 	VirtualNodeName *string `location:"uri" locationName:"virtualNodeName" min:"1" type:"string" required:"true"`
 }
 
 // String returns the string representation
-func (s DeleteVirtualNodeInput) String() string {
+func (s DescribeVirtualNodeInput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s DeleteVirtualNodeInput) GoString() string {
+func (s DescribeVirtualNodeInput) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *DeleteVirtualNodeInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "DeleteVirtualNodeInput"}
+func (s *DescribeVirtualNodeInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "DescribeVirtualNodeInput"}
 	if s.MeshName == nil {
 		invalidParams.Add(request.NewErrParamRequired("MeshName"))
 	}
@@ -3570,69 +4585,69 @@ func (s *DeleteVirtualNodeInput) Validate() error {
 }
 
 // SetMeshName sets the MeshName field's value.
-func (s *DeleteVirtualNodeInput) SetMeshName(v string) *DeleteVirtualNodeInput {
+func (s *DescribeVirtualNodeInput) SetMeshName(v string) *DescribeVirtualNodeInput {
 	s.MeshName = &v
 	return s
 }
 
 // SetVirtualNodeName sets the VirtualNodeName field's value.
-func (s *DeleteVirtualNodeInput) SetVirtualNodeName(v string) *DeleteVirtualNodeInput {
+func (s *DescribeVirtualNodeInput) SetVirtualNodeName(v string) *DescribeVirtualNodeInput {
 	s.VirtualNodeName = &v
 	return s
 }
 
-type DeleteVirtualNodeOutput struct {
+type DescribeVirtualNodeOutput struct {
 	_ struct{} `type:"structure" payload:"VirtualNode"`
 
-	// The virtual node that was deleted.
+	// The full description of your virtual node.
 	//
 	// VirtualNode is a required field
 	VirtualNode *VirtualNodeData `locationName:"virtualNode" type:"structure" required:"true"`
 }
 
 // String returns the string representation
-func (s DeleteVirtualNodeOutput) String() string {
+func (s DescribeVirtualNodeOutput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s DeleteVirtualNodeOutput) GoString() string {
+func (s DescribeVirtualNodeOutput) GoString() string {
 	return s.String()
 }
 
 // SetVirtualNode sets the VirtualNode field's value.
-func (s *DeleteVirtualNodeOutput) SetVirtualNode(v *VirtualNodeData) *DeleteVirtualNodeOutput {
+func (s *DescribeVirtualNodeOutput) SetVirtualNode(v *VirtualNodeData) *DescribeVirtualNodeOutput {
 	s.VirtualNode = v
 	return s
 }
 
-type DeleteVirtualRouterInput struct {
+type DescribeVirtualRouterInput struct {
 	_ struct{} `type:"structure"`
 
-	// The name of the service mesh to delete the virtual router in.
+	// The name of the service mesh that the virtual router resides in.
 	//
 	// MeshName is a required field
 	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
 
-	// The name of the virtual router to delete.
+	// The name of the virtual router to describe.
 	//
 	// VirtualRouterName is a required field
 	VirtualRouterName *string `location:"uri" locationName:"virtualRouterName" min:"1" type:"string" required:"true"`
 }
 
 // String returns the string representation
-func (s DeleteVirtualRouterInput) String() string {
+func (s DescribeVirtualRouterInput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s DeleteVirtualRouterInput) GoString() string {
+func (s DescribeVirtualRouterInput) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *DeleteVirtualRouterInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "DeleteVirtualRouterInput"}
+func (s *DescribeVirtualRouterInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "DescribeVirtualRouterInput"}
 	if s.MeshName == nil {
 		invalidParams.Add(request.NewErrParamRequired("MeshName"))
 	}
@@ -3653,69 +4668,69 @@ func (s *DeleteVirtualRouterInput) Validate() error {
 }
 
 // SetMeshName sets the MeshName field's value.
-func (s *DeleteVirtualRouterInput) SetMeshName(v string) *DeleteVirtualRouterInput {
+func (s *DescribeVirtualRouterInput) SetMeshName(v string) *DescribeVirtualRouterInput {
 	s.MeshName = &v
 	return s
 }
 
 // SetVirtualRouterName sets the VirtualRouterName field's value.
-func (s *DeleteVirtualRouterInput) SetVirtualRouterName(v string) *DeleteVirtualRouterInput {
+func (s *DescribeVirtualRouterInput) SetVirtualRouterName(v string) *DescribeVirtualRouterInput {
 	s.VirtualRouterName = &v
 	return s
 }
 
-type DeleteVirtualRouterOutput struct {
+type DescribeVirtualRouterOutput struct {
 	_ struct{} `type:"structure" payload:"VirtualRouter"`
 
-	// The virtual router that was deleted.
+	// The full description of your virtual router.
 	//
 	// VirtualRouter is a required field
 	VirtualRouter *VirtualRouterData `locationName:"virtualRouter" type:"structure" required:"true"`
 }
 
 // String returns the string representation
-func (s DeleteVirtualRouterOutput) String() string {
+func (s DescribeVirtualRouterOutput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s DeleteVirtualRouterOutput) GoString() string {
+func (s DescribeVirtualRouterOutput) GoString() string {
 	return s.String()
 }
 
 // SetVirtualRouter sets the VirtualRouter field's value.
-func (s *DeleteVirtualRouterOutput) SetVirtualRouter(v *VirtualRouterData) *DeleteVirtualRouterOutput {
+func (s *DescribeVirtualRouterOutput) SetVirtualRouter(v *VirtualRouterData) *DescribeVirtualRouterOutput {
 	s.VirtualRouter = v
 	return s
 }
 
-type DeleteVirtualServiceInput struct {
+type DescribeVirtualServiceInput struct {
 	_ struct{} `type:"structure"`
 
-	// The name of the service mesh to delete the virtual service in.
+	// The name of the service mesh that the virtual service resides in.
 	//
 	// MeshName is a required field
 	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
 
-	// The name of the virtual service to delete.
+	// The name of the virtual service to describe.
 	//
 	// VirtualServiceName is a required field
 	VirtualServiceName *string `location:"uri" locationName:"virtualServiceName" type:"string" required:"true"`
 }
 
 // String returns the string representation
-func (s DeleteVirtualServiceInput) String() string {
+func (s DescribeVirtualServiceInput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s DeleteVirtualServiceInput) GoString() string {
+func (s DescribeVirtualServiceInput) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *DeleteVirtualServiceInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "DeleteVirtualServiceInput"}
+func (s *DescribeVirtualServiceInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "DescribeVirtualServiceInput"}
 	if s.MeshName == nil {
 		invalidParams.Add(request.NewErrParamRequired("MeshName"))
 	}
@@ -3736,69 +4751,68 @@ func (s *DeleteVirtualServiceInput) Validate() error {
 }
 
 // SetMeshName sets the MeshName field's value.
-func (s *DeleteVirtualServiceInput) SetMeshName(v string) *DeleteVirtualServiceInput {
+func (s *DescribeVirtualServiceInput) SetMeshName(v string) *DescribeVirtualServiceInput {
 	s.MeshName = &v
 	return s
 }
 
 // SetVirtualServiceName sets the VirtualServiceName field's value.
-func (s *DeleteVirtualServiceInput) SetVirtualServiceName(v string) *DeleteVirtualServiceInput {
+func (s *DescribeVirtualServiceInput) SetVirtualServiceName(v string) *DescribeVirtualServiceInput {
 	s.VirtualServiceName = &v
 	return s
 }
 
-type DeleteVirtualServiceOutput struct {
+type DescribeVirtualServiceOutput struct {
 	_ struct{} `type:"structure" payload:"VirtualService"`
 
-	// The virtual service that was deleted.
+	// The full description of your virtual service.
 	//
 	// VirtualService is a required field
 	VirtualService *VirtualServiceData `locationName:"virtualService" type:"structure" required:"true"`
 }
 
 // String returns the string representation
-func (s DeleteVirtualServiceOutput) String() string {
+func (s DescribeVirtualServiceOutput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s DeleteVirtualServiceOutput) GoString() string {
+func (s DescribeVirtualServiceOutput) GoString() string {
 	return s.String()
 }
 
 // SetVirtualService sets the VirtualService field's value.
-func (s *DeleteVirtualServiceOutput) SetVirtualService(v *VirtualServiceData) *DeleteVirtualServiceOutput {
+func (s *DescribeVirtualServiceOutput) SetVirtualService(v *VirtualServiceData) *DescribeVirtualServiceOutput {
 	s.VirtualService = v
 	return s
 }
 
-type DescribeMeshInput struct {
+// An object representing the DNS service discovery information for your virtual
+// node.
+type DnsServiceDiscovery struct {
 	_ struct{} `type:"structure"`
 
-	// The name of the service mesh to describe.
+	// Specifies the DNS service discovery hostname for the virtual node.
 	//
-	// MeshName is a required field
-	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
+	// Hostname is a required field
+	Hostname *string `locationName:"hostname" type:"string" required:"true"`
 }
 
 // String returns the string representation
-func (s DescribeMeshInput) String() string {
+func (s DnsServiceDiscovery) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s DescribeMeshInput) GoString() string {
+func (s DnsServiceDiscovery) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *DescribeMeshInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "DescribeMeshInput"}
-	if s.MeshName == nil {
-		invalidParams.Add(request.NewErrParamRequired("MeshName"))
-	}
-	if s.MeshName != nil && len(*s.MeshName) < 1 {
-		invalidParams.Add(request.NewErrParamMinLen("MeshName", 1))
+func (s *DnsServiceDiscovery) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "DnsServiceDiscovery"}
+	if s.Hostname == nil {
+		invalidParams.Add(request.NewErrParamRequired("Hostname"))
 	}
 
 	if invalidParams.Len() > 0 {
@@ -3807,175 +4821,188 @@ func (s *DescribeMeshInput) Validate() error {
 	return nil
 }
 
-// SetMeshName sets the MeshName field's value.
-func (s *DescribeMeshInput) SetMeshName(v string) *DescribeMeshInput {
-	s.MeshName = &v
-	return s
-}
-
-type DescribeMeshOutput struct {
-	_ struct{} `type:"structure" payload:"Mesh"`
-
-	// The full description of your service mesh.
-	//
-	// Mesh is a required field
-	Mesh *MeshData `locationName:"mesh" type:"structure" required:"true"`
-}
-
-// String returns the string representation
-func (s DescribeMeshOutput) String() string {
-	return awsutil.Prettify(s)
-}
-
-// GoString returns the string representation
-func (s DescribeMeshOutput) GoString() string {
-	return s.String()
-}
-
-// SetMesh sets the Mesh field's value.
-func (s *DescribeMeshOutput) SetMesh(v *MeshData) *DescribeMeshOutput {
-	s.Mesh = v
+// SetHostname sets the Hostname field's value.
+func (s *DnsServiceDiscovery) SetHostname(v string) *DnsServiceDiscovery {
+	s.Hostname = &v
 	return s
 }
 
-type DescribeRouteInput struct {
+// An object representing the egress filter rules for a service mesh.
+type EgressFilter struct {
 	_ struct{} `type:"structure"`
 
-	// The name of the service mesh that the route resides in.
-	//
-	// MeshName is a required field
-	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
-
-	// The name of the route to describe.
-	//
-	// RouteName is a required field
-	RouteName *string `location:"uri" locationName:"routeName" min:"1" type:"string" required:"true"`
-
-	// The name of the virtual router that the route is associated with.
+	// The egress filter type. By default, the type is DROP_ALL, which allows egress
+	// only from virtual nodes to other defined resources in the service mesh (and
+	// any traffic to *.amazonaws.com for AWS API calls). You can set the egress
+	// filter type to ALLOW_ALL to allow egress to any endpoint inside or outside
+	// of the service mesh.
 	//
-	// VirtualRouterName is a required field
-	VirtualRouterName *string `location:"uri" locationName:"virtualRouterName" min:"1" type:"string" required:"true"`
+	// Type is a required field
+	Type *string `locationName:"type" type:"string" required:"true" enum:"EgressFilterType"`
 }
 
 // String returns the string representation
-func (s DescribeRouteInput) String() string {
+func (s EgressFilter) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s DescribeRouteInput) GoString() string {
+func (s EgressFilter) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *DescribeRouteInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "DescribeRouteInput"}
-	if s.MeshName == nil {
-		invalidParams.Add(request.NewErrParamRequired("MeshName"))
-	}
-	if s.MeshName != nil && len(*s.MeshName) < 1 {
-		invalidParams.Add(request.NewErrParamMinLen("MeshName", 1))
-	}
-	if s.RouteName == nil {
-		invalidParams.Add(request.NewErrParamRequired("RouteName"))
-	}
-	if s.RouteName != nil && len(*s.RouteName) < 1 {
-		invalidParams.Add(request.NewErrParamMinLen("RouteName", 1))
-	}
-	if s.VirtualRouterName == nil {
-		invalidParams.Add(request.NewErrParamRequired("VirtualRouterName"))
-	}
-	if s.VirtualRouterName != nil && len(*s.VirtualRouterName) < 1 {
-		invalidParams.Add(request.NewErrParamMinLen("VirtualRouterName", 1))
+func (s *EgressFilter) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "EgressFilter"}
+	if s.Type == nil {
+		invalidParams.Add(request.NewErrParamRequired("Type"))
 	}
 
 	if invalidParams.Len() > 0 {
 		return invalidParams
 	}
-	return nil
-}
-
-// SetMeshName sets the MeshName field's value.
-func (s *DescribeRouteInput) SetMeshName(v string) *DescribeRouteInput {
-	s.MeshName = &v
-	return s
-}
-
-// SetRouteName sets the RouteName field's value.
-func (s *DescribeRouteInput) SetRouteName(v string) *DescribeRouteInput {
-	s.RouteName = &v
-	return s
+	return nil
 }
 
-// SetVirtualRouterName sets the VirtualRouterName field's value.
-func (s *DescribeRouteInput) SetVirtualRouterName(v string) *DescribeRouteInput {
-	s.VirtualRouterName = &v
+// SetType sets the Type field's value.
+func (s *EgressFilter) SetType(v string) *EgressFilter {
+	s.Type = &v
 	return s
 }
 
-type DescribeRouteOutput struct {
-	_ struct{} `type:"structure" payload:"Route"`
+// An object representing an access log file.
+type FileAccessLog struct {
+	_ struct{} `type:"structure"`
 
-	// The full description of your route.
+	// The file path to write access logs to. You can use /dev/stdout to send access
+	// logs to standard out and configure your Envoy container to use a log driver,
+	// such as awslogs, to export the access logs to a log storage service such
+	// as Amazon CloudWatch Logs. You can also specify a path in the Envoy container's
+	// file system to write the files to disk.
 	//
-	// Route is a required field
-	Route *RouteData `locationName:"route" type:"structure" required:"true"`
+	// The Envoy process must have write permissions to the path that you specify
+	// here. Otherwise, Envoy fails to bootstrap properly.
+	//
+	// Path is a required field
+	Path *string `locationName:"path" min:"1" type:"string" required:"true"`
 }
 
 // String returns the string representation
-func (s DescribeRouteOutput) String() string {
+func (s FileAccessLog) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s DescribeRouteOutput) GoString() string {
+func (s FileAccessLog) GoString() string {
 	return s.String()
 }
 
-// SetRoute sets the Route field's value.
-func (s *DescribeRouteOutput) SetRoute(v *RouteData) *DescribeRouteOutput {
-	s.Route = v
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *FileAccessLog) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "FileAccessLog"}
+	if s.Path == nil {
+		invalidParams.Add(request.NewErrParamRequired("Path"))
+	}
+	if s.Path != nil && len(*s.Path) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("Path", 1))
+	}
+
+	if invalidParams.Len() > 0 {
+		return invalidParams
+	}
+	return nil
+}
+
+// SetPath sets the Path field's value.
+func (s *FileAccessLog) SetPath(v string) *FileAccessLog {
+	s.Path = &v
 	return s
 }
 
-type DescribeVirtualNodeInput struct {
+// An object representing the health check policy for a virtual node's listener.
+type HealthCheckPolicy struct {
 	_ struct{} `type:"structure"`
 
-	// The name of the service mesh that the virtual node resides in.
+	// The number of consecutive successful health checks that must occur before
+	// declaring listener healthy.
 	//
-	// MeshName is a required field
-	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
+	// HealthyThreshold is a required field
+	HealthyThreshold *int64 `locationName:"healthyThreshold" min:"2" type:"integer" required:"true"`
 
-	// The name of the virtual node to describe.
+	// The time period in milliseconds between each health check execution.
 	//
-	// VirtualNodeName is a required field
-	VirtualNodeName *string `location:"uri" locationName:"virtualNodeName" min:"1" type:"string" required:"true"`
+	// IntervalMillis is a required field
+	IntervalMillis *int64 `locationName:"intervalMillis" min:"5000" type:"long" required:"true"`
+
+	// The destination path for the health check request. This is required only
+	// if the specified protocol is HTTP. If the protocol is TCP, this parameter
+	// is ignored.
+	Path *string `locationName:"path" type:"string"`
+
+	// The destination port for the health check request. This port must match the
+	// port defined in the PortMapping for the listener.
+	Port *int64 `locationName:"port" min:"1" type:"integer"`
+
+	// The protocol for the health check request.
+	//
+	// Protocol is a required field
+	Protocol *string `locationName:"protocol" type:"string" required:"true" enum:"PortProtocol"`
+
+	// The amount of time to wait when receiving a response from the health check,
+	// in milliseconds.
+	//
+	// TimeoutMillis is a required field
+	TimeoutMillis *int64 `locationName:"timeoutMillis" min:"2000" type:"long" required:"true"`
+
+	// The number of consecutive failed health checks that must occur before declaring
+	// a virtual node unhealthy.
+	//
+	// UnhealthyThreshold is a required field
+	UnhealthyThreshold *int64 `locationName:"unhealthyThreshold" min:"2" type:"integer" required:"true"`
 }
 
 // String returns the string representation
-func (s DescribeVirtualNodeInput) String() string {
+func (s HealthCheckPolicy) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s DescribeVirtualNodeInput) GoString() string {
+func (s HealthCheckPolicy) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *DescribeVirtualNodeInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "DescribeVirtualNodeInput"}
-	if s.MeshName == nil {
-		invalidParams.Add(request.NewErrParamRequired("MeshName"))
+func (s *HealthCheckPolicy) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "HealthCheckPolicy"}
+	if s.HealthyThreshold == nil {
+		invalidParams.Add(request.NewErrParamRequired("HealthyThreshold"))
 	}
-	if s.MeshName != nil && len(*s.MeshName) < 1 {
-		invalidParams.Add(request.NewErrParamMinLen("MeshName", 1))
+	if s.HealthyThreshold != nil && *s.HealthyThreshold < 2 {
+		invalidParams.Add(request.NewErrParamMinValue("HealthyThreshold", 2))
 	}
-	if s.VirtualNodeName == nil {
-		invalidParams.Add(request.NewErrParamRequired("VirtualNodeName"))
+	if s.IntervalMillis == nil {
+		invalidParams.Add(request.NewErrParamRequired("IntervalMillis"))
 	}
-	if s.VirtualNodeName != nil && len(*s.VirtualNodeName) < 1 {
-		invalidParams.Add(request.NewErrParamMinLen("VirtualNodeName", 1))
+	if s.IntervalMillis != nil && *s.IntervalMillis < 5000 {
+		invalidParams.Add(request.NewErrParamMinValue("IntervalMillis", 5000))
+	}
+	if s.Port != nil && *s.Port < 1 {
+		invalidParams.Add(request.NewErrParamMinValue("Port", 1))
+	}
+	if s.Protocol == nil {
+		invalidParams.Add(request.NewErrParamRequired("Protocol"))
+	}
+	if s.TimeoutMillis == nil {
+		invalidParams.Add(request.NewErrParamRequired("TimeoutMillis"))
+	}
+	if s.TimeoutMillis != nil && *s.TimeoutMillis < 2000 {
+		invalidParams.Add(request.NewErrParamMinValue("TimeoutMillis", 2000))
+	}
+	if s.UnhealthyThreshold == nil {
+		invalidParams.Add(request.NewErrParamRequired("UnhealthyThreshold"))
+	}
+	if s.UnhealthyThreshold != nil && *s.UnhealthyThreshold < 2 {
+		invalidParams.Add(request.NewErrParamMinValue("UnhealthyThreshold", 2))
 	}
 
 	if invalidParams.Len() > 0 {
@@ -3984,81 +5011,91 @@ func (s *DescribeVirtualNodeInput) Validate() error {
 	return nil
 }
 
-// SetMeshName sets the MeshName field's value.
-func (s *DescribeVirtualNodeInput) SetMeshName(v string) *DescribeVirtualNodeInput {
-	s.MeshName = &v
+// SetHealthyThreshold sets the HealthyThreshold field's value.
+func (s *HealthCheckPolicy) SetHealthyThreshold(v int64) *HealthCheckPolicy {
+	s.HealthyThreshold = &v
 	return s
 }
 
-// SetVirtualNodeName sets the VirtualNodeName field's value.
-func (s *DescribeVirtualNodeInput) SetVirtualNodeName(v string) *DescribeVirtualNodeInput {
-	s.VirtualNodeName = &v
+// SetIntervalMillis sets the IntervalMillis field's value.
+func (s *HealthCheckPolicy) SetIntervalMillis(v int64) *HealthCheckPolicy {
+	s.IntervalMillis = &v
 	return s
 }
 
-type DescribeVirtualNodeOutput struct {
-	_ struct{} `type:"structure" payload:"VirtualNode"`
+// SetPath sets the Path field's value.
+func (s *HealthCheckPolicy) SetPath(v string) *HealthCheckPolicy {
+	s.Path = &v
+	return s
+}
 
-	// The full description of your virtual node.
-	//
-	// VirtualNode is a required field
-	VirtualNode *VirtualNodeData `locationName:"virtualNode" type:"structure" required:"true"`
+// SetPort sets the Port field's value.
+func (s *HealthCheckPolicy) SetPort(v int64) *HealthCheckPolicy {
+	s.Port = &v
+	return s
 }
 
-// String returns the string representation
-func (s DescribeVirtualNodeOutput) String() string {
-	return awsutil.Prettify(s)
+// SetProtocol sets the Protocol field's value.
+func (s *HealthCheckPolicy) SetProtocol(v string) *HealthCheckPolicy {
+	s.Protocol = &v
+	return s
 }
 
-// GoString returns the string representation
-func (s DescribeVirtualNodeOutput) GoString() string {
-	return s.String()
+// SetTimeoutMillis sets the TimeoutMillis field's value.
+func (s *HealthCheckPolicy) SetTimeoutMillis(v int64) *HealthCheckPolicy {
+	s.TimeoutMillis = &v
+	return s
 }
 
-// SetVirtualNode sets the VirtualNode field's value.
-func (s *DescribeVirtualNodeOutput) SetVirtualNode(v *VirtualNodeData) *DescribeVirtualNodeOutput {
-	s.VirtualNode = v
+// SetUnhealthyThreshold sets the UnhealthyThreshold field's value.
+func (s *HealthCheckPolicy) SetUnhealthyThreshold(v int64) *HealthCheckPolicy {
+	s.UnhealthyThreshold = &v
 	return s
 }
 
-type DescribeVirtualRouterInput struct {
+// An object representing the HTTP routing specification for a route.
+type HttpRoute struct {
 	_ struct{} `type:"structure"`
 
-	// The name of the service mesh that the virtual router resides in.
+	// The action to take if a match is determined.
 	//
-	// MeshName is a required field
-	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
+	// Action is a required field
+	Action *HttpRouteAction `locationName:"action" type:"structure" required:"true"`
 
-	// The name of the virtual router to describe.
+	// The criteria for determining an HTTP request match.
 	//
-	// VirtualRouterName is a required field
-	VirtualRouterName *string `location:"uri" locationName:"virtualRouterName" min:"1" type:"string" required:"true"`
+	// Match is a required field
+	Match *HttpRouteMatch `locationName:"match" type:"structure" required:"true"`
 }
 
 // String returns the string representation
-func (s DescribeVirtualRouterInput) String() string {
+func (s HttpRoute) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s DescribeVirtualRouterInput) GoString() string {
+func (s HttpRoute) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *DescribeVirtualRouterInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "DescribeVirtualRouterInput"}
-	if s.MeshName == nil {
-		invalidParams.Add(request.NewErrParamRequired("MeshName"))
+func (s *HttpRoute) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "HttpRoute"}
+	if s.Action == nil {
+		invalidParams.Add(request.NewErrParamRequired("Action"))
 	}
-	if s.MeshName != nil && len(*s.MeshName) < 1 {
-		invalidParams.Add(request.NewErrParamMinLen("MeshName", 1))
+	if s.Match == nil {
+		invalidParams.Add(request.NewErrParamRequired("Match"))
 	}
-	if s.VirtualRouterName == nil {
-		invalidParams.Add(request.NewErrParamRequired("VirtualRouterName"))
+	if s.Action != nil {
+		if err := s.Action.Validate(); err != nil {
+			invalidParams.AddNested("Action", err.(request.ErrInvalidParams))
+		}
 	}
-	if s.VirtualRouterName != nil && len(*s.VirtualRouterName) < 1 {
-		invalidParams.Add(request.NewErrParamMinLen("VirtualRouterName", 1))
+	if s.Match != nil {
+		if err := s.Match.Validate(); err != nil {
+			invalidParams.AddNested("Match", err.(request.ErrInvalidParams))
+		}
 	}
 
 	if invalidParams.Len() > 0 {
@@ -4067,81 +5104,103 @@ func (s *DescribeVirtualRouterInput) Validate() error {
 	return nil
 }
 
-// SetMeshName sets the MeshName field's value.
-func (s *DescribeVirtualRouterInput) SetMeshName(v string) *DescribeVirtualRouterInput {
-	s.MeshName = &v
+// SetAction sets the Action field's value.
+func (s *HttpRoute) SetAction(v *HttpRouteAction) *HttpRoute {
+	s.Action = v
 	return s
 }
 
-// SetVirtualRouterName sets the VirtualRouterName field's value.
-func (s *DescribeVirtualRouterInput) SetVirtualRouterName(v string) *DescribeVirtualRouterInput {
-	s.VirtualRouterName = &v
+// SetMatch sets the Match field's value.
+func (s *HttpRoute) SetMatch(v *HttpRouteMatch) *HttpRoute {
+	s.Match = v
 	return s
 }
 
-type DescribeVirtualRouterOutput struct {
-	_ struct{} `type:"structure" payload:"VirtualRouter"`
+// An object representing the traffic distribution requirements for matched
+// HTTP requests.
+type HttpRouteAction struct {
+	_ struct{} `type:"structure"`
 
-	// The full description of your virtual router.
+	// The targets that traffic is routed to when a request matches the route. You
+	// can specify one or more targets and their relative weights to distribute
+	// traffic with.
 	//
-	// VirtualRouter is a required field
-	VirtualRouter *VirtualRouterData `locationName:"virtualRouter" type:"structure" required:"true"`
+	// WeightedTargets is a required field
+	WeightedTargets []*WeightedTarget `locationName:"weightedTargets" min:"1" type:"list" required:"true"`
 }
 
 // String returns the string representation
-func (s DescribeVirtualRouterOutput) String() string {
+func (s HttpRouteAction) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s DescribeVirtualRouterOutput) GoString() string {
+func (s HttpRouteAction) GoString() string {
 	return s.String()
 }
 
-// SetVirtualRouter sets the VirtualRouter field's value.
-func (s *DescribeVirtualRouterOutput) SetVirtualRouter(v *VirtualRouterData) *DescribeVirtualRouterOutput {
-	s.VirtualRouter = v
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *HttpRouteAction) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "HttpRouteAction"}
+	if s.WeightedTargets == nil {
+		invalidParams.Add(request.NewErrParamRequired("WeightedTargets"))
+	}
+	if s.WeightedTargets != nil && len(s.WeightedTargets) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("WeightedTargets", 1))
+	}
+	if s.WeightedTargets != nil {
+		for i, v := range s.WeightedTargets {
+			if v == nil {
+				continue
+			}
+			if err := v.Validate(); err != nil {
+				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "WeightedTargets", i), err.(request.ErrInvalidParams))
+			}
+		}
+	}
+
+	if invalidParams.Len() > 0 {
+		return invalidParams
+	}
+	return nil
+}
+
+// SetWeightedTargets sets the WeightedTargets field's value.
+func (s *HttpRouteAction) SetWeightedTargets(v []*WeightedTarget) *HttpRouteAction {
+	s.WeightedTargets = v
 	return s
 }
 
-type DescribeVirtualServiceInput struct {
+// An object representing the requirements for a route to match HTTP requests
+// for a virtual router.
+type HttpRouteMatch struct {
 	_ struct{} `type:"structure"`
 
-	// The name of the service mesh that the virtual service resides in.
-	//
-	// MeshName is a required field
-	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
-
-	// The name of the virtual service to describe.
+	// Specifies the path to match requests with. This parameter must always start
+	// with /, which by itself matches all requests to the virtual service name.
+	// You can also match for path-based routing of requests. For example, if your
+	// virtual service name is my-service.local and you want the route to match
+	// requests to my-service.local/metrics, your prefix should be /metrics.
 	//
-	// VirtualServiceName is a required field
-	VirtualServiceName *string `location:"uri" locationName:"virtualServiceName" type:"string" required:"true"`
+	// Prefix is a required field
+	Prefix *string `locationName:"prefix" type:"string" required:"true"`
 }
 
 // String returns the string representation
-func (s DescribeVirtualServiceInput) String() string {
+func (s HttpRouteMatch) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s DescribeVirtualServiceInput) GoString() string {
+func (s HttpRouteMatch) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *DescribeVirtualServiceInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "DescribeVirtualServiceInput"}
-	if s.MeshName == nil {
-		invalidParams.Add(request.NewErrParamRequired("MeshName"))
-	}
-	if s.MeshName != nil && len(*s.MeshName) < 1 {
-		invalidParams.Add(request.NewErrParamMinLen("MeshName", 1))
-	}
-	if s.VirtualServiceName == nil {
-		invalidParams.Add(request.NewErrParamRequired("VirtualServiceName"))
-	}
-	if s.VirtualServiceName != nil && len(*s.VirtualServiceName) < 1 {
-		invalidParams.Add(request.NewErrParamMinLen("VirtualServiceName", 1))
+func (s *HttpRouteMatch) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "HttpRouteMatch"}
+	if s.Prefix == nil {
+		invalidParams.Add(request.NewErrParamRequired("Prefix"))
 	}
 
 	if invalidParams.Len() > 0 {
@@ -4150,167 +5209,162 @@ func (s *DescribeVirtualServiceInput) Validate() error {
 	return nil
 }
 
-// SetMeshName sets the MeshName field's value.
-func (s *DescribeVirtualServiceInput) SetMeshName(v string) *DescribeVirtualServiceInput {
-	s.MeshName = &v
+// SetPrefix sets the Prefix field's value.
+func (s *HttpRouteMatch) SetPrefix(v string) *HttpRouteMatch {
+	s.Prefix = &v
 	return s
 }
 
-// SetVirtualServiceName sets the VirtualServiceName field's value.
-func (s *DescribeVirtualServiceInput) SetVirtualServiceName(v string) *DescribeVirtualServiceInput {
-	s.VirtualServiceName = &v
-	return s
-}
+type ListMeshesInput struct {
+	_ struct{} `type:"structure"`
 
-type DescribeVirtualServiceOutput struct {
-	_ struct{} `type:"structure" payload:"VirtualService"`
+	// The maximum number of results returned by ListMeshes in paginated output.
+	// When you use this parameter, ListMeshes returns only limit results in a single
+	// page along with a nextToken response element. You can see the remaining results
+	// of the initial request by sending another ListMeshes request with the returned
+	// nextToken value. This value can be between 1 and 100. If you don't use this
+	// parameter, ListMeshes returns up to 100 results and a nextToken value if
+	// applicable.
+	Limit *int64 `location:"querystring" locationName:"limit" min:"1" type:"integer"`
 
-	// The full description of your virtual service.
+	// The nextToken value returned from a previous paginated ListMeshes request
+	// where limit 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.
 	//
-	// VirtualService is a required field
-	VirtualService *VirtualServiceData `locationName:"virtualService" type:"structure" required:"true"`
+	// This token should be treated as an opaque identifier that is used only to
+	// retrieve the next items in a list and not for other programmatic purposes.
+	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
 }
 
 // String returns the string representation
-func (s DescribeVirtualServiceOutput) String() string {
+func (s ListMeshesInput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s DescribeVirtualServiceOutput) GoString() string {
+func (s ListMeshesInput) GoString() string {
 	return s.String()
 }
 
-// SetVirtualService sets the VirtualService field's value.
-func (s *DescribeVirtualServiceOutput) SetVirtualService(v *VirtualServiceData) *DescribeVirtualServiceOutput {
-	s.VirtualService = v
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *ListMeshesInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "ListMeshesInput"}
+	if s.Limit != nil && *s.Limit < 1 {
+		invalidParams.Add(request.NewErrParamMinValue("Limit", 1))
+	}
+
+	if invalidParams.Len() > 0 {
+		return invalidParams
+	}
+	return nil
+}
+
+// SetLimit sets the Limit field's value.
+func (s *ListMeshesInput) SetLimit(v int64) *ListMeshesInput {
+	s.Limit = &v
 	return s
 }
 
-// An object representing the DNS service discovery information for your virtual
-// node.
-type DnsServiceDiscovery struct {
+// SetNextToken sets the NextToken field's value.
+func (s *ListMeshesInput) SetNextToken(v string) *ListMeshesInput {
+	s.NextToken = &v
+	return s
+}
+
+type ListMeshesOutput struct {
 	_ struct{} `type:"structure"`
 
-	// Specifies the DNS service discovery hostname for the virtual node.
+	// The list of existing service meshes.
 	//
-	// Hostname is a required field
-	Hostname *string `locationName:"hostname" type:"string" required:"true"`
+	// Meshes is a required field
+	Meshes []*MeshRef `locationName:"meshes" type:"list" required:"true"`
+
+	// The nextToken value to include in a future ListMeshes request. When the results
+	// of a ListMeshes request exceed limit, you can use this value 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
-func (s DnsServiceDiscovery) String() string {
+func (s ListMeshesOutput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s DnsServiceDiscovery) GoString() string {
+func (s ListMeshesOutput) GoString() string {
 	return s.String()
 }
 
-// Validate inspects the fields of the type to determine if they are valid.
-func (s *DnsServiceDiscovery) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "DnsServiceDiscovery"}
-	if s.Hostname == nil {
-		invalidParams.Add(request.NewErrParamRequired("Hostname"))
-	}
-
-	if invalidParams.Len() > 0 {
-		return invalidParams
-	}
-	return nil
+// SetMeshes sets the Meshes field's value.
+func (s *ListMeshesOutput) SetMeshes(v []*MeshRef) *ListMeshesOutput {
+	s.Meshes = v
+	return s
 }
 
-// SetHostname sets the Hostname field's value.
-func (s *DnsServiceDiscovery) SetHostname(v string) *DnsServiceDiscovery {
-	s.Hostname = &v
+// SetNextToken sets the NextToken field's value.
+func (s *ListMeshesOutput) SetNextToken(v string) *ListMeshesOutput {
+	s.NextToken = &v
 	return s
 }
 
-// An object representing the health check policy for a virtual node's listener.
-type HealthCheckPolicy struct {
+type ListRoutesInput struct {
 	_ struct{} `type:"structure"`
 
-	// The number of consecutive successful health checks that must occur before
-	// declaring listener healthy.
-	//
-	// HealthyThreshold is a required field
-	HealthyThreshold *int64 `locationName:"healthyThreshold" min:"2" type:"integer" required:"true"`
-
-	// The time period in milliseconds between each health check execution.
-	//
-	// IntervalMillis is a required field
-	IntervalMillis *int64 `locationName:"intervalMillis" min:"5000" type:"long" required:"true"`
-
-	// The destination path for the health check request. This is required only
-	// if the specified protocol is HTTP. If the protocol is TCP, this parameter
-	// is ignored.
-	Path *string `locationName:"path" type:"string"`
-
-	// The destination port for the health check request. This port must match the
-	// port defined in the PortMapping for the listener.
-	Port *int64 `locationName:"port" min:"1" type:"integer"`
+	// The maximum number of results returned by ListRoutes in paginated output.
+	// When you use this parameter, ListRoutes returns only limit results in a single
+	// page along with a nextToken response element. You can see the remaining results
+	// of the initial request by sending another ListRoutes request with the returned
+	// nextToken value. This value can be between 1 and 100. If you don't use this
+	// parameter, ListRoutes returns up to 100 results and a nextToken value if
+	// applicable.
+	Limit *int64 `location:"querystring" locationName:"limit" min:"1" type:"integer"`
 
-	// The protocol for the health check request.
+	// The name of the service mesh to list routes in.
 	//
-	// Protocol is a required field
-	Protocol *string `locationName:"protocol" type:"string" required:"true" enum:"PortProtocol"`
+	// MeshName is a required field
+	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
 
-	// The amount of time to wait when receiving a response from the health check,
-	// in milliseconds.
-	//
-	// TimeoutMillis is a required field
-	TimeoutMillis *int64 `locationName:"timeoutMillis" min:"2000" type:"long" required:"true"`
+	// The nextToken value returned from a previous paginated ListRoutes request
+	// where limit 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.
+	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
 
-	// The number of consecutive failed health checks that must occur before declaring
-	// a virtual node unhealthy.
+	// The name of the virtual router to list routes in.
 	//
-	// UnhealthyThreshold is a required field
-	UnhealthyThreshold *int64 `locationName:"unhealthyThreshold" min:"2" type:"integer" required:"true"`
+	// VirtualRouterName is a required field
+	VirtualRouterName *string `location:"uri" locationName:"virtualRouterName" min:"1" type:"string" required:"true"`
 }
 
 // String returns the string representation
-func (s HealthCheckPolicy) String() string {
+func (s ListRoutesInput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s HealthCheckPolicy) GoString() string {
+func (s ListRoutesInput) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *HealthCheckPolicy) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "HealthCheckPolicy"}
-	if s.HealthyThreshold == nil {
-		invalidParams.Add(request.NewErrParamRequired("HealthyThreshold"))
-	}
-	if s.HealthyThreshold != nil && *s.HealthyThreshold < 2 {
-		invalidParams.Add(request.NewErrParamMinValue("HealthyThreshold", 2))
-	}
-	if s.IntervalMillis == nil {
-		invalidParams.Add(request.NewErrParamRequired("IntervalMillis"))
-	}
-	if s.IntervalMillis != nil && *s.IntervalMillis < 5000 {
-		invalidParams.Add(request.NewErrParamMinValue("IntervalMillis", 5000))
-	}
-	if s.Port != nil && *s.Port < 1 {
-		invalidParams.Add(request.NewErrParamMinValue("Port", 1))
-	}
-	if s.Protocol == nil {
-		invalidParams.Add(request.NewErrParamRequired("Protocol"))
+func (s *ListRoutesInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "ListRoutesInput"}
+	if s.Limit != nil && *s.Limit < 1 {
+		invalidParams.Add(request.NewErrParamMinValue("Limit", 1))
 	}
-	if s.TimeoutMillis == nil {
-		invalidParams.Add(request.NewErrParamRequired("TimeoutMillis"))
+	if s.MeshName == nil {
+		invalidParams.Add(request.NewErrParamRequired("MeshName"))
 	}
-	if s.TimeoutMillis != nil && *s.TimeoutMillis < 2000 {
-		invalidParams.Add(request.NewErrParamMinValue("TimeoutMillis", 2000))
+	if s.MeshName != nil && len(*s.MeshName) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("MeshName", 1))
 	}
-	if s.UnhealthyThreshold == nil {
-		invalidParams.Add(request.NewErrParamRequired("UnhealthyThreshold"))
+	if s.VirtualRouterName == nil {
+		invalidParams.Add(request.NewErrParamRequired("VirtualRouterName"))
 	}
-	if s.UnhealthyThreshold != nil && *s.UnhealthyThreshold < 2 {
-		invalidParams.Add(request.NewErrParamMinValue("UnhealthyThreshold", 2))
+	if s.VirtualRouterName != nil && len(*s.VirtualRouterName) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("VirtualRouterName", 1))
 	}
 
 	if invalidParams.Len() > 0 {
@@ -4319,149 +5373,110 @@ func (s *HealthCheckPolicy) Validate() error {
 	return nil
 }
 
-// SetHealthyThreshold sets the HealthyThreshold field's value.
-func (s *HealthCheckPolicy) SetHealthyThreshold(v int64) *HealthCheckPolicy {
-	s.HealthyThreshold = &v
-	return s
-}
-
-// SetIntervalMillis sets the IntervalMillis field's value.
-func (s *HealthCheckPolicy) SetIntervalMillis(v int64) *HealthCheckPolicy {
-	s.IntervalMillis = &v
-	return s
-}
-
-// SetPath sets the Path field's value.
-func (s *HealthCheckPolicy) SetPath(v string) *HealthCheckPolicy {
-	s.Path = &v
-	return s
-}
-
-// SetPort sets the Port field's value.
-func (s *HealthCheckPolicy) SetPort(v int64) *HealthCheckPolicy {
-	s.Port = &v
+// SetLimit sets the Limit field's value.
+func (s *ListRoutesInput) SetLimit(v int64) *ListRoutesInput {
+	s.Limit = &v
 	return s
 }
 
-// SetProtocol sets the Protocol field's value.
-func (s *HealthCheckPolicy) SetProtocol(v string) *HealthCheckPolicy {
-	s.Protocol = &v
+// SetMeshName sets the MeshName field's value.
+func (s *ListRoutesInput) SetMeshName(v string) *ListRoutesInput {
+	s.MeshName = &v
 	return s
 }
 
-// SetTimeoutMillis sets the TimeoutMillis field's value.
-func (s *HealthCheckPolicy) SetTimeoutMillis(v int64) *HealthCheckPolicy {
-	s.TimeoutMillis = &v
+// SetNextToken sets the NextToken field's value.
+func (s *ListRoutesInput) SetNextToken(v string) *ListRoutesInput {
+	s.NextToken = &v
 	return s
 }
 
-// SetUnhealthyThreshold sets the UnhealthyThreshold field's value.
-func (s *HealthCheckPolicy) SetUnhealthyThreshold(v int64) *HealthCheckPolicy {
-	s.UnhealthyThreshold = &v
+// SetVirtualRouterName sets the VirtualRouterName field's value.
+func (s *ListRoutesInput) SetVirtualRouterName(v string) *ListRoutesInput {
+	s.VirtualRouterName = &v
 	return s
 }
 
-// An object representing the HTTP routing specification for a route.
-type HttpRoute struct {
+type ListRoutesOutput struct {
 	_ struct{} `type:"structure"`
 
-	// The action to take if a match is determined.
-	//
-	// Action is a required field
-	Action *HttpRouteAction `locationName:"action" type:"structure" required:"true"`
+	// The nextToken value to include in a future ListRoutes request. When the results
+	// of a ListRoutes request exceed limit, you can use this value 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 criteria for determining an HTTP request match.
+	// The list of existing routes for the specified service mesh and virtual router.
 	//
-	// Match is a required field
-	Match *HttpRouteMatch `locationName:"match" type:"structure" required:"true"`
+	// Routes is a required field
+	Routes []*RouteRef `locationName:"routes" type:"list" required:"true"`
 }
 
 // String returns the string representation
-func (s HttpRoute) String() string {
+func (s ListRoutesOutput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s HttpRoute) GoString() string {
+func (s ListRoutesOutput) GoString() string {
 	return s.String()
 }
 
-// Validate inspects the fields of the type to determine if they are valid.
-func (s *HttpRoute) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "HttpRoute"}
-	if s.Action == nil {
-		invalidParams.Add(request.NewErrParamRequired("Action"))
-	}
-	if s.Match == nil {
-		invalidParams.Add(request.NewErrParamRequired("Match"))
-	}
-	if s.Action != nil {
-		if err := s.Action.Validate(); err != nil {
-			invalidParams.AddNested("Action", err.(request.ErrInvalidParams))
-		}
-	}
-	if s.Match != nil {
-		if err := s.Match.Validate(); err != nil {
-			invalidParams.AddNested("Match", err.(request.ErrInvalidParams))
-		}
-	}
-
-	if invalidParams.Len() > 0 {
-		return invalidParams
-	}
-	return nil
-}
-
-// SetAction sets the Action field's value.
-func (s *HttpRoute) SetAction(v *HttpRouteAction) *HttpRoute {
-	s.Action = v
+// SetNextToken sets the NextToken field's value.
+func (s *ListRoutesOutput) SetNextToken(v string) *ListRoutesOutput {
+	s.NextToken = &v
 	return s
 }
 
-// SetMatch sets the Match field's value.
-func (s *HttpRoute) SetMatch(v *HttpRouteMatch) *HttpRoute {
-	s.Match = v
+// SetRoutes sets the Routes field's value.
+func (s *ListRoutesOutput) SetRoutes(v []*RouteRef) *ListRoutesOutput {
+	s.Routes = v
 	return s
 }
 
-// An object representing the traffic distribution requirements for matched
-// HTTP requests.
-type HttpRouteAction struct {
+type ListTagsForResourceInput struct {
 	_ struct{} `type:"structure"`
 
-	// The targets that traffic is routed to when a request matches the route. You
-	// can specify one or more targets and their relative weights to distribute
-	// traffic with.
+	// The maximum number of tag results returned by ListTagsForResource in paginated
+	// output. When this parameter is used, ListTagsForResource returns only limit
+	// results in a single page along with a nextToken response element. You can
+	// see the remaining results of the initial request by sending another ListTagsForResource
+	// request with the returned nextToken value. This value can be between 1 and
+	// 100. If you don't use this parameter, ListTagsForResource returns up to 100
+	// results and a nextToken value if applicable.
+	Limit *int64 `location:"querystring" locationName:"limit" min:"1" type:"integer"`
+
+	// The nextToken value returned from a previous paginated ListTagsForResource
+	// request where limit 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.
+	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
+
+	// The Amazon Resource Name (ARN) that identifies the resource to list the tags
+	// for.
 	//
-	// WeightedTargets is a required field
-	WeightedTargets []*WeightedTarget `locationName:"weightedTargets" type:"list" required:"true"`
+	// ResourceArn is a required field
+	ResourceArn *string `location:"querystring" locationName:"resourceArn" type:"string" required:"true"`
 }
 
 // String returns the string representation
-func (s HttpRouteAction) String() string {
+func (s ListTagsForResourceInput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s HttpRouteAction) GoString() string {
+func (s ListTagsForResourceInput) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *HttpRouteAction) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "HttpRouteAction"}
-	if s.WeightedTargets == nil {
-		invalidParams.Add(request.NewErrParamRequired("WeightedTargets"))
+func (s *ListTagsForResourceInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "ListTagsForResourceInput"}
+	if s.Limit != nil && *s.Limit < 1 {
+		invalidParams.Add(request.NewErrParamMinValue("Limit", 1))
 	}
-	if s.WeightedTargets != nil {
-		for i, v := range s.WeightedTargets {
-			if v == nil {
-				continue
-			}
-			if err := v.Validate(); err != nil {
-				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "WeightedTargets", i), err.(request.ErrInvalidParams))
-			}
-		}
+	if s.ResourceArn == nil {
+		invalidParams.Add(request.NewErrParamRequired("ResourceArn"))
 	}
 
 	if invalidParams.Len() > 0 {
@@ -4470,95 +5485,107 @@ func (s *HttpRouteAction) Validate() error {
 	return nil
 }
 
-// SetWeightedTargets sets the WeightedTargets field's value.
-func (s *HttpRouteAction) SetWeightedTargets(v []*WeightedTarget) *HttpRouteAction {
-	s.WeightedTargets = v
+// SetLimit sets the Limit field's value.
+func (s *ListTagsForResourceInput) SetLimit(v int64) *ListTagsForResourceInput {
+	s.Limit = &v
 	return s
 }
 
-// An object representing the requirements for a route to match HTTP requests
-// for a virtual router.
-type HttpRouteMatch struct {
+// SetNextToken sets the NextToken field's value.
+func (s *ListTagsForResourceInput) SetNextToken(v string) *ListTagsForResourceInput {
+	s.NextToken = &v
+	return s
+}
+
+// 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"`
 
-	// Specifies the path to match requests with. This parameter must always start
-	// with /, which by itself matches all requests to the virtual router service
-	// name. You can also match for path-based routing of requests. For example,
-	// if your virtual router service name is my-service.local and you want the
-	// route to match requests to my-service.local/metrics, your prefix should be
-	// /metrics.
+	// The nextToken value to include in a future ListTagsForResource request. When
+	// the results of a ListTagsForResource request exceed limit, you can use this
+	// value 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 tags for the resource.
 	//
-	// Prefix is a required field
-	Prefix *string `locationName:"prefix" type:"string" required:"true"`
+	// Tags is a required field
+	Tags []*TagRef `locationName:"tags" type:"list" required:"true"`
 }
 
 // String returns the string representation
-func (s HttpRouteMatch) String() string {
+func (s ListTagsForResourceOutput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s HttpRouteMatch) GoString() string {
+func (s ListTagsForResourceOutput) GoString() string {
 	return s.String()
 }
 
-// Validate inspects the fields of the type to determine if they are valid.
-func (s *HttpRouteMatch) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "HttpRouteMatch"}
-	if s.Prefix == nil {
-		invalidParams.Add(request.NewErrParamRequired("Prefix"))
-	}
-
-	if invalidParams.Len() > 0 {
-		return invalidParams
-	}
-	return nil
+// SetNextToken sets the NextToken field's value.
+func (s *ListTagsForResourceOutput) SetNextToken(v string) *ListTagsForResourceOutput {
+	s.NextToken = &v
+	return s
 }
 
-// SetPrefix sets the Prefix field's value.
-func (s *HttpRouteMatch) SetPrefix(v string) *HttpRouteMatch {
-	s.Prefix = &v
+// SetTags sets the Tags field's value.
+func (s *ListTagsForResourceOutput) SetTags(v []*TagRef) *ListTagsForResourceOutput {
+	s.Tags = v
 	return s
 }
 
-type ListMeshesInput struct {
+type ListVirtualNodesInput struct {
 	_ struct{} `type:"structure"`
 
-	// The maximum number of results returned by ListMeshes in paginated output.
-	// When you use this parameter, ListMeshes returns only limit results in a single
-	// page along with a nextToken response element. You can see the remaining results
-	// of the initial request by sending another ListMeshes request with the returned
-	// nextToken value. This value can be between 1 and 100. If you don't use this
-	// parameter, ListMeshes returns up to 100 results and a nextToken value if
-	// applicable.
+	// The maximum number of results returned by ListVirtualNodes in paginated output.
+	// When you use this parameter, ListVirtualNodes returns only limit results
+	// in a single page along with a nextToken response element. You can see the
+	// remaining results of the initial request by sending another ListVirtualNodes
+	// request with the returned nextToken value. This value can be between 1 and
+	// 100. If you don't use this parameter, ListVirtualNodes returns up to 100
+	// results and a nextToken value if applicable.
 	Limit *int64 `location:"querystring" locationName:"limit" min:"1" type:"integer"`
 
-	// The nextToken value returned from a previous paginated ListMeshes request
+	// The name of the service mesh to list virtual nodes in.
+	//
+	// MeshName is a required field
+	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
+
+	// The nextToken value returned from a previous paginated ListVirtualNodes request
 	// where limit 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 `location:"querystring" locationName:"nextToken" type:"string"`
 }
 
 // String returns the string representation
-func (s ListMeshesInput) String() string {
+func (s ListVirtualNodesInput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s ListMeshesInput) GoString() string {
+func (s ListVirtualNodesInput) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *ListMeshesInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "ListMeshesInput"}
+func (s *ListVirtualNodesInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "ListVirtualNodesInput"}
 	if s.Limit != nil && *s.Limit < 1 {
 		invalidParams.Add(request.NewErrParamMinValue("Limit", 1))
 	}
+	if s.MeshName == nil {
+		invalidParams.Add(request.NewErrParamRequired("MeshName"))
+	}
+	if s.MeshName != nil && len(*s.MeshName) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("MeshName", 1))
+	}
 
 	if invalidParams.Len() > 0 {
 		return invalidParams
@@ -4567,96 +5594,97 @@ func (s *ListMeshesInput) Validate() error {
 }
 
 // SetLimit sets the Limit field's value.
-func (s *ListMeshesInput) SetLimit(v int64) *ListMeshesInput {
+func (s *ListVirtualNodesInput) SetLimit(v int64) *ListVirtualNodesInput {
 	s.Limit = &v
 	return s
 }
 
+// SetMeshName sets the MeshName field's value.
+func (s *ListVirtualNodesInput) SetMeshName(v string) *ListVirtualNodesInput {
+	s.MeshName = &v
+	return s
+}
+
 // SetNextToken sets the NextToken field's value.
-func (s *ListMeshesInput) SetNextToken(v string) *ListMeshesInput {
+func (s *ListVirtualNodesInput) SetNextToken(v string) *ListVirtualNodesInput {
 	s.NextToken = &v
 	return s
 }
 
-type ListMeshesOutput struct {
+type ListVirtualNodesOutput struct {
 	_ struct{} `type:"structure"`
 
-	// The list of existing service meshes.
-	//
-	// Meshes is a required field
-	Meshes []*MeshRef `locationName:"meshes" type:"list" required:"true"`
-
-	// The nextToken value to include in a future ListMeshes request. When the results
-	// of a ListMeshes request exceed limit, you can use this value to retrieve
-	// the next page of results. This value is null when there are no more results
-	// to return.
+	// The nextToken value to include in a future ListVirtualNodes request. When
+	// the results of a ListVirtualNodes request exceed limit, you can use this
+	// value 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 existing virtual nodes for the specified service mesh.
+	//
+	// VirtualNodes is a required field
+	VirtualNodes []*VirtualNodeRef `locationName:"virtualNodes" type:"list" required:"true"`
 }
 
 // String returns the string representation
-func (s ListMeshesOutput) String() string {
+func (s ListVirtualNodesOutput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s ListMeshesOutput) GoString() string {
+func (s ListVirtualNodesOutput) GoString() string {
 	return s.String()
 }
 
-// SetMeshes sets the Meshes field's value.
-func (s *ListMeshesOutput) SetMeshes(v []*MeshRef) *ListMeshesOutput {
-	s.Meshes = v
+// SetNextToken sets the NextToken field's value.
+func (s *ListVirtualNodesOutput) SetNextToken(v string) *ListVirtualNodesOutput {
+	s.NextToken = &v
 	return s
 }
 
-// SetNextToken sets the NextToken field's value.
-func (s *ListMeshesOutput) SetNextToken(v string) *ListMeshesOutput {
-	s.NextToken = &v
+// SetVirtualNodes sets the VirtualNodes field's value.
+func (s *ListVirtualNodesOutput) SetVirtualNodes(v []*VirtualNodeRef) *ListVirtualNodesOutput {
+	s.VirtualNodes = v
 	return s
 }
 
-type ListRoutesInput struct {
+type ListVirtualRoutersInput struct {
 	_ struct{} `type:"structure"`
 
-	// The maximum number of results returned by ListRoutes in paginated output.
-	// When you use this parameter, ListRoutes returns only limit results in a single
-	// page along with a nextToken response element. You can see the remaining results
-	// of the initial request by sending another ListRoutes request with the returned
-	// nextToken value. This value can be between 1 and 100. If you don't use this
-	// parameter, ListRoutes returns up to 100 results and a nextToken value if
-	// applicable.
+	// The maximum number of results returned by ListVirtualRouters in paginated
+	// output. When you use this parameter, ListVirtualRouters returns only limit
+	// results in a single page along with a nextToken response element. You can
+	// see the remaining results of the initial request by sending another ListVirtualRouters
+	// request with the returned nextToken value. This value can be between 1 and
+	// 100. If you don't use this parameter, ListVirtualRouters returns up to 100
+	// results and a nextToken value if applicable.
 	Limit *int64 `location:"querystring" locationName:"limit" min:"1" type:"integer"`
 
-	// The name of the service mesh in which to list routes.
+	// The name of the service mesh to list virtual routers in.
 	//
 	// MeshName is a required field
 	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
 
-	// The nextToken value returned from a previous paginated ListRoutes request
-	// where limit was used and the results exceeded the value of that parameter.
+	// The nextToken value returned from a previous paginated ListVirtualRouters
+	// request where limit 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.
 	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
-
-	// The name of the virtual router to list routes in.
-	//
-	// VirtualRouterName is a required field
-	VirtualRouterName *string `location:"uri" locationName:"virtualRouterName" min:"1" type:"string" required:"true"`
 }
 
 // String returns the string representation
-func (s ListRoutesInput) String() string {
+func (s ListVirtualRoutersInput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s ListRoutesInput) GoString() string {
+func (s ListVirtualRoutersInput) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *ListRoutesInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "ListRoutesInput"}
+func (s *ListVirtualRoutersInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "ListVirtualRoutersInput"}
 	if s.Limit != nil && *s.Limit < 1 {
 		invalidParams.Add(request.NewErrParamMinValue("Limit", 1))
 	}
@@ -4666,12 +5694,6 @@ func (s *ListRoutesInput) Validate() error {
 	if s.MeshName != nil && len(*s.MeshName) < 1 {
 		invalidParams.Add(request.NewErrParamMinLen("MeshName", 1))
 	}
-	if s.VirtualRouterName == nil {
-		invalidParams.Add(request.NewErrParamRequired("VirtualRouterName"))
-	}
-	if s.VirtualRouterName != nil && len(*s.VirtualRouterName) < 1 {
-		invalidParams.Add(request.NewErrParamMinLen("VirtualRouterName", 1))
-	}
 
 	if invalidParams.Len() > 0 {
 		return invalidParams
@@ -4680,103 +5702,97 @@ func (s *ListRoutesInput) Validate() error {
 }
 
 // SetLimit sets the Limit field's value.
-func (s *ListRoutesInput) SetLimit(v int64) *ListRoutesInput {
+func (s *ListVirtualRoutersInput) SetLimit(v int64) *ListVirtualRoutersInput {
 	s.Limit = &v
 	return s
 }
 
 // SetMeshName sets the MeshName field's value.
-func (s *ListRoutesInput) SetMeshName(v string) *ListRoutesInput {
+func (s *ListVirtualRoutersInput) SetMeshName(v string) *ListVirtualRoutersInput {
 	s.MeshName = &v
 	return s
 }
 
 // SetNextToken sets the NextToken field's value.
-func (s *ListRoutesInput) SetNextToken(v string) *ListRoutesInput {
+func (s *ListVirtualRoutersInput) SetNextToken(v string) *ListVirtualRoutersInput {
 	s.NextToken = &v
 	return s
 }
 
-// SetVirtualRouterName sets the VirtualRouterName field's value.
-func (s *ListRoutesInput) SetVirtualRouterName(v string) *ListRoutesInput {
-	s.VirtualRouterName = &v
-	return s
-}
-
-type ListRoutesOutput struct {
+type ListVirtualRoutersOutput struct {
 	_ struct{} `type:"structure"`
 
-	// The nextToken value to include in a future ListRoutes request. When the results
-	// of a ListRoutes request exceed limit, you can use this value to retrieve
-	// the next page of results. This value is null when there are no more results
-	// to return.
+	// The nextToken value to include in a future ListVirtualRouters request. When
+	// the results of a ListVirtualRouters request exceed limit, you can use this
+	// value 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 existing routes for the specified service mesh and virtual router.
+	// The list of existing virtual routers for the specified service mesh.
 	//
-	// Routes is a required field
-	Routes []*RouteRef `locationName:"routes" type:"list" required:"true"`
+	// VirtualRouters is a required field
+	VirtualRouters []*VirtualRouterRef `locationName:"virtualRouters" type:"list" required:"true"`
 }
 
 // String returns the string representation
-func (s ListRoutesOutput) String() string {
+func (s ListVirtualRoutersOutput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s ListRoutesOutput) GoString() string {
+func (s ListVirtualRoutersOutput) GoString() string {
 	return s.String()
 }
 
 // SetNextToken sets the NextToken field's value.
-func (s *ListRoutesOutput) SetNextToken(v string) *ListRoutesOutput {
+func (s *ListVirtualRoutersOutput) SetNextToken(v string) *ListVirtualRoutersOutput {
 	s.NextToken = &v
 	return s
 }
 
-// SetRoutes sets the Routes field's value.
-func (s *ListRoutesOutput) SetRoutes(v []*RouteRef) *ListRoutesOutput {
-	s.Routes = v
+// SetVirtualRouters sets the VirtualRouters field's value.
+func (s *ListVirtualRoutersOutput) SetVirtualRouters(v []*VirtualRouterRef) *ListVirtualRoutersOutput {
+	s.VirtualRouters = v
 	return s
 }
 
-type ListVirtualNodesInput struct {
+type ListVirtualServicesInput struct {
 	_ struct{} `type:"structure"`
 
-	// The maximum number of results returned by ListVirtualNodes in paginated output.
-	// When you use this parameter, ListVirtualNodes returns only limit results
-	// in a single page along with a nextToken response element. You can see the
-	// remaining results of the initial request by sending another ListVirtualNodes
+	// The maximum number of results returned by ListVirtualServices in paginated
+	// output. When you use this parameter, ListVirtualServices returns only limit
+	// results in a single page along with a nextToken response element. You can
+	// see the remaining results of the initial request by sending another ListVirtualServices
 	// request with the returned nextToken value. This value can be between 1 and
-	// 100. If you don't use this parameter, ListVirtualNodes returns up to 100
+	// 100. If you don't use this parameter, ListVirtualServices returns up to 100
 	// results and a nextToken value if applicable.
 	Limit *int64 `location:"querystring" locationName:"limit" min:"1" type:"integer"`
 
-	// The name of the service mesh to list virtual nodes in.
+	// The name of the service mesh to list virtual services in.
 	//
 	// MeshName is a required field
 	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
 
-	// The nextToken value returned from a previous paginated ListVirtualNodes request
-	// where limit was used and the results exceeded the value of that parameter.
+	// The nextToken value returned from a previous paginated ListVirtualServices
+	// request where limit 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.
 	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
 }
 
 // String returns the string representation
-func (s ListVirtualNodesInput) String() string {
+func (s ListVirtualServicesInput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s ListVirtualNodesInput) GoString() string {
+func (s ListVirtualServicesInput) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *ListVirtualNodesInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "ListVirtualNodesInput"}
+func (s *ListVirtualServicesInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "ListVirtualServicesInput"}
 	if s.Limit != nil && *s.Limit < 1 {
 		invalidParams.Add(request.NewErrParamMinValue("Limit", 1))
 	}
@@ -4794,105 +5810,98 @@ func (s *ListVirtualNodesInput) Validate() error {
 }
 
 // SetLimit sets the Limit field's value.
-func (s *ListVirtualNodesInput) SetLimit(v int64) *ListVirtualNodesInput {
+func (s *ListVirtualServicesInput) SetLimit(v int64) *ListVirtualServicesInput {
 	s.Limit = &v
 	return s
 }
 
 // SetMeshName sets the MeshName field's value.
-func (s *ListVirtualNodesInput) SetMeshName(v string) *ListVirtualNodesInput {
+func (s *ListVirtualServicesInput) SetMeshName(v string) *ListVirtualServicesInput {
 	s.MeshName = &v
 	return s
 }
 
 // SetNextToken sets the NextToken field's value.
-func (s *ListVirtualNodesInput) SetNextToken(v string) *ListVirtualNodesInput {
+func (s *ListVirtualServicesInput) SetNextToken(v string) *ListVirtualServicesInput {
 	s.NextToken = &v
 	return s
 }
 
-type ListVirtualNodesOutput struct {
+type ListVirtualServicesOutput struct {
 	_ struct{} `type:"structure"`
 
-	// The nextToken value to include in a future ListVirtualNodes request. When
-	// the results of a ListVirtualNodes request exceed limit, you can use this
+	// The nextToken value to include in a future ListVirtualServices request. When
+	// the results of a ListVirtualServices request exceed limit, you can use this
 	// value 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 existing virtual nodes for the specified service mesh.
+	// The list of existing virtual services for the specified service mesh.
 	//
-	// VirtualNodes is a required field
-	VirtualNodes []*VirtualNodeRef `locationName:"virtualNodes" type:"list" required:"true"`
+	// VirtualServices is a required field
+	VirtualServices []*VirtualServiceRef `locationName:"virtualServices" type:"list" required:"true"`
 }
 
 // String returns the string representation
-func (s ListVirtualNodesOutput) String() string {
+func (s ListVirtualServicesOutput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s ListVirtualNodesOutput) GoString() string {
+func (s ListVirtualServicesOutput) GoString() string {
 	return s.String()
 }
 
 // SetNextToken sets the NextToken field's value.
-func (s *ListVirtualNodesOutput) SetNextToken(v string) *ListVirtualNodesOutput {
+func (s *ListVirtualServicesOutput) SetNextToken(v string) *ListVirtualServicesOutput {
 	s.NextToken = &v
 	return s
 }
 
-// SetVirtualNodes sets the VirtualNodes field's value.
-func (s *ListVirtualNodesOutput) SetVirtualNodes(v []*VirtualNodeRef) *ListVirtualNodesOutput {
-	s.VirtualNodes = v
+// SetVirtualServices sets the VirtualServices field's value.
+func (s *ListVirtualServicesOutput) SetVirtualServices(v []*VirtualServiceRef) *ListVirtualServicesOutput {
+	s.VirtualServices = v
 	return s
 }
 
-type ListVirtualRoutersInput struct {
+// An object representing a listener for a virtual node.
+type Listener struct {
 	_ struct{} `type:"structure"`
 
-	// The maximum number of results returned by ListVirtualRouters in paginated
-	// output. When you use this parameter, ListVirtualRouters returns only limit
-	// results in a single page along with a nextToken response element. You can
-	// see the remaining results of the initial request by sending another ListVirtualRouters
-	// request with the returned nextToken value. This value can be between 1 and
-	// 100. If you don't use this parameter, ListVirtualRouters returns up to 100
-	// results and a nextToken value if applicable.
-	Limit *int64 `location:"querystring" locationName:"limit" min:"1" type:"integer"`
+	// The health check information for the listener.
+	HealthCheck *HealthCheckPolicy `locationName:"healthCheck" type:"structure"`
 
-	// The name of the service mesh to list virtual routers in.
+	// The port mapping information for the listener.
 	//
-	// MeshName is a required field
-	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
-
-	// The nextToken value returned from a previous paginated ListVirtualRouters
-	// request where limit 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.
-	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
+	// PortMapping is a required field
+	PortMapping *PortMapping `locationName:"portMapping" type:"structure" required:"true"`
 }
 
 // String returns the string representation
-func (s ListVirtualRoutersInput) String() string {
+func (s Listener) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s ListVirtualRoutersInput) GoString() string {
+func (s Listener) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *ListVirtualRoutersInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "ListVirtualRoutersInput"}
-	if s.Limit != nil && *s.Limit < 1 {
-		invalidParams.Add(request.NewErrParamMinValue("Limit", 1))
+func (s *Listener) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "Listener"}
+	if s.PortMapping == nil {
+		invalidParams.Add(request.NewErrParamRequired("PortMapping"))
 	}
-	if s.MeshName == nil {
-		invalidParams.Add(request.NewErrParamRequired("MeshName"))
+	if s.HealthCheck != nil {
+		if err := s.HealthCheck.Validate(); err != nil {
+			invalidParams.AddNested("HealthCheck", err.(request.ErrInvalidParams))
+		}
 	}
-	if s.MeshName != nil && len(*s.MeshName) < 1 {
-		invalidParams.Add(request.NewErrParamMinLen("MeshName", 1))
+	if s.PortMapping != nil {
+		if err := s.PortMapping.Validate(); err != nil {
+			invalidParams.AddNested("PortMapping", err.(request.ErrInvalidParams))
+		}
 	}
 
 	if invalidParams.Len() > 0 {
@@ -4901,106 +5910,178 @@ func (s *ListVirtualRoutersInput) Validate() error {
 	return nil
 }
 
-// SetLimit sets the Limit field's value.
-func (s *ListVirtualRoutersInput) SetLimit(v int64) *ListVirtualRoutersInput {
-	s.Limit = &v
+// SetHealthCheck sets the HealthCheck field's value.
+func (s *Listener) SetHealthCheck(v *HealthCheckPolicy) *Listener {
+	s.HealthCheck = v
+	return s
+}
+
+// SetPortMapping sets the PortMapping field's value.
+func (s *Listener) SetPortMapping(v *PortMapping) *Listener {
+	s.PortMapping = v
+	return s
+}
+
+// An object representing the logging information for a virtual node.
+type Logging struct {
+	_ struct{} `type:"structure"`
+
+	// The access log configuration for a virtual node.
+	AccessLog *AccessLog `locationName:"accessLog" type:"structure"`
+}
+
+// String returns the string representation
+func (s Logging) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s Logging) GoString() string {
+	return s.String()
+}
+
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *Logging) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "Logging"}
+	if s.AccessLog != nil {
+		if err := s.AccessLog.Validate(); err != nil {
+			invalidParams.AddNested("AccessLog", err.(request.ErrInvalidParams))
+		}
+	}
+
+	if invalidParams.Len() > 0 {
+		return invalidParams
+	}
+	return nil
+}
+
+// SetAccessLog sets the AccessLog field's value.
+func (s *Logging) SetAccessLog(v *AccessLog) *Logging {
+	s.AccessLog = v
 	return s
 }
 
+// An object representing a service mesh returned by a describe operation.
+type MeshData struct {
+	_ struct{} `type:"structure"`
+
+	// The name of the service mesh.
+	//
+	// MeshName is a required field
+	MeshName *string `locationName:"meshName" min:"1" type:"string" required:"true"`
+
+	// The associated metadata for the service mesh.
+	//
+	// Metadata is a required field
+	Metadata *ResourceMetadata `locationName:"metadata" type:"structure" required:"true"`
+
+	// The associated specification for the service mesh.
+	//
+	// Spec is a required field
+	Spec *MeshSpec `locationName:"spec" type:"structure" required:"true"`
+
+	// The status of the service mesh.
+	//
+	// Status is a required field
+	Status *MeshStatus `locationName:"status" type:"structure" required:"true"`
+}
+
+// String returns the string representation
+func (s MeshData) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s MeshData) GoString() string {
+	return s.String()
+}
+
 // SetMeshName sets the MeshName field's value.
-func (s *ListVirtualRoutersInput) SetMeshName(v string) *ListVirtualRoutersInput {
+func (s *MeshData) SetMeshName(v string) *MeshData {
 	s.MeshName = &v
 	return s
 }
 
-// SetNextToken sets the NextToken field's value.
-func (s *ListVirtualRoutersInput) SetNextToken(v string) *ListVirtualRoutersInput {
-	s.NextToken = &v
+// SetMetadata sets the Metadata field's value.
+func (s *MeshData) SetMetadata(v *ResourceMetadata) *MeshData {
+	s.Metadata = v
+	return s
+}
+
+// SetSpec sets the Spec field's value.
+func (s *MeshData) SetSpec(v *MeshSpec) *MeshData {
+	s.Spec = v
+	return s
+}
+
+// SetStatus sets the Status field's value.
+func (s *MeshData) SetStatus(v *MeshStatus) *MeshData {
+	s.Status = v
 	return s
 }
 
-type ListVirtualRoutersOutput struct {
+// An object representing a service mesh returned by a list operation.
+type MeshRef struct {
 	_ struct{} `type:"structure"`
 
-	// The nextToken value to include in a future ListVirtualRouters request. When
-	// the results of a ListVirtualRouters request exceed limit, you can use this
-	// value 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 full Amazon Resource Name (ARN) of the service mesh.
+	//
+	// Arn is a required field
+	Arn *string `locationName:"arn" type:"string" required:"true"`
 
-	// The list of existing virtual routers for the specified service mesh.
+	// The name of the service mesh.
 	//
-	// VirtualRouters is a required field
-	VirtualRouters []*VirtualRouterRef `locationName:"virtualRouters" type:"list" required:"true"`
+	// MeshName is a required field
+	MeshName *string `locationName:"meshName" min:"1" type:"string" required:"true"`
 }
 
 // String returns the string representation
-func (s ListVirtualRoutersOutput) String() string {
+func (s MeshRef) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s ListVirtualRoutersOutput) GoString() string {
+func (s MeshRef) GoString() string {
 	return s.String()
 }
 
-// SetNextToken sets the NextToken field's value.
-func (s *ListVirtualRoutersOutput) SetNextToken(v string) *ListVirtualRoutersOutput {
-	s.NextToken = &v
+// SetArn sets the Arn field's value.
+func (s *MeshRef) SetArn(v string) *MeshRef {
+	s.Arn = &v
 	return s
 }
 
-// SetVirtualRouters sets the VirtualRouters field's value.
-func (s *ListVirtualRoutersOutput) SetVirtualRouters(v []*VirtualRouterRef) *ListVirtualRoutersOutput {
-	s.VirtualRouters = v
+// SetMeshName sets the MeshName field's value.
+func (s *MeshRef) SetMeshName(v string) *MeshRef {
+	s.MeshName = &v
 	return s
 }
 
-type ListVirtualServicesInput struct {
+// An object representing the specification of a service mesh.
+type MeshSpec struct {
 	_ struct{} `type:"structure"`
 
-	// The maximum number of results returned by ListVirtualServices in paginated
-	// output. When you use this parameter, ListVirtualServices returns only limit
-	// results in a single page along with a nextToken response element. You can
-	// see the remaining results of the initial request by sending another ListVirtualServices
-	// request with the returned nextToken value. This value can be between 1 and
-	// 100. If you don't use this parameter, ListVirtualServices returns up to 100
-	// results and a nextToken value if applicable.
-	Limit *int64 `location:"querystring" locationName:"limit" min:"1" type:"integer"`
-
-	// The name of the service mesh to list virtual services in.
-	//
-	// MeshName is a required field
-	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
-
-	// The nextToken value returned from a previous paginated ListVirtualServices
-	// request where limit 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.
-	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
+	// The egress filter rules for the service mesh.
+	EgressFilter *EgressFilter `locationName:"egressFilter" type:"structure"`
 }
 
 // String returns the string representation
-func (s ListVirtualServicesInput) String() string {
+func (s MeshSpec) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s ListVirtualServicesInput) GoString() string {
+func (s MeshSpec) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *ListVirtualServicesInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "ListVirtualServicesInput"}
-	if s.Limit != nil && *s.Limit < 1 {
-		invalidParams.Add(request.NewErrParamMinValue("Limit", 1))
-	}
-	if s.MeshName == nil {
-		invalidParams.Add(request.NewErrParamRequired("MeshName"))
-	}
-	if s.MeshName != nil && len(*s.MeshName) < 1 {
-		invalidParams.Add(request.NewErrParamMinLen("MeshName", 1))
+func (s *MeshSpec) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "MeshSpec"}
+	if s.EgressFilter != nil {
+		if err := s.EgressFilter.Validate(); err != nil {
+			invalidParams.AddNested("EgressFilter", err.(request.ErrInvalidParams))
+		}
 	}
 
 	if invalidParams.Len() > 0 {
@@ -5009,264 +6090,336 @@ func (s *ListVirtualServicesInput) Validate() error {
 	return nil
 }
 
-// SetLimit sets the Limit field's value.
-func (s *ListVirtualServicesInput) SetLimit(v int64) *ListVirtualServicesInput {
-	s.Limit = &v
+// SetEgressFilter sets the EgressFilter field's value.
+func (s *MeshSpec) SetEgressFilter(v *EgressFilter) *MeshSpec {
+	s.EgressFilter = v
 	return s
 }
 
-// SetMeshName sets the MeshName field's value.
-func (s *ListVirtualServicesInput) SetMeshName(v string) *ListVirtualServicesInput {
-	s.MeshName = &v
-	return s
+// An object representing the status of a service mesh.
+type MeshStatus struct {
+	_ struct{} `type:"structure"`
+
+	// The current mesh status.
+	Status *string `locationName:"status" type:"string" enum:"MeshStatusCode"`
 }
 
-// SetNextToken sets the NextToken field's value.
-func (s *ListVirtualServicesInput) SetNextToken(v string) *ListVirtualServicesInput {
-	s.NextToken = &v
+// String returns the string representation
+func (s MeshStatus) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s MeshStatus) GoString() string {
+	return s.String()
+}
+
+// SetStatus sets the Status field's value.
+func (s *MeshStatus) SetStatus(v string) *MeshStatus {
+	s.Status = &v
 	return s
 }
 
-type ListVirtualServicesOutput struct {
+// An object representing a virtual node or virtual router listener port mapping.
+type PortMapping struct {
 	_ struct{} `type:"structure"`
 
-	// The nextToken value to include in a future ListVirtualServices request. When
-	// the results of a ListVirtualServices request exceed limit, you can use this
-	// value 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 port used for the port mapping.
+	//
+	// Port is a required field
+	Port *int64 `locationName:"port" min:"1" type:"integer" required:"true"`
 
-	// The list of existing virtual services for the specified service mesh.
+	// The protocol used for the port mapping.
 	//
-	// VirtualServices is a required field
-	VirtualServices []*VirtualServiceRef `locationName:"virtualServices" type:"list" required:"true"`
+	// Protocol is a required field
+	Protocol *string `locationName:"protocol" type:"string" required:"true" enum:"PortProtocol"`
 }
 
 // String returns the string representation
-func (s ListVirtualServicesOutput) String() string {
+func (s PortMapping) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s ListVirtualServicesOutput) GoString() string {
+func (s PortMapping) GoString() string {
 	return s.String()
 }
 
-// SetNextToken sets the NextToken field's value.
-func (s *ListVirtualServicesOutput) SetNextToken(v string) *ListVirtualServicesOutput {
-	s.NextToken = &v
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *PortMapping) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "PortMapping"}
+	if s.Port == nil {
+		invalidParams.Add(request.NewErrParamRequired("Port"))
+	}
+	if s.Port != nil && *s.Port < 1 {
+		invalidParams.Add(request.NewErrParamMinValue("Port", 1))
+	}
+	if s.Protocol == nil {
+		invalidParams.Add(request.NewErrParamRequired("Protocol"))
+	}
+
+	if invalidParams.Len() > 0 {
+		return invalidParams
+	}
+	return nil
+}
+
+// SetPort sets the Port field's value.
+func (s *PortMapping) SetPort(v int64) *PortMapping {
+	s.Port = &v
 	return s
 }
 
-// SetVirtualServices sets the VirtualServices field's value.
-func (s *ListVirtualServicesOutput) SetVirtualServices(v []*VirtualServiceRef) *ListVirtualServicesOutput {
-	s.VirtualServices = v
+// SetProtocol sets the Protocol field's value.
+func (s *PortMapping) SetProtocol(v string) *PortMapping {
+	s.Protocol = &v
 	return s
 }
 
-// An object representing a listener for a virtual node.
-type Listener struct {
+// An object representing metadata for a resource.
+type ResourceMetadata struct {
 	_ struct{} `type:"structure"`
 
-	// The health check information for the listener.
-	HealthCheck *HealthCheckPolicy `locationName:"healthCheck" type:"structure"`
+	// The full Amazon Resource Name (ARN) for the resource.
+	//
+	// Arn is a required field
+	Arn *string `locationName:"arn" type:"string" required:"true"`
 
-	// The port mapping information for the listener.
+	// The Unix epoch timestamp in seconds for when the resource was created.
 	//
-	// PortMapping is a required field
-	PortMapping *PortMapping `locationName:"portMapping" type:"structure" required:"true"`
+	// CreatedAt is a required field
+	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp" required:"true"`
+
+	// The Unix epoch timestamp in seconds for when the resource was last updated.
+	//
+	// LastUpdatedAt is a required field
+	LastUpdatedAt *time.Time `locationName:"lastUpdatedAt" type:"timestamp" required:"true"`
+
+	// The unique identifier for the resource.
+	//
+	// Uid is a required field
+	Uid *string `locationName:"uid" type:"string" required:"true"`
+
+	// The version of the resource. Resources are created at version 1, and this
+	// version is incremented each time that they're updated.
+	//
+	// Version is a required field
+	Version *int64 `locationName:"version" type:"long" required:"true"`
 }
 
 // String returns the string representation
-func (s Listener) String() string {
+func (s ResourceMetadata) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s Listener) GoString() string {
+func (s ResourceMetadata) GoString() string {
 	return s.String()
 }
 
-// Validate inspects the fields of the type to determine if they are valid.
-func (s *Listener) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "Listener"}
-	if s.PortMapping == nil {
-		invalidParams.Add(request.NewErrParamRequired("PortMapping"))
-	}
-	if s.HealthCheck != nil {
-		if err := s.HealthCheck.Validate(); err != nil {
-			invalidParams.AddNested("HealthCheck", err.(request.ErrInvalidParams))
-		}
-	}
-	if s.PortMapping != nil {
-		if err := s.PortMapping.Validate(); err != nil {
-			invalidParams.AddNested("PortMapping", err.(request.ErrInvalidParams))
-		}
-	}
+// SetArn sets the Arn field's value.
+func (s *ResourceMetadata) SetArn(v string) *ResourceMetadata {
+	s.Arn = &v
+	return s
+}
 
-	if invalidParams.Len() > 0 {
-		return invalidParams
-	}
-	return nil
+// SetCreatedAt sets the CreatedAt field's value.
+func (s *ResourceMetadata) SetCreatedAt(v time.Time) *ResourceMetadata {
+	s.CreatedAt = &v
+	return s
 }
 
-// SetHealthCheck sets the HealthCheck field's value.
-func (s *Listener) SetHealthCheck(v *HealthCheckPolicy) *Listener {
-	s.HealthCheck = v
+// SetLastUpdatedAt sets the LastUpdatedAt field's value.
+func (s *ResourceMetadata) SetLastUpdatedAt(v time.Time) *ResourceMetadata {
+	s.LastUpdatedAt = &v
 	return s
 }
 
-// SetPortMapping sets the PortMapping field's value.
-func (s *Listener) SetPortMapping(v *PortMapping) *Listener {
-	s.PortMapping = v
+// SetUid sets the Uid field's value.
+func (s *ResourceMetadata) SetUid(v string) *ResourceMetadata {
+	s.Uid = &v
 	return s
 }
 
-// An object representing a service mesh returned by a describe operation.
-type MeshData struct {
+// SetVersion sets the Version field's value.
+func (s *ResourceMetadata) SetVersion(v int64) *ResourceMetadata {
+	s.Version = &v
+	return s
+}
+
+// An object representing a route returned by a describe operation.
+type RouteData struct {
 	_ struct{} `type:"structure"`
 
-	// The name of the service mesh.
+	// The name of the service mesh that the route resides in.
 	//
 	// MeshName is a required field
 	MeshName *string `locationName:"meshName" min:"1" type:"string" required:"true"`
 
-	// The associated metadata for the service mesh.
+	// The associated metadata for the route.
 	//
 	// Metadata is a required field
 	Metadata *ResourceMetadata `locationName:"metadata" type:"structure" required:"true"`
 
-	// The status of the service mesh.
+	// The name of the route.
+	//
+	// RouteName is a required field
+	RouteName *string `locationName:"routeName" min:"1" type:"string" required:"true"`
+
+	// The specifications of the route.
+	//
+	// Spec is a required field
+	Spec *RouteSpec `locationName:"spec" type:"structure" required:"true"`
+
+	// The status of the route.
 	//
 	// Status is a required field
-	Status *MeshStatus `locationName:"status" type:"structure" required:"true"`
+	Status *RouteStatus `locationName:"status" type:"structure" required:"true"`
+
+	// The virtual router that the route is associated with.
+	//
+	// VirtualRouterName is a required field
+	VirtualRouterName *string `locationName:"virtualRouterName" min:"1" type:"string" required:"true"`
 }
 
 // String returns the string representation
-func (s MeshData) String() string {
+func (s RouteData) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s MeshData) GoString() string {
+func (s RouteData) GoString() string {
 	return s.String()
 }
 
 // SetMeshName sets the MeshName field's value.
-func (s *MeshData) SetMeshName(v string) *MeshData {
+func (s *RouteData) SetMeshName(v string) *RouteData {
 	s.MeshName = &v
 	return s
 }
 
 // SetMetadata sets the Metadata field's value.
-func (s *MeshData) SetMetadata(v *ResourceMetadata) *MeshData {
+func (s *RouteData) SetMetadata(v *ResourceMetadata) *RouteData {
 	s.Metadata = v
 	return s
 }
 
+// SetRouteName sets the RouteName field's value.
+func (s *RouteData) SetRouteName(v string) *RouteData {
+	s.RouteName = &v
+	return s
+}
+
+// SetSpec sets the Spec field's value.
+func (s *RouteData) SetSpec(v *RouteSpec) *RouteData {
+	s.Spec = v
+	return s
+}
+
 // SetStatus sets the Status field's value.
-func (s *MeshData) SetStatus(v *MeshStatus) *MeshData {
+func (s *RouteData) SetStatus(v *RouteStatus) *RouteData {
 	s.Status = v
 	return s
 }
 
-// An object representing a service mesh returned by a list operation.
-type MeshRef struct {
+// SetVirtualRouterName sets the VirtualRouterName field's value.
+func (s *RouteData) SetVirtualRouterName(v string) *RouteData {
+	s.VirtualRouterName = &v
+	return s
+}
+
+// An object representing a route returned by a list operation.
+type RouteRef struct {
 	_ struct{} `type:"structure"`
 
-	// The full Amazon Resource Name (ARN) of the service mesh.
+	// The full Amazon Resource Name (ARN) for the route.
 	//
 	// Arn is a required field
 	Arn *string `locationName:"arn" type:"string" required:"true"`
 
-	// The name of the service mesh.
+	// The name of the service mesh that the route resides in.
 	//
 	// MeshName is a required field
 	MeshName *string `locationName:"meshName" min:"1" type:"string" required:"true"`
+
+	// The name of the route.
+	//
+	// RouteName is a required field
+	RouteName *string `locationName:"routeName" min:"1" type:"string" required:"true"`
+
+	// The virtual router that the route is associated with.
+	//
+	// VirtualRouterName is a required field
+	VirtualRouterName *string `locationName:"virtualRouterName" min:"1" type:"string" required:"true"`
 }
 
 // String returns the string representation
-func (s MeshRef) String() string {
+func (s RouteRef) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s MeshRef) GoString() string {
+func (s RouteRef) GoString() string {
 	return s.String()
 }
 
 // SetArn sets the Arn field's value.
-func (s *MeshRef) SetArn(v string) *MeshRef {
+func (s *RouteRef) SetArn(v string) *RouteRef {
 	s.Arn = &v
 	return s
 }
 
 // SetMeshName sets the MeshName field's value.
-func (s *MeshRef) SetMeshName(v string) *MeshRef {
+func (s *RouteRef) SetMeshName(v string) *RouteRef {
 	s.MeshName = &v
 	return s
 }
 
-// An object representing the status of a service mesh.
-type MeshStatus struct {
-	_ struct{} `type:"structure"`
-
-	// The current mesh status.
-	Status *string `locationName:"status" type:"string" enum:"MeshStatusCode"`
-}
-
-// String returns the string representation
-func (s MeshStatus) String() string {
-	return awsutil.Prettify(s)
-}
-
-// GoString returns the string representation
-func (s MeshStatus) GoString() string {
-	return s.String()
+// SetRouteName sets the RouteName field's value.
+func (s *RouteRef) SetRouteName(v string) *RouteRef {
+	s.RouteName = &v
+	return s
 }
 
-// SetStatus sets the Status field's value.
-func (s *MeshStatus) SetStatus(v string) *MeshStatus {
-	s.Status = &v
+// SetVirtualRouterName sets the VirtualRouterName field's value.
+func (s *RouteRef) SetVirtualRouterName(v string) *RouteRef {
+	s.VirtualRouterName = &v
 	return s
 }
 
-// An object representing a virtual node or virtual router listener port mapping.
-type PortMapping struct {
+// An object representing the specification of a route.
+type RouteSpec struct {
 	_ struct{} `type:"structure"`
 
-	// The port used for the port mapping.
-	//
-	// Port is a required field
-	Port *int64 `locationName:"port" min:"1" type:"integer" required:"true"`
+	// The HTTP routing information for the route.
+	HttpRoute *HttpRoute `locationName:"httpRoute" type:"structure"`
 
-	// The protocol used for the port mapping.
-	//
-	// Protocol is a required field
-	Protocol *string `locationName:"protocol" type:"string" required:"true" enum:"PortProtocol"`
+	// The TCP routing information for the route.
+	TcpRoute *TcpRoute `locationName:"tcpRoute" type:"structure"`
 }
 
 // String returns the string representation
-func (s PortMapping) String() string {
+func (s RouteSpec) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s PortMapping) GoString() string {
+func (s RouteSpec) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *PortMapping) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "PortMapping"}
-	if s.Port == nil {
-		invalidParams.Add(request.NewErrParamRequired("Port"))
-	}
-	if s.Port != nil && *s.Port < 1 {
-		invalidParams.Add(request.NewErrParamMinValue("Port", 1))
+func (s *RouteSpec) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "RouteSpec"}
+	if s.HttpRoute != nil {
+		if err := s.HttpRoute.Validate(); err != nil {
+			invalidParams.AddNested("HttpRoute", err.(request.ErrInvalidParams))
+		}
 	}
-	if s.Protocol == nil {
-		invalidParams.Add(request.NewErrParamRequired("Protocol"))
+	if s.TcpRoute != nil {
+		if err := s.TcpRoute.Validate(); err != nil {
+			invalidParams.AddNested("TcpRoute", err.(request.ErrInvalidParams))
+		}
 	}
 
 	if invalidParams.Len() > 0 {
@@ -5275,263 +6428,301 @@ func (s *PortMapping) Validate() error {
 	return nil
 }
 
-// SetPort sets the Port field's value.
-func (s *PortMapping) SetPort(v int64) *PortMapping {
-	s.Port = &v
+// SetHttpRoute sets the HttpRoute field's value.
+func (s *RouteSpec) SetHttpRoute(v *HttpRoute) *RouteSpec {
+	s.HttpRoute = v
 	return s
 }
 
-// SetProtocol sets the Protocol field's value.
-func (s *PortMapping) SetProtocol(v string) *PortMapping {
-	s.Protocol = &v
+// SetTcpRoute sets the TcpRoute field's value.
+func (s *RouteSpec) SetTcpRoute(v *TcpRoute) *RouteSpec {
+	s.TcpRoute = v
 	return s
 }
 
-// An object representing metadata for a resource.
-type ResourceMetadata struct {
+// An object representing the current status of a route.
+type RouteStatus struct {
 	_ struct{} `type:"structure"`
 
-	// The full Amazon Resource Name (ARN) for the resource.
-	//
-	// After you create a virtual node, set this value (either the full ARN or the
-	// truncated resource name, for example, mesh/default/virtualNode/simpleapp,
-	// as the APPMESH_VIRTUAL_NODE_NAME environment variable for your task group's
-	// Envoy proxy container in your task definition or pod spec. This is then mapped
-	// to the node.id and node.cluster Envoy parameters.
-	//
-	// If you require your Envoy stats or tracing to use a different name, you can
-	// override the node.cluster value that is set by APPMESH_VIRTUAL_NODE_NAME
-	// with the APPMESH_VIRTUAL_NODE_CLUSTER environment variable.
+	// The current status for the route.
 	//
-	// Arn is a required field
-	Arn *string `locationName:"arn" type:"string" required:"true"`
+	// Status is a required field
+	Status *string `locationName:"status" type:"string" required:"true" enum:"RouteStatusCode"`
+}
 
-	// The Unix epoch timestamp in seconds for when the resource was created.
-	//
-	// CreatedAt is a required field
-	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp" required:"true"`
+// String returns the string representation
+func (s RouteStatus) String() string {
+	return awsutil.Prettify(s)
+}
 
-	// The Unix epoch timestamp in seconds for when the resource was last updated.
-	//
-	// LastUpdatedAt is a required field
-	LastUpdatedAt *time.Time `locationName:"lastUpdatedAt" type:"timestamp" required:"true"`
+// GoString returns the string representation
+func (s RouteStatus) GoString() string {
+	return s.String()
+}
 
-	// The unique identifier for the resource.
-	//
-	// Uid is a required field
-	Uid *string `locationName:"uid" type:"string" required:"true"`
+// SetStatus sets the Status field's value.
+func (s *RouteStatus) SetStatus(v string) *RouteStatus {
+	s.Status = &v
+	return s
+}
 
-	// The version of the resource. Resources are created at version 1, and this
-	// version is incremented each time that they're updated.
-	//
-	// Version is a required field
-	Version *int64 `locationName:"version" type:"long" required:"true"`
+// An object representing the service discovery information for a virtual node.
+type ServiceDiscovery struct {
+	_ struct{} `type:"structure"`
+
+	// Specifies the DNS information for the virtual node.
+	Dns *DnsServiceDiscovery `locationName:"dns" type:"structure"`
 }
 
 // String returns the string representation
-func (s ResourceMetadata) String() string {
+func (s ServiceDiscovery) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s ResourceMetadata) GoString() string {
+func (s ServiceDiscovery) GoString() string {
 	return s.String()
 }
 
-// SetArn sets the Arn field's value.
-func (s *ResourceMetadata) SetArn(v string) *ResourceMetadata {
-	s.Arn = &v
-	return s
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *ServiceDiscovery) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "ServiceDiscovery"}
+	if s.Dns != nil {
+		if err := s.Dns.Validate(); err != nil {
+			invalidParams.AddNested("Dns", err.(request.ErrInvalidParams))
+		}
+	}
+
+	if invalidParams.Len() > 0 {
+		return invalidParams
+	}
+	return nil
 }
 
-// SetCreatedAt sets the CreatedAt field's value.
-func (s *ResourceMetadata) SetCreatedAt(v time.Time) *ResourceMetadata {
-	s.CreatedAt = &v
+// SetDns sets the Dns field's value.
+func (s *ServiceDiscovery) SetDns(v *DnsServiceDiscovery) *ServiceDiscovery {
+	s.Dns = v
 	return s
 }
 
-// SetLastUpdatedAt sets the LastUpdatedAt field's value.
-func (s *ResourceMetadata) SetLastUpdatedAt(v time.Time) *ResourceMetadata {
-	s.LastUpdatedAt = &v
-	return s
+// Optional metadata that you apply to a resource to assist with categorization
+// and organization. Each tag consists of a key and an optional value, both
+// of which you define. Tag keys can have a maximum character length of 128
+// characters, and tag values can have a maximum length of 256 characters.
+type TagRef 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 is a required field
+	Key *string `locationName:"key" min:"1" type:"string" required:"true"`
+
+	// 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"`
 }
 
-// SetUid sets the Uid field's value.
-func (s *ResourceMetadata) SetUid(v string) *ResourceMetadata {
-	s.Uid = &v
-	return s
+// String returns the string representation
+func (s TagRef) String() string {
+	return awsutil.Prettify(s)
 }
 
-// SetVersion sets the Version field's value.
-func (s *ResourceMetadata) SetVersion(v int64) *ResourceMetadata {
-	s.Version = &v
-	return s
+// GoString returns the string representation
+func (s TagRef) GoString() string {
+	return s.String()
 }
 
-// An object representing a route returned by a describe operation.
-type RouteData struct {
-	_ struct{} `type:"structure"`
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *TagRef) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "TagRef"}
+	if s.Key == nil {
+		invalidParams.Add(request.NewErrParamRequired("Key"))
+	}
+	if s.Key != nil && len(*s.Key) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("Key", 1))
+	}
 
-	// The name of the service mesh that the route resides in.
-	//
-	// MeshName is a required field
-	MeshName *string `locationName:"meshName" min:"1" type:"string" required:"true"`
+	if invalidParams.Len() > 0 {
+		return invalidParams
+	}
+	return nil
+}
 
-	// The associated metadata for the route.
-	//
-	// Metadata is a required field
-	Metadata *ResourceMetadata `locationName:"metadata" type:"structure" required:"true"`
+// SetKey sets the Key field's value.
+func (s *TagRef) SetKey(v string) *TagRef {
+	s.Key = &v
+	return s
+}
 
-	// The name of the route.
-	//
-	// RouteName is a required field
-	RouteName *string `locationName:"routeName" min:"1" type:"string" required:"true"`
+// SetValue sets the Value field's value.
+func (s *TagRef) SetValue(v string) *TagRef {
+	s.Value = &v
+	return s
+}
 
-	// The specifications of the route.
-	//
-	// Spec is a required field
-	Spec *RouteSpec `locationName:"spec" type:"structure" required:"true"`
+type TagResourceInput struct {
+	_ struct{} `type:"structure"`
 
-	// The status of the route.
+	// The Amazon Resource Name (ARN) of the resource to add tags to.
 	//
-	// Status is a required field
-	Status *RouteStatus `locationName:"status" type:"structure" required:"true"`
+	// ResourceArn is a required field
+	ResourceArn *string `location:"querystring" locationName:"resourceArn" type:"string" required:"true"`
 
-	// The virtual router that the route is associated with.
+	// The tags to add to the resource. A tag is an array of key-value pairs. Tag
+	// keys can have a maximum character length of 128 characters, and tag values
+	// can have a maximum length of 256 characters.
 	//
-	// VirtualRouterName is a required field
-	VirtualRouterName *string `locationName:"virtualRouterName" min:"1" type:"string" required:"true"`
+	// Tags is a required field
+	Tags []*TagRef `locationName:"tags" type:"list" required:"true"`
 }
 
 // String returns the string representation
-func (s RouteData) String() string {
+func (s TagResourceInput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s RouteData) GoString() string {
+func (s TagResourceInput) GoString() string {
 	return s.String()
 }
 
-// SetMeshName sets the MeshName field's value.
-func (s *RouteData) SetMeshName(v string) *RouteData {
-	s.MeshName = &v
-	return s
+// 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
 }
 
-// SetMetadata sets the Metadata field's value.
-func (s *RouteData) SetMetadata(v *ResourceMetadata) *RouteData {
-	s.Metadata = v
+// SetResourceArn sets the ResourceArn field's value.
+func (s *TagResourceInput) SetResourceArn(v string) *TagResourceInput {
+	s.ResourceArn = &v
 	return s
 }
 
-// SetRouteName sets the RouteName field's value.
-func (s *RouteData) SetRouteName(v string) *RouteData {
-	s.RouteName = &v
+// SetTags sets the Tags field's value.
+func (s *TagResourceInput) SetTags(v []*TagRef) *TagResourceInput {
+	s.Tags = v
 	return s
 }
 
-// SetSpec sets the Spec field's value.
-func (s *RouteData) SetSpec(v *RouteSpec) *RouteData {
-	s.Spec = v
-	return s
+type TagResourceOutput struct {
+	_ struct{} `type:"structure"`
 }
 
-// SetStatus sets the Status field's value.
-func (s *RouteData) SetStatus(v *RouteStatus) *RouteData {
-	s.Status = v
-	return s
+// String returns the string representation
+func (s TagResourceOutput) String() string {
+	return awsutil.Prettify(s)
 }
 
-// SetVirtualRouterName sets the VirtualRouterName field's value.
-func (s *RouteData) SetVirtualRouterName(v string) *RouteData {
-	s.VirtualRouterName = &v
-	return s
+// GoString returns the string representation
+func (s TagResourceOutput) GoString() string {
+	return s.String()
 }
 
-// An object representing a route returned by a list operation.
-type RouteRef struct {
+// An object representing the TCP routing specification for a route.
+type TcpRoute struct {
 	_ struct{} `type:"structure"`
 
-	// The full Amazon Resource Name (ARN) for the route.
-	//
-	// Arn is a required field
-	Arn *string `locationName:"arn" type:"string" required:"true"`
-
-	// The name of the service mesh that the route resides in.
-	//
-	// MeshName is a required field
-	MeshName *string `locationName:"meshName" min:"1" type:"string" required:"true"`
-
-	// The name of the route.
-	//
-	// RouteName is a required field
-	RouteName *string `locationName:"routeName" min:"1" type:"string" required:"true"`
-
-	// The virtual router that the route is associated with.
+	// The action to take if a match is determined.
 	//
-	// VirtualRouterName is a required field
-	VirtualRouterName *string `locationName:"virtualRouterName" min:"1" type:"string" required:"true"`
+	// Action is a required field
+	Action *TcpRouteAction `locationName:"action" type:"structure" required:"true"`
 }
 
 // String returns the string representation
-func (s RouteRef) String() string {
+func (s TcpRoute) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s RouteRef) GoString() string {
+func (s TcpRoute) GoString() string {
 	return s.String()
 }
 
-// SetArn sets the Arn field's value.
-func (s *RouteRef) SetArn(v string) *RouteRef {
-	s.Arn = &v
-	return s
-}
-
-// SetMeshName sets the MeshName field's value.
-func (s *RouteRef) SetMeshName(v string) *RouteRef {
-	s.MeshName = &v
-	return s
-}
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *TcpRoute) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "TcpRoute"}
+	if s.Action == nil {
+		invalidParams.Add(request.NewErrParamRequired("Action"))
+	}
+	if s.Action != nil {
+		if err := s.Action.Validate(); err != nil {
+			invalidParams.AddNested("Action", err.(request.ErrInvalidParams))
+		}
+	}
 
-// SetRouteName sets the RouteName field's value.
-func (s *RouteRef) SetRouteName(v string) *RouteRef {
-	s.RouteName = &v
-	return s
+	if invalidParams.Len() > 0 {
+		return invalidParams
+	}
+	return nil
 }
 
-// SetVirtualRouterName sets the VirtualRouterName field's value.
-func (s *RouteRef) SetVirtualRouterName(v string) *RouteRef {
-	s.VirtualRouterName = &v
+// SetAction sets the Action field's value.
+func (s *TcpRoute) SetAction(v *TcpRouteAction) *TcpRoute {
+	s.Action = v
 	return s
 }
 
-// An object representing the specification of a route.
-type RouteSpec struct {
+// An object representing the traffic distribution requirements for matched
+// TCP requests.
+type TcpRouteAction struct {
 	_ struct{} `type:"structure"`
 
-	// The HTTP routing information for the route.
-	HttpRoute *HttpRoute `locationName:"httpRoute" type:"structure"`
+	// The targets that traffic is routed to when a request matches the route. You
+	// can specify one or more targets and their relative weights to distribute
+	// traffic with.
+	//
+	// WeightedTargets is a required field
+	WeightedTargets []*WeightedTarget `locationName:"weightedTargets" min:"1" type:"list" required:"true"`
 }
 
 // String returns the string representation
-func (s RouteSpec) String() string {
+func (s TcpRouteAction) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s RouteSpec) GoString() string {
+func (s TcpRouteAction) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *RouteSpec) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "RouteSpec"}
-	if s.HttpRoute != nil {
-		if err := s.HttpRoute.Validate(); err != nil {
-			invalidParams.AddNested("HttpRoute", err.(request.ErrInvalidParams))
+func (s *TcpRouteAction) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "TcpRouteAction"}
+	if s.WeightedTargets == nil {
+		invalidParams.Add(request.NewErrParamRequired("WeightedTargets"))
+	}
+	if s.WeightedTargets != nil && len(s.WeightedTargets) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("WeightedTargets", 1))
+	}
+	if s.WeightedTargets != nil {
+		for i, v := range s.WeightedTargets {
+			if v == nil {
+				continue
+			}
+			if err := v.Validate(); err != nil {
+				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "WeightedTargets", i), err.(request.ErrInvalidParams))
+			}
 		}
 	}
 
@@ -5541,62 +6732,116 @@ func (s *RouteSpec) Validate() error {
 	return nil
 }
 
-// SetHttpRoute sets the HttpRoute field's value.
-func (s *RouteSpec) SetHttpRoute(v *HttpRoute) *RouteSpec {
-	s.HttpRoute = v
+// SetWeightedTargets sets the WeightedTargets field's value.
+func (s *TcpRouteAction) SetWeightedTargets(v []*WeightedTarget) *TcpRouteAction {
+	s.WeightedTargets = v
 	return s
 }
 
-// An object representing the current status of a route.
-type RouteStatus struct {
+type UntagResourceInput struct {
 	_ struct{} `type:"structure"`
 
-	// The current status for the route.
+	// The Amazon Resource Name (ARN) of the resource to delete tags from.
 	//
-	// Status is a required field
-	Status *string `locationName:"status" type:"string" required:"true" enum:"RouteStatusCode"`
+	// ResourceArn is a required field
+	ResourceArn *string `location:"querystring" 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
-func (s RouteStatus) String() string {
+func (s UntagResourceInput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s RouteStatus) GoString() string {
+func (s UntagResourceInput) GoString() string {
 	return s.String()
 }
 
-// SetStatus sets the Status field's value.
-func (s *RouteStatus) SetStatus(v string) *RouteStatus {
-	s.Status = &v
+// 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
 }
 
-// An object representing the service discovery information for a virtual node.
-type ServiceDiscovery struct {
+// 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"`
+}
 
-	// Specifies the DNS information for the virtual node.
-	Dns *DnsServiceDiscovery `locationName:"dns" type:"structure"`
+// String returns the string representation
+func (s UntagResourceOutput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s UntagResourceOutput) GoString() string {
+	return s.String()
+}
+
+type UpdateMeshInput struct {
+	_ struct{} `type:"structure"`
+
+	// Unique, case-sensitive identifier that you provide to ensure the idempotency
+	// of therequest. Up to 36 letters, numbers, hyphens, and underscores are allowed.
+	ClientToken *string `locationName:"clientToken" type:"string" idempotencyToken:"true"`
+
+	// The name of the service mesh to update.
+	//
+	// MeshName is a required field
+	MeshName *string `location:"uri" locationName:"meshName" min:"1" type:"string" required:"true"`
+
+	// The service mesh specification to apply.
+	Spec *MeshSpec `locationName:"spec" type:"structure"`
 }
 
 // String returns the string representation
-func (s ServiceDiscovery) String() string {
+func (s UpdateMeshInput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s ServiceDiscovery) GoString() string {
+func (s UpdateMeshInput) GoString() string {
 	return s.String()
 }
 
 // Validate inspects the fields of the type to determine if they are valid.
-func (s *ServiceDiscovery) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "ServiceDiscovery"}
-	if s.Dns != nil {
-		if err := s.Dns.Validate(); err != nil {
-			invalidParams.AddNested("Dns", err.(request.ErrInvalidParams))
+func (s *UpdateMeshInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "UpdateMeshInput"}
+	if s.MeshName == nil {
+		invalidParams.Add(request.NewErrParamRequired("MeshName"))
+	}
+	if s.MeshName != nil && len(*s.MeshName) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("MeshName", 1))
+	}
+	if s.Spec != nil {
+		if err := s.Spec.Validate(); err != nil {
+			invalidParams.AddNested("Spec", err.(request.ErrInvalidParams))
 		}
 	}
 
@@ -5606,9 +6851,46 @@ func (s *ServiceDiscovery) Validate() error {
 	return nil
 }
 
-// SetDns sets the Dns field's value.
-func (s *ServiceDiscovery) SetDns(v *DnsServiceDiscovery) *ServiceDiscovery {
-	s.Dns = v
+// SetClientToken sets the ClientToken field's value.
+func (s *UpdateMeshInput) SetClientToken(v string) *UpdateMeshInput {
+	s.ClientToken = &v
+	return s
+}
+
+// SetMeshName sets the MeshName field's value.
+func (s *UpdateMeshInput) SetMeshName(v string) *UpdateMeshInput {
+	s.MeshName = &v
+	return s
+}
+
+// SetSpec sets the Spec field's value.
+func (s *UpdateMeshInput) SetSpec(v *MeshSpec) *UpdateMeshInput {
+	s.Spec = v
+	return s
+}
+
+type UpdateMeshOutput struct {
+	_ struct{} `type:"structure" payload:"Mesh"`
+
+	// An object representing a service mesh returned by a describe operation.
+	//
+	// Mesh is a required field
+	Mesh *MeshData `locationName:"mesh" type:"structure" required:"true"`
+}
+
+// String returns the string representation
+func (s UpdateMeshOutput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s UpdateMeshOutput) GoString() string {
+	return s.String()
+}
+
+// SetMesh sets the Mesh field's value.
+func (s *UpdateMeshOutput) SetMesh(v *MeshData) *UpdateMeshOutput {
+	s.Mesh = v
 	return s
 }
 
@@ -6251,7 +7533,11 @@ type VirtualNodeSpec struct {
 	// from. Currently only one listener is supported per virtual node.
 	Listeners []*Listener `locationName:"listeners" type:"list"`
 
-	// The service discovery information for the virtual node.
+	// The inbound and outbound access logging information for the virtual node.
+	Logging *Logging `locationName:"logging" type:"structure"`
+
+	// The service discovery information for the virtual node. If your virtual node
+	// does not expect ingress traffic, you can omit this parameter.
 	ServiceDiscovery *ServiceDiscovery `locationName:"serviceDiscovery" type:"structure"`
 }
 
@@ -6288,6 +7574,11 @@ func (s *VirtualNodeSpec) Validate() error {
 			}
 		}
 	}
+	if s.Logging != nil {
+		if err := s.Logging.Validate(); err != nil {
+			invalidParams.AddNested("Logging", err.(request.ErrInvalidParams))
+		}
+	}
 	if s.ServiceDiscovery != nil {
 		if err := s.ServiceDiscovery.Validate(); err != nil {
 			invalidParams.AddNested("ServiceDiscovery", err.(request.ErrInvalidParams))
@@ -6312,6 +7603,12 @@ func (s *VirtualNodeSpec) SetListeners(v []*Listener) *VirtualNodeSpec {
 	return s
 }
 
+// SetLogging sets the Logging field's value.
+func (s *VirtualNodeSpec) SetLogging(v *Logging) *VirtualNodeSpec {
+	s.Logging = v
+	return s
+}
+
 // SetServiceDiscovery sets the ServiceDiscovery field's value.
 func (s *VirtualNodeSpec) SetServiceDiscovery(v *ServiceDiscovery) *VirtualNodeSpec {
 	s.ServiceDiscovery = v
@@ -6556,7 +7853,7 @@ type VirtualRouterSpec struct {
 	// from. Currently only one listener is supported per virtual router.
 	//
 	// Listeners is a required field
-	Listeners []*VirtualRouterListener `locationName:"listeners" type:"list" required:"true"`
+	Listeners []*VirtualRouterListener `locationName:"listeners" min:"1" type:"list" required:"true"`
 }
 
 // String returns the string representation
@@ -6575,6 +7872,9 @@ func (s *VirtualRouterSpec) Validate() error {
 	if s.Listeners == nil {
 		invalidParams.Add(request.NewErrParamRequired("Listeners"))
 	}
+	if s.Listeners != nil && len(s.Listeners) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("Listeners", 1))
+	}
 	if s.Listeners != nil {
 		for i, v := range s.Listeners {
 			if v == nil {
@@ -6959,6 +8259,14 @@ func (s *WeightedTarget) SetWeight(v int64) *WeightedTarget {
 	return s
 }
 
+const (
+	// EgressFilterTypeAllowAll is a EgressFilterType enum value
+	EgressFilterTypeAllowAll = "ALLOW_ALL"
+
+	// EgressFilterTypeDropAll is a EgressFilterType enum value
+	EgressFilterTypeDropAll = "DROP_ALL"
+)
+
 const (
 	// MeshStatusCodeActive is a MeshStatusCode enum value
 	MeshStatusCodeActive = "ACTIVE"
diff --git a/vendor/github.com/aws/aws-sdk-go/service/appmesh/doc.go b/vendor/github.com/aws/aws-sdk-go/service/appmesh/doc.go
index 36d7924b1dde..c855b6985685 100644
--- a/vendor/github.com/aws/aws-sdk-go/service/appmesh/doc.go
+++ b/vendor/github.com/aws/aws-sdk-go/service/appmesh/doc.go
@@ -4,19 +4,19 @@
 // requests to AWS App Mesh.
 //
 // AWS App Mesh is a service mesh based on the Envoy proxy that makes it easy
-// to monitor and control containerized microservices. App Mesh standardizes
-// how your microservices communicate, giving you end-to-end visibility and
-// helping to ensure high-availability for your applications.
+// to monitor and control microservices. App Mesh standardizes how your microservices
+// communicate, giving you end-to-end visibility and helping to ensure high
+// availability for your applications.
 //
 // App Mesh gives you consistent visibility and network traffic controls for
-// every microservice in an application. You can use App Mesh with Amazon ECS
-// (using the Amazon EC2 launch type), Amazon EKS, and Kubernetes on AWS.
-//
-// App Mesh supports containerized microservice applications that use service
-// discovery naming for their components. To use App Mesh, you must have a containerized
-// application running on Amazon EC2 instances, hosted in either Amazon ECS,
-// Amazon EKS, or Kubernetes on AWS. For more information about service discovery
-// on Amazon ECS, see Service Discovery (http://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-discovery.html)
+// every microservice in an application. You can use App Mesh with AWS Fargate,
+// Amazon ECS, Amazon EKS, and Kubernetes on AWS.
+//
+// App Mesh supports microservice applications that use service discovery naming
+// for their components. To use App Mesh, you must have an application running
+// on Amazon EC2 instances, hosted in either Amazon ECS, Amazon EKS, or Kubernetes
+// on AWS. For more information about service discovery on Amazon ECS, see Service
+// Discovery (http://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-discovery.html)
 // in the Amazon Elastic Container Service Developer Guide. Kubernetes kube-dns
 // and coredns are supported. For more information, see DNS for Services and
 // Pods (https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/)
diff --git a/vendor/github.com/aws/aws-sdk-go/service/appmesh/errors.go b/vendor/github.com/aws/aws-sdk-go/service/appmesh/errors.go
index 697c04ec3618..28009c075022 100644
--- a/vendor/github.com/aws/aws-sdk-go/service/appmesh/errors.go
+++ b/vendor/github.com/aws/aws-sdk-go/service/appmesh/errors.go
@@ -65,4 +65,12 @@ const (
 	// for your account. For best results, use an increasing or variable sleep interval
 	// between requests.
 	ErrCodeTooManyRequestsException = "TooManyRequestsException"
+
+	// ErrCodeTooManyTagsException for service response error code
+	// "TooManyTagsException".
+	//
+	// The request exceeds the maximum allowed number of tags allowed per resource.
+	// The current limit is 50 user tags per resource. You must reduce the number
+	// of tags in the request. None of the tags in this request were applied.
+	ErrCodeTooManyTagsException = "TooManyTagsException"
 )
diff --git a/vendor/github.com/aws/aws-sdk-go/service/directconnect/api.go b/vendor/github.com/aws/aws-sdk-go/service/directconnect/api.go
index 6f7a410bceaf..733ae8f7323e 100644
--- a/vendor/github.com/aws/aws-sdk-go/service/directconnect/api.go
+++ b/vendor/github.com/aws/aws-sdk-go/service/directconnect/api.go
@@ -13,6 +13,89 @@ import (
 	"github.com/aws/aws-sdk-go/private/protocol/jsonrpc"
 )
 
+const opAcceptDirectConnectGatewayAssociationProposal = "AcceptDirectConnectGatewayAssociationProposal"
+
+// AcceptDirectConnectGatewayAssociationProposalRequest generates a "aws/request.Request" representing the
+// client's request for the AcceptDirectConnectGatewayAssociationProposal 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 AcceptDirectConnectGatewayAssociationProposal for more information on using the AcceptDirectConnectGatewayAssociationProposal
+// 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 AcceptDirectConnectGatewayAssociationProposalRequest method.
+//    req, resp := client.AcceptDirectConnectGatewayAssociationProposalRequest(params)
+//
+//    err := req.Send()
+//    if err == nil { // resp is now filled
+//        fmt.Println(resp)
+//    }
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/directconnect-2012-10-25/AcceptDirectConnectGatewayAssociationProposal
+func (c *DirectConnect) AcceptDirectConnectGatewayAssociationProposalRequest(input *AcceptDirectConnectGatewayAssociationProposalInput) (req *request.Request, output *AcceptDirectConnectGatewayAssociationProposalOutput) {
+	op := &request.Operation{
+		Name:       opAcceptDirectConnectGatewayAssociationProposal,
+		HTTPMethod: "POST",
+		HTTPPath:   "/",
+	}
+
+	if input == nil {
+		input = &AcceptDirectConnectGatewayAssociationProposalInput{}
+	}
+
+	output = &AcceptDirectConnectGatewayAssociationProposalOutput{}
+	req = c.newRequest(op, input, output)
+	return
+}
+
+// AcceptDirectConnectGatewayAssociationProposal API operation for AWS Direct Connect.
+//
+// Accepts a proposal request to attach a virtual private gateway to a Direct
+// Connect gateway.
+//
+// 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 AWS Direct Connect's
+// API operation AcceptDirectConnectGatewayAssociationProposal for usage and error information.
+//
+// Returned Error Codes:
+//   * ErrCodeServerException "DirectConnectServerException"
+//   A server-side error occurred.
+//
+//   * ErrCodeClientException "DirectConnectClientException"
+//   One or more parameters are not valid.
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/directconnect-2012-10-25/AcceptDirectConnectGatewayAssociationProposal
+func (c *DirectConnect) AcceptDirectConnectGatewayAssociationProposal(input *AcceptDirectConnectGatewayAssociationProposalInput) (*AcceptDirectConnectGatewayAssociationProposalOutput, error) {
+	req, out := c.AcceptDirectConnectGatewayAssociationProposalRequest(input)
+	return out, req.Send()
+}
+
+// AcceptDirectConnectGatewayAssociationProposalWithContext is the same as AcceptDirectConnectGatewayAssociationProposal with the addition of
+// the ability to pass a context and additional request options.
+//
+// See AcceptDirectConnectGatewayAssociationProposal 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 *DirectConnect) AcceptDirectConnectGatewayAssociationProposalWithContext(ctx aws.Context, input *AcceptDirectConnectGatewayAssociationProposalInput, opts ...request.Option) (*AcceptDirectConnectGatewayAssociationProposalOutput, error) {
+	req, out := c.AcceptDirectConnectGatewayAssociationProposalRequest(input)
+	req.SetContext(ctx)
+	req.ApplyOptions(opts...)
+	return out, req.Send()
+}
+
 const opAllocateConnectionOnInterconnect = "AllocateConnectionOnInterconnect"
 
 // AllocateConnectionOnInterconnectRequest generates a "aws/request.Request" representing the
@@ -69,7 +152,7 @@ func (c *DirectConnect) AllocateConnectionOnInterconnectRequest(input *AllocateC
 // Allocates a VLAN number and a specified amount of bandwidth for use by a
 // hosted connection on the specified interconnect.
 //
-// Intended for use by AWS Direct Connect partners only.
+// Intended for use by AWS Direct Connect Partners only.
 //
 // 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
@@ -156,12 +239,15 @@ func (c *DirectConnect) AllocateHostedConnectionRequest(input *AllocateHostedCon
 // AllocateHostedConnection API operation for AWS Direct Connect.
 //
 // Creates a hosted connection on the specified interconnect or a link aggregation
-// group (LAG).
+// group (LAG) of interconnects.
 //
-// Allocates a VLAN number and a specified amount of bandwidth for use by a
-// hosted connection on the specified interconnect or LAG.
+// Allocates a VLAN number and a specified amount of capacity (bandwidth) for
+// use by a hosted connection on the specified interconnect or LAG of interconnects.
+// AWS polices the hosted connection for the specified capacity and the AWS
+// Direct Connect Partner must also police the hosted connection for the specified
+// capacity.
 //
-// Intended for use by AWS Direct Connect partners only.
+// Intended for use by AWS Direct Connect Partners only.
 //
 // 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
@@ -527,7 +613,7 @@ func (c *DirectConnect) AssociateHostedConnectionRequest(input *AssociateHostedC
 // fails. This action temporarily interrupts the hosted connection's connectivity
 // to AWS as it is being migrated.
 //
-// Intended for use by AWS Direct Connect partners only.
+// Intended for use by AWS Direct Connect Partners only.
 //
 // 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
@@ -1280,6 +1366,93 @@ func (c *DirectConnect) CreateDirectConnectGatewayAssociationWithContext(ctx aws
 	return out, req.Send()
 }
 
+const opCreateDirectConnectGatewayAssociationProposal = "CreateDirectConnectGatewayAssociationProposal"
+
+// CreateDirectConnectGatewayAssociationProposalRequest generates a "aws/request.Request" representing the
+// client's request for the CreateDirectConnectGatewayAssociationProposal 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 CreateDirectConnectGatewayAssociationProposal for more information on using the CreateDirectConnectGatewayAssociationProposal
+// 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 CreateDirectConnectGatewayAssociationProposalRequest method.
+//    req, resp := client.CreateDirectConnectGatewayAssociationProposalRequest(params)
+//
+//    err := req.Send()
+//    if err == nil { // resp is now filled
+//        fmt.Println(resp)
+//    }
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/directconnect-2012-10-25/CreateDirectConnectGatewayAssociationProposal
+func (c *DirectConnect) CreateDirectConnectGatewayAssociationProposalRequest(input *CreateDirectConnectGatewayAssociationProposalInput) (req *request.Request, output *CreateDirectConnectGatewayAssociationProposalOutput) {
+	op := &request.Operation{
+		Name:       opCreateDirectConnectGatewayAssociationProposal,
+		HTTPMethod: "POST",
+		HTTPPath:   "/",
+	}
+
+	if input == nil {
+		input = &CreateDirectConnectGatewayAssociationProposalInput{}
+	}
+
+	output = &CreateDirectConnectGatewayAssociationProposalOutput{}
+	req = c.newRequest(op, input, output)
+	return
+}
+
+// CreateDirectConnectGatewayAssociationProposal API operation for AWS Direct Connect.
+//
+// Creates a proposal to associate the specified virtual private gateway with
+// the specified Direct Connect gateway.
+//
+// You can only associate a Direct Connect gateway and virtual private gateway
+// when the account that owns the Direct Connect gateway and the account that
+// owns the virtual private gateway have the same payer ID.
+//
+// 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 AWS Direct Connect's
+// API operation CreateDirectConnectGatewayAssociationProposal for usage and error information.
+//
+// Returned Error Codes:
+//   * ErrCodeServerException "DirectConnectServerException"
+//   A server-side error occurred.
+//
+//   * ErrCodeClientException "DirectConnectClientException"
+//   One or more parameters are not valid.
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/directconnect-2012-10-25/CreateDirectConnectGatewayAssociationProposal
+func (c *DirectConnect) CreateDirectConnectGatewayAssociationProposal(input *CreateDirectConnectGatewayAssociationProposalInput) (*CreateDirectConnectGatewayAssociationProposalOutput, error) {
+	req, out := c.CreateDirectConnectGatewayAssociationProposalRequest(input)
+	return out, req.Send()
+}
+
+// CreateDirectConnectGatewayAssociationProposalWithContext is the same as CreateDirectConnectGatewayAssociationProposal with the addition of
+// the ability to pass a context and additional request options.
+//
+// See CreateDirectConnectGatewayAssociationProposal 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 *DirectConnect) CreateDirectConnectGatewayAssociationProposalWithContext(ctx aws.Context, input *CreateDirectConnectGatewayAssociationProposalInput, opts ...request.Option) (*CreateDirectConnectGatewayAssociationProposalOutput, error) {
+	req, out := c.CreateDirectConnectGatewayAssociationProposalRequest(input)
+	req.SetContext(ctx)
+	req.ApplyOptions(opts...)
+	return out, req.Send()
+}
+
 const opCreateInterconnect = "CreateInterconnect"
 
 // CreateInterconnectRequest generates a "aws/request.Request" representing the
@@ -1324,16 +1497,16 @@ func (c *DirectConnect) CreateInterconnectRequest(input *CreateInterconnectInput
 
 // CreateInterconnect API operation for AWS Direct Connect.
 //
-// Creates an interconnect between an AWS Direct Connect partner's network and
+// Creates an interconnect between an AWS Direct Connect Partner's network and
 // a specific AWS Direct Connect location.
 //
-// An interconnect is a connection which is capable of hosting other connections.
-// The partner can use an interconnect to provide sub-1Gbps AWS Direct Connect
-// service to tier 2 customers who do not have their own connections. Like a
-// standard connection, an interconnect links the partner's network to an AWS
-// Direct Connect location over a standard Ethernet fiber-optic cable. One end
-// is connected to the partner's router, the other to an AWS Direct Connect
-// router.
+// An interconnect is a connection that is capable of hosting other connections.
+// The AWS Direct Connect partner can use an interconnect to provide AWS Direct
+// Connect hosted connections to customers through their own network services.
+// Like a standard connection, an interconnect links the partner's network to
+// an AWS Direct Connect location over a standard Ethernet fiber-optic cable.
+// One end is connected to the partner's router, the other to an AWS Direct
+// Connect router.
 //
 // You can automatically add the new interconnect to a link aggregation group
 // (LAG) by specifying a LAG ID in the request. This ensures that the new interconnect
@@ -1341,12 +1514,12 @@ func (c *DirectConnect) CreateInterconnectRequest(input *CreateInterconnectInput
 // LAG. If there are no available ports on the endpoint, the request fails and
 // no interconnect is created.
 //
-// For each end customer, the AWS Direct Connect partner provisions a connection
-// on their interconnect by calling AllocateConnectionOnInterconnect. The end
-// customer can then connect to AWS resources by creating a virtual interface
-// on their connection, using the VLAN assigned to them by the partner.
+// For each end customer, the AWS Direct Connect Partner provisions a connection
+// on their interconnect by calling AllocateHostedConnection. The end customer
+// can then connect to AWS resources by creating a virtual interface on their
+// connection, using the VLAN assigned to them by the AWS Direct Connect Partner.
 //
-// Intended for use by AWS Direct Connect partners only.
+// Intended for use by AWS Direct Connect Partners only.
 //
 // 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
@@ -1450,7 +1623,7 @@ func (c *DirectConnect) CreateLagRequest(input *CreateLagInput) (req *request.Re
 // and re-associated with the LAG. The connection ID does not change.
 //
 // If the AWS account used to create a LAG is a registered AWS Direct Connect
-// partner, the LAG is automatically enabled to host sub-connections. For a
+// Partner, the LAG is automatically enabled to host sub-connections. For a
 // LAG owned by a partner, any associated virtual interfaces cannot be directly
 // configured.
 //
@@ -2006,6 +2179,89 @@ func (c *DirectConnect) DeleteDirectConnectGatewayAssociationWithContext(ctx aws
 	return out, req.Send()
 }
 
+const opDeleteDirectConnectGatewayAssociationProposal = "DeleteDirectConnectGatewayAssociationProposal"
+
+// DeleteDirectConnectGatewayAssociationProposalRequest generates a "aws/request.Request" representing the
+// client's request for the DeleteDirectConnectGatewayAssociationProposal 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 DeleteDirectConnectGatewayAssociationProposal for more information on using the DeleteDirectConnectGatewayAssociationProposal
+// 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 DeleteDirectConnectGatewayAssociationProposalRequest method.
+//    req, resp := client.DeleteDirectConnectGatewayAssociationProposalRequest(params)
+//
+//    err := req.Send()
+//    if err == nil { // resp is now filled
+//        fmt.Println(resp)
+//    }
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/directconnect-2012-10-25/DeleteDirectConnectGatewayAssociationProposal
+func (c *DirectConnect) DeleteDirectConnectGatewayAssociationProposalRequest(input *DeleteDirectConnectGatewayAssociationProposalInput) (req *request.Request, output *DeleteDirectConnectGatewayAssociationProposalOutput) {
+	op := &request.Operation{
+		Name:       opDeleteDirectConnectGatewayAssociationProposal,
+		HTTPMethod: "POST",
+		HTTPPath:   "/",
+	}
+
+	if input == nil {
+		input = &DeleteDirectConnectGatewayAssociationProposalInput{}
+	}
+
+	output = &DeleteDirectConnectGatewayAssociationProposalOutput{}
+	req = c.newRequest(op, input, output)
+	return
+}
+
+// DeleteDirectConnectGatewayAssociationProposal API operation for AWS Direct Connect.
+//
+// Deletes the association proposal request between the specified Direct Connect
+// gateway and virtual private gateway.
+//
+// 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 AWS Direct Connect's
+// API operation DeleteDirectConnectGatewayAssociationProposal for usage and error information.
+//
+// Returned Error Codes:
+//   * ErrCodeServerException "DirectConnectServerException"
+//   A server-side error occurred.
+//
+//   * ErrCodeClientException "DirectConnectClientException"
+//   One or more parameters are not valid.
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/directconnect-2012-10-25/DeleteDirectConnectGatewayAssociationProposal
+func (c *DirectConnect) DeleteDirectConnectGatewayAssociationProposal(input *DeleteDirectConnectGatewayAssociationProposalInput) (*DeleteDirectConnectGatewayAssociationProposalOutput, error) {
+	req, out := c.DeleteDirectConnectGatewayAssociationProposalRequest(input)
+	return out, req.Send()
+}
+
+// DeleteDirectConnectGatewayAssociationProposalWithContext is the same as DeleteDirectConnectGatewayAssociationProposal with the addition of
+// the ability to pass a context and additional request options.
+//
+// See DeleteDirectConnectGatewayAssociationProposal 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 *DirectConnect) DeleteDirectConnectGatewayAssociationProposalWithContext(ctx aws.Context, input *DeleteDirectConnectGatewayAssociationProposalInput, opts ...request.Option) (*DeleteDirectConnectGatewayAssociationProposalOutput, error) {
+	req, out := c.DeleteDirectConnectGatewayAssociationProposalRequest(input)
+	req.SetContext(ctx)
+	req.ApplyOptions(opts...)
+	return out, req.Send()
+}
+
 const opDeleteInterconnect = "DeleteInterconnect"
 
 // DeleteInterconnectRequest generates a "aws/request.Request" representing the
@@ -2052,7 +2308,7 @@ func (c *DirectConnect) DeleteInterconnectRequest(input *DeleteInterconnectInput
 //
 // Deletes the specified interconnect.
 //
-// Intended for use by AWS Direct Connect partners only.
+// Intended for use by AWS Direct Connect Partners only.
 //
 // 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
@@ -2489,7 +2745,7 @@ func (c *DirectConnect) DescribeConnectionsOnInterconnectRequest(input *Describe
 //
 // Lists the connections that have been provisioned on the specified interconnect.
 //
-// Intended for use by AWS Direct Connect partners only.
+// Intended for use by AWS Direct Connect Partners only.
 //
 // 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
@@ -2531,6 +2787,89 @@ func (c *DirectConnect) DescribeConnectionsOnInterconnectWithContext(ctx aws.Con
 	return out, req.Send()
 }
 
+const opDescribeDirectConnectGatewayAssociationProposals = "DescribeDirectConnectGatewayAssociationProposals"
+
+// DescribeDirectConnectGatewayAssociationProposalsRequest generates a "aws/request.Request" representing the
+// client's request for the DescribeDirectConnectGatewayAssociationProposals 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 DescribeDirectConnectGatewayAssociationProposals for more information on using the DescribeDirectConnectGatewayAssociationProposals
+// 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 DescribeDirectConnectGatewayAssociationProposalsRequest method.
+//    req, resp := client.DescribeDirectConnectGatewayAssociationProposalsRequest(params)
+//
+//    err := req.Send()
+//    if err == nil { // resp is now filled
+//        fmt.Println(resp)
+//    }
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/directconnect-2012-10-25/DescribeDirectConnectGatewayAssociationProposals
+func (c *DirectConnect) DescribeDirectConnectGatewayAssociationProposalsRequest(input *DescribeDirectConnectGatewayAssociationProposalsInput) (req *request.Request, output *DescribeDirectConnectGatewayAssociationProposalsOutput) {
+	op := &request.Operation{
+		Name:       opDescribeDirectConnectGatewayAssociationProposals,
+		HTTPMethod: "POST",
+		HTTPPath:   "/",
+	}
+
+	if input == nil {
+		input = &DescribeDirectConnectGatewayAssociationProposalsInput{}
+	}
+
+	output = &DescribeDirectConnectGatewayAssociationProposalsOutput{}
+	req = c.newRequest(op, input, output)
+	return
+}
+
+// DescribeDirectConnectGatewayAssociationProposals API operation for AWS Direct Connect.
+//
+// Describes one or more association proposals for connection between a virtual
+// private gateway and a Direct Connect gateway.
+//
+// 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 AWS Direct Connect's
+// API operation DescribeDirectConnectGatewayAssociationProposals for usage and error information.
+//
+// Returned Error Codes:
+//   * ErrCodeServerException "DirectConnectServerException"
+//   A server-side error occurred.
+//
+//   * ErrCodeClientException "DirectConnectClientException"
+//   One or more parameters are not valid.
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/directconnect-2012-10-25/DescribeDirectConnectGatewayAssociationProposals
+func (c *DirectConnect) DescribeDirectConnectGatewayAssociationProposals(input *DescribeDirectConnectGatewayAssociationProposalsInput) (*DescribeDirectConnectGatewayAssociationProposalsOutput, error) {
+	req, out := c.DescribeDirectConnectGatewayAssociationProposalsRequest(input)
+	return out, req.Send()
+}
+
+// DescribeDirectConnectGatewayAssociationProposalsWithContext is the same as DescribeDirectConnectGatewayAssociationProposals with the addition of
+// the ability to pass a context and additional request options.
+//
+// See DescribeDirectConnectGatewayAssociationProposals 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 *DirectConnect) DescribeDirectConnectGatewayAssociationProposalsWithContext(ctx aws.Context, input *DescribeDirectConnectGatewayAssociationProposalsInput, opts ...request.Option) (*DescribeDirectConnectGatewayAssociationProposalsOutput, error) {
+	req, out := c.DescribeDirectConnectGatewayAssociationProposalsRequest(input)
+	req.SetContext(ctx)
+	req.ApplyOptions(opts...)
+	return out, req.Send()
+}
+
 const opDescribeDirectConnectGatewayAssociations = "DescribeDirectConnectGatewayAssociations"
 
 // DescribeDirectConnectGatewayAssociationsRequest generates a "aws/request.Request" representing the
@@ -2838,7 +3177,7 @@ func (c *DirectConnect) DescribeHostedConnectionsRequest(input *DescribeHostedCo
 // Lists the hosted connections that have been provisioned on the specified
 // interconnect or link aggregation group (LAG).
 //
-// Intended for use by AWS Direct Connect partners only.
+// Intended for use by AWS Direct Connect Partners only.
 //
 // 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
@@ -3616,7 +3955,7 @@ func (c *DirectConnect) DisassociateConnectionFromLagRequest(input *Disassociate
 // is not deleted; to delete the connection, use the DeleteConnection request).
 // If the LAG has associated virtual interfaces or hosted connections, they
 // remain associated with the LAG. A disassociated connection owned by an AWS
-// Direct Connect partner is automatically converted to an interconnect.
+// Direct Connect Partner is automatically converted to an interconnect.
 //
 // If disassociating the connection would cause the LAG to fall below its setting
 // for minimum number of operational connections, the request fails, except
@@ -3835,6 +4174,90 @@ func (c *DirectConnect) UntagResourceWithContext(ctx aws.Context, input *UntagRe
 	return out, req.Send()
 }
 
+const opUpdateDirectConnectGatewayAssociation = "UpdateDirectConnectGatewayAssociation"
+
+// UpdateDirectConnectGatewayAssociationRequest generates a "aws/request.Request" representing the
+// client's request for the UpdateDirectConnectGatewayAssociation 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 UpdateDirectConnectGatewayAssociation for more information on using the UpdateDirectConnectGatewayAssociation
+// 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 UpdateDirectConnectGatewayAssociationRequest method.
+//    req, resp := client.UpdateDirectConnectGatewayAssociationRequest(params)
+//
+//    err := req.Send()
+//    if err == nil { // resp is now filled
+//        fmt.Println(resp)
+//    }
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/directconnect-2012-10-25/UpdateDirectConnectGatewayAssociation
+func (c *DirectConnect) UpdateDirectConnectGatewayAssociationRequest(input *UpdateDirectConnectGatewayAssociationInput) (req *request.Request, output *UpdateDirectConnectGatewayAssociationOutput) {
+	op := &request.Operation{
+		Name:       opUpdateDirectConnectGatewayAssociation,
+		HTTPMethod: "POST",
+		HTTPPath:   "/",
+	}
+
+	if input == nil {
+		input = &UpdateDirectConnectGatewayAssociationInput{}
+	}
+
+	output = &UpdateDirectConnectGatewayAssociationOutput{}
+	req = c.newRequest(op, input, output)
+	return
+}
+
+// UpdateDirectConnectGatewayAssociation API operation for AWS Direct Connect.
+//
+// Updates the specified attributes of the Direct Connect gateway association.
+//
+// Add or remove prefixes from the association.
+//
+// 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 AWS Direct Connect's
+// API operation UpdateDirectConnectGatewayAssociation for usage and error information.
+//
+// Returned Error Codes:
+//   * ErrCodeServerException "DirectConnectServerException"
+//   A server-side error occurred.
+//
+//   * ErrCodeClientException "DirectConnectClientException"
+//   One or more parameters are not valid.
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/directconnect-2012-10-25/UpdateDirectConnectGatewayAssociation
+func (c *DirectConnect) UpdateDirectConnectGatewayAssociation(input *UpdateDirectConnectGatewayAssociationInput) (*UpdateDirectConnectGatewayAssociationOutput, error) {
+	req, out := c.UpdateDirectConnectGatewayAssociationRequest(input)
+	return out, req.Send()
+}
+
+// UpdateDirectConnectGatewayAssociationWithContext is the same as UpdateDirectConnectGatewayAssociation with the addition of
+// the ability to pass a context and additional request options.
+//
+// See UpdateDirectConnectGatewayAssociation 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 *DirectConnect) UpdateDirectConnectGatewayAssociationWithContext(ctx aws.Context, input *UpdateDirectConnectGatewayAssociationInput, opts ...request.Option) (*UpdateDirectConnectGatewayAssociationOutput, error) {
+	req, out := c.UpdateDirectConnectGatewayAssociationRequest(input)
+	req.SetContext(ctx)
+	req.ApplyOptions(opts...)
+	return out, req.Send()
+}
+
 const opUpdateLag = "UpdateLag"
 
 // UpdateLagRequest generates a "aws/request.Request" representing the
@@ -4020,11 +4443,112 @@ func (c *DirectConnect) UpdateVirtualInterfaceAttributesWithContext(ctx aws.Cont
 	return out, req.Send()
 }
 
+type AcceptDirectConnectGatewayAssociationProposalInput struct {
+	_ struct{} `type:"structure"`
+
+	// The ID of the AWS account that owns the virtual private gateway.
+	//
+	// AssociatedGatewayOwnerAccount is a required field
+	AssociatedGatewayOwnerAccount *string `locationName:"associatedGatewayOwnerAccount" type:"string" required:"true"`
+
+	// The ID of the Direct Connect gateway.
+	//
+	// DirectConnectGatewayId is a required field
+	DirectConnectGatewayId *string `locationName:"directConnectGatewayId" type:"string" required:"true"`
+
+	// Overrides the Amazon VPC prefixes advertised to the Direct Connect gateway.
+	OverrideAllowedPrefixesToDirectConnectGateway []*RouteFilterPrefix `locationName:"overrideAllowedPrefixesToDirectConnectGateway" type:"list"`
+
+	// The ID of the request proposal.
+	//
+	// ProposalId is a required field
+	ProposalId *string `locationName:"proposalId" type:"string" required:"true"`
+}
+
+// String returns the string representation
+func (s AcceptDirectConnectGatewayAssociationProposalInput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s AcceptDirectConnectGatewayAssociationProposalInput) GoString() string {
+	return s.String()
+}
+
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *AcceptDirectConnectGatewayAssociationProposalInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "AcceptDirectConnectGatewayAssociationProposalInput"}
+	if s.AssociatedGatewayOwnerAccount == nil {
+		invalidParams.Add(request.NewErrParamRequired("AssociatedGatewayOwnerAccount"))
+	}
+	if s.DirectConnectGatewayId == nil {
+		invalidParams.Add(request.NewErrParamRequired("DirectConnectGatewayId"))
+	}
+	if s.ProposalId == nil {
+		invalidParams.Add(request.NewErrParamRequired("ProposalId"))
+	}
+
+	if invalidParams.Len() > 0 {
+		return invalidParams
+	}
+	return nil
+}
+
+// SetAssociatedGatewayOwnerAccount sets the AssociatedGatewayOwnerAccount field's value.
+func (s *AcceptDirectConnectGatewayAssociationProposalInput) SetAssociatedGatewayOwnerAccount(v string) *AcceptDirectConnectGatewayAssociationProposalInput {
+	s.AssociatedGatewayOwnerAccount = &v
+	return s
+}
+
+// SetDirectConnectGatewayId sets the DirectConnectGatewayId field's value.
+func (s *AcceptDirectConnectGatewayAssociationProposalInput) SetDirectConnectGatewayId(v string) *AcceptDirectConnectGatewayAssociationProposalInput {
+	s.DirectConnectGatewayId = &v
+	return s
+}
+
+// SetOverrideAllowedPrefixesToDirectConnectGateway sets the OverrideAllowedPrefixesToDirectConnectGateway field's value.
+func (s *AcceptDirectConnectGatewayAssociationProposalInput) SetOverrideAllowedPrefixesToDirectConnectGateway(v []*RouteFilterPrefix) *AcceptDirectConnectGatewayAssociationProposalInput {
+	s.OverrideAllowedPrefixesToDirectConnectGateway = v
+	return s
+}
+
+// SetProposalId sets the ProposalId field's value.
+func (s *AcceptDirectConnectGatewayAssociationProposalInput) SetProposalId(v string) *AcceptDirectConnectGatewayAssociationProposalInput {
+	s.ProposalId = &v
+	return s
+}
+
+type AcceptDirectConnectGatewayAssociationProposalOutput struct {
+	_ struct{} `type:"structure"`
+
+	// Information about an association between a Direct Connect gateway and a virtual
+	// private gateway.
+	DirectConnectGatewayAssociation *GatewayAssociation `locationName:"directConnectGatewayAssociation" type:"structure"`
+}
+
+// String returns the string representation
+func (s AcceptDirectConnectGatewayAssociationProposalOutput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s AcceptDirectConnectGatewayAssociationProposalOutput) GoString() string {
+	return s.String()
+}
+
+// SetDirectConnectGatewayAssociation sets the DirectConnectGatewayAssociation field's value.
+func (s *AcceptDirectConnectGatewayAssociationProposalOutput) SetDirectConnectGatewayAssociation(v *GatewayAssociation) *AcceptDirectConnectGatewayAssociationProposalOutput {
+	s.DirectConnectGatewayAssociation = v
+	return s
+}
+
 type AllocateConnectionOnInterconnectInput struct {
 	_ struct{} `type:"structure"`
 
-	// The bandwidth of the connection, in Mbps. The possible values are 50Mbps,
-	// 100Mbps, 200Mbps, 300Mbps, 400Mbps, and 500Mbps.
+	// The bandwidth of the connection. The possible values are 50Mbps, 100Mbps,
+	// 200Mbps, 300Mbps, 400Mbps, 500Mbps, 1Gbps, 2Gbps, 5Gbps, and 10Gbps. Note
+	// that only those AWS Direct Connect Partners who have met specific requirements
+	// are allowed to create a 1Gbps, 2Gbps, 5Gbps or 10Gbps hosted connection.
 	//
 	// Bandwidth is a required field
 	Bandwidth *string `locationName:"bandwidth" type:"string" required:"true"`
@@ -4119,8 +4643,10 @@ func (s *AllocateConnectionOnInterconnectInput) SetVlan(v int64) *AllocateConnec
 type AllocateHostedConnectionInput struct {
 	_ struct{} `type:"structure"`
 
-	// The bandwidth of the hosted connection, in Mbps. The possible values are
-	// 50Mbps, 100Mbps, 200Mbps, 300Mbps, 400Mbps, and 500Mbps.
+	// The bandwidth of the connection. The possible values are 50Mbps, 100Mbps,
+	// 200Mbps, 300Mbps, 400Mbps, 500Mbps, 1Gbps, 2Gbps, 5Gbps, and 10Gbps. Note
+	// that only those AWS Direct Connect Partners who have met specific requirements
+	// are allowed to create a 1Gbps, 2Gbps, 5Gbps or 10Gbps hosted connection.
 	//
 	// Bandwidth is a required field
 	Bandwidth *string `locationName:"bandwidth" type:"string" required:"true"`
@@ -4509,6 +5035,57 @@ func (s *AssociateVirtualInterfaceInput) SetVirtualInterfaceId(v string) *Associ
 	return s
 }
 
+// Information about the associated gateway.
+type AssociatedGateway struct {
+	_ struct{} `type:"structure"`
+
+	// The ID of the associated gateway.
+	Id *string `locationName:"id" type:"string"`
+
+	// The ID of the AWS account that owns the associated virtual private gateway.
+	OwnerAccount *string `locationName:"ownerAccount" type:"string"`
+
+	// The Region where the associated gateway is located.
+	Region *string `locationName:"region" type:"string"`
+
+	// The type of associated gateway.
+	Type *string `locationName:"type" type:"string" enum:"GatewayType"`
+}
+
+// String returns the string representation
+func (s AssociatedGateway) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s AssociatedGateway) GoString() string {
+	return s.String()
+}
+
+// SetId sets the Id field's value.
+func (s *AssociatedGateway) SetId(v string) *AssociatedGateway {
+	s.Id = &v
+	return s
+}
+
+// SetOwnerAccount sets the OwnerAccount field's value.
+func (s *AssociatedGateway) SetOwnerAccount(v string) *AssociatedGateway {
+	s.OwnerAccount = &v
+	return s
+}
+
+// SetRegion sets the Region field's value.
+func (s *AssociatedGateway) SetRegion(v string) *AssociatedGateway {
+	s.Region = &v
+	return s
+}
+
+// SetType sets the Type field's value.
+func (s *AssociatedGateway) SetType(v string) *AssociatedGateway {
+	s.Type = &v
+	return s
+}
+
 // Information about a BGP peer.
 type BGPPeer struct {
 	_ struct{} `type:"structure"`
@@ -4717,7 +5294,7 @@ type ConfirmPrivateVirtualInterfaceInput struct {
 	DirectConnectGatewayId *string `locationName:"directConnectGatewayId" type:"string"`
 
 	// The ID of the virtual private gateway.
-	VirtualGatewayId *string `locationName:"virtualGatewayId" type:"string"`
+	VirtualGatewayId *string `locationName:"virtualGatewayId" deprecated:"true" type:"string"`
 
 	// The ID of the virtual interface.
 	//
@@ -5238,15 +5815,19 @@ func (s *CreateConnectionInput) SetLocation(v string) *CreateConnectionInput {
 type CreateDirectConnectGatewayAssociationInput struct {
 	_ struct{} `type:"structure"`
 
+	// The Amazon VPC prefixes to advertise to the Direct Connect gateway
+	AddAllowedPrefixesToDirectConnectGateway []*RouteFilterPrefix `locationName:"addAllowedPrefixesToDirectConnectGateway" type:"list"`
+
 	// The ID of the Direct Connect gateway.
 	//
 	// DirectConnectGatewayId is a required field
 	DirectConnectGatewayId *string `locationName:"directConnectGatewayId" type:"string" required:"true"`
 
 	// The ID of the virtual private gateway.
-	//
-	// VirtualGatewayId is a required field
-	VirtualGatewayId *string `locationName:"virtualGatewayId" type:"string" required:"true"`
+	GatewayId *string `locationName:"gatewayId" type:"string"`
+
+	// The ID of the virtual private gateway.
+	VirtualGatewayId *string `locationName:"virtualGatewayId" deprecated:"true" type:"string"`
 }
 
 // String returns the string representation
@@ -5265,9 +5846,6 @@ func (s *CreateDirectConnectGatewayAssociationInput) Validate() error {
 	if s.DirectConnectGatewayId == nil {
 		invalidParams.Add(request.NewErrParamRequired("DirectConnectGatewayId"))
 	}
-	if s.VirtualGatewayId == nil {
-		invalidParams.Add(request.NewErrParamRequired("VirtualGatewayId"))
-	}
 
 	if invalidParams.Len() > 0 {
 		return invalidParams
@@ -5275,38 +5853,157 @@ func (s *CreateDirectConnectGatewayAssociationInput) Validate() error {
 	return nil
 }
 
+// SetAddAllowedPrefixesToDirectConnectGateway sets the AddAllowedPrefixesToDirectConnectGateway field's value.
+func (s *CreateDirectConnectGatewayAssociationInput) SetAddAllowedPrefixesToDirectConnectGateway(v []*RouteFilterPrefix) *CreateDirectConnectGatewayAssociationInput {
+	s.AddAllowedPrefixesToDirectConnectGateway = v
+	return s
+}
+
 // SetDirectConnectGatewayId sets the DirectConnectGatewayId field's value.
 func (s *CreateDirectConnectGatewayAssociationInput) SetDirectConnectGatewayId(v string) *CreateDirectConnectGatewayAssociationInput {
 	s.DirectConnectGatewayId = &v
 	return s
 }
 
+// SetGatewayId sets the GatewayId field's value.
+func (s *CreateDirectConnectGatewayAssociationInput) SetGatewayId(v string) *CreateDirectConnectGatewayAssociationInput {
+	s.GatewayId = &v
+	return s
+}
+
 // SetVirtualGatewayId sets the VirtualGatewayId field's value.
 func (s *CreateDirectConnectGatewayAssociationInput) SetVirtualGatewayId(v string) *CreateDirectConnectGatewayAssociationInput {
 	s.VirtualGatewayId = &v
 	return s
 }
 
-type CreateDirectConnectGatewayAssociationOutput struct {
+type CreateDirectConnectGatewayAssociationOutput struct {
+	_ struct{} `type:"structure"`
+
+	// The association to be created.
+	DirectConnectGatewayAssociation *GatewayAssociation `locationName:"directConnectGatewayAssociation" type:"structure"`
+}
+
+// String returns the string representation
+func (s CreateDirectConnectGatewayAssociationOutput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s CreateDirectConnectGatewayAssociationOutput) GoString() string {
+	return s.String()
+}
+
+// SetDirectConnectGatewayAssociation sets the DirectConnectGatewayAssociation field's value.
+func (s *CreateDirectConnectGatewayAssociationOutput) SetDirectConnectGatewayAssociation(v *GatewayAssociation) *CreateDirectConnectGatewayAssociationOutput {
+	s.DirectConnectGatewayAssociation = v
+	return s
+}
+
+type CreateDirectConnectGatewayAssociationProposalInput struct {
+	_ struct{} `type:"structure"`
+
+	// The Amazon VPC prefixes to advertise to the Direct Connect gateway.
+	AddAllowedPrefixesToDirectConnectGateway []*RouteFilterPrefix `locationName:"addAllowedPrefixesToDirectConnectGateway" type:"list"`
+
+	// The ID of the Direct Connect gateway.
+	//
+	// DirectConnectGatewayId is a required field
+	DirectConnectGatewayId *string `locationName:"directConnectGatewayId" type:"string" required:"true"`
+
+	// The ID of the AWS account that owns the Direct Connect gateway.
+	//
+	// DirectConnectGatewayOwnerAccount is a required field
+	DirectConnectGatewayOwnerAccount *string `locationName:"directConnectGatewayOwnerAccount" type:"string" required:"true"`
+
+	// The ID of the virtual private gateway.
+	//
+	// GatewayId is a required field
+	GatewayId *string `locationName:"gatewayId" type:"string" required:"true"`
+
+	// The Amazon VPC prefixes to no longer advertise to the Direct Connect gateway.
+	RemoveAllowedPrefixesToDirectConnectGateway []*RouteFilterPrefix `locationName:"removeAllowedPrefixesToDirectConnectGateway" type:"list"`
+}
+
+// String returns the string representation
+func (s CreateDirectConnectGatewayAssociationProposalInput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s CreateDirectConnectGatewayAssociationProposalInput) GoString() string {
+	return s.String()
+}
+
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *CreateDirectConnectGatewayAssociationProposalInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "CreateDirectConnectGatewayAssociationProposalInput"}
+	if s.DirectConnectGatewayId == nil {
+		invalidParams.Add(request.NewErrParamRequired("DirectConnectGatewayId"))
+	}
+	if s.DirectConnectGatewayOwnerAccount == nil {
+		invalidParams.Add(request.NewErrParamRequired("DirectConnectGatewayOwnerAccount"))
+	}
+	if s.GatewayId == nil {
+		invalidParams.Add(request.NewErrParamRequired("GatewayId"))
+	}
+
+	if invalidParams.Len() > 0 {
+		return invalidParams
+	}
+	return nil
+}
+
+// SetAddAllowedPrefixesToDirectConnectGateway sets the AddAllowedPrefixesToDirectConnectGateway field's value.
+func (s *CreateDirectConnectGatewayAssociationProposalInput) SetAddAllowedPrefixesToDirectConnectGateway(v []*RouteFilterPrefix) *CreateDirectConnectGatewayAssociationProposalInput {
+	s.AddAllowedPrefixesToDirectConnectGateway = v
+	return s
+}
+
+// SetDirectConnectGatewayId sets the DirectConnectGatewayId field's value.
+func (s *CreateDirectConnectGatewayAssociationProposalInput) SetDirectConnectGatewayId(v string) *CreateDirectConnectGatewayAssociationProposalInput {
+	s.DirectConnectGatewayId = &v
+	return s
+}
+
+// SetDirectConnectGatewayOwnerAccount sets the DirectConnectGatewayOwnerAccount field's value.
+func (s *CreateDirectConnectGatewayAssociationProposalInput) SetDirectConnectGatewayOwnerAccount(v string) *CreateDirectConnectGatewayAssociationProposalInput {
+	s.DirectConnectGatewayOwnerAccount = &v
+	return s
+}
+
+// SetGatewayId sets the GatewayId field's value.
+func (s *CreateDirectConnectGatewayAssociationProposalInput) SetGatewayId(v string) *CreateDirectConnectGatewayAssociationProposalInput {
+	s.GatewayId = &v
+	return s
+}
+
+// SetRemoveAllowedPrefixesToDirectConnectGateway sets the RemoveAllowedPrefixesToDirectConnectGateway field's value.
+func (s *CreateDirectConnectGatewayAssociationProposalInput) SetRemoveAllowedPrefixesToDirectConnectGateway(v []*RouteFilterPrefix) *CreateDirectConnectGatewayAssociationProposalInput {
+	s.RemoveAllowedPrefixesToDirectConnectGateway = v
+	return s
+}
+
+type CreateDirectConnectGatewayAssociationProposalOutput struct {
 	_ struct{} `type:"structure"`
 
-	// The association to be created.
-	DirectConnectGatewayAssociation *GatewayAssociation `locationName:"directConnectGatewayAssociation" type:"structure"`
+	// Information about the Direct Connect gateway proposal.
+	DirectConnectGatewayAssociationProposal *GatewayAssociationProposal `locationName:"directConnectGatewayAssociationProposal" type:"structure"`
 }
 
 // String returns the string representation
-func (s CreateDirectConnectGatewayAssociationOutput) String() string {
+func (s CreateDirectConnectGatewayAssociationProposalOutput) String() string {
 	return awsutil.Prettify(s)
 }
 
 // GoString returns the string representation
-func (s CreateDirectConnectGatewayAssociationOutput) GoString() string {
+func (s CreateDirectConnectGatewayAssociationProposalOutput) GoString() string {
 	return s.String()
 }
 
-// SetDirectConnectGatewayAssociation sets the DirectConnectGatewayAssociation field's value.
-func (s *CreateDirectConnectGatewayAssociationOutput) SetDirectConnectGatewayAssociation(v *GatewayAssociation) *CreateDirectConnectGatewayAssociationOutput {
-	s.DirectConnectGatewayAssociation = v
+// SetDirectConnectGatewayAssociationProposal sets the DirectConnectGatewayAssociationProposal field's value.
+func (s *CreateDirectConnectGatewayAssociationProposalOutput) SetDirectConnectGatewayAssociationProposal(v *GatewayAssociationProposal) *CreateDirectConnectGatewayAssociationProposalOutput {
+	s.DirectConnectGatewayAssociationProposal = v
 	return s
 }
 
@@ -5465,7 +6162,8 @@ type CreateLagInput struct {
 	ConnectionId *string `locationName:"connectionId" type:"string"`
 
 	// The bandwidth of the individual physical connections bundled by the LAG.
-	// The possible values are 1Gbps and 10Gbps.
+	// The possible values are 50Mbps, 100Mbps, 200Mbps, 300Mbps, 400Mbps, 500Mbps,
+	// 1Gbps, 2Gbps, 5Gbps, and 10Gbps.
 	//
 	// ConnectionsBandwidth is a required field
 	ConnectionsBandwidth *string `locationName:"connectionsBandwidth" type:"string" required:"true"`
@@ -5777,15 +6475,14 @@ func (s *DeleteConnectionInput) SetConnectionId(v string) *DeleteConnectionInput
 type DeleteDirectConnectGatewayAssociationInput struct {
 	_ struct{} `type:"structure"`
 
+	// The ID of the Direct Connect gateway association.
+	AssociationId *string `locationName:"associationId" type:"string"`
+
 	// The ID of the Direct Connect gateway.
-	//
-	// DirectConnectGatewayId is a required field
-	DirectConnectGatewayId *string `locationName:"directConnectGatewayId" type:"string" required:"true"`
+	DirectConnectGatewayId *string `locationName:"directConnectGatewayId" type:"string"`
 
 	// The ID of the virtual private gateway.
-	//
-	// VirtualGatewayId is a required field
-	VirtualGatewayId *string `locationName:"virtualGatewayId" type:"string" required:"true"`
+	VirtualGatewayId *string `locationName:"virtualGatewayId" deprecated:"true" type:"string"`
 }
 
 // String returns the string representation
@@ -5798,20 +6495,10 @@ func (s DeleteDirectConnectGatewayAssociationInput) GoString() string {
 	return s.String()
 }
 
-// Validate inspects the fields of the type to determine if they are valid.
-func (s *DeleteDirectConnectGatewayAssociationInput) Validate() error {
-	invalidParams := request.ErrInvalidParams{Context: "DeleteDirectConnectGatewayAssociationInput"}
-	if s.DirectConnectGatewayId == nil {
-		invalidParams.Add(request.NewErrParamRequired("DirectConnectGatewayId"))
-	}
-	if s.VirtualGatewayId == nil {
-		invalidParams.Add(request.NewErrParamRequired("VirtualGatewayId"))
-	}
-
-	if invalidParams.Len() > 0 {
-		return invalidParams
-	}
-	return nil
+// SetAssociationId sets the AssociationId field's value.
+func (s *DeleteDirectConnectGatewayAssociationInput) SetAssociationId(v string) *DeleteDirectConnectGatewayAssociationInput {
+	s.AssociationId = &v
+	return s
 }
 
 // SetDirectConnectGatewayId sets the DirectConnectGatewayId field's value.
@@ -5829,7 +6516,7 @@ func (s *DeleteDirectConnectGatewayAssociationInput) SetVirtualGatewayId(v strin
 type DeleteDirectConnectGatewayAssociationOutput struct {
 	_ struct{} `type:"structure"`
 
-	// The association to be deleted.
+	// Information about the deleted association.
 	DirectConnectGatewayAssociation *GatewayAssociation `locationName:"directConnectGatewayAssociation" type:"structure"`
 }
 
@@ -5849,6 +6536,67 @@ func (s *DeleteDirectConnectGatewayAssociationOutput) SetDirectConnectGatewayAss
 	return s
 }
 
+type DeleteDirectConnectGatewayAssociationProposalInput struct {
+	_ struct{} `type:"structure"`
+
+	// The ID of the proposal.
+	//
+	// ProposalId is a required field
+	ProposalId *string `locationName:"proposalId" type:"string" required:"true"`
+}
+
+// String returns the string representation
+func (s DeleteDirectConnectGatewayAssociationProposalInput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s DeleteDirectConnectGatewayAssociationProposalInput) GoString() string {
+	return s.String()
+}
+
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *DeleteDirectConnectGatewayAssociationProposalInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "DeleteDirectConnectGatewayAssociationProposalInput"}
+	if s.ProposalId == nil {
+		invalidParams.Add(request.NewErrParamRequired("ProposalId"))
+	}
+
+	if invalidParams.Len() > 0 {
+		return invalidParams
+	}
+	return nil
+}
+
+// SetProposalId sets the ProposalId field's value.
+func (s *DeleteDirectConnectGatewayAssociationProposalInput) SetProposalId(v string) *DeleteDirectConnectGatewayAssociationProposalInput {
+	s.ProposalId = &v
+	return s
+}
+
+type DeleteDirectConnectGatewayAssociationProposalOutput struct {
+	_ struct{} `type:"structure"`
+
+	// The ID of the virtual private gateway.
+	DirectConnectGatewayAssociationProposal *GatewayAssociationProposal `locationName:"directConnectGatewayAssociationProposal" type:"structure"`
+}
+
+// String returns the string representation
+func (s DeleteDirectConnectGatewayAssociationProposalOutput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s DeleteDirectConnectGatewayAssociationProposalOutput) GoString() string {
+	return s.String()
+}
+
+// SetDirectConnectGatewayAssociationProposal sets the DirectConnectGatewayAssociationProposal field's value.
+func (s *DeleteDirectConnectGatewayAssociationProposalOutput) SetDirectConnectGatewayAssociationProposal(v *GatewayAssociationProposal) *DeleteDirectConnectGatewayAssociationProposalOutput {
+	s.DirectConnectGatewayAssociationProposal = v
+	return s
+}
+
 type DeleteDirectConnectGatewayInput struct {
 	_ struct{} `type:"structure"`
 
@@ -6259,20 +7007,124 @@ func (s *DescribeConnectionsOnInterconnectInput) SetInterconnectId(v string) *De
 	return s
 }
 
+type DescribeDirectConnectGatewayAssociationProposalsInput struct {
+	_ struct{} `type:"structure"`
+
+	// The ID of the associated virtual private gateway.
+	AssociatedGatewayId *string `locationName:"associatedGatewayId" type:"string"`
+
+	// The ID of the Direct Connect gateway.
+	DirectConnectGatewayId *string `locationName:"directConnectGatewayId" type:"string"`
+
+	// The maximum number of results to return with a single call. To retrieve the
+	// remaining results, make another call with the returned nextToken value.
+	//
+	// If MaxResults is given a value larger than 100, only 100 results are returned.
+	MaxResults *int64 `locationName:"maxResults" type:"integer"`
+
+	// The token for the next page of results.
+	NextToken *string `locationName:"nextToken" type:"string"`
+
+	// The ID of the proposal.
+	ProposalId *string `locationName:"proposalId" type:"string"`
+}
+
+// String returns the string representation
+func (s DescribeDirectConnectGatewayAssociationProposalsInput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s DescribeDirectConnectGatewayAssociationProposalsInput) GoString() string {
+	return s.String()
+}
+
+// SetAssociatedGatewayId sets the AssociatedGatewayId field's value.
+func (s *DescribeDirectConnectGatewayAssociationProposalsInput) SetAssociatedGatewayId(v string) *DescribeDirectConnectGatewayAssociationProposalsInput {
+	s.AssociatedGatewayId = &v
+	return s
+}
+
+// SetDirectConnectGatewayId sets the DirectConnectGatewayId field's value.
+func (s *DescribeDirectConnectGatewayAssociationProposalsInput) SetDirectConnectGatewayId(v string) *DescribeDirectConnectGatewayAssociationProposalsInput {
+	s.DirectConnectGatewayId = &v
+	return s
+}
+
+// SetMaxResults sets the MaxResults field's value.
+func (s *DescribeDirectConnectGatewayAssociationProposalsInput) SetMaxResults(v int64) *DescribeDirectConnectGatewayAssociationProposalsInput {
+	s.MaxResults = &v
+	return s
+}
+
+// SetNextToken sets the NextToken field's value.
+func (s *DescribeDirectConnectGatewayAssociationProposalsInput) SetNextToken(v string) *DescribeDirectConnectGatewayAssociationProposalsInput {
+	s.NextToken = &v
+	return s
+}
+
+// SetProposalId sets the ProposalId field's value.
+func (s *DescribeDirectConnectGatewayAssociationProposalsInput) SetProposalId(v string) *DescribeDirectConnectGatewayAssociationProposalsInput {
+	s.ProposalId = &v
+	return s
+}
+
+type DescribeDirectConnectGatewayAssociationProposalsOutput struct {
+	_ struct{} `type:"structure"`
+
+	// Describes the Direct Connect gateway association proposals.
+	DirectConnectGatewayAssociationProposals []*GatewayAssociationProposal `locationName:"directConnectGatewayAssociationProposals" type:"list"`
+
+	// The token to use 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
+func (s DescribeDirectConnectGatewayAssociationProposalsOutput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s DescribeDirectConnectGatewayAssociationProposalsOutput) GoString() string {
+	return s.String()
+}
+
+// SetDirectConnectGatewayAssociationProposals sets the DirectConnectGatewayAssociationProposals field's value.
+func (s *DescribeDirectConnectGatewayAssociationProposalsOutput) SetDirectConnectGatewayAssociationProposals(v []*GatewayAssociationProposal) *DescribeDirectConnectGatewayAssociationProposalsOutput {
+	s.DirectConnectGatewayAssociationProposals = v
+	return s
+}
+
+// SetNextToken sets the NextToken field's value.
+func (s *DescribeDirectConnectGatewayAssociationProposalsOutput) SetNextToken(v string) *DescribeDirectConnectGatewayAssociationProposalsOutput {
+	s.NextToken = &v
+	return s
+}
+
 type DescribeDirectConnectGatewayAssociationsInput struct {
 	_ struct{} `type:"structure"`
 
+	// The ID of the associated gateway.
+	AssociatedGatewayId *string `locationName:"associatedGatewayId" type:"string"`
+
+	// The ID of the Direct Connect gateway association.
+	AssociationId *string `locationName:"associationId" type:"string"`
+
 	// The ID of the Direct Connect gateway.
 	DirectConnectGatewayId *string `locationName:"directConnectGatewayId" type:"string"`
 
-	// The maximum number of associations to return per page.
+	// The maximum number of results to return with a single call. To retrieve the
+	// remaining results, make another call with the returned nextToken value.
+	//
+	// If MaxResults is given a value larger than 100, only 100 results are returned.
 	MaxResults *int64 `locationName:"maxResults" type:"integer"`
 
 	// The token provided in the previous call to retrieve the next page.
 	NextToken *string `locationName:"nextToken" type:"string"`
 
 	// The ID of the virtual private gateway.
-	VirtualGatewayId *string `locationName:"virtualGatewayId" type:"string"`
+	VirtualGatewayId *string `locationName:"virtualGatewayId" deprecated:"true" type:"string"`
 }
 
 // String returns the string representation
@@ -6285,6 +7137,18 @@ func (s DescribeDirectConnectGatewayAssociationsInput) GoString() string {
 	return s.String()
 }
 
+// SetAssociatedGatewayId sets the AssociatedGatewayId field's value.
+func (s *DescribeDirectConnectGatewayAssociationsInput) SetAssociatedGatewayId(v string) *DescribeDirectConnectGatewayAssociationsInput {
+	s.AssociatedGatewayId = &v
+	return s
+}
+
+// SetAssociationId sets the AssociationId field's value.
+func (s *DescribeDirectConnectGatewayAssociationsInput) SetAssociationId(v string) *DescribeDirectConnectGatewayAssociationsInput {
+	s.AssociationId = &v
+	return s
+}
+
 // SetDirectConnectGatewayId sets the DirectConnectGatewayId field's value.
 func (s *DescribeDirectConnectGatewayAssociationsInput) SetDirectConnectGatewayId(v string) *DescribeDirectConnectGatewayAssociationsInput {
 	s.DirectConnectGatewayId = &v
@@ -6312,7 +7176,7 @@ func (s *DescribeDirectConnectGatewayAssociationsInput) SetVirtualGatewayId(v st
 type DescribeDirectConnectGatewayAssociationsOutput struct {
 	_ struct{} `type:"structure"`
 
-	// The associations.
+	// Information about the associations.
 	DirectConnectGatewayAssociations []*GatewayAssociation `locationName:"directConnectGatewayAssociations" type:"list"`
 
 	// The token to retrieve the next page.
@@ -6347,7 +7211,10 @@ type DescribeDirectConnectGatewayAttachmentsInput struct {
 	// The ID of the Direct Connect gateway.
 	DirectConnectGatewayId *string `locationName:"directConnectGatewayId" type:"string"`
 
-	// The maximum number of attachments to return per page.
+	// The maximum number of results to return with a single call. To retrieve the
+	// remaining results, make another call with the returned nextToken value.
+	//
+	// If MaxResults is given a value larger than 100, only 100 results are returned.
 	MaxResults *int64 `locationName:"maxResults" type:"integer"`
 
 	// The token provided in the previous call to retrieve the next page.
@@ -6429,7 +7296,10 @@ type DescribeDirectConnectGatewaysInput struct {
 	// The ID of the Direct Connect gateway.
 	DirectConnectGatewayId *string `locationName:"directConnectGatewayId" type:"string"`
 
-	// The maximum number of Direct Connect gateways to return per page.
+	// The maximum number of results to return with a single call. To retrieve the
+	// remaining results, make another call with the returned nextToken value.
+	//
+	// If MaxResults is given a value larger than 100, only 100 results are returned.
 	MaxResults *int64 `locationName:"maxResults" type:"integer"`
 
 	// The token provided in the previous call to retrieve the next page.
@@ -7092,6 +7962,15 @@ func (s *Gateway) SetStateChangeError(v string) *Gateway {
 type GatewayAssociation struct {
 	_ struct{} `type:"structure"`
 
+	// The Amazon VPC prefixes to advertise to the Direct Connect gateway.
+	AllowedPrefixesToDirectConnectGateway []*RouteFilterPrefix `locationName:"allowedPrefixesToDirectConnectGateway" type:"list"`
+
+	// Information about the associated virtual private gateway.
+	AssociatedGateway *AssociatedGateway `locationName:"associatedGateway" type:"structure"`
+
+	// The ID of the Direct Connect gateway association.
+	AssociationId *string `locationName:"associationId" type:"string"`
+
 	// The state of the association. The following are the possible values:
 	//
 	//    * associating: The initial state after calling CreateDirectConnectGatewayAssociation.
@@ -7109,17 +7988,20 @@ type GatewayAssociation struct {
 	// The ID of the Direct Connect gateway.
 	DirectConnectGatewayId *string `locationName:"directConnectGatewayId" type:"string"`
 
+	// The ID of the AWS account that owns the associated gateway.
+	DirectConnectGatewayOwnerAccount *string `locationName:"directConnectGatewayOwnerAccount" type:"string"`
+
 	// The error message if the state of an object failed to advance.
 	StateChangeError *string `locationName:"stateChangeError" type:"string"`
 
 	// The ID of the virtual private gateway. Applies only to private virtual interfaces.
-	VirtualGatewayId *string `locationName:"virtualGatewayId" type:"string"`
+	VirtualGatewayId *string `locationName:"virtualGatewayId" deprecated:"true" type:"string"`
 
 	// The ID of the AWS account that owns the virtual private gateway.
 	VirtualGatewayOwnerAccount *string `locationName:"virtualGatewayOwnerAccount" type:"string"`
 
 	// The AWS Region where the virtual private gateway is located.
-	VirtualGatewayRegion *string `locationName:"virtualGatewayRegion" type:"string"`
+	VirtualGatewayRegion *string `locationName:"virtualGatewayRegion" deprecated:"true" type:"string"`
 }
 
 // String returns the string representation
@@ -7132,6 +8014,24 @@ func (s GatewayAssociation) GoString() string {
 	return s.String()
 }
 
+// SetAllowedPrefixesToDirectConnectGateway sets the AllowedPrefixesToDirectConnectGateway field's value.
+func (s *GatewayAssociation) SetAllowedPrefixesToDirectConnectGateway(v []*RouteFilterPrefix) *GatewayAssociation {
+	s.AllowedPrefixesToDirectConnectGateway = v
+	return s
+}
+
+// SetAssociatedGateway sets the AssociatedGateway field's value.
+func (s *GatewayAssociation) SetAssociatedGateway(v *AssociatedGateway) *GatewayAssociation {
+	s.AssociatedGateway = v
+	return s
+}
+
+// SetAssociationId sets the AssociationId field's value.
+func (s *GatewayAssociation) SetAssociationId(v string) *GatewayAssociation {
+	s.AssociationId = &v
+	return s
+}
+
 // SetAssociationState sets the AssociationState field's value.
 func (s *GatewayAssociation) SetAssociationState(v string) *GatewayAssociation {
 	s.AssociationState = &v
@@ -7144,6 +8044,12 @@ func (s *GatewayAssociation) SetDirectConnectGatewayId(v string) *GatewayAssocia
 	return s
 }
 
+// SetDirectConnectGatewayOwnerAccount sets the DirectConnectGatewayOwnerAccount field's value.
+func (s *GatewayAssociation) SetDirectConnectGatewayOwnerAccount(v string) *GatewayAssociation {
+	s.DirectConnectGatewayOwnerAccount = &v
+	return s
+}
+
 // SetStateChangeError sets the StateChangeError field's value.
 func (s *GatewayAssociation) SetStateChangeError(v string) *GatewayAssociation {
 	s.StateChangeError = &v
@@ -7168,6 +8074,94 @@ func (s *GatewayAssociation) SetVirtualGatewayRegion(v string) *GatewayAssociati
 	return s
 }
 
+// Information about the proposal request to attach a virtual private gateway
+// to a DDirect Connect gateway.
+type GatewayAssociationProposal struct {
+	_ struct{} `type:"structure"`
+
+	// Information about the associated virtual private gateway.
+	AssociatedGateway *AssociatedGateway `locationName:"associatedGateway" type:"structure"`
+
+	// The ID of the Direct Connect gateway.
+	DirectConnectGatewayId *string `locationName:"directConnectGatewayId" type:"string"`
+
+	// The ID of the AWS account that owns the Direct Connect gateway.
+	DirectConnectGatewayOwnerAccount *string `locationName:"directConnectGatewayOwnerAccount" type:"string"`
+
+	// The existing Amazon VPC prefixes advertised to the Direct Connect gateway.
+	ExistingAllowedPrefixesToDirectConnectGateway []*RouteFilterPrefix `locationName:"existingAllowedPrefixesToDirectConnectGateway" type:"list"`
+
+	// The ID of the association proposal.
+	ProposalId *string `locationName:"proposalId" type:"string"`
+
+	// The state of the proposal. The following are possible values:
+	//
+	//    * accepted: The proposal has been accepted. The Direct Connect gateway
+	//    association is available to use in this state.
+	//
+	//    * deleted: The proposal has been deleted by the owner that made the proposal.
+	//    The Direct Connect gateway association cannot be used in this state.
+	//
+	//    * requested: The proposal has been requested. The Direct Connect gateway
+	//    association cannot be used in this state.
+	ProposalState *string `locationName:"proposalState" type:"string" enum:"GatewayAssociationProposalState"`
+
+	// The Amazon VPC prefixes to advertise to the Direct Connect gateway.
+	RequestedAllowedPrefixesToDirectConnectGateway []*RouteFilterPrefix `locationName:"requestedAllowedPrefixesToDirectConnectGateway" type:"list"`
+}
+
+// String returns the string representation
+func (s GatewayAssociationProposal) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s GatewayAssociationProposal) GoString() string {
+	return s.String()
+}
+
+// SetAssociatedGateway sets the AssociatedGateway field's value.
+func (s *GatewayAssociationProposal) SetAssociatedGateway(v *AssociatedGateway) *GatewayAssociationProposal {
+	s.AssociatedGateway = v
+	return s
+}
+
+// SetDirectConnectGatewayId sets the DirectConnectGatewayId field's value.
+func (s *GatewayAssociationProposal) SetDirectConnectGatewayId(v string) *GatewayAssociationProposal {
+	s.DirectConnectGatewayId = &v
+	return s
+}
+
+// SetDirectConnectGatewayOwnerAccount sets the DirectConnectGatewayOwnerAccount field's value.
+func (s *GatewayAssociationProposal) SetDirectConnectGatewayOwnerAccount(v string) *GatewayAssociationProposal {
+	s.DirectConnectGatewayOwnerAccount = &v
+	return s
+}
+
+// SetExistingAllowedPrefixesToDirectConnectGateway sets the ExistingAllowedPrefixesToDirectConnectGateway field's value.
+func (s *GatewayAssociationProposal) SetExistingAllowedPrefixesToDirectConnectGateway(v []*RouteFilterPrefix) *GatewayAssociationProposal {
+	s.ExistingAllowedPrefixesToDirectConnectGateway = v
+	return s
+}
+
+// SetProposalId sets the ProposalId field's value.
+func (s *GatewayAssociationProposal) SetProposalId(v string) *GatewayAssociationProposal {
+	s.ProposalId = &v
+	return s
+}
+
+// SetProposalState sets the ProposalState field's value.
+func (s *GatewayAssociationProposal) SetProposalState(v string) *GatewayAssociationProposal {
+	s.ProposalState = &v
+	return s
+}
+
+// SetRequestedAllowedPrefixesToDirectConnectGateway sets the RequestedAllowedPrefixesToDirectConnectGateway field's value.
+func (s *GatewayAssociationProposal) SetRequestedAllowedPrefixesToDirectConnectGateway(v []*RouteFilterPrefix) *GatewayAssociationProposal {
+	s.RequestedAllowedPrefixesToDirectConnectGateway = v
+	return s
+}
+
 // Information about an attachment between a Direct Connect gateway and a virtual
 // interface.
 type GatewayAttachment struct {
@@ -7398,10 +8392,10 @@ type Lag struct {
 	// Indicates whether the LAG can host other connections.
 	AllowsHostedConnections *bool `locationName:"allowsHostedConnections" type:"boolean"`
 
-	// The Direct Connect endpoint that hosts the LAG.
+	// The AWS Direct Connect endpoint that hosts the LAG.
 	AwsDevice *string `locationName:"awsDevice" deprecated:"true" type:"string"`
 
-	// The Direct Connect endpoint that hosts the LAG.
+	// The AWS Direct Connect endpoint that hosts the LAG.
 	AwsDeviceV2 *string `locationName:"awsDeviceV2" type:"string"`
 
 	// The connections bundled by the LAG.
@@ -7739,7 +8733,7 @@ type NewPrivateVirtualInterface struct {
 	Mtu *int64 `locationName:"mtu" type:"integer"`
 
 	// The ID of the virtual private gateway.
-	VirtualGatewayId *string `locationName:"virtualGatewayId" type:"string"`
+	VirtualGatewayId *string `locationName:"virtualGatewayId" deprecated:"true" type:"string"`
 
 	// The name of the virtual interface assigned by the customer network.
 	//
@@ -8435,6 +9429,71 @@ func (s UntagResourceOutput) GoString() string {
 	return s.String()
 }
 
+type UpdateDirectConnectGatewayAssociationInput struct {
+	_ struct{} `type:"structure"`
+
+	// The Amazon VPC prefixes to advertise to the Direct Connect gateway.
+	AddAllowedPrefixesToDirectConnectGateway []*RouteFilterPrefix `locationName:"addAllowedPrefixesToDirectConnectGateway" type:"list"`
+
+	// The ID of the Direct Connect gateway association.
+	AssociationId *string `locationName:"associationId" type:"string"`
+
+	// The Amazon VPC prefixes to no longer advertise to the Direct Connect gateway.
+	RemoveAllowedPrefixesToDirectConnectGateway []*RouteFilterPrefix `locationName:"removeAllowedPrefixesToDirectConnectGateway" type:"list"`
+}
+
+// String returns the string representation
+func (s UpdateDirectConnectGatewayAssociationInput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s UpdateDirectConnectGatewayAssociationInput) GoString() string {
+	return s.String()
+}
+
+// SetAddAllowedPrefixesToDirectConnectGateway sets the AddAllowedPrefixesToDirectConnectGateway field's value.
+func (s *UpdateDirectConnectGatewayAssociationInput) SetAddAllowedPrefixesToDirectConnectGateway(v []*RouteFilterPrefix) *UpdateDirectConnectGatewayAssociationInput {
+	s.AddAllowedPrefixesToDirectConnectGateway = v
+	return s
+}
+
+// SetAssociationId sets the AssociationId field's value.
+func (s *UpdateDirectConnectGatewayAssociationInput) SetAssociationId(v string) *UpdateDirectConnectGatewayAssociationInput {
+	s.AssociationId = &v
+	return s
+}
+
+// SetRemoveAllowedPrefixesToDirectConnectGateway sets the RemoveAllowedPrefixesToDirectConnectGateway field's value.
+func (s *UpdateDirectConnectGatewayAssociationInput) SetRemoveAllowedPrefixesToDirectConnectGateway(v []*RouteFilterPrefix) *UpdateDirectConnectGatewayAssociationInput {
+	s.RemoveAllowedPrefixesToDirectConnectGateway = v
+	return s
+}
+
+type UpdateDirectConnectGatewayAssociationOutput struct {
+	_ struct{} `type:"structure"`
+
+	// Information about an association between a Direct Connect gateway and a virtual
+	// private gateway.
+	DirectConnectGatewayAssociation *GatewayAssociation `locationName:"directConnectGatewayAssociation" type:"structure"`
+}
+
+// String returns the string representation
+func (s UpdateDirectConnectGatewayAssociationOutput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s UpdateDirectConnectGatewayAssociationOutput) GoString() string {
+	return s.String()
+}
+
+// SetDirectConnectGatewayAssociation sets the DirectConnectGatewayAssociation field's value.
+func (s *UpdateDirectConnectGatewayAssociationOutput) SetDirectConnectGatewayAssociation(v *GatewayAssociation) *UpdateDirectConnectGatewayAssociationOutput {
+	s.DirectConnectGatewayAssociation = v
+	return s
+}
+
 type UpdateLagInput struct {
 	_ struct{} `type:"structure"`
 
@@ -8598,7 +9657,7 @@ type UpdateVirtualInterfaceAttributesOutput struct {
 	RouteFilterPrefixes []*RouteFilterPrefix `locationName:"routeFilterPrefixes" type:"list"`
 
 	// The ID of the virtual private gateway. Applies only to private virtual interfaces.
-	VirtualGatewayId *string `locationName:"virtualGatewayId" type:"string"`
+	VirtualGatewayId *string `locationName:"virtualGatewayId" deprecated:"true" type:"string"`
 
 	// The ID of the virtual interface.
 	VirtualInterfaceId *string `locationName:"virtualInterfaceId" type:"string"`
@@ -8798,7 +9857,7 @@ type VirtualGateway struct {
 	_ struct{} `type:"structure"`
 
 	// The ID of the virtual private gateway.
-	VirtualGatewayId *string `locationName:"virtualGatewayId" type:"string"`
+	VirtualGatewayId *string `locationName:"virtualGatewayId" deprecated:"true" type:"string"`
 
 	// The state of the virtual private gateway. The following are the possible
 	// values:
@@ -8894,7 +9953,7 @@ type VirtualInterface struct {
 	RouteFilterPrefixes []*RouteFilterPrefix `locationName:"routeFilterPrefixes" type:"list"`
 
 	// The ID of the virtual private gateway. Applies only to private virtual interfaces.
-	VirtualGatewayId *string `locationName:"virtualGatewayId" type:"string"`
+	VirtualGatewayId *string `locationName:"virtualGatewayId" deprecated:"true" type:"string"`
 
 	// The ID of the virtual interface.
 	VirtualInterfaceId *string `locationName:"virtualInterfaceId" type:"string"`
@@ -9154,6 +10213,17 @@ const (
 	ConnectionStateUnknown = "unknown"
 )
 
+const (
+	// GatewayAssociationProposalStateRequested is a GatewayAssociationProposalState enum value
+	GatewayAssociationProposalStateRequested = "requested"
+
+	// GatewayAssociationProposalStateAccepted is a GatewayAssociationProposalState enum value
+	GatewayAssociationProposalStateAccepted = "accepted"
+
+	// GatewayAssociationProposalStateDeleted is a GatewayAssociationProposalState enum value
+	GatewayAssociationProposalStateDeleted = "deleted"
+)
+
 const (
 	// GatewayAssociationStateAssociating is a GatewayAssociationState enum value
 	GatewayAssociationStateAssociating = "associating"
@@ -9166,6 +10236,9 @@ const (
 
 	// GatewayAssociationStateDisassociated is a GatewayAssociationState enum value
 	GatewayAssociationStateDisassociated = "disassociated"
+
+	// GatewayAssociationStateUpdating is a GatewayAssociationState enum value
+	GatewayAssociationStateUpdating = "updating"
 )
 
 const (
@@ -9196,6 +10269,11 @@ const (
 	GatewayStateDeleted = "deleted"
 )
 
+const (
+	// GatewayTypeVirtualPrivateGateway is a GatewayType enum value
+	GatewayTypeVirtualPrivateGateway = "virtualPrivateGateway"
+)
+
 const (
 	// HasLogicalRedundancyUnknown is a HasLogicalRedundancy enum value
 	HasLogicalRedundancyUnknown = "unknown"
diff --git a/vendor/github.com/aws/aws-sdk-go/service/ec2/api.go b/vendor/github.com/aws/aws-sdk-go/service/ec2/api.go
index f53d77005304..a5c5743ce94f 100644
--- a/vendor/github.com/aws/aws-sdk-go/service/ec2/api.go
+++ b/vendor/github.com/aws/aws-sdk-go/service/ec2/api.go
@@ -85951,6 +85951,30 @@ const (
 	// InstanceTypeR5dMetal is a InstanceType enum value
 	InstanceTypeR5dMetal = "r5d.metal"
 
+	// InstanceTypeR5adLarge is a InstanceType enum value
+	InstanceTypeR5adLarge = "r5ad.large"
+
+	// InstanceTypeR5adXlarge is a InstanceType enum value
+	InstanceTypeR5adXlarge = "r5ad.xlarge"
+
+	// InstanceTypeR5ad2xlarge is a InstanceType enum value
+	InstanceTypeR5ad2xlarge = "r5ad.2xlarge"
+
+	// InstanceTypeR5ad4xlarge is a InstanceType enum value
+	InstanceTypeR5ad4xlarge = "r5ad.4xlarge"
+
+	// InstanceTypeR5ad8xlarge is a InstanceType enum value
+	InstanceTypeR5ad8xlarge = "r5ad.8xlarge"
+
+	// InstanceTypeR5ad12xlarge is a InstanceType enum value
+	InstanceTypeR5ad12xlarge = "r5ad.12xlarge"
+
+	// InstanceTypeR5ad16xlarge is a InstanceType enum value
+	InstanceTypeR5ad16xlarge = "r5ad.16xlarge"
+
+	// InstanceTypeR5ad24xlarge is a InstanceType enum value
+	InstanceTypeR5ad24xlarge = "r5ad.24xlarge"
+
 	// InstanceTypeX116xlarge is a InstanceType enum value
 	InstanceTypeX116xlarge = "x1.16xlarge"
 
@@ -86233,6 +86257,30 @@ const (
 	// InstanceTypeM5dMetal is a InstanceType enum value
 	InstanceTypeM5dMetal = "m5d.metal"
 
+	// InstanceTypeM5adLarge is a InstanceType enum value
+	InstanceTypeM5adLarge = "m5ad.large"
+
+	// InstanceTypeM5adXlarge is a InstanceType enum value
+	InstanceTypeM5adXlarge = "m5ad.xlarge"
+
+	// InstanceTypeM5ad2xlarge is a InstanceType enum value
+	InstanceTypeM5ad2xlarge = "m5ad.2xlarge"
+
+	// InstanceTypeM5ad4xlarge is a InstanceType enum value
+	InstanceTypeM5ad4xlarge = "m5ad.4xlarge"
+
+	// InstanceTypeM5ad8xlarge is a InstanceType enum value
+	InstanceTypeM5ad8xlarge = "m5ad.8xlarge"
+
+	// InstanceTypeM5ad12xlarge is a InstanceType enum value
+	InstanceTypeM5ad12xlarge = "m5ad.12xlarge"
+
+	// InstanceTypeM5ad16xlarge is a InstanceType enum value
+	InstanceTypeM5ad16xlarge = "m5ad.16xlarge"
+
+	// InstanceTypeM5ad24xlarge is a InstanceType enum value
+	InstanceTypeM5ad24xlarge = "m5ad.24xlarge"
+
 	// InstanceTypeH12xlarge is a InstanceType enum value
 	InstanceTypeH12xlarge = "h1.2xlarge"
 
diff --git a/vendor/github.com/aws/aws-sdk-go/service/ecs/api.go b/vendor/github.com/aws/aws-sdk-go/service/ecs/api.go
index 962b45072810..462eb30570fc 100644
--- a/vendor/github.com/aws/aws-sdk-go/service/ecs/api.go
+++ b/vendor/github.com/aws/aws-sdk-go/service/ecs/api.go
@@ -156,9 +156,9 @@ func (c *ECS) CreateServiceRequest(input *CreateServiceInput) (req *request.Requ
 // CreateService API operation for Amazon EC2 Container Service.
 //
 // Runs and maintains a desired number of tasks from a specified task definition.
-// If the number of tasks running in a service drops below desiredCount, Amazon
-// ECS spawns another copy of the task in the specified cluster. To update an
-// existing service, see UpdateService.
+// If the number of tasks running in a service drops below the desiredCount,
+// Amazon ECS spawns another copy of the task in the specified cluster. To update
+// an existing service, see UpdateService.
 //
 // In addition to maintaining the desired count of tasks in your service, you
 // can optionally run your service behind a load balancer. The load balancer
@@ -166,9 +166,33 @@ func (c *ECS) CreateServiceRequest(input *CreateServiceInput) (req *request.Requ
 // 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 do not use a load balancer are considered healthy
+// if they're in the RUNNING state. Tasks for services that do use a load balancer
+// are considered healthy if they're in the RUNNING state and the container
+// instance that they're hosted on is reported as healthy by the load balancer.
+//
+// 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. 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. 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 triggered by changing properties, such as the task definition
-// or the desired count of a service, with an UpdateService operation.
+// or the desired count of a service, 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 is using the ECS deployment controller, the minimum healthy
 // percent represents a lower limit on the number of tasks in a service that
@@ -178,12 +202,12 @@ func (c *ECS) CreateServiceRequest(input *CreateServiceInput) (req *request.Requ
 // tasks using the EC2 launch type. This parameter enables you to deploy without
 // using additional cluster capacity. For example, if your service has a desired
 // number of four tasks and a minimum healthy percent of 50%, the scheduler
-// may stop two existing tasks to free up cluster capacity before starting two
-// new tasks. Tasks for services that do not use a load balancer are considered
-// healthy if they are in the RUNNING state; tasks for services that do use
-// a load balancer are considered healthy if they are in the RUNNING state and
-// they are reported as healthy by the load balancer. The default value for
-// minimum healthy percent is 100%.
+// might stop two existing tasks to free up cluster capacity before starting
+// two new tasks. Tasks for services that do not use a load balancer are considered
+// healthy if they're in the RUNNING state. Tasks for services that do use a
+// load balancer are considered healthy if they're in the RUNNING state and
+// they're reported as healthy by the load balancer. The default value for minimum
+// healthy percent is 100%.
 //
 // If a service is using the ECS deployment controller, the maximum percent
 // parameter represents an upper limit on the number of tasks in a service that
@@ -197,20 +221,21 @@ func (c *ECS) CreateServiceRequest(input *CreateServiceInput) (req *request.Requ
 // resources required to do this are available). The default value for maximum
 // percent is 200%.
 //
-// If a service is using the CODE_DEPLOY deployment controller and tasks that
-// use the EC2 launch type, the minimum healthy percent and maximum percent
-// values are only used to define the lower and 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 minimum healthy percent and maximum percent values
-// are not used, although they are currently visible when describing your service.
-//
-// Tasks for services that do not use a load balancer are considered healthy
-// if they are in the RUNNING state. Tasks for services that do use a load balancer
-// are considered healthy if they are in the RUNNING state and the container
-// instance they are hosted on is reported as healthy by the load balancer.
-// 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 is using 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
+// 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, although 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
 // in your cluster using the following logic:
@@ -292,6 +317,122 @@ func (c *ECS) CreateServiceWithContext(ctx aws.Context, input *CreateServiceInpu
 	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 (http://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 Codes:
+//   * ErrCodeServerException "ServerException"
+//   These errors are usually caused by a server issue.
+//
+//   * ErrCodeClientException "ClientException"
+//   These errors are usually caused by a client action, such as using an action
+//   or resource on behalf of a user that doesn't have permissions to use the
+//   action or resource, or specifying an identifier that is not valid.
+//
+//   * ErrCodeInvalidParameterException "InvalidParameterException"
+//   The specified parameter is invalid. Review the available parameters for the
+//   API request.
+//
+//   * ErrCodeClusterNotFoundException "ClusterNotFoundException"
+//   The specified cluster could not be found. You can view your available clusters
+//   with ListClusters. Amazon ECS clusters are Region-specific.
+//
+//   * ErrCodeUnsupportedFeatureException "UnsupportedFeatureException"
+//   The specified task is not supported in this Region.
+//
+//   * ErrCodePlatformUnknownException "PlatformUnknownException"
+//   The specified platform version does not exist.
+//
+//   * ErrCodePlatformTaskDefinitionIncompatibilityException "PlatformTaskDefinitionIncompatibilityException"
+//   The specified platform version does not satisfy the task definition's required
+//   capabilities.
+//
+//   * ErrCodeAccessDeniedException "AccessDeniedException"
+//   You do not have authorization to perform the requested action.
+//
+//   * ErrCodeServiceNotFoundException "ServiceNotFoundException"
+//   The specified service could not be found. You can view your available services
+//   with ListServices. Amazon ECS services are cluster-specific and Region-specific.
+//
+//   * ErrCodeServiceNotActiveException "ServiceNotActiveException"
+//   The specified service is not active. You can't update a service that is 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/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
@@ -692,6 +833,120 @@ func (c *ECS) DeleteServiceWithContext(ctx aws.Context, input *DeleteServiceInpu
 	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 (http://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 Codes:
+//   * ErrCodeServerException "ServerException"
+//   These errors are usually caused by a server issue.
+//
+//   * ErrCodeClientException "ClientException"
+//   These errors are usually caused by a client action, such as using an action
+//   or resource on behalf of a user that doesn't have permissions to use the
+//   action or resource, or specifying an identifier that is not valid.
+//
+//   * ErrCodeInvalidParameterException "InvalidParameterException"
+//   The specified parameter is invalid. Review the available parameters for the
+//   API request.
+//
+//   * ErrCodeClusterNotFoundException "ClusterNotFoundException"
+//   The specified cluster could not be found. You can view your available clusters
+//   with ListClusters. Amazon ECS clusters are Region-specific.
+//
+//   * ErrCodeUnsupportedFeatureException "UnsupportedFeatureException"
+//   The specified task is not supported in this Region.
+//
+//   * ErrCodeAccessDeniedException "AccessDeniedException"
+//   You do not have authorization to perform the requested action.
+//
+//   * ErrCodeServiceNotFoundException "ServiceNotFoundException"
+//   The specified service could not be found. You can view your available services
+//   with ListServices. Amazon ECS services are cluster-specific and Region-specific.
+//
+//   * ErrCodeServiceNotActiveException "ServiceNotActiveException"
+//   The specified service is not active. You can't update a service that is inactive.
+//   If you have previously deleted a service, you can re-create it with CreateService.
+//
+//   * ErrCodeTaskSetNotFoundException "TaskSetNotFoundException"
+//   The specified task set could not be found. You can view your available container
+//   instances 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
@@ -1266,6 +1521,115 @@ func (c *ECS) DescribeTaskDefinitionWithContext(ctx aws.Context, input *Describe
 	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 (http://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 Codes:
+//   * ErrCodeServerException "ServerException"
+//   These errors are usually caused by a server issue.
+//
+//   * ErrCodeClientException "ClientException"
+//   These errors are usually caused by a client action, such as using an action
+//   or resource on behalf of a user that doesn't have permissions to use the
+//   action or resource, or specifying an identifier that is not valid.
+//
+//   * ErrCodeInvalidParameterException "InvalidParameterException"
+//   The specified parameter is invalid. Review the available parameters for the
+//   API request.
+//
+//   * ErrCodeClusterNotFoundException "ClusterNotFoundException"
+//   The specified cluster could not be found. You can view your available clusters
+//   with ListClusters. Amazon ECS clusters are Region-specific.
+//
+//   * ErrCodeUnsupportedFeatureException "UnsupportedFeatureException"
+//   The specified task is not supported in this Region.
+//
+//   * ErrCodeAccessDeniedException "AccessDeniedException"
+//   You do not have authorization to perform the requested action.
+//
+//   * ErrCodeServiceNotFoundException "ServiceNotFoundException"
+//   The specified service could not be found. You can view your available services
+//   with ListServices. Amazon ECS services are cluster-specific and Region-specific.
+//
+//   * ErrCodeServiceNotActiveException "ServiceNotActiveException"
+//   The specified service is not active. You can't update a service that is 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
@@ -4123,6 +4487,12 @@ func (c *ECS) UpdateServiceRequest(input *UpdateServiceInput) (req *request.Requ
 // be created. For more information, see CreateDeployment (https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_CreateDeployment.html)
 // in the AWS CodeDeploy API Reference.
 //
+// For services using an external deployment controller, you can update only
+// the desired count and health check grace period using this API. If the launch
+// type, load balancer, network configuration, platform version, or task definition
+// need to be updated, you should 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.
@@ -4202,7 +4572,237 @@ func (c *ECS) UpdateServiceRequest(input *UpdateServiceInput) (req *request.Requ
 // the error.
 //
 // See the AWS API reference guide for Amazon EC2 Container Service's
-// API operation UpdateService for usage and error information.
+// API operation UpdateService for usage and error information.
+//
+// Returned Error Codes:
+//   * ErrCodeServerException "ServerException"
+//   These errors are usually caused by a server issue.
+//
+//   * ErrCodeClientException "ClientException"
+//   These errors are usually caused by a client action, such as using an action
+//   or resource on behalf of a user that doesn't have permissions to use the
+//   action or resource, or specifying an identifier that is not valid.
+//
+//   * ErrCodeInvalidParameterException "InvalidParameterException"
+//   The specified parameter is invalid. Review the available parameters for the
+//   API request.
+//
+//   * ErrCodeClusterNotFoundException "ClusterNotFoundException"
+//   The specified cluster could not be found. You can view your available clusters
+//   with ListClusters. Amazon ECS clusters are Region-specific.
+//
+//   * ErrCodeServiceNotFoundException "ServiceNotFoundException"
+//   The specified service could not be found. You can view your available services
+//   with ListServices. Amazon ECS services are cluster-specific and Region-specific.
+//
+//   * ErrCodeServiceNotActiveException "ServiceNotActiveException"
+//   The specified service is not active. You can't update a service that is inactive.
+//   If you have previously deleted a service, you can re-create it with CreateService.
+//
+//   * ErrCodePlatformUnknownException "PlatformUnknownException"
+//   The specified platform version does not exist.
+//
+//   * ErrCodePlatformTaskDefinitionIncompatibilityException "PlatformTaskDefinitionIncompatibilityException"
+//   The specified platform version does not satisfy the task definition's required
+//   capabilities.
+//
+//   * ErrCodeAccessDeniedException "AccessDeniedException"
+//   You do not have authorization to perform the requested action.
+//
+// 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 (http://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 Codes:
+//   * ErrCodeServerException "ServerException"
+//   These errors are usually caused by a server issue.
+//
+//   * ErrCodeClientException "ClientException"
+//   These errors are usually caused by a client action, such as using an action
+//   or resource on behalf of a user that doesn't have permissions to use the
+//   action or resource, or specifying an identifier that is not valid.
+//
+//   * ErrCodeInvalidParameterException "InvalidParameterException"
+//   The specified parameter is invalid. Review the available parameters for the
+//   API request.
+//
+//   * ErrCodeClusterNotFoundException "ClusterNotFoundException"
+//   The specified cluster could not be found. You can view your available clusters
+//   with ListClusters. Amazon ECS clusters are Region-specific.
+//
+//   * ErrCodeUnsupportedFeatureException "UnsupportedFeatureException"
+//   The specified task is not supported in this Region.
+//
+//   * ErrCodeAccessDeniedException "AccessDeniedException"
+//   You do not have authorization to perform the requested action.
+//
+//   * ErrCodeServiceNotFoundException "ServiceNotFoundException"
+//   The specified service could not be found. You can view your available services
+//   with ListServices. Amazon ECS services are cluster-specific and Region-specific.
+//
+//   * ErrCodeServiceNotActiveException "ServiceNotActiveException"
+//   The specified service is not active. You can't update a service that is inactive.
+//   If you have previously deleted a service, you can re-create it with CreateService.
+//
+//   * ErrCodeTaskSetNotFoundException "TaskSetNotFoundException"
+//   The specified task set could not be found. You can view your available container
+//   instances with DescribeTaskSets. Task sets are specific to each cluster,
+//   service and Region.
+//
+//   * ErrCodeAccessDeniedException "AccessDeniedException"
+//   You do not 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 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 (http://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 Codes:
 //   * ErrCodeServerException "ServerException"
@@ -4221,6 +4821,12 @@ func (c *ECS) UpdateServiceRequest(input *UpdateServiceInput) (req *request.Requ
 //   The specified cluster could not be found. You can view your available clusters
 //   with ListClusters. Amazon ECS clusters are Region-specific.
 //
+//   * ErrCodeUnsupportedFeatureException "UnsupportedFeatureException"
+//   The specified task is not supported in this Region.
+//
+//   * ErrCodeAccessDeniedException "AccessDeniedException"
+//   You do not have authorization to perform the requested action.
+//
 //   * ErrCodeServiceNotFoundException "ServiceNotFoundException"
 //   The specified service could not be found. You can view your available services
 //   with ListServices. Amazon ECS services are cluster-specific and Region-specific.
@@ -4229,33 +4835,28 @@ func (c *ECS) UpdateServiceRequest(input *UpdateServiceInput) (req *request.Requ
 //   The specified service is not active. You can't update a service that is inactive.
 //   If you have previously deleted a service, you can re-create it with CreateService.
 //
-//   * ErrCodePlatformUnknownException "PlatformUnknownException"
-//   The specified platform version does not exist.
-//
-//   * ErrCodePlatformTaskDefinitionIncompatibilityException "PlatformTaskDefinitionIncompatibilityException"
-//   The specified platform version does not satisfy the task definition's required
-//   capabilities.
-//
-//   * ErrCodeAccessDeniedException "AccessDeniedException"
-//   You do not have authorization to perform the requested action.
+//   * ErrCodeTaskSetNotFoundException "TaskSetNotFoundException"
+//   The specified task set could not be found. You can view your available container
+//   instances 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/UpdateService
-func (c *ECS) UpdateService(input *UpdateServiceInput) (*UpdateServiceOutput, error) {
-	req, out := c.UpdateServiceRequest(input)
+// 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()
 }
 
-// UpdateServiceWithContext is the same as UpdateService with the addition of
+// UpdateTaskSetWithContext is the same as UpdateTaskSet 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.
+// 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) UpdateServiceWithContext(ctx aws.Context, input *UpdateServiceInput, opts ...request.Option) (*UpdateServiceOutput, error) {
-	req, out := c.UpdateServiceRequest(input)
+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()
@@ -4841,8 +5442,22 @@ type ContainerDefinition struct {
 	// of CPU that is described in the task definition.
 	Cpu *int64 `locationName:"cpu" type:"integer"`
 
-	// The dependencies defined for container startup. A container can contain multiple
-	// dependencies.
+	// 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 enable 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 (http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html)
+	// in the Amazon Elastic Container Service Developer Guide. If you are 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 (http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html)
+	// in the Amazon Elastic Container Service Developer Guide.
 	DependsOn []*ContainerDependency `locationName:"dependsOn" type:"list"`
 
 	// When this parameter is true, networking is disabled within the container.
@@ -5182,17 +5797,44 @@ type ContainerDefinition struct {
 	// in the Amazon Elastic Container Service Developer Guide.
 	Secrets []*Secret `locationName:"secrets" type:"list"`
 
-	// Time duration to wait before giving up on starting the container.
-	//
-	// The startTimeout value for the container will take precedence over the ECS_CONTAINER_START_TIMEOUT
-	// container agent configuration parameter, if used.
+	// Time duration 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 does not
+	// reach the desired status within that time then containerA will give up and
+	// not start. This results in the task transitioning to a STOPPED state.
+	//
+	// Your Amazon ECS container instances require at least version 1.26.0 of the
+	// container agent to enable 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 (http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html)
+	// in the Amazon Elastic Container Service Developer Guide. If you are 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 (http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html)
+	// in the Amazon Elastic Container Service Developer Guide.
 	StartTimeout *int64 `locationName:"startTimeout" type:"integer"`
 
-	// Time duration to wait before the container is forcefully killed if it does
-	// not exit normally on its own.
-	//
-	// The stopTimeout value for the container will take precedence over the ECS_CONTAINER_STOP_TIMEOUT
-	// container agent configuration parameter, if used.
+	// Time duration to wait before the container is forcefully killed if it doesn't
+	// exit normally on its own. The stop timeout value for the container takes
+	// precedence over the ECS_CONTAINER_STOP_TIMEOUT container agent configuration
+	// parameter, if used.
+	//
+	// Your Amazon ECS container instances require at least version 1.26.0 of the
+	// container agent to enable 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 (http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html)
+	// in the Amazon Elastic Container Service Developer Guide. If you are 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 (http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html)
+	// in the Amazon Elastic Container Service Developer Guide.
 	StopTimeout *int64 `locationName:"stopTimeout" type:"integer"`
 
 	// A list of namespaced kernel parameters to set in the container. This parameter
@@ -5221,13 +5863,13 @@ type ContainerDefinition struct {
 	// This parameter is not supported for Windows containers.
 	Ulimits []*Ulimit `locationName:"ulimits" type:"list"`
 
-	// The username to use inside the container. This parameter maps to User in
+	// The user name 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/).
 	//
-	// This following formats can be used. If specifying a UID or GID, it must be
-	// specified as a positive integer.
+	// You can use the following formats. If specifying a UID or GID, you must specify
+	// it as a positive integer.
 	//
 	//    * user
 	//
@@ -5569,8 +6211,25 @@ func (s *ContainerDefinition) SetWorkingDirectory(v string) *ContainerDefinition
 	return s
 }
 
-// The dependencies defined for container startup. A container can contain multiple
-// dependencies.
+// 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 enable 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 (http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html)
+// in the Amazon Elastic Container Service Developer Guide. If you are 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 (http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html)
+// in the Amazon Elastic Container Service Developer Guide.
+//
+// If you are using tasks that use the Fargate launch type, container dependency
+// parameters are not supported.
 type ContainerDependency struct {
 	_ struct{} `type:"structure"`
 
@@ -5583,16 +6242,15 @@ type ContainerDependency struct {
 	//
 	//    * COMPLETE - This condition validates that a dependent container runs
 	//    to completion (exits) before permitting other containers to start. This
-	//    can be useful for non-essential containers that run a script and then
-	//    subsequently exit.
+	//    can be useful for nonessential containers that run a script and then exit.
 	//
-	//    * SUCCESS - This condition is the same as COMPLETE, but it will also require
+	//    * SUCCESS - This condition is the same as COMPLETE, but it also requires
 	//    that the container exits with a zero status.
 	//
 	//    * 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 will only be confirmed at task startup.
+	//    condition is confirmed only at task startup.
 	//
 	// Condition is a required field
 	Condition *string `locationName:"condition" type:"string" required:"true" enum:"ContainerCondition"`
@@ -6182,9 +6840,9 @@ type CreateServiceInput struct {
 	// specify a maximum of five strategy rules per service.
 	PlacementStrategy []*PlacementStrategy `locationName:"placementStrategy" type:"list"`
 
-	// The platform version on which your tasks in the service are running. A platform
-	// version is only specified for tasks using the Fargate launch type. If one
-	// is not specified, the LATEST platform version is used by default. For more
+	// 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 by default. For more
 	// information, see AWS 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"`
@@ -6227,16 +6885,17 @@ type CreateServiceInput struct {
 	//    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 using the CODE_DEPLOY deployment controller.
+	//    strategy is required if the service is using 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. When you are using this strategy, there
-	//    is no need to specify a desired number of tasks, a task placement strategy,
+	//    that you specify in your cluster. 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 deploymenet controller
-	//    do not support the DAEMON scheduling strategy.
+	// 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 name of your service. Up to 255 letters (uppercase and lowercase), numbers,
@@ -6266,8 +6925,9 @@ type CreateServiceInput struct {
 	// to run in your service. If a revision is not specified, the latest ACTIVE
 	// revision is used.
 	//
-	// TaskDefinition is a required field
-	TaskDefinition *string `locationName:"taskDefinition" type:"string" required:"true"`
+	// A task definition must be specified if the service is using the ECS deployment
+	// controller.
+	TaskDefinition *string `locationName:"taskDefinition" type:"string"`
 }
 
 // String returns the string representation
@@ -6286,9 +6946,6 @@ func (s *CreateServiceInput) Validate() error {
 	if s.ServiceName == nil {
 		invalidParams.Add(request.NewErrParamRequired("ServiceName"))
 	}
-	if s.TaskDefinition == nil {
-		invalidParams.Add(request.NewErrParamRequired("TaskDefinition"))
-	}
 	if s.DeploymentController != nil {
 		if err := s.DeploymentController.Validate(); err != nil {
 			invalidParams.AddNested("DeploymentController", err.(request.ErrInvalidParams))
@@ -6466,6 +7123,189 @@ func (s *CreateServiceOutput) SetService(v *Service) *CreateServiceOutput {
 	return s
 }
 
+type CreateTaskSetInput struct {
+	_ struct{} `type:"structure"`
+
+	// Unique, case-sensitive identifier that you provide to ensure the idempotency
+	// of the request. Up to 32 ASCII characters 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 AWS Cloud Map attribute
+	// set to the provided value.
+	ExternalId *string `locationName:"externalId" type:"string"`
+
+	// The launch type that new tasks in the task set will use. 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"`
+
+	// 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 or service.
+	NetworkConfiguration *NetworkConfiguration `locationName:"networkConfiguration" type:"structure"`
+
+	// The platform version that the tasks in the task set should use. A platform
+	// version is specified only for tasks using the Fargate launch type. If one
+	// isn't specified, the LATEST platform version is used by default.
+	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 (http://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-discovery.html).
+	ServiceRegistries []*ServiceRegistry `locationName:"serviceRegistries" type:"list"`
+
+	// The task definition for the tasks in the task set to use.
+	//
+	// TaskDefinition is a required field
+	TaskDefinition *string `locationName:"taskDefinition" type:"string" required:"true"`
+}
+
+// String returns the string representation
+func (s CreateTaskSetInput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+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.NetworkConfiguration != nil {
+		if err := s.NetworkConfiguration.Validate(); err != nil {
+			invalidParams.AddNested("NetworkConfiguration", err.(request.ErrInvalidParams))
+		}
+	}
+
+	if invalidParams.Len() > 0 {
+		return invalidParams
+	}
+	return nil
+}
+
+// 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
+}
+
+// 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 AWS 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.
+	TaskSet *TaskSet `locationName:"taskSet" type:"structure"`
+}
+
+// String returns the string representation
+func (s CreateTaskSetOutput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+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"`
 
@@ -6767,14 +7607,118 @@ 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
+// SetService sets the Service field's value.
+func (s *DeleteServiceOutput) SetService(v *Service) *DeleteServiceOutput {
+	s.Service = 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 exists in to delete.
+	//
+	// Cluster is a required field
+	Cluster *string `locationName:"cluster" type:"string" required:"true"`
+
+	// If true, this allows you to 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
+func (s DeleteTaskSetInput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+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"`
+
+	// Information about a set of Amazon ECS tasks in either an AWS 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.
+	TaskSet *TaskSet `locationName:"taskSet" type:"structure"`
+}
+
+// String returns the string representation
+func (s DeleteTaskSetOutput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+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 when a service
-// uses the CODE_DEPLOY deployment controller type.
+// 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"`
 
@@ -6904,8 +7848,8 @@ func (s *Deployment) SetUpdatedAt(v time.Time) *Deployment {
 	return s
 }
 
-// Optional deployment parameters that control how many tasks run during the
-// deployment and the ordering of stopping and starting tasks.
+// 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"`
 
@@ -6921,13 +7865,13 @@ type DeploymentConfiguration struct {
 	// the cluster resources required to do this are available). The default value
 	// for maximum percent is 200%.
 	//
-	// If a service is using the blue/green (CODE_DEPLOY) deployment type 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.
+	// If a service is using 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 minimum
@@ -6945,13 +7889,13 @@ type DeploymentConfiguration struct {
 	// they are reported as healthy by the load balancer. The default value for
 	// minimum healthy percent is 100%.
 	//
-	// If a service is using the blue/green (CODE_DEPLOY) deployment type and 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 the tasks in the service use the
-	// Fargate launch type, the minimum healthy percent value is not used, although
-	// it is returned when describing your service.
+	// If a service is using the blue/green (CODE_DEPLOY) or EXTERNAL deployment
+	// types and 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 the tasks in the service
+	// 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"`
 }
 
@@ -6985,7 +7929,7 @@ type DeploymentController struct {
 
 	// The deployment controller type to use.
 	//
-	// There are two deployment controller types available:
+	// There are three deployment controller types available:
 	//
 	// ECSThe rolling update (ECS) deployment type involves replacing the current
 	// running version of the container with the latest version. The number of containers
@@ -6995,9 +7939,11 @@ type DeploymentController struct {
 	//
 	// CODE_DEPLOYThe blue/green (CODE_DEPLOY) deployment type uses the blue/green
 	// deployment model powered by AWS CodeDeploy, which allows you to verify a
-	// new deployment of a service before sending production traffic to it. For
-	// more information, see Amazon ECS Deployment Types (http://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.html)
-	// in the Amazon Elastic Container Service Developer Guide.
+	// new deployment of a service before sending production traffic to it.
+	//
+	// EXTERNALThe 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"`
@@ -7544,6 +8490,101 @@ func (s *DescribeTaskDefinitionOutput) SetTaskDefinition(v *TaskDefinition) *Des
 	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"`
+
+	// 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
+func (s DescribeTaskSetsInput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+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
+}
+
+// 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
+func (s DescribeTaskSetsOutput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+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"`
 
@@ -9870,6 +10911,14 @@ func (s *PortMapping) SetProtocol(v string) *PortMapping {
 }
 
 // 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
+// enable 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 (http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html)
+// in the Amazon Elastic Container Service Developer Guide.
 type ProxyConfiguration struct {
 	_ struct{} `type:"structure"`
 
@@ -9892,7 +10941,7 @@ type ProxyConfiguration struct {
 	//    this field can be empty.
 	//
 	//    * AppPorts - (Required) The list of ports that the application uses. Network
-	//    traffic to these ports will be forwarded to the ProxyIngressPort and ProxyEgressPort.
+	//    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.
@@ -9900,13 +10949,13 @@ type ProxyConfiguration struct {
 	//    * ProxyEgressPort - (Required) Specifies the port that outgoing traffic
 	//    from the AppPorts is directed to.
 	//
-	//    * EgressIgnoredPorts - (Required) The egress traffic going to these specified
-	//    ports will be ignored and not redirected to the ProxyEgressPort. It can
-	//    be empty list.
+	//    * 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 these specified
-	//    IP addresses will be ignored and not redirected to the ProxyEgressPort.
-	//    It can be 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.
@@ -10552,6 +11601,14 @@ type RegisterTaskDefinitionInput struct {
 	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
+	// enable 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 (http://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 launch type required by the task. If no value is specified, it defaults
@@ -11176,8 +12233,7 @@ func (s *RunTaskOutput) SetTasks(v []*Task) *RunTaskOutput {
 }
 
 // A floating-point percentage of the desired number of tasks to place and keep
-// running in the service. This is used when a service uses the CODE_DEPLOY
-// deployment controller type.
+// running in the task set.
 type Scale struct {
 	_ struct{} `type:"structure"`
 
@@ -11185,7 +12241,7 @@ type Scale struct {
 	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.
+	// the task set. Accepted values are numbers between 0 and 100.
 	Value *float64 `locationName:"value" type:"double"`
 }
 
@@ -11395,6 +12451,8 @@ type Service struct {
 	// within a Region or across multiple Regions.
 	ServiceName *string `locationName:"serviceName" type:"string"`
 
+	// The details of the service discovery registries to assign to this service.
+	// For more information, see Service Discovery (http://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.
@@ -11411,9 +12469,10 @@ type Service struct {
 	// UpdateService.
 	TaskDefinition *string `locationName:"taskDefinition" type:"string"`
 
-	// Information about a set of Amazon ECS tasks in an AWS CodeDeploy 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.
+	// Information about a set of Amazon ECS tasks in either an AWS 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"`
 }
 
@@ -11665,8 +12724,8 @@ type ServiceRegistry struct {
 	Port *int64 `locationName:"port" type:"integer"`
 
 	// The Amazon Resource Name (ARN) of the service registry. The currently supported
-	// service registry is Amazon Route 53 Auto Naming. For more information, see
-	// Service (https://docs.aws.amazon.com/Route53/latest/APIReference/API_autonaming_Service.html).
+	// service registry is AWS 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"`
 }
 
@@ -11715,10 +12774,10 @@ type Setting struct {
 	// user. If this field is omitted, the authenticated user is assumed.
 	PrincipalArn *string `locationName:"principalArn" type:"string"`
 
-	// The current account setting for the resource name. If enabled, then the resource
-	// will receive the new Amazon Resource Name (ARN) and resource identifier (ID)
-	// format. If disabled, then the resource will receive the old Amazon Resource
-	// Name (ARN) and resource identifier (ID) format.
+	// The current account setting for the resource name. If enabled, the resource
+	// receives the new Amazon Resource Name (ARN) and resource identifier (ID)
+	// format. If disabled, the resource receives the old Amazon Resource Name (ARN)
+	// and resource identifier (ID) format.
 	Value *string `locationName:"value" type:"string"`
 }
 
@@ -11971,7 +13030,7 @@ type StopTaskInput struct {
 	// API operations on this task. Up to 255 characters are allowed in this message.
 	Reason *string `locationName:"reason" type:"string"`
 
-	// The task ID or full ARN entry of the task to stop.
+	// The task ID or full Amazon Resource Name (ARN) of the task to stop.
 	//
 	// Task is a required field
 	Task *string `locationName:"task" type:"string" required:"true"`
@@ -12977,6 +14036,14 @@ type TaskDefinition struct {
 	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
+	// enable 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 (http://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 container instance attributes required by your task. This field is not
@@ -13247,20 +14314,34 @@ func (s *TaskOverride) SetTaskRoleArn(v string) *TaskOverride {
 	return s
 }
 
-// Information about a set of Amazon ECS tasks in an AWS CodeDeploy 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.
+// Information about a set of Amazon ECS tasks in either an AWS 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 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 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 when the task set was created.
 	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp"`
 
-	// The deployment ID of the AWS CodeDeploy deployment.
+	// The external ID associated with the task set.
+	//
+	// If a task set is created by an AWS CodeDeploy deployment, the externalId
+	// parameter contains the AWS 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
+	// AWS Cloud Map attribute.
 	ExternalId *string `locationName:"externalId" type:"string"`
 
 	// The ID of the task set.
@@ -13280,7 +14361,7 @@ type TaskSet struct {
 	// 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 is restarted after being in the STOPPED state.
+	// time or when it is restarted after being in the STOPPED state.
 	PendingCount *int64 `locationName:"pendingCount" type:"integer"`
 
 	// The platform version on which the tasks in the task set are running. A platform
@@ -13295,9 +14376,16 @@ type TaskSet struct {
 	RunningCount *int64 `locationName:"runningCount" type:"integer"`
 
 	// A floating-point percentage of the desired number of tasks to place and keep
-	// running in the service.
+	// 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 of the service discovery registries to assign to this task set.
+	// For more information, see Service Discovery (http://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-discovery.html).
+	ServiceRegistries []*ServiceRegistry `locationName:"serviceRegistries" type:"list"`
+
 	// The stability status, which indicates whether the task set has reached a
 	// steady state. If the following conditions are met, the task set will be in
 	// STEADY_STATE:
@@ -13317,8 +14405,10 @@ type TaskSet struct {
 	// The Unix timestamp for 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 the task is started by an
-	// AWS CodeDeploy deployment, then the startedBy parameter is CODE_DEPLOY.
+	// The tag specified when a task set is started. If the task set is created
+	// by an AWS CodeDeploy deployment, the startedBy parameter is CODE_DEPLOY.
+	// For a task set created for an external deployment, the startedBy field isn't
+	// used.
 	StartedBy *string `locationName:"startedBy" type:"string"`
 
 	// The status of the task set. The following describes each state:
@@ -13351,6 +14441,12 @@ func (s TaskSet) GoString() string {
 	return s.String()
 }
 
+// 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
@@ -13417,6 +14513,18 @@ func (s *TaskSet) SetScale(v *Scale) *TaskSet {
 	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
@@ -14002,6 +15110,210 @@ func (s *UpdateServiceOutput) SetService(v *Service) *UpdateServiceOutput {
 	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
+func (s UpdateServicePrimaryTaskSetInput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+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"`
+
+	// Information about a set of Amazon ECS tasks in either an AWS 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.
+	TaskSet *TaskSet `locationName:"taskSet" type:"structure"`
+}
+
+// String returns the string representation
+func (s UpdateServicePrimaryTaskSetOutput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+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 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 exists 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 exists 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
+func (s UpdateTaskSetInput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+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"`
+
+	// Information about a set of Amazon ECS tasks in either an AWS 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.
+	TaskSet *TaskSet `locationName:"taskSet" type:"structure"`
+}
+
+// String returns the string representation
+func (s UpdateTaskSetOutput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+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 {
@@ -14228,6 +15540,9 @@ const (
 
 	// DeploymentControllerTypeCodeDeploy is a DeploymentControllerType enum value
 	DeploymentControllerTypeCodeDeploy = "CODE_DEPLOY"
+
+	// DeploymentControllerTypeExternal is a DeploymentControllerType enum value
+	DeploymentControllerTypeExternal = "EXTERNAL"
 )
 
 const (
diff --git a/vendor/github.com/aws/aws-sdk-go/service/ecs/errors.go b/vendor/github.com/aws/aws-sdk-go/service/ecs/errors.go
index 9a11f23dcd15..c350d185b155 100644
--- a/vendor/github.com/aws/aws-sdk-go/service/ecs/errors.go
+++ b/vendor/github.com/aws/aws-sdk-go/service/ecs/errors.go
@@ -133,6 +133,14 @@ const (
 	// cluster-specific and Region-specific.
 	ErrCodeTargetNotFoundException = "TargetNotFoundException"
 
+	// ErrCodeTaskSetNotFoundException for service response error code
+	// "TaskSetNotFoundException".
+	//
+	// The specified task set could not be found. You can view your available container
+	// instances with DescribeTaskSets. Task sets are specific to each cluster,
+	// service and Region.
+	ErrCodeTaskSetNotFoundException = "TaskSetNotFoundException"
+
 	// ErrCodeUnsupportedFeatureException for service response error code
 	// "UnsupportedFeatureException".
 	//
diff --git a/vendor/github.com/aws/aws-sdk-go/service/elbv2/api.go b/vendor/github.com/aws/aws-sdk-go/service/elbv2/api.go
index 5d3fe096c423..13503617465e 100644
--- a/vendor/github.com/aws/aws-sdk-go/service/elbv2/api.go
+++ b/vendor/github.com/aws/aws-sdk-go/service/elbv2/api.go
@@ -6073,6 +6073,80 @@ func (s *FixedResponseActionConfig) SetStatusCode(v string) *FixedResponseAction
 	return s
 }
 
+type HostHeaderConditionConfig struct {
+	_ struct{} `type:"structure"`
+
+	Values []*string `type:"list"`
+}
+
+// String returns the string representation
+func (s HostHeaderConditionConfig) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s HostHeaderConditionConfig) GoString() string {
+	return s.String()
+}
+
+// SetValues sets the Values field's value.
+func (s *HostHeaderConditionConfig) SetValues(v []*string) *HostHeaderConditionConfig {
+	s.Values = v
+	return s
+}
+
+type HttpHeaderConditionConfig struct {
+	_ struct{} `type:"structure"`
+
+	HttpHeaderName *string `type:"string"`
+
+	Values []*string `type:"list"`
+}
+
+// String returns the string representation
+func (s HttpHeaderConditionConfig) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s HttpHeaderConditionConfig) GoString() string {
+	return s.String()
+}
+
+// SetHttpHeaderName sets the HttpHeaderName field's value.
+func (s *HttpHeaderConditionConfig) SetHttpHeaderName(v string) *HttpHeaderConditionConfig {
+	s.HttpHeaderName = &v
+	return s
+}
+
+// SetValues sets the Values field's value.
+func (s *HttpHeaderConditionConfig) SetValues(v []*string) *HttpHeaderConditionConfig {
+	s.Values = v
+	return s
+}
+
+type HttpRequestMethodConditionConfig struct {
+	_ struct{} `type:"structure"`
+
+	Values []*string `type:"list"`
+}
+
+// String returns the string representation
+func (s HttpRequestMethodConditionConfig) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s HttpRequestMethodConditionConfig) GoString() string {
+	return s.String()
+}
+
+// SetValues sets the Values field's value.
+func (s *HttpRequestMethodConditionConfig) SetValues(v []*string) *HttpRequestMethodConditionConfig {
+	s.Values = v
+	return s
+}
+
 // Information about an Elastic Load Balancing resource limit for your AWS account.
 type Limit struct {
 	_ struct{} `type:"structure"`
@@ -7121,6 +7195,80 @@ func (s *ModifyTargetGroupOutput) SetTargetGroups(v []*TargetGroup) *ModifyTarge
 	return s
 }
 
+type PathPatternConditionConfig struct {
+	_ struct{} `type:"structure"`
+
+	Values []*string `type:"list"`
+}
+
+// String returns the string representation
+func (s PathPatternConditionConfig) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s PathPatternConditionConfig) GoString() string {
+	return s.String()
+}
+
+// SetValues sets the Values field's value.
+func (s *PathPatternConditionConfig) SetValues(v []*string) *PathPatternConditionConfig {
+	s.Values = v
+	return s
+}
+
+type QueryStringConditionConfig struct {
+	_ struct{} `type:"structure"`
+
+	Values []*QueryStringKeyValuePair `type:"list"`
+}
+
+// String returns the string representation
+func (s QueryStringConditionConfig) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s QueryStringConditionConfig) GoString() string {
+	return s.String()
+}
+
+// SetValues sets the Values field's value.
+func (s *QueryStringConditionConfig) SetValues(v []*QueryStringKeyValuePair) *QueryStringConditionConfig {
+	s.Values = v
+	return s
+}
+
+type QueryStringKeyValuePair struct {
+	_ struct{} `type:"structure"`
+
+	Key *string `type:"string"`
+
+	Value *string `type:"string"`
+}
+
+// String returns the string representation
+func (s QueryStringKeyValuePair) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s QueryStringKeyValuePair) GoString() string {
+	return s.String()
+}
+
+// SetKey sets the Key field's value.
+func (s *QueryStringKeyValuePair) SetKey(v string) *QueryStringKeyValuePair {
+	s.Key = &v
+	return s
+}
+
+// SetValue sets the Value field's value.
+func (s *QueryStringKeyValuePair) SetValue(v string) *QueryStringKeyValuePair {
+	s.Value = &v
+	return s
+}
+
 // Information about a redirect action.
 //
 // A URI consists of the following components: protocol://hostname:port/path?query.
@@ -7518,6 +7666,18 @@ type RuleCondition struct {
 	// The name of the field. The possible values are host-header and path-pattern.
 	Field *string `type:"string"`
 
+	HostHeaderConfig *HostHeaderConditionConfig `type:"structure"`
+
+	HttpHeaderConfig *HttpHeaderConditionConfig `type:"structure"`
+
+	HttpRequestMethodConfig *HttpRequestMethodConditionConfig `type:"structure"`
+
+	PathPatternConfig *PathPatternConditionConfig `type:"structure"`
+
+	QueryStringConfig *QueryStringConditionConfig `type:"structure"`
+
+	SourceIpConfig *SourceIpConditionConfig `type:"structure"`
+
 	// The condition value.
 	//
 	// If the field name is host-header, you can specify a single host name (for
@@ -7566,6 +7726,42 @@ func (s *RuleCondition) SetField(v string) *RuleCondition {
 	return s
 }
 
+// SetHostHeaderConfig sets the HostHeaderConfig field's value.
+func (s *RuleCondition) SetHostHeaderConfig(v *HostHeaderConditionConfig) *RuleCondition {
+	s.HostHeaderConfig = v
+	return s
+}
+
+// SetHttpHeaderConfig sets the HttpHeaderConfig field's value.
+func (s *RuleCondition) SetHttpHeaderConfig(v *HttpHeaderConditionConfig) *RuleCondition {
+	s.HttpHeaderConfig = v
+	return s
+}
+
+// SetHttpRequestMethodConfig sets the HttpRequestMethodConfig field's value.
+func (s *RuleCondition) SetHttpRequestMethodConfig(v *HttpRequestMethodConditionConfig) *RuleCondition {
+	s.HttpRequestMethodConfig = v
+	return s
+}
+
+// SetPathPatternConfig sets the PathPatternConfig field's value.
+func (s *RuleCondition) SetPathPatternConfig(v *PathPatternConditionConfig) *RuleCondition {
+	s.PathPatternConfig = v
+	return s
+}
+
+// SetQueryStringConfig sets the QueryStringConfig field's value.
+func (s *RuleCondition) SetQueryStringConfig(v *QueryStringConditionConfig) *RuleCondition {
+	s.QueryStringConfig = v
+	return s
+}
+
+// SetSourceIpConfig sets the SourceIpConfig field's value.
+func (s *RuleCondition) SetSourceIpConfig(v *SourceIpConditionConfig) *RuleCondition {
+	s.SourceIpConfig = v
+	return s
+}
+
 // SetValues sets the Values field's value.
 func (s *RuleCondition) SetValues(v []*string) *RuleCondition {
 	s.Values = v
@@ -7926,6 +8122,28 @@ func (s *SetSubnetsOutput) SetAvailabilityZones(v []*AvailabilityZone) *SetSubne
 	return s
 }
 
+type SourceIpConditionConfig struct {
+	_ struct{} `type:"structure"`
+
+	Values []*string `type:"list"`
+}
+
+// String returns the string representation
+func (s SourceIpConditionConfig) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s SourceIpConditionConfig) GoString() string {
+	return s.String()
+}
+
+// SetValues sets the Values field's value.
+func (s *SourceIpConditionConfig) SetValues(v []*string) *SourceIpConditionConfig {
+	s.Values = v
+	return s
+}
+
 // Information about a policy used for SSL negotiation.
 type SslPolicy struct {
 	_ struct{} `type:"structure"`
diff --git a/vendor/github.com/aws/aws-sdk-go/service/fms/api.go b/vendor/github.com/aws/aws-sdk-go/service/fms/api.go
index 4c2b2be5361e..52cacb83550d 100644
--- a/vendor/github.com/aws/aws-sdk-go/service/fms/api.go
+++ b/vendor/github.com/aws/aws-sdk-go/service/fms/api.go
@@ -738,6 +738,93 @@ func (c *FMS) GetPolicyWithContext(ctx aws.Context, input *GetPolicyInput, opts
 	return out, req.Send()
 }
 
+const opGetProtectionStatus = "GetProtectionStatus"
+
+// GetProtectionStatusRequest generates a "aws/request.Request" representing the
+// client's request for the GetProtectionStatus 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 GetProtectionStatus for more information on using the GetProtectionStatus
+// 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 GetProtectionStatusRequest method.
+//    req, resp := client.GetProtectionStatusRequest(params)
+//
+//    err := req.Send()
+//    if err == nil { // resp is now filled
+//        fmt.Println(resp)
+//    }
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/fms-2018-01-01/GetProtectionStatus
+func (c *FMS) GetProtectionStatusRequest(input *GetProtectionStatusInput) (req *request.Request, output *GetProtectionStatusOutput) {
+	op := &request.Operation{
+		Name:       opGetProtectionStatus,
+		HTTPMethod: "POST",
+		HTTPPath:   "/",
+	}
+
+	if input == nil {
+		input = &GetProtectionStatusInput{}
+	}
+
+	output = &GetProtectionStatusOutput{}
+	req = c.newRequest(op, input, output)
+	return
+}
+
+// GetProtectionStatus API operation for Firewall Management Service.
+//
+// If you created a Shield Advanced policy, returns policy-level attack summary
+// information in the event of a potential DDoS attack.
+//
+// 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 Firewall Management Service's
+// API operation GetProtectionStatus for usage and error information.
+//
+// Returned Error Codes:
+//   * ErrCodeInvalidInputException "InvalidInputException"
+//   The parameters of the request were invalid.
+//
+//   * ErrCodeResourceNotFoundException "ResourceNotFoundException"
+//   The specified resource was not found.
+//
+//   * ErrCodeInternalErrorException "InternalErrorException"
+//   The operation failed because of a system problem, even though the request
+//   was valid. Retry your request.
+//
+// See also, https://docs.aws.amazon.com/goto/WebAPI/fms-2018-01-01/GetProtectionStatus
+func (c *FMS) GetProtectionStatus(input *GetProtectionStatusInput) (*GetProtectionStatusOutput, error) {
+	req, out := c.GetProtectionStatusRequest(input)
+	return out, req.Send()
+}
+
+// GetProtectionStatusWithContext is the same as GetProtectionStatus with the addition of
+// the ability to pass a context and additional request options.
+//
+// See GetProtectionStatus 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 *FMS) GetProtectionStatusWithContext(ctx aws.Context, input *GetProtectionStatusInput, opts ...request.Option) (*GetProtectionStatusOutput, error) {
+	req, out := c.GetProtectionStatusRequest(input)
+	req.SetContext(ctx)
+	req.ApplyOptions(opts...)
+	return out, req.Send()
+}
+
 const opListComplianceStatus = "ListComplianceStatus"
 
 // ListComplianceStatusRequest generates a "aws/request.Request" representing the
@@ -769,6 +856,12 @@ func (c *FMS) ListComplianceStatusRequest(input *ListComplianceStatusInput) (req
 		Name:       opListComplianceStatus,
 		HTTPMethod: "POST",
 		HTTPPath:   "/",
+		Paginator: &request.Paginator{
+			InputTokens:     []string{"NextToken"},
+			OutputTokens:    []string{"NextToken"},
+			LimitToken:      "MaxResults",
+			TruncationToken: "",
+		},
 	}
 
 	if input == nil {
@@ -823,6 +916,56 @@ func (c *FMS) ListComplianceStatusWithContext(ctx aws.Context, input *ListCompli
 	return out, req.Send()
 }
 
+// ListComplianceStatusPages iterates over the pages of a ListComplianceStatus operation,
+// calling the "fn" function with the response data for each page. To stop
+// iterating, return false from the fn function.
+//
+// See ListComplianceStatus 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 ListComplianceStatus operation.
+//    pageNum := 0
+//    err := client.ListComplianceStatusPages(params,
+//        func(page *ListComplianceStatusOutput, lastPage bool) bool {
+//            pageNum++
+//            fmt.Println(page)
+//            return pageNum <= 3
+//        })
+//
+func (c *FMS) ListComplianceStatusPages(input *ListComplianceStatusInput, fn func(*ListComplianceStatusOutput, bool) bool) error {
+	return c.ListComplianceStatusPagesWithContext(aws.BackgroundContext(), input, fn)
+}
+
+// ListComplianceStatusPagesWithContext same as ListComplianceStatusPages 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 *FMS) ListComplianceStatusPagesWithContext(ctx aws.Context, input *ListComplianceStatusInput, fn func(*ListComplianceStatusOutput, bool) bool, opts ...request.Option) error {
+	p := request.Pagination{
+		NewRequest: func() (*request.Request, error) {
+			var inCpy *ListComplianceStatusInput
+			if input != nil {
+				tmp := *input
+				inCpy = &tmp
+			}
+			req, _ := c.ListComplianceStatusRequest(inCpy)
+			req.SetContext(ctx)
+			req.ApplyOptions(opts...)
+			return req, nil
+		},
+	}
+
+	cont := true
+	for p.Next() && cont {
+		cont = fn(p.Page().(*ListComplianceStatusOutput), !p.HasNextPage())
+	}
+	return p.Err()
+}
+
 const opListMemberAccounts = "ListMemberAccounts"
 
 // ListMemberAccountsRequest generates a "aws/request.Request" representing the
@@ -854,6 +997,12 @@ func (c *FMS) ListMemberAccountsRequest(input *ListMemberAccountsInput) (req *re
 		Name:       opListMemberAccounts,
 		HTTPMethod: "POST",
 		HTTPPath:   "/",
+		Paginator: &request.Paginator{
+			InputTokens:     []string{"NextToken"},
+			OutputTokens:    []string{"NextToken"},
+			LimitToken:      "MaxResults",
+			TruncationToken: "",
+		},
 	}
 
 	if input == nil {
@@ -910,6 +1059,56 @@ func (c *FMS) ListMemberAccountsWithContext(ctx aws.Context, input *ListMemberAc
 	return out, req.Send()
 }
 
+// ListMemberAccountsPages iterates over the pages of a ListMemberAccounts operation,
+// calling the "fn" function with the response data for each page. To stop
+// iterating, return false from the fn function.
+//
+// See ListMemberAccounts 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 ListMemberAccounts operation.
+//    pageNum := 0
+//    err := client.ListMemberAccountsPages(params,
+//        func(page *ListMemberAccountsOutput, lastPage bool) bool {
+//            pageNum++
+//            fmt.Println(page)
+//            return pageNum <= 3
+//        })
+//
+func (c *FMS) ListMemberAccountsPages(input *ListMemberAccountsInput, fn func(*ListMemberAccountsOutput, bool) bool) error {
+	return c.ListMemberAccountsPagesWithContext(aws.BackgroundContext(), input, fn)
+}
+
+// ListMemberAccountsPagesWithContext same as ListMemberAccountsPages 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 *FMS) ListMemberAccountsPagesWithContext(ctx aws.Context, input *ListMemberAccountsInput, fn func(*ListMemberAccountsOutput, bool) bool, opts ...request.Option) error {
+	p := request.Pagination{
+		NewRequest: func() (*request.Request, error) {
+			var inCpy *ListMemberAccountsInput
+			if input != nil {
+				tmp := *input
+				inCpy = &tmp
+			}
+			req, _ := c.ListMemberAccountsRequest(inCpy)
+			req.SetContext(ctx)
+			req.ApplyOptions(opts...)
+			return req, nil
+		},
+	}
+
+	cont := true
+	for p.Next() && cont {
+		cont = fn(p.Page().(*ListMemberAccountsOutput), !p.HasNextPage())
+	}
+	return p.Err()
+}
+
 const opListPolicies = "ListPolicies"
 
 // ListPoliciesRequest generates a "aws/request.Request" representing the
@@ -941,6 +1140,12 @@ func (c *FMS) ListPoliciesRequest(input *ListPoliciesInput) (req *request.Reques
 		Name:       opListPolicies,
 		HTTPMethod: "POST",
 		HTTPPath:   "/",
+		Paginator: &request.Paginator{
+			InputTokens:     []string{"NextToken"},
+			OutputTokens:    []string{"NextToken"},
+			LimitToken:      "MaxResults",
+			TruncationToken: "",
+		},
 	}
 
 	if input == nil {
@@ -975,7 +1180,7 @@ func (c *FMS) ListPoliciesRequest(input *ListPoliciesInput) (req *request.Reques
 //   * ErrCodeLimitExceededException "LimitExceededException"
 //   The operation exceeds a resource limit, for example, the maximum number of
 //   policy objects that you can create for an AWS account. For more information,
-//   see Firewall Manager Limits (http://docs.aws.amazon.com/waf/latest/developerguide/fms-limits.html)
+//   see Firewall Manager Limits (https://docs.aws.amazon.com/waf/latest/developerguide/fms-limits.html)
 //   in the AWS WAF Developer Guide.
 //
 //   * ErrCodeInternalErrorException "InternalErrorException"
@@ -1004,6 +1209,56 @@ func (c *FMS) ListPoliciesWithContext(ctx aws.Context, input *ListPoliciesInput,
 	return out, req.Send()
 }
 
+// ListPoliciesPages iterates over the pages of a ListPolicies operation,
+// calling the "fn" function with the response data for each page. To stop
+// iterating, return false from the fn function.
+//
+// See ListPolicies 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 ListPolicies operation.
+//    pageNum := 0
+//    err := client.ListPoliciesPages(params,
+//        func(page *ListPoliciesOutput, lastPage bool) bool {
+//            pageNum++
+//            fmt.Println(page)
+//            return pageNum <= 3
+//        })
+//
+func (c *FMS) ListPoliciesPages(input *ListPoliciesInput, fn func(*ListPoliciesOutput, bool) bool) error {
+	return c.ListPoliciesPagesWithContext(aws.BackgroundContext(), input, fn)
+}
+
+// ListPoliciesPagesWithContext same as ListPoliciesPages 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 *FMS) ListPoliciesPagesWithContext(ctx aws.Context, input *ListPoliciesInput, fn func(*ListPoliciesOutput, bool) bool, opts ...request.Option) error {
+	p := request.Pagination{
+		NewRequest: func() (*request.Request, error) {
+			var inCpy *ListPoliciesInput
+			if input != nil {
+				tmp := *input
+				inCpy = &tmp
+			}
+			req, _ := c.ListPoliciesRequest(inCpy)
+			req.SetContext(ctx)
+			req.ApplyOptions(opts...)
+			return req, nil
+		},
+	}
+
+	cont := true
+	for p.Next() && cont {
+		cont = fn(p.Page().(*ListPoliciesOutput), !p.HasNextPage())
+	}
+	return p.Err()
+}
+
 const opPutNotificationChannel = "PutNotificationChannel"
 
 // PutNotificationChannelRequest generates a "aws/request.Request" representing the
@@ -1140,6 +1395,18 @@ func (c *FMS) PutPolicyRequest(input *PutPolicyInput) (req *request.Request, out
 //
 // Creates an AWS Firewall Manager policy.
 //
+// Firewall Manager provides two types of policies: A Shield Advanced policy,
+// which applies Shield Advanced protection to specified accounts and resources,
+// or a WAF policy, which contains a rule group and defines which resources
+// are to be protected by that rule group. A policy is specific to either WAF
+// or Shield Advanced. If you want to enforce both WAF rules and Shield Advanced
+// protection across accounts, you can create multiple policies. You can create
+// one or more policies for WAF rules, and one or more policies for Shield Advanced.
+//
+// You must be subscribed to Shield Advanced to create a Shield Advanced policy.
+// For more information on subscribing to Shield Advanced, see CreateSubscription
+// (https://docs.aws.amazon.com/waf/latest/DDOSAPIReference/API_CreateSubscription.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.
@@ -1162,7 +1429,7 @@ func (c *FMS) PutPolicyRequest(input *PutPolicyInput) (req *request.Request, out
 //   * ErrCodeLimitExceededException "LimitExceededException"
 //   The operation exceeds a resource limit, for example, the maximum number of
 //   policy objects that you can create for an AWS account. For more information,
-//   see Firewall Manager Limits (http://docs.aws.amazon.com/waf/latest/developerguide/fms-limits.html)
+//   see Firewall Manager Limits (https://docs.aws.amazon.com/waf/latest/developerguide/fms-limits.html)
 //   in the AWS WAF Developer Guide.
 //
 //   * ErrCodeInternalErrorException "InternalErrorException"
@@ -1261,7 +1528,7 @@ type ComplianceViolator struct {
 
 	// The resource type. This is in the format shown in AWS Resource Types Reference
 	// (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html).
-	// Valid values are AWS::ElasticLoadBalancingV2::LoadBalancer or AWS::CloudFront::Distribution.
+	// For example: AWS::ElasticLoadBalancingV2::LoadBalancer or AWS::CloudFront::Distribution.
 	ResourceType *string `min:"1" type:"string"`
 
 	// The reason that the resource is not protected by the policy.
@@ -1327,8 +1594,21 @@ func (s DeleteNotificationChannelOutput) GoString() string {
 type DeletePolicyInput struct {
 	_ struct{} `type:"structure"`
 
-	// If True, the request will also delete all web ACLs in this policy. Associated
-	// resources will no longer be protected by web ACLs in this policy.
+	// If True, the request will also perform a clean-up process that will:
+	//
+	//    * Delete rule groups created by AWS Firewall Manager
+	//
+	//    * Remove web ACLs from in-scope resources
+	//
+	//    * Delete web ACLs that contain no rules or rule groups
+	//
+	// After the cleanup, in-scope resources will no longer be protected by web
+	// ACLs in this policy. Protection of out-of-scope resources will remain unchanged.
+	// Scope is determined by tags and accounts associated with the policy. When
+	// creating the policy, if you specified that only resources in specific accounts
+	// or with specific tags be protected by the policy, those resources are in-scope.
+	// All others are out of scope. If you did not specify tags or accounts, all
+	// resources are in-scope.
 	DeleteAllPolicyResources *bool `type:"boolean"`
 
 	// The ID of the policy that you want to delete. PolicyId is returned by PutPolicy
@@ -1713,6 +1993,188 @@ func (s *GetPolicyOutput) SetPolicyArn(v string) *GetPolicyOutput {
 	return s
 }
 
+type GetProtectionStatusInput struct {
+	_ struct{} `type:"structure"`
+
+	// The end of the time period to query for the attacks. This is a timestamp
+	// type. The sample request above indicates a number type because the default
+	// used by AWS Firewall Manager is Unix time in seconds. However, any valid
+	// timestamp format is allowed.
+	EndTime *time.Time `type:"timestamp"`
+
+	// Specifies the number of objects that you want AWS Firewall Manager to return
+	// for this request. If you have more objects than the number that you specify
+	// for MaxResults, the response includes a NextToken value that you can use
+	// to get another batch of objects.
+	MaxResults *int64 `min:"1" type:"integer"`
+
+	// The AWS account that is in scope of the policy that you want to get the details
+	// for.
+	MemberAccountId *string `min:"1" type:"string"`
+
+	// If you specify a value for MaxResults and you have more objects than the
+	// number that you specify for MaxResults, AWS Firewall Manager returns a NextToken
+	// value in the response that allows you to list another group of objects. For
+	// the second and subsequent GetProtectionStatus requests, specify the value
+	// of NextToken from the previous response to get information about another
+	// batch of objects.
+	NextToken *string `min:"1" type:"string"`
+
+	// The ID of the policy for which you want to get the attack information.
+	//
+	// PolicyId is a required field
+	PolicyId *string `min:"36" type:"string" required:"true"`
+
+	// The start of the time period to query for the attacks. This is a timestamp
+	// type. The sample request above indicates a number type because the default
+	// used by AWS Firewall Manager is Unix time in seconds. However, any valid
+	// timestamp format is allowed.
+	StartTime *time.Time `type:"timestamp"`
+}
+
+// String returns the string representation
+func (s GetProtectionStatusInput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s GetProtectionStatusInput) GoString() string {
+	return s.String()
+}
+
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *GetProtectionStatusInput) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "GetProtectionStatusInput"}
+	if s.MaxResults != nil && *s.MaxResults < 1 {
+		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
+	}
+	if s.MemberAccountId != nil && len(*s.MemberAccountId) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("MemberAccountId", 1))
+	}
+	if s.NextToken != nil && len(*s.NextToken) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("NextToken", 1))
+	}
+	if s.PolicyId == nil {
+		invalidParams.Add(request.NewErrParamRequired("PolicyId"))
+	}
+	if s.PolicyId != nil && len(*s.PolicyId) < 36 {
+		invalidParams.Add(request.NewErrParamMinLen("PolicyId", 36))
+	}
+
+	if invalidParams.Len() > 0 {
+		return invalidParams
+	}
+	return nil
+}
+
+// SetEndTime sets the EndTime field's value.
+func (s *GetProtectionStatusInput) SetEndTime(v time.Time) *GetProtectionStatusInput {
+	s.EndTime = &v
+	return s
+}
+
+// SetMaxResults sets the MaxResults field's value.
+func (s *GetProtectionStatusInput) SetMaxResults(v int64) *GetProtectionStatusInput {
+	s.MaxResults = &v
+	return s
+}
+
+// SetMemberAccountId sets the MemberAccountId field's value.
+func (s *GetProtectionStatusInput) SetMemberAccountId(v string) *GetProtectionStatusInput {
+	s.MemberAccountId = &v
+	return s
+}
+
+// SetNextToken sets the NextToken field's value.
+func (s *GetProtectionStatusInput) SetNextToken(v string) *GetProtectionStatusInput {
+	s.NextToken = &v
+	return s
+}
+
+// SetPolicyId sets the PolicyId field's value.
+func (s *GetProtectionStatusInput) SetPolicyId(v string) *GetProtectionStatusInput {
+	s.PolicyId = &v
+	return s
+}
+
+// SetStartTime sets the StartTime field's value.
+func (s *GetProtectionStatusInput) SetStartTime(v time.Time) *GetProtectionStatusInput {
+	s.StartTime = &v
+	return s
+}
+
+type GetProtectionStatusOutput struct {
+	_ struct{} `type:"structure"`
+
+	// The ID of the AWS Firewall administrator account for this policy.
+	AdminAccountId *string `min:"1" type:"string"`
+
+	// Details about the attack, including the following:
+	//
+	//    * Attack type
+	//
+	//    * Account ID
+	//
+	//    * ARN of the resource attacked
+	//
+	//    * Start time of the attack
+	//
+	//    * End time of the attack (ongoing attacks will not have an end time)
+	//
+	// The details are in JSON format. An example is shown in the Examples section
+	// below.
+	Data *string `type:"string"`
+
+	// If you have more objects than the number that you specified for MaxResults
+	// in the request, the response includes a NextToken value. To list more objects,
+	// submit another GetProtectionStatus request, and specify the NextToken value
+	// from the response in the NextToken value in the next request.
+	//
+	// AWS SDKs provide auto-pagination that identify NextToken in a response and
+	// make subsequent request calls automatically on your behalf. However, this
+	// feature is not supported by GetProtectionStatus. You must submit subsequent
+	// requests with NextToken using your own processes.
+	NextToken *string `min:"1" type:"string"`
+
+	// The service type that is protected by the policy. Currently, this is always
+	// SHIELD_ADVANCED.
+	ServiceType *string `type:"string" enum:"SecurityServiceType"`
+}
+
+// String returns the string representation
+func (s GetProtectionStatusOutput) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s GetProtectionStatusOutput) GoString() string {
+	return s.String()
+}
+
+// SetAdminAccountId sets the AdminAccountId field's value.
+func (s *GetProtectionStatusOutput) SetAdminAccountId(v string) *GetProtectionStatusOutput {
+	s.AdminAccountId = &v
+	return s
+}
+
+// SetData sets the Data field's value.
+func (s *GetProtectionStatusOutput) SetData(v string) *GetProtectionStatusOutput {
+	s.Data = &v
+	return s
+}
+
+// SetNextToken sets the NextToken field's value.
+func (s *GetProtectionStatusOutput) SetNextToken(v string) *GetProtectionStatusOutput {
+	s.NextToken = &v
+	return s
+}
+
+// SetServiceType sets the ServiceType field's value.
+func (s *GetProtectionStatusOutput) SetServiceType(v string) *GetProtectionStatusOutput {
+	s.ServiceType = &v
+	return s
+}
+
 type ListComplianceStatusInput struct {
 	_ struct{} `type:"structure"`
 
@@ -2058,14 +2520,16 @@ type Policy struct {
 	// An array of ResourceTag objects.
 	ResourceTags []*ResourceTag `type:"list"`
 
-	// The type of resource to protect with the policy, either an Application Load
-	// Balancer or a CloudFront distribution. This is in the format shown in AWS
-	// Resource Types Reference (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html).
-	// Valid values are AWS::ElasticLoadBalancingV2::LoadBalancer or AWS::CloudFront::Distribution.
+	// The type of resource to protect with the policy. This is in the format shown
+	// in AWS Resource Types Reference (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html).
+	// For example: AWS::ElasticLoadBalancingV2::LoadBalancer or AWS::CloudFront::Distribution.
 	//
 	// ResourceType is a required field
 	ResourceType *string `min:"1" type:"string" required:"true"`
 
+	// An array of ResourceType.
+	ResourceTypeList []*string `type:"list"`
+
 	// Details about the security service that is being used to protect the resources.
 	//
 	// SecurityServicePolicyData is a required field
@@ -2188,6 +2652,12 @@ func (s *Policy) SetResourceType(v string) *Policy {
 	return s
 }
 
+// SetResourceTypeList sets the ResourceTypeList field's value.
+func (s *Policy) SetResourceTypeList(v []*string) *Policy {
+	s.ResourceTypeList = v
+	return s
+}
+
 // SetSecurityServicePolicyData sets the SecurityServicePolicyData field's value.
 func (s *Policy) SetSecurityServicePolicyData(v *SecurityServicePolicyData) *Policy {
 	s.SecurityServicePolicyData = v
@@ -2378,14 +2848,14 @@ type PolicySummary struct {
 	// Indicates if the policy should be automatically applied to new resources.
 	RemediationEnabled *bool `type:"boolean"`
 
-	// The type of resource to protect with the policy, either an Application Load
-	// Balancer or a CloudFront distribution. This is in the format shown in AWS
-	// Resource Types Reference (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html).
-	// Valid values are AWS::ElasticLoadBalancingV2::LoadBalancer or AWS::CloudFront::Distribution.
+	// The type of resource to protect with the policy. This is in the format shown
+	// in AWS Resource Types Reference (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html).
+	// For example: AWS::ElasticLoadBalancingV2::LoadBalancer or AWS::CloudFront::Distribution.
 	ResourceType *string `min:"1" type:"string"`
 
-	// The service that the policy is using to protect the resources. This value
-	// is WAF.
+	// The service that the policy is using to protect the resources. This specifies
+	// the type of policy that is created, either a WAF policy or Shield Advanced
+	// policy.
 	SecurityServiceType *string `type:"string" enum:"SecurityServiceType"`
 }
 
@@ -2652,10 +3122,13 @@ type SecurityServicePolicyData struct {
 	// ManagedServiceData": "{\"type\": \"WAF\", \"ruleGroups\": [{\"id\": \"12345678-1bcd-9012-efga-0987654321ab\",
 	// \"overrideAction\" : {\"type\": \"COUNT\"}}], \"defaultAction\": {\"type\":
 	// \"BLOCK\"}}
+	//
+	// If this is a Shield Advanced policy, this string will be empty.
 	ManagedServiceData *string `min:"1" type:"string"`
 
-	// The service that the policy is using to protect the resources. This value
-	// is WAF.
+	// The service that the policy is using to protect the resources. This specifies
+	// the type of policy that is created, either a WAF policy or Shield Advanced
+	// policy.
 	//
 	// Type is a required field
 	Type *string `type:"string" required:"true" enum:"SecurityServiceType"`
@@ -2727,6 +3200,9 @@ const (
 
 	// DependentServiceNameAwswaf is a DependentServiceName enum value
 	DependentServiceNameAwswaf = "AWSWAF"
+
+	// DependentServiceNameAwsshieldAdvanced is a DependentServiceName enum value
+	DependentServiceNameAwsshieldAdvanced = "AWSSHIELD_ADVANCED"
 )
 
 const (
@@ -2740,6 +3216,9 @@ const (
 const (
 	// SecurityServiceTypeWaf is a SecurityServiceType enum value
 	SecurityServiceTypeWaf = "WAF"
+
+	// SecurityServiceTypeShieldAdvanced is a SecurityServiceType enum value
+	SecurityServiceTypeShieldAdvanced = "SHIELD_ADVANCED"
 )
 
 const (
@@ -2751,4 +3230,7 @@ const (
 
 	// ViolationReasonResourceIncorrectWebAcl is a ViolationReason enum value
 	ViolationReasonResourceIncorrectWebAcl = "RESOURCE_INCORRECT_WEB_ACL"
+
+	// ViolationReasonResourceMissingShieldProtection is a ViolationReason enum value
+	ViolationReasonResourceMissingShieldProtection = "RESOURCE_MISSING_SHIELD_PROTECTION"
 )
diff --git a/vendor/github.com/aws/aws-sdk-go/service/fms/doc.go b/vendor/github.com/aws/aws-sdk-go/service/fms/doc.go
index baae6d87f70e..e7835b7be953 100644
--- a/vendor/github.com/aws/aws-sdk-go/service/fms/doc.go
+++ b/vendor/github.com/aws/aws-sdk-go/service/fms/doc.go
@@ -6,7 +6,7 @@
 // This is the AWS Firewall Manager API Reference. This guide is for developers
 // who need detailed information about the AWS Firewall Manager API actions,
 // data types, and errors. For detailed information about AWS Firewall Manager
-// features, see the AWS Firewall Manager Developer Guide (http://docs.aws.amazon.com/waf/latest/developerguide/fms-chapter.html).
+// features, see the AWS Firewall Manager Developer Guide (https://docs.aws.amazon.com/waf/latest/developerguide/fms-chapter.html).
 //
 // See https://docs.aws.amazon.com/goto/WebAPI/fms-2018-01-01 for more information on this service.
 //
diff --git a/vendor/github.com/aws/aws-sdk-go/service/fms/errors.go b/vendor/github.com/aws/aws-sdk-go/service/fms/errors.go
index c63fd3c5b80a..596738bf3479 100644
--- a/vendor/github.com/aws/aws-sdk-go/service/fms/errors.go
+++ b/vendor/github.com/aws/aws-sdk-go/service/fms/errors.go
@@ -36,7 +36,7 @@ const (
 	//
 	// The operation exceeds a resource limit, for example, the maximum number of
 	// policy objects that you can create for an AWS account. For more information,
-	// see Firewall Manager Limits (http://docs.aws.amazon.com/waf/latest/developerguide/fms-limits.html)
+	// see Firewall Manager Limits (https://docs.aws.amazon.com/waf/latest/developerguide/fms-limits.html)
 	// in the AWS WAF Developer Guide.
 	ErrCodeLimitExceededException = "LimitExceededException"
 
diff --git a/vendor/github.com/aws/aws-sdk-go/service/glue/api.go b/vendor/github.com/aws/aws-sdk-go/service/glue/api.go
index a03c19f97bc5..c1a8d00dfb8e 100644
--- a/vendor/github.com/aws/aws-sdk-go/service/glue/api.go
+++ b/vendor/github.com/aws/aws-sdk-go/service/glue/api.go
@@ -511,7 +511,8 @@ func (c *Glue) BatchGetCrawlersRequest(input *BatchGetCrawlersInput) (req *reque
 //
 // Returns a list of resource metadata for a given list of crawler names. After
 // calling the ListCrawlers operation, you can call this operation to access
-// the data to which you have been granted permissions to based on tags.
+// the data to which you have been granted permissions. This operation supports
+// all IAM permissions, including permission conditions that uses tags.
 //
 // 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
@@ -1038,8 +1039,8 @@ func (c *Glue) CreateClassifierRequest(input *CreateClassifierInput) (req *reque
 // CreateClassifier API operation for AWS Glue.
 //
 // Creates a classifier in the user's account. This may be a GrokClassifier,
-// an XMLClassifier, or abbrev JsonClassifier, depending on which field of the
-// request is present.
+// an XMLClassifier, a JsonClassifier, or a CsvClassifier, depending on which
+// field of the request is present.
 //
 // 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
@@ -8853,8 +8854,8 @@ func (c *Glue) UpdateClassifierRequest(input *UpdateClassifierInput) (req *reque
 
 // UpdateClassifier API operation for AWS Glue.
 //
-// Modifies an existing classifier (a GrokClassifier, XMLClassifier, or JsonClassifier,
-// depending on which field is present).
+// Modifies an existing classifier (a GrokClassifier, an XMLClassifier, a JsonClassifier,
+// or a CsvClassifier, depending on which field is present).
 //
 // 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
@@ -10489,7 +10490,7 @@ type BatchGetCrawlersOutput struct {
 	// A list of crawler definitions.
 	Crawlers []*Crawler `type:"list"`
 
-	// A list of crawlers not found.
+	// A list of names of crawlers not found.
 	CrawlersNotFound []*string `type:"list"`
 }
 
@@ -11132,11 +11133,14 @@ func (s *CatalogImportStatus) SetImportedBy(v string) *CatalogImportStatus {
 // You can use the standard classifiers that AWS Glue supplies, or you can write
 // your own classifiers to best categorize your data sources and specify the
 // appropriate schemas to use for them. A classifier can be a grok classifier,
-// an XML classifier, or a JSON classifier, as specified in one of the fields
-// in the Classifier object.
+// an XML classifier, a JSON classifier, or a custom CSV classifier as specified
+// in one of the fields in the Classifier object.
 type Classifier struct {
 	_ struct{} `type:"structure"`
 
+	// A CSVClassifier object.
+	CsvClassifier *CsvClassifier `type:"structure"`
+
 	// A GrokClassifier object.
 	GrokClassifier *GrokClassifier `type:"structure"`
 
@@ -11157,6 +11161,12 @@ func (s Classifier) GoString() string {
 	return s.String()
 }
 
+// SetCsvClassifier sets the CsvClassifier field's value.
+func (s *Classifier) SetCsvClassifier(v *CsvClassifier) *Classifier {
+	s.CsvClassifier = v
+	return s
+}
+
 // SetGrokClassifier sets the GrokClassifier field's value.
 func (s *Classifier) SetGrokClassifier(v *GrokClassifier) *Classifier {
 	s.GrokClassifier = v
@@ -12184,6 +12194,9 @@ func (s *CrawlerTargets) SetS3Targets(v []*S3Target) *CrawlerTargets {
 type CreateClassifierInput struct {
 	_ struct{} `type:"structure"`
 
+	// A CsvClassifier object specifying the classifier to create.
+	CsvClassifier *CreateCsvClassifierRequest `type:"structure"`
+
 	// A GrokClassifier object specifying the classifier to create.
 	GrokClassifier *CreateGrokClassifierRequest `type:"structure"`
 
@@ -12207,6 +12220,11 @@ func (s CreateClassifierInput) GoString() string {
 // Validate inspects the fields of the type to determine if they are valid.
 func (s *CreateClassifierInput) Validate() error {
 	invalidParams := request.ErrInvalidParams{Context: "CreateClassifierInput"}
+	if s.CsvClassifier != nil {
+		if err := s.CsvClassifier.Validate(); err != nil {
+			invalidParams.AddNested("CsvClassifier", err.(request.ErrInvalidParams))
+		}
+	}
 	if s.GrokClassifier != nil {
 		if err := s.GrokClassifier.Validate(); err != nil {
 			invalidParams.AddNested("GrokClassifier", err.(request.ErrInvalidParams))
@@ -12229,6 +12247,12 @@ func (s *CreateClassifierInput) Validate() error {
 	return nil
 }
 
+// SetCsvClassifier sets the CsvClassifier field's value.
+func (s *CreateClassifierInput) SetCsvClassifier(v *CreateCsvClassifierRequest) *CreateClassifierInput {
+	s.CsvClassifier = v
+	return s
+}
+
 // SetGrokClassifier sets the GrokClassifier field's value.
 func (s *CreateClassifierInput) SetGrokClassifier(v *CreateGrokClassifierRequest) *CreateClassifierInput {
 	s.GrokClassifier = v
@@ -12511,6 +12535,110 @@ func (s CreateCrawlerOutput) GoString() string {
 	return s.String()
 }
 
+// Specifies a custom CSV classifier for CreateClassifier to create.
+type CreateCsvClassifierRequest struct {
+	_ struct{} `type:"structure"`
+
+	// Enables the processing of files that contain only one column.
+	AllowSingleColumn *bool `type:"boolean"`
+
+	// Indicates whether the CSV file contains a header.
+	ContainsHeader *string `type:"string" enum:"CsvHeaderOption"`
+
+	// A custom symbol to denote what separates each column entry in the row.
+	Delimiter *string `min:"1" type:"string"`
+
+	// Specifies not to trim values before identifying the type of column values.
+	// The default value is true.
+	DisableValueTrimming *bool `type:"boolean"`
+
+	// A list of strings representing column names.
+	Header []*string `type:"list"`
+
+	// The name of the classifier.
+	//
+	// Name is a required field
+	Name *string `min:"1" type:"string" required:"true"`
+
+	// A custom symbol to denote what combines content into a single column value.
+	// Must be different from the column delimiter.
+	QuoteSymbol *string `min:"1" type:"string"`
+}
+
+// String returns the string representation
+func (s CreateCsvClassifierRequest) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s CreateCsvClassifierRequest) GoString() string {
+	return s.String()
+}
+
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *CreateCsvClassifierRequest) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "CreateCsvClassifierRequest"}
+	if s.Delimiter != nil && len(*s.Delimiter) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("Delimiter", 1))
+	}
+	if s.Name == nil {
+		invalidParams.Add(request.NewErrParamRequired("Name"))
+	}
+	if s.Name != nil && len(*s.Name) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
+	}
+	if s.QuoteSymbol != nil && len(*s.QuoteSymbol) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("QuoteSymbol", 1))
+	}
+
+	if invalidParams.Len() > 0 {
+		return invalidParams
+	}
+	return nil
+}
+
+// SetAllowSingleColumn sets the AllowSingleColumn field's value.
+func (s *CreateCsvClassifierRequest) SetAllowSingleColumn(v bool) *CreateCsvClassifierRequest {
+	s.AllowSingleColumn = &v
+	return s
+}
+
+// SetContainsHeader sets the ContainsHeader field's value.
+func (s *CreateCsvClassifierRequest) SetContainsHeader(v string) *CreateCsvClassifierRequest {
+	s.ContainsHeader = &v
+	return s
+}
+
+// SetDelimiter sets the Delimiter field's value.
+func (s *CreateCsvClassifierRequest) SetDelimiter(v string) *CreateCsvClassifierRequest {
+	s.Delimiter = &v
+	return s
+}
+
+// SetDisableValueTrimming sets the DisableValueTrimming field's value.
+func (s *CreateCsvClassifierRequest) SetDisableValueTrimming(v bool) *CreateCsvClassifierRequest {
+	s.DisableValueTrimming = &v
+	return s
+}
+
+// SetHeader sets the Header field's value.
+func (s *CreateCsvClassifierRequest) SetHeader(v []*string) *CreateCsvClassifierRequest {
+	s.Header = v
+	return s
+}
+
+// SetName sets the Name field's value.
+func (s *CreateCsvClassifierRequest) SetName(v string) *CreateCsvClassifierRequest {
+	s.Name = &v
+	return s
+}
+
+// SetQuoteSymbol sets the QuoteSymbol field's value.
+func (s *CreateCsvClassifierRequest) SetQuoteSymbol(v string) *CreateCsvClassifierRequest {
+	s.QuoteSymbol = &v
+	return s
+}
+
 type CreateDatabaseInput struct {
 	_ struct{} `type:"structure"`
 
@@ -13995,6 +14123,115 @@ func (s *CreateXMLClassifierRequest) SetRowTag(v string) *CreateXMLClassifierReq
 	return s
 }
 
+// A classifier for custom CSV content.
+type CsvClassifier struct {
+	_ struct{} `type:"structure"`
+
+	// Enables the processing of files that contain only one column.
+	AllowSingleColumn *bool `type:"boolean"`
+
+	// Indicates whether the CSV file contains a header.
+	ContainsHeader *string `type:"string" enum:"CsvHeaderOption"`
+
+	// The time this classifier was registered.
+	CreationTime *time.Time `type:"timestamp"`
+
+	// A custom symbol to denote what separates each column entry in the row.
+	Delimiter *string `min:"1" type:"string"`
+
+	// Specifies not to trim values before identifying the type of column values.
+	// The default value is true.
+	DisableValueTrimming *bool `type:"boolean"`
+
+	// A list of strings representing column names.
+	Header []*string `type:"list"`
+
+	// The time this classifier was last updated.
+	LastUpdated *time.Time `type:"timestamp"`
+
+	// The name of the classifier.
+	//
+	// Name is a required field
+	Name *string `min:"1" type:"string" required:"true"`
+
+	// A custom symbol to denote what combines content into a single column value.
+	// Must be different from the column delimiter.
+	QuoteSymbol *string `min:"1" type:"string"`
+
+	// The version of this classifier.
+	Version *int64 `type:"long"`
+}
+
+// String returns the string representation
+func (s CsvClassifier) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s CsvClassifier) GoString() string {
+	return s.String()
+}
+
+// SetAllowSingleColumn sets the AllowSingleColumn field's value.
+func (s *CsvClassifier) SetAllowSingleColumn(v bool) *CsvClassifier {
+	s.AllowSingleColumn = &v
+	return s
+}
+
+// SetContainsHeader sets the ContainsHeader field's value.
+func (s *CsvClassifier) SetContainsHeader(v string) *CsvClassifier {
+	s.ContainsHeader = &v
+	return s
+}
+
+// SetCreationTime sets the CreationTime field's value.
+func (s *CsvClassifier) SetCreationTime(v time.Time) *CsvClassifier {
+	s.CreationTime = &v
+	return s
+}
+
+// SetDelimiter sets the Delimiter field's value.
+func (s *CsvClassifier) SetDelimiter(v string) *CsvClassifier {
+	s.Delimiter = &v
+	return s
+}
+
+// SetDisableValueTrimming sets the DisableValueTrimming field's value.
+func (s *CsvClassifier) SetDisableValueTrimming(v bool) *CsvClassifier {
+	s.DisableValueTrimming = &v
+	return s
+}
+
+// SetHeader sets the Header field's value.
+func (s *CsvClassifier) SetHeader(v []*string) *CsvClassifier {
+	s.Header = v
+	return s
+}
+
+// SetLastUpdated sets the LastUpdated field's value.
+func (s *CsvClassifier) SetLastUpdated(v time.Time) *CsvClassifier {
+	s.LastUpdated = &v
+	return s
+}
+
+// SetName sets the Name field's value.
+func (s *CsvClassifier) SetName(v string) *CsvClassifier {
+	s.Name = &v
+	return s
+}
+
+// SetQuoteSymbol sets the QuoteSymbol field's value.
+func (s *CsvClassifier) SetQuoteSymbol(v string) *CsvClassifier {
+	s.QuoteSymbol = &v
+	return s
+}
+
+// SetVersion sets the Version field's value.
+func (s *CsvClassifier) SetVersion(v int64) *CsvClassifier {
+	s.Version = &v
+	return s
+}
+
 // Contains configuration information for maintaining Data Catalog security.
 type DataCatalogEncryptionSettings struct {
 	_ struct{} `type:"structure"`
@@ -22735,6 +22972,9 @@ func (s UntagResourceOutput) GoString() string {
 type UpdateClassifierInput struct {
 	_ struct{} `type:"structure"`
 
+	// A CsvClassifier object with updated fields.
+	CsvClassifier *UpdateCsvClassifierRequest `type:"structure"`
+
 	// A GrokClassifier object with updated fields.
 	GrokClassifier *UpdateGrokClassifierRequest `type:"structure"`
 
@@ -22758,6 +22998,11 @@ func (s UpdateClassifierInput) GoString() string {
 // Validate inspects the fields of the type to determine if they are valid.
 func (s *UpdateClassifierInput) Validate() error {
 	invalidParams := request.ErrInvalidParams{Context: "UpdateClassifierInput"}
+	if s.CsvClassifier != nil {
+		if err := s.CsvClassifier.Validate(); err != nil {
+			invalidParams.AddNested("CsvClassifier", err.(request.ErrInvalidParams))
+		}
+	}
 	if s.GrokClassifier != nil {
 		if err := s.GrokClassifier.Validate(); err != nil {
 			invalidParams.AddNested("GrokClassifier", err.(request.ErrInvalidParams))
@@ -22780,6 +23025,12 @@ func (s *UpdateClassifierInput) Validate() error {
 	return nil
 }
 
+// SetCsvClassifier sets the CsvClassifier field's value.
+func (s *UpdateClassifierInput) SetCsvClassifier(v *UpdateCsvClassifierRequest) *UpdateClassifierInput {
+	s.CsvClassifier = v
+	return s
+}
+
 // SetGrokClassifier sets the GrokClassifier field's value.
 func (s *UpdateClassifierInput) SetGrokClassifier(v *UpdateGrokClassifierRequest) *UpdateClassifierInput {
 	s.GrokClassifier = v
@@ -23119,6 +23370,110 @@ func (s UpdateCrawlerScheduleOutput) GoString() string {
 	return s.String()
 }
 
+// Specifies a custom CSV classifier to be updated.
+type UpdateCsvClassifierRequest struct {
+	_ struct{} `type:"structure"`
+
+	// Enables the processing of files that contain only one column.
+	AllowSingleColumn *bool `type:"boolean"`
+
+	// Indicates whether the CSV file contains a header.
+	ContainsHeader *string `type:"string" enum:"CsvHeaderOption"`
+
+	// A custom symbol to denote what separates each column entry in the row.
+	Delimiter *string `min:"1" type:"string"`
+
+	// Specifies not to trim values before identifying the type of column values.
+	// The default value is true.
+	DisableValueTrimming *bool `type:"boolean"`
+
+	// A list of strings representing column names.
+	Header []*string `type:"list"`
+
+	// The name of the classifier.
+	//
+	// Name is a required field
+	Name *string `min:"1" type:"string" required:"true"`
+
+	// A custom symbol to denote what combines content into a single column value.
+	// Must be different from the column delimiter.
+	QuoteSymbol *string `min:"1" type:"string"`
+}
+
+// String returns the string representation
+func (s UpdateCsvClassifierRequest) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s UpdateCsvClassifierRequest) GoString() string {
+	return s.String()
+}
+
+// Validate inspects the fields of the type to determine if they are valid.
+func (s *UpdateCsvClassifierRequest) Validate() error {
+	invalidParams := request.ErrInvalidParams{Context: "UpdateCsvClassifierRequest"}
+	if s.Delimiter != nil && len(*s.Delimiter) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("Delimiter", 1))
+	}
+	if s.Name == nil {
+		invalidParams.Add(request.NewErrParamRequired("Name"))
+	}
+	if s.Name != nil && len(*s.Name) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
+	}
+	if s.QuoteSymbol != nil && len(*s.QuoteSymbol) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("QuoteSymbol", 1))
+	}
+
+	if invalidParams.Len() > 0 {
+		return invalidParams
+	}
+	return nil
+}
+
+// SetAllowSingleColumn sets the AllowSingleColumn field's value.
+func (s *UpdateCsvClassifierRequest) SetAllowSingleColumn(v bool) *UpdateCsvClassifierRequest {
+	s.AllowSingleColumn = &v
+	return s
+}
+
+// SetContainsHeader sets the ContainsHeader field's value.
+func (s *UpdateCsvClassifierRequest) SetContainsHeader(v string) *UpdateCsvClassifierRequest {
+	s.ContainsHeader = &v
+	return s
+}
+
+// SetDelimiter sets the Delimiter field's value.
+func (s *UpdateCsvClassifierRequest) SetDelimiter(v string) *UpdateCsvClassifierRequest {
+	s.Delimiter = &v
+	return s
+}
+
+// SetDisableValueTrimming sets the DisableValueTrimming field's value.
+func (s *UpdateCsvClassifierRequest) SetDisableValueTrimming(v bool) *UpdateCsvClassifierRequest {
+	s.DisableValueTrimming = &v
+	return s
+}
+
+// SetHeader sets the Header field's value.
+func (s *UpdateCsvClassifierRequest) SetHeader(v []*string) *UpdateCsvClassifierRequest {
+	s.Header = v
+	return s
+}
+
+// SetName sets the Name field's value.
+func (s *UpdateCsvClassifierRequest) SetName(v string) *UpdateCsvClassifierRequest {
+	s.Name = &v
+	return s
+}
+
+// SetQuoteSymbol sets the QuoteSymbol field's value.
+func (s *UpdateCsvClassifierRequest) SetQuoteSymbol(v string) *UpdateCsvClassifierRequest {
+	s.QuoteSymbol = &v
+	return s
+}
+
 type UpdateDatabaseInput struct {
 	_ struct{} `type:"structure"`
 
@@ -24313,6 +24668,17 @@ const (
 	CrawlerStateStopping = "STOPPING"
 )
 
+const (
+	// CsvHeaderOptionUnknown is a CsvHeaderOption enum value
+	CsvHeaderOptionUnknown = "UNKNOWN"
+
+	// CsvHeaderOptionPresent is a CsvHeaderOption enum value
+	CsvHeaderOptionPresent = "PRESENT"
+
+	// CsvHeaderOptionAbsent is a CsvHeaderOption enum value
+	CsvHeaderOptionAbsent = "ABSENT"
+)
+
 const (
 	// DeleteBehaviorLog is a DeleteBehavior enum value
 	DeleteBehaviorLog = "LOG"
diff --git a/vendor/github.com/aws/aws-sdk-go/service/mediaconvert/api.go b/vendor/github.com/aws/aws-sdk-go/service/mediaconvert/api.go
index af2e66c3049c..78f7e40db8f9 100644
--- a/vendor/github.com/aws/aws-sdk-go/service/mediaconvert/api.go
+++ b/vendor/github.com/aws/aws-sdk-go/service/mediaconvert/api.go
@@ -2771,7 +2771,8 @@ func (s *Ac3Settings) SetSampleRate(v int64) *Ac3Settings {
 	return s
 }
 
-// Acceleration settings for job execution.
+// Accelerated transcoding is currently in private preview. Contact AWS for
+// more information.
 type AccelerationSettings struct {
 	_ struct{} `type:"structure"`
 
@@ -4481,6 +4482,10 @@ type CmafGroupSettings struct {
 	// first input file.
 	Destination *string `locationName:"destination" type:"string"`
 
+	// Settings associated with the destination. Will vary based on the type of
+	// destination
+	DestinationSettings *DestinationSettings `locationName:"destinationSettings" type:"structure"`
+
 	// DRM settings.
 	Encryption *CmafEncryptionSettings `locationName:"encryption" type:"structure"`
 
@@ -4597,6 +4602,12 @@ func (s *CmafGroupSettings) SetDestination(v string) *CmafGroupSettings {
 	return s
 }
 
+// SetDestinationSettings sets the DestinationSettings field's value.
+func (s *CmafGroupSettings) SetDestinationSettings(v *DestinationSettings) *CmafGroupSettings {
+	s.DestinationSettings = v
+	return s
+}
+
 // SetEncryption sets the Encryption field's value.
 func (s *CmafGroupSettings) SetEncryption(v *CmafEncryptionSettings) *CmafGroupSettings {
 	s.Encryption = v
@@ -4901,7 +4912,7 @@ type CreateJobInput struct {
 	// Events. Set the interval, in seconds, between status updates. MediaConvert
 	// sends an update at this interval from the time the service begins processing
 	// your job to the time it completes the transcode or encounters an error.
-	StatusUpdateIntervalInSecs *int64 `locationName:"statusUpdateIntervalInSecs" min:"10" type:"long"`
+	StatusUpdateInterval *string `locationName:"statusUpdateInterval" type:"string" enum:"StatusUpdateInterval"`
 
 	// User-defined metadata that you want to associate with an MediaConvert job.
 	// You specify metadata in key/value pairs.
@@ -4927,9 +4938,6 @@ func (s *CreateJobInput) Validate() error {
 	if s.Settings == nil {
 		invalidParams.Add(request.NewErrParamRequired("Settings"))
 	}
-	if s.StatusUpdateIntervalInSecs != nil && *s.StatusUpdateIntervalInSecs < 10 {
-		invalidParams.Add(request.NewErrParamMinValue("StatusUpdateIntervalInSecs", 10))
-	}
 	if s.AccelerationSettings != nil {
 		if err := s.AccelerationSettings.Validate(); err != nil {
 			invalidParams.AddNested("AccelerationSettings", err.(request.ErrInvalidParams))
@@ -4989,9 +4997,9 @@ func (s *CreateJobInput) SetSettings(v *JobSettings) *CreateJobInput {
 	return s
 }
 
-// SetStatusUpdateIntervalInSecs sets the StatusUpdateIntervalInSecs field's value.
-func (s *CreateJobInput) SetStatusUpdateIntervalInSecs(v int64) *CreateJobInput {
-	s.StatusUpdateIntervalInSecs = &v
+// SetStatusUpdateInterval sets the StatusUpdateInterval field's value.
+func (s *CreateJobInput) SetStatusUpdateInterval(v string) *CreateJobInput {
+	s.StatusUpdateInterval = &v
 	return s
 }
 
@@ -5061,7 +5069,7 @@ type CreateJobTemplateInput struct {
 	// Events. Set the interval, in seconds, between status updates. MediaConvert
 	// sends an update at this interval from the time the service begins processing
 	// your job to the time it completes the transcode or encounters an error.
-	StatusUpdateIntervalInSecs *int64 `locationName:"statusUpdateIntervalInSecs" min:"10" type:"long"`
+	StatusUpdateInterval *string `locationName:"statusUpdateInterval" type:"string" enum:"StatusUpdateInterval"`
 
 	// The tags that you want to add to the resource. You can tag resources with
 	// a key-value pair or with only a key.
@@ -5087,9 +5095,6 @@ func (s *CreateJobTemplateInput) Validate() error {
 	if s.Settings == nil {
 		invalidParams.Add(request.NewErrParamRequired("Settings"))
 	}
-	if s.StatusUpdateIntervalInSecs != nil && *s.StatusUpdateIntervalInSecs < 10 {
-		invalidParams.Add(request.NewErrParamMinValue("StatusUpdateIntervalInSecs", 10))
-	}
 	if s.AccelerationSettings != nil {
 		if err := s.AccelerationSettings.Validate(); err != nil {
 			invalidParams.AddNested("AccelerationSettings", err.(request.ErrInvalidParams))
@@ -5143,9 +5148,9 @@ func (s *CreateJobTemplateInput) SetSettings(v *JobTemplateSettings) *CreateJobT
 	return s
 }
 
-// SetStatusUpdateIntervalInSecs sets the StatusUpdateIntervalInSecs field's value.
-func (s *CreateJobTemplateInput) SetStatusUpdateIntervalInSecs(v int64) *CreateJobTemplateInput {
-	s.StatusUpdateIntervalInSecs = &v
+// SetStatusUpdateInterval sets the StatusUpdateInterval field's value.
+func (s *CreateJobTemplateInput) SetStatusUpdateInterval(v string) *CreateJobTemplateInput {
+	s.StatusUpdateInterval = &v
 	return s
 }
 
@@ -5452,6 +5457,10 @@ type DashIsoGroupSettings struct {
 	// first input file.
 	Destination *string `locationName:"destination" type:"string"`
 
+	// Settings associated with the destination. Will vary based on the type of
+	// destination
+	DestinationSettings *DestinationSettings `locationName:"destinationSettings" type:"structure"`
+
 	// DRM settings.
 	Encryption *DashIsoEncryptionSettings `locationName:"encryption" type:"structure"`
 
@@ -5529,6 +5538,12 @@ func (s *DashIsoGroupSettings) SetDestination(v string) *DashIsoGroupSettings {
 	return s
 }
 
+// SetDestinationSettings sets the DestinationSettings field's value.
+func (s *DashIsoGroupSettings) SetDestinationSettings(v *DestinationSettings) *DashIsoGroupSettings {
+	s.DestinationSettings = v
+	return s
+}
+
 // SetEncryption sets the Encryption field's value.
 func (s *DashIsoGroupSettings) SetEncryption(v *DashIsoEncryptionSettings) *DashIsoGroupSettings {
 	s.Encryption = v
@@ -5883,6 +5898,31 @@ func (s *DescribeEndpointsOutput) SetNextToken(v string) *DescribeEndpointsOutpu
 	return s
 }
 
+// Settings associated with the destination. Will vary based on the type of
+// destination
+type DestinationSettings struct {
+	_ struct{} `type:"structure"`
+
+	// Settings associated with S3 destination
+	S3Settings *S3DestinationSettings `locationName:"s3Settings" type:"structure"`
+}
+
+// String returns the string representation
+func (s DestinationSettings) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s DestinationSettings) GoString() string {
+	return s.String()
+}
+
+// SetS3Settings sets the S3Settings field's value.
+func (s *DestinationSettings) SetS3Settings(v *S3DestinationSettings) *DestinationSettings {
+	s.S3Settings = v
+	return s
+}
+
 // Removes an association between the Amazon Resource Name (ARN) of an AWS Certificate
 // Manager (ACM) certificate and an AWS Elemental MediaConvert resource.
 type DisassociateCertificateInput struct {
@@ -6913,6 +6953,10 @@ type FileGroupSettings struct {
 	// file. If your job has multiple inputs, the service uses the filename of the
 	// first input file.
 	Destination *string `locationName:"destination" type:"string"`
+
+	// Settings associated with the destination. Will vary based on the type of
+	// destination
+	DestinationSettings *DestinationSettings `locationName:"destinationSettings" type:"structure"`
 }
 
 // String returns the string representation
@@ -6931,6 +6975,12 @@ func (s *FileGroupSettings) SetDestination(v string) *FileGroupSettings {
 	return s
 }
 
+// SetDestinationSettings sets the DestinationSettings field's value.
+func (s *FileGroupSettings) SetDestinationSettings(v *DestinationSettings) *FileGroupSettings {
+	s.DestinationSettings = v
+	return s
+}
+
 // Settings for File-based Captions in Source
 type FileSourceSettings struct {
 	_ struct{} `type:"structure"`
@@ -8791,6 +8841,10 @@ type HlsGroupSettings struct {
 	// first input file.
 	Destination *string `locationName:"destination" type:"string"`
 
+	// Settings associated with the destination. Will vary based on the type of
+	// destination
+	DestinationSettings *DestinationSettings `locationName:"destinationSettings" type:"structure"`
+
 	// Indicates whether segments should be placed in subdirectories.
 	DirectoryStructure *string `locationName:"directoryStructure" type:"string" enum:"HlsDirectoryStructure"`
 
@@ -8951,6 +9005,12 @@ func (s *HlsGroupSettings) SetDestination(v string) *HlsGroupSettings {
 	return s
 }
 
+// SetDestinationSettings sets the DestinationSettings field's value.
+func (s *HlsGroupSettings) SetDestinationSettings(v *DestinationSettings) *HlsGroupSettings {
+	s.DestinationSettings = v
+	return s
+}
+
 // SetDirectoryStructure sets the DirectoryStructure field's value.
 func (s *HlsGroupSettings) SetDirectoryStructure(v string) *HlsGroupSettings {
 	s.DirectoryStructure = &v
@@ -9226,7 +9286,10 @@ type Input struct {
 	// video inputs.
 	DeblockFilter *string `locationName:"deblockFilter" type:"string" enum:"InputDeblockFilter"`
 
-	// Settings for decrypting any input files that are encrypted.
+	// Settings for decrypting any input files that you encrypt before you upload
+	// them to Amazon S3. MediaConvert can decrypt files only when you use AWS Key
+	// Management Service (KMS) to encrypt the data key that you use to encrypt
+	// your content.
 	DecryptionSettings *InputDecryptionSettings `locationName:"decryptionSettings" type:"structure"`
 
 	// Enable Denoise (InputDenoiseFilter) to filter noise from the input. Default
@@ -9508,20 +9571,33 @@ func (s *InputClipping) SetStartTimecode(v string) *InputClipping {
 	return s
 }
 
-// Specify the decryption settings used to decrypt encrypted input
+// Settings for decrypting any input files that you encrypt before you upload
+// them to Amazon S3. MediaConvert can decrypt files only when you use AWS Key
+// Management Service (KMS) to encrypt the data key that you use to encrypt
+// your content.
 type InputDecryptionSettings struct {
 	_ struct{} `type:"structure"`
 
-	// This specifies how the encrypted file needs to be decrypted.
+	// Specify the encryption mode that you used to encrypt your input files.
 	DecryptionMode *string `locationName:"decryptionMode" type:"string" enum:"DecryptionMode"`
 
-	// Decryption key either 128 or 192 or 256 bits encrypted with KMS
+	// Warning! Don't provide your encryption key in plaintext. Your job settings
+	// could be intercepted, making your encrypted content vulnerable. Specify the
+	// encrypted version of the data key that you used to encrypt your content.
+	// The data key must be encrypted by AWS Key Management Service (KMS). The key
+	// can be 128, 192, or 256 bits.
 	EncryptedDecryptionKey *string `locationName:"encryptedDecryptionKey" min:"24" type:"string"`
 
-	// Initialization Vector 96 bits (CTR/GCM mode only) or 128 bits.
+	// Specify the initialization vector that you used when you encrypted your content
+	// before uploading it to Amazon S3. You can use a 16-byte initialization vector
+	// with any encryption mode. Or, you can use a 12-byte initialization vector
+	// with GCM or CTR. MediaConvert accepts only initialization vectors that are
+	// base64-encoded.
 	InitializationVector *string `locationName:"initializationVector" min:"16" type:"string"`
 
-	// The AWS region in which decryption key was encrypted with KMS
+	// Specify the AWS Region for AWS Key Management Service (KMS) that you used
+	// to encrypt your data key, if that Region is different from the one you are
+	// using for AWS Elemental MediaConvert.
 	KmsKeyRegion *string `locationName:"kmsKeyRegion" min:"9" type:"string"`
 }
 
@@ -9945,7 +10021,8 @@ func (s *InsertableImage) SetWidth(v int64) *InsertableImage {
 type Job struct {
 	_ struct{} `type:"structure"`
 
-	// Acceleration settings for job execution.
+	// Accelerated transcoding is currently in private preview. Contact AWS for
+	// more information.
 	AccelerationSettings *AccelerationSettings `locationName:"accelerationSettings" type:"structure"`
 
 	// An identifier for this resource that is unique within all of AWS.
@@ -9961,6 +10038,9 @@ type Job struct {
 	// The time, in Unix epoch format in seconds, when the job got created.
 	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp" timestampFormat:"unixTimestamp"`
 
+	// A job's phase can be PROBING, TRANSCODING OR UPLOADING
+	CurrentPhase *string `locationName:"currentPhase" type:"string" enum:"JobPhase"`
+
 	// Error code for the job
 	ErrorCode *int64 `locationName:"errorCode" type:"integer"`
 
@@ -9971,6 +10051,17 @@ type Job struct {
 	// resources
 	Id *string `locationName:"id" type:"string"`
 
+	// An estimate of how far your job has progressed. This estimate is shown as
+	// a percentage of the total time from when your job leaves its queue to when
+	// your output files appear in your output Amazon S3 bucket. AWS Elemental MediaConvert
+	// provides jobPercentComplete in CloudWatch STATUS_UPDATE events and in the
+	// response to GetJob and ListJobs requests. The jobPercentComplete estimate
+	// is reliable for the following input containers: Quicktime, Transport Stream,
+	// MP4, and MXF. For some jobs, including audio-only jobs and jobs that use
+	// input clipping, the service can't provide information about job progress.
+	// In those cases, jobPercentComplete returns a null value.
+	JobPercentComplete *int64 `locationName:"jobPercentComplete" type:"integer"`
+
 	// The job template that the job is created from, if it is created from a job
 	// template.
 	JobTemplate *string `locationName:"jobTemplate" type:"string"`
@@ -9983,6 +10074,10 @@ type Job struct {
 	// see the User Guide topic at http://docs.aws.amazon.com/mediaconvert/latest/ug/what-is.html
 	Queue *string `locationName:"queue" type:"string"`
 
+	// The number of times that the service automatically attempted to process your
+	// job after encountering an error.
+	RetryCount *int64 `locationName:"retryCount" type:"integer"`
+
 	// The IAM role you use for creating this job. For details about permissions,
 	// see the User Guide topic at the User Guide at http://docs.aws.amazon.com/mediaconvert/latest/ug/iam-role.html
 	//
@@ -10001,7 +10096,7 @@ type Job struct {
 	// Events. Set the interval, in seconds, between status updates. MediaConvert
 	// sends an update at this interval from the time the service begins processing
 	// your job to the time it completes the transcode or encounters an error.
-	StatusUpdateIntervalInSecs *int64 `locationName:"statusUpdateIntervalInSecs" min:"10" type:"long"`
+	StatusUpdateInterval *string `locationName:"statusUpdateInterval" type:"string" enum:"StatusUpdateInterval"`
 
 	// Information about when jobs are submitted, started, and finished is specified
 	// in Unix epoch format in seconds.
@@ -10046,6 +10141,12 @@ func (s *Job) SetCreatedAt(v time.Time) *Job {
 	return s
 }
 
+// SetCurrentPhase sets the CurrentPhase field's value.
+func (s *Job) SetCurrentPhase(v string) *Job {
+	s.CurrentPhase = &v
+	return s
+}
+
 // SetErrorCode sets the ErrorCode field's value.
 func (s *Job) SetErrorCode(v int64) *Job {
 	s.ErrorCode = &v
@@ -10064,6 +10165,12 @@ func (s *Job) SetId(v string) *Job {
 	return s
 }
 
+// SetJobPercentComplete sets the JobPercentComplete field's value.
+func (s *Job) SetJobPercentComplete(v int64) *Job {
+	s.JobPercentComplete = &v
+	return s
+}
+
 // SetJobTemplate sets the JobTemplate field's value.
 func (s *Job) SetJobTemplate(v string) *Job {
 	s.JobTemplate = &v
@@ -10082,6 +10189,12 @@ func (s *Job) SetQueue(v string) *Job {
 	return s
 }
 
+// SetRetryCount sets the RetryCount field's value.
+func (s *Job) SetRetryCount(v int64) *Job {
+	s.RetryCount = &v
+	return s
+}
+
 // SetRole sets the Role field's value.
 func (s *Job) SetRole(v string) *Job {
 	s.Role = &v
@@ -10100,9 +10213,9 @@ func (s *Job) SetStatus(v string) *Job {
 	return s
 }
 
-// SetStatusUpdateIntervalInSecs sets the StatusUpdateIntervalInSecs field's value.
-func (s *Job) SetStatusUpdateIntervalInSecs(v int64) *Job {
-	s.StatusUpdateIntervalInSecs = &v
+// SetStatusUpdateInterval sets the StatusUpdateInterval field's value.
+func (s *Job) SetStatusUpdateInterval(v string) *Job {
+	s.StatusUpdateInterval = &v
 	return s
 }
 
@@ -10278,7 +10391,8 @@ func (s *JobSettings) SetTimedMetadataInsertion(v *TimedMetadataInsertion) *JobS
 type JobTemplate struct {
 	_ struct{} `type:"structure"`
 
-	// Acceleration settings for job execution.
+	// Accelerated transcoding is currently in private preview. Contact AWS for
+	// more information.
 	AccelerationSettings *AccelerationSettings `locationName:"accelerationSettings" type:"structure"`
 
 	// An identifier for this resource that is unique within all of AWS.
@@ -10316,7 +10430,7 @@ type JobTemplate struct {
 	// Events. Set the interval, in seconds, between status updates. MediaConvert
 	// sends an update at this interval from the time the service begins processing
 	// your job to the time it completes the transcode or encounters an error.
-	StatusUpdateIntervalInSecs *int64 `locationName:"statusUpdateIntervalInSecs" min:"10" type:"long"`
+	StatusUpdateInterval *string `locationName:"statusUpdateInterval" type:"string" enum:"StatusUpdateInterval"`
 
 	// A job template can be of two types: system or custom. System or built-in
 	// job templates can't be modified or deleted by the user.
@@ -10387,9 +10501,9 @@ func (s *JobTemplate) SetSettings(v *JobTemplateSettings) *JobTemplate {
 	return s
 }
 
-// SetStatusUpdateIntervalInSecs sets the StatusUpdateIntervalInSecs field's value.
-func (s *JobTemplate) SetStatusUpdateIntervalInSecs(v int64) *JobTemplate {
-	s.StatusUpdateIntervalInSecs = &v
+// SetStatusUpdateInterval sets the StatusUpdateInterval field's value.
+func (s *JobTemplate) SetStatusUpdateInterval(v string) *JobTemplate {
+	s.StatusUpdateInterval = &v
 	return s
 }
 
@@ -12592,6 +12706,10 @@ type MsSmoothGroupSettings struct {
 	// first input file.
 	Destination *string `locationName:"destination" type:"string"`
 
+	// Settings associated with the destination. Will vary based on the type of
+	// destination
+	DestinationSettings *DestinationSettings `locationName:"destinationSettings" type:"structure"`
+
 	// If you are using DRM, set DRM System (MsSmoothEncryptionSettings) to specify
 	// the value SpekeKeyProvider.
 	Encryption *MsSmoothEncryptionSettings `locationName:"encryption" type:"structure"`
@@ -12640,6 +12758,12 @@ func (s *MsSmoothGroupSettings) SetDestination(v string) *MsSmoothGroupSettings
 	return s
 }
 
+// SetDestinationSettings sets the DestinationSettings field's value.
+func (s *MsSmoothGroupSettings) SetDestinationSettings(v *DestinationSettings) *MsSmoothGroupSettings {
+	s.DestinationSettings = v
+	return s
+}
+
 // SetEncryption sets the Encryption field's value.
 func (s *MsSmoothGroupSettings) SetEncryption(v *MsSmoothEncryptionSettings) *MsSmoothGroupSettings {
 	s.Encryption = v
@@ -14094,6 +14218,80 @@ func (s *ResourceTags) SetTags(v map[string]*string) *ResourceTags {
 	return s
 }
 
+// Settings associated with S3 destination
+type S3DestinationSettings struct {
+	_ struct{} `type:"structure"`
+
+	// Settings for how your job outputs are encrypted as they are uploaded to Amazon
+	// S3.
+	Encryption *S3EncryptionSettings `locationName:"encryption" type:"structure"`
+}
+
+// String returns the string representation
+func (s S3DestinationSettings) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s S3DestinationSettings) GoString() string {
+	return s.String()
+}
+
+// SetEncryption sets the Encryption field's value.
+func (s *S3DestinationSettings) SetEncryption(v *S3EncryptionSettings) *S3DestinationSettings {
+	s.Encryption = v
+	return s
+}
+
+// Settings for how your job outputs are encrypted as they are uploaded to Amazon
+// S3.
+type S3EncryptionSettings struct {
+	_ struct{} `type:"structure"`
+
+	// Specify how you want your data keys managed. AWS uses data keys to encrypt
+	// your content. AWS also encrypts the data keys themselves, using a customer
+	// master key (CMK), and then stores the encrypted data keys alongside your
+	// encrypted content. Use this setting to specify which AWS service manages
+	// the CMK. For simplest set up, choose Amazon S3 (SERVER_SIDE_ENCRYPTION_S3).
+	// If you want your master key to be managed by AWS Key Management Service (KMS),
+	// choose AWS KMS (SERVER_SIDE_ENCRYPTION_KMS). By default, when you choose
+	// AWS KMS, KMS uses the AWS managed customer master key (CMK) associated with
+	// Amazon S3 to encrypt your data keys. You can optionally choose to specify
+	// a different, customer managed CMK. Do so by specifying the Amazon Resource
+	// Name (ARN) of the key for the setting KMS ARN (kmsKeyArn).
+	EncryptionType *string `locationName:"encryptionType" type:"string" enum:"S3ServerSideEncryptionType"`
+
+	// Optionally, specify the customer master key (CMK) that you want to use to
+	// encrypt the data key that AWS uses to encrypt your output content. Enter
+	// the Amazon Resource Name (ARN) of the CMK. To use this setting, you must
+	// also set Server-side encryption (S3ServerSideEncryptionType) to AWS KMS (SERVER_SIDE_ENCRYPTION_KMS).
+	// If you set Server-side encryption to AWS KMS but don't specify a CMK here,
+	// AWS uses the AWS managed CMK associated with Amazon S3.
+	KmsKeyArn *string `locationName:"kmsKeyArn" type:"string"`
+}
+
+// String returns the string representation
+func (s S3EncryptionSettings) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s S3EncryptionSettings) GoString() string {
+	return s.String()
+}
+
+// SetEncryptionType sets the EncryptionType field's value.
+func (s *S3EncryptionSettings) SetEncryptionType(v string) *S3EncryptionSettings {
+	s.EncryptionType = &v
+	return s
+}
+
+// SetKmsKeyArn sets the KmsKeyArn field's value.
+func (s *S3EncryptionSettings) SetKmsKeyArn(v string) *S3EncryptionSettings {
+	s.KmsKeyArn = &v
+	return s
+}
+
 // Settings for SCC caption output.
 type SccDestinationSettings struct {
 	_ struct{} `type:"structure"`
@@ -14766,7 +14964,7 @@ type UpdateJobTemplateInput struct {
 	// Events. Set the interval, in seconds, between status updates. MediaConvert
 	// sends an update at this interval from the time the service begins processing
 	// your job to the time it completes the transcode or encounters an error.
-	StatusUpdateIntervalInSecs *int64 `locationName:"statusUpdateIntervalInSecs" min:"10" type:"long"`
+	StatusUpdateInterval *string `locationName:"statusUpdateInterval" type:"string" enum:"StatusUpdateInterval"`
 }
 
 // String returns the string representation
@@ -14788,9 +14986,6 @@ func (s *UpdateJobTemplateInput) Validate() error {
 	if s.Name != nil && len(*s.Name) < 1 {
 		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
 	}
-	if s.StatusUpdateIntervalInSecs != nil && *s.StatusUpdateIntervalInSecs < 10 {
-		invalidParams.Add(request.NewErrParamMinValue("StatusUpdateIntervalInSecs", 10))
-	}
 	if s.AccelerationSettings != nil {
 		if err := s.AccelerationSettings.Validate(); err != nil {
 			invalidParams.AddNested("AccelerationSettings", err.(request.ErrInvalidParams))
@@ -14844,9 +15039,9 @@ func (s *UpdateJobTemplateInput) SetSettings(v *JobTemplateSettings) *UpdateJobT
 	return s
 }
 
-// SetStatusUpdateIntervalInSecs sets the StatusUpdateIntervalInSecs field's value.
-func (s *UpdateJobTemplateInput) SetStatusUpdateIntervalInSecs(v int64) *UpdateJobTemplateInput {
-	s.StatusUpdateIntervalInSecs = &v
+// SetStatusUpdateInterval sets the StatusUpdateInterval field's value.
+func (s *UpdateJobTemplateInput) SetStatusUpdateInterval(v string) *UpdateJobTemplateInput {
+	s.StatusUpdateInterval = &v
 	return s
 }
 
@@ -15214,8 +15409,9 @@ type VideoDescription struct {
 	// to calculate output AFD values based on the input AFD scaler data.
 	AfdSignaling *string `locationName:"afdSignaling" type:"string" enum:"AfdSignaling"`
 
-	// You no longer need to specify the anti-alias filter. It's now automatically
-	// applied to all outputs. This property is deprecated.
+	// The anti-alias filter is automatically applied to all outputs. The service
+	// no longer accepts the value DISABLED for AntiAlias. If you specify that in
+	// your job, the service will ignore the setting.
 	AntiAlias *string `locationName:"antiAlias" type:"string" enum:"AntiAlias"`
 
 	// Video codec settings, (CodecSettings) under (VideoDescription), contains
@@ -15967,8 +16163,9 @@ const (
 	AfdSignalingFixed = "FIXED"
 )
 
-// You no longer need to specify the anti-alias filter. It's now automatically
-// applied to all outputs. This property is deprecated.
+// The anti-alias filter is automatically applied to all outputs. The service
+// no longer accepts the value DISABLED for AntiAlias. If you specify that in
+// your job, the service will ignore the setting.
 const (
 	// AntiAliasDisabled is a AntiAlias enum value
 	AntiAliasDisabled = "DISABLED"
@@ -16536,7 +16733,7 @@ const (
 	DashIsoWriteSegmentTimelineInRepresentationDisabled = "DISABLED"
 )
 
-// This specifies how the encrypted file needs to be decrypted.
+// Specify the encryption mode that you used to encrypt your input files.
 const (
 	// DecryptionModeAesCtr is a DecryptionMode enum value
 	DecryptionModeAesCtr = "AES_CTR"
@@ -17963,6 +18160,18 @@ const (
 	InputTimecodeSourceSpecifiedstart = "SPECIFIEDSTART"
 )
 
+// A job's phase can be PROBING, TRANSCODING OR UPLOADING
+const (
+	// JobPhaseProbing is a JobPhase enum value
+	JobPhaseProbing = "PROBING"
+
+	// JobPhaseTranscoding is a JobPhase enum value
+	JobPhaseTranscoding = "TRANSCODING"
+
+	// JobPhaseUploading is a JobPhase enum value
+	JobPhaseUploading = "UPLOADING"
+)
+
 // A job's status can be SUBMITTED, PROGRESSING, COMPLETE, CANCELED, or ERROR.
 const (
 	// JobStatusSubmitted is a JobStatus enum value
@@ -19388,6 +19597,25 @@ const (
 	RespondToAfdPassthrough = "PASSTHROUGH"
 )
 
+// Specify how you want your data keys managed. AWS uses data keys to encrypt
+// your content. AWS also encrypts the data keys themselves, using a customer
+// master key (CMK), and then stores the encrypted data keys alongside your
+// encrypted content. Use this setting to specify which AWS service manages
+// the CMK. For simplest set up, choose Amazon S3 (SERVER_SIDE_ENCRYPTION_S3).
+// If you want your master key to be managed by AWS Key Management Service (KMS),
+// choose AWS KMS (SERVER_SIDE_ENCRYPTION_KMS). By default, when you choose
+// AWS KMS, KMS uses the AWS managed customer master key (CMK) associated with
+// Amazon S3 to encrypt your data keys. You can optionally choose to specify
+// a different, customer managed CMK. Do so by specifying the Amazon Resource
+// Name (ARN) of the key for the setting KMS ARN (kmsKeyArn).
+const (
+	// S3ServerSideEncryptionTypeServerSideEncryptionS3 is a S3ServerSideEncryptionType enum value
+	S3ServerSideEncryptionTypeServerSideEncryptionS3 = "SERVER_SIDE_ENCRYPTION_S3"
+
+	// S3ServerSideEncryptionTypeServerSideEncryptionKms is a S3ServerSideEncryptionType enum value
+	S3ServerSideEncryptionTypeServerSideEncryptionKms = "SERVER_SIDE_ENCRYPTION_KMS"
+)
+
 // Applies only if your input aspect ratio is different from your output aspect
 // ratio. Choose "Stretch to output" to have the service stretch your video
 // image to fit. Keep the setting "Default" to allow the service to letterbox
@@ -19421,6 +19649,57 @@ const (
 	SccDestinationFramerateFramerate2997NonDropframe = "FRAMERATE_29_97_NON_DROPFRAME"
 )
 
+// Specify how often MediaConvert sends STATUS_UPDATE events to Amazon CloudWatch
+// Events. Set the interval, in seconds, between status updates. MediaConvert
+// sends an update at this interval from the time the service begins processing
+// your job to the time it completes the transcode or encounters an error.
+const (
+	// StatusUpdateIntervalSeconds10 is a StatusUpdateInterval enum value
+	StatusUpdateIntervalSeconds10 = "SECONDS_10"
+
+	// StatusUpdateIntervalSeconds12 is a StatusUpdateInterval enum value
+	StatusUpdateIntervalSeconds12 = "SECONDS_12"
+
+	// StatusUpdateIntervalSeconds15 is a StatusUpdateInterval enum value
+	StatusUpdateIntervalSeconds15 = "SECONDS_15"
+
+	// StatusUpdateIntervalSeconds20 is a StatusUpdateInterval enum value
+	StatusUpdateIntervalSeconds20 = "SECONDS_20"
+
+	// StatusUpdateIntervalSeconds30 is a StatusUpdateInterval enum value
+	StatusUpdateIntervalSeconds30 = "SECONDS_30"
+
+	// StatusUpdateIntervalSeconds60 is a StatusUpdateInterval enum value
+	StatusUpdateIntervalSeconds60 = "SECONDS_60"
+
+	// StatusUpdateIntervalSeconds120 is a StatusUpdateInterval enum value
+	StatusUpdateIntervalSeconds120 = "SECONDS_120"
+
+	// StatusUpdateIntervalSeconds180 is a StatusUpdateInterval enum value
+	StatusUpdateIntervalSeconds180 = "SECONDS_180"
+
+	// StatusUpdateIntervalSeconds240 is a StatusUpdateInterval enum value
+	StatusUpdateIntervalSeconds240 = "SECONDS_240"
+
+	// StatusUpdateIntervalSeconds300 is a StatusUpdateInterval enum value
+	StatusUpdateIntervalSeconds300 = "SECONDS_300"
+
+	// StatusUpdateIntervalSeconds360 is a StatusUpdateInterval enum value
+	StatusUpdateIntervalSeconds360 = "SECONDS_360"
+
+	// StatusUpdateIntervalSeconds420 is a StatusUpdateInterval enum value
+	StatusUpdateIntervalSeconds420 = "SECONDS_420"
+
+	// StatusUpdateIntervalSeconds480 is a StatusUpdateInterval enum value
+	StatusUpdateIntervalSeconds480 = "SECONDS_480"
+
+	// StatusUpdateIntervalSeconds540 is a StatusUpdateInterval enum value
+	StatusUpdateIntervalSeconds540 = "SECONDS_540"
+
+	// StatusUpdateIntervalSeconds600 is a StatusUpdateInterval enum value
+	StatusUpdateIntervalSeconds600 = "SECONDS_600"
+)
+
 // Use Position (Position) under under Timecode burn-in (TimecodeBurnIn) to
 // specify the location the burned-in timecode on output video.
 const (
diff --git a/vendor/github.com/aws/aws-sdk-go/service/s3/api.go b/vendor/github.com/aws/aws-sdk-go/service/s3/api.go
index 7f1c1f317e03..83a42d249b4a 100644
--- a/vendor/github.com/aws/aws-sdk-go/service/s3/api.go
+++ b/vendor/github.com/aws/aws-sdk-go/service/s3/api.go
@@ -17624,7 +17624,7 @@ type NoncurrentVersionExpiration struct {
 	// Specifies the number of days an object is noncurrent before Amazon S3 can
 	// perform the associated action. For information about the noncurrent days
 	// calculations, see How Amazon S3 Calculates When an Object Became Noncurrent
-	// (https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#non-current-days-calculations)
+	// (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html)
 	// in the Amazon Simple Storage Service Developer Guide.
 	NoncurrentDays *int64 `type:"integer"`
 }
@@ -17646,11 +17646,12 @@ func (s *NoncurrentVersionExpiration) SetNoncurrentDays(v int64) *NoncurrentVers
 }
 
 // Container for the transition rule that describes when noncurrent objects
-// transition to the STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING or GLACIER
-// storage class. If your bucket is versioning-enabled (or versioning is suspended),
-// you can set this action to request that Amazon S3 transition noncurrent object
-// versions to the STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING or GLACIER storage
-// class at a specific period in the object's lifetime.
+// transition to the STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER or
+// DEEP_ARCHIVE storage class. If your bucket is versioning-enabled (or versioning
+// is suspended), you can set this action to request that Amazon S3 transition
+// noncurrent object versions to the STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING,
+// GLACIER or DEEP_ARCHIVE storage class at a specific period in the object's
+// lifetime.
 type NoncurrentVersionTransition struct {
 	_ struct{} `type:"structure"`
 
@@ -22122,11 +22123,12 @@ type Rule struct {
 	NoncurrentVersionExpiration *NoncurrentVersionExpiration `type:"structure"`
 
 	// Container for the transition rule that describes when noncurrent objects
-	// transition to the STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING or GLACIER
-	// storage class. If your bucket is versioning-enabled (or versioning is suspended),
-	// you can set this action to request that Amazon S3 transition noncurrent object
-	// versions to the STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING or GLACIER storage
-	// class at a specific period in the object's lifetime.
+	// transition to the STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER or
+	// DEEP_ARCHIVE storage class. If your bucket is versioning-enabled (or versioning
+	// is suspended), you can set this action to request that Amazon S3 transition
+	// noncurrent object versions to the STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING,
+	// GLACIER or DEEP_ARCHIVE storage class at a specific period in the object's
+	// lifetime.
 	NoncurrentVersionTransition *NoncurrentVersionTransition `type:"structure"`
 
 	// Prefix identifying one or more objects to which the rule applies.
@@ -24545,6 +24547,9 @@ const (
 
 	// ObjectStorageClassIntelligentTiering is a ObjectStorageClass enum value
 	ObjectStorageClassIntelligentTiering = "INTELLIGENT_TIERING"
+
+	// ObjectStorageClassDeepArchive is a ObjectStorageClass enum value
+	ObjectStorageClassDeepArchive = "DEEP_ARCHIVE"
 )
 
 const (
@@ -24675,6 +24680,9 @@ const (
 
 	// StorageClassGlacier is a StorageClass enum value
 	StorageClassGlacier = "GLACIER"
+
+	// StorageClassDeepArchive is a StorageClass enum value
+	StorageClassDeepArchive = "DEEP_ARCHIVE"
 )
 
 const (
@@ -24713,6 +24721,9 @@ const (
 
 	// TransitionStorageClassIntelligentTiering is a TransitionStorageClass enum value
 	TransitionStorageClassIntelligentTiering = "INTELLIGENT_TIERING"
+
+	// TransitionStorageClassDeepArchive is a TransitionStorageClass enum value
+	TransitionStorageClassDeepArchive = "DEEP_ARCHIVE"
 )
 
 const (
diff --git a/vendor/github.com/aws/aws-sdk-go/service/storagegateway/api.go b/vendor/github.com/aws/aws-sdk-go/service/storagegateway/api.go
index 336d3d738a38..88ed78b11df2 100644
--- a/vendor/github.com/aws/aws-sdk-go/service/storagegateway/api.go
+++ b/vendor/github.com/aws/aws-sdk-go/service/storagegateway/api.go
@@ -244,11 +244,11 @@ func (c *StorageGateway) AddTagsToResourceRequest(input *AddTagsToResourceInput)
 //
 //    * Storage gateways of all types
 //
-//    * Storage Volumes
+//    * Storage volumes
 //
-//    * Virtual Tapes
+//    * Virtual tapes
 //
-//    * NFS and SMB File Shares
+//    * NFS and SMB file shares
 //
 // You can create a maximum of 10 tags for each resource. Virtual tapes and
 // storage volumes that are recovered to a new gateway maintain their tags.
@@ -6875,8 +6875,8 @@ type ActivateGatewayInput struct {
 	// Valid Values: "STK-L700", "AWS-Gateway-VTL"
 	MediumChangerType *string `min:"2" type:"string"`
 
-	// A list of up to ten (10) tags assigned to the gateway may be specified. Every
-	// tag is a key-value pair.
+	// A list of up to 10 tags that can be assigned to the gateway. Each tag is
+	// a key-value pair.
 	//
 	// Valid characters for key and value are letters, spaces, and numbers representable
 	// in UTF-8 format, and the following special characters: + - = . _ : / @. The
@@ -8166,7 +8166,7 @@ type CreateNFSFileShareInput struct {
 	// Role is a required field
 	Role *string `min:"20" type:"string" required:"true"`
 
-	// Maps a user to anonymous user. Valid options are the following:
+	// A value that maps a user to anonymous user. Valid options are the following:
 	//
 	//    * RootSquash - Only root is mapped to anonymous user.
 	//
@@ -8175,7 +8175,7 @@ type CreateNFSFileShareInput struct {
 	//    * AllSquash - Everyone is mapped to anonymous user.
 	Squash *string `min:"5" type:"string"`
 
-	// A list of up to ten (10) tags can be assigned to the NFS file share. Every
+	// A list of up to 10 tags that can be assigned to the NFS file share. Each
 	// tag is a key-value pair.
 	//
 	// Valid characters for key and value are letters, spaces, and numbers representable
@@ -8437,7 +8437,7 @@ type CreateSMBFileShareInput struct {
 	// Role is a required field
 	Role *string `min:"20" type:"string" required:"true"`
 
-	// A list of up to ten (10) tags can be assigned to the NFS file share. Every
+	// A list of up to 10 tags that can be assigned to the NFS file share. Each
 	// tag is a key-value pair.
 	//
 	// Valid characters for key and value are letters, spaces, and numbers representable
@@ -9061,6 +9061,15 @@ type CreateTapeWithBarcodeInput struct {
 	// side encryption. This value can only be set when KMSEncrypted is true. Optional.
 	KMSKey *string `min:"7" type:"string"`
 
+	// The ID of the pool that you want to add your tape to for archiving. The tape
+	// in this pool is archived in the S3 storage class that is associated with
+	// the pool. When you use your backup application to eject the tape, the tape
+	// is archived directly into the storage class (Glacier or Deep Archive) that
+	// corresponds to the pool.
+	//
+	// Valid values: "GLACIER", "DEEP_ARCHIVE"
+	PoolId *string `min:"1" type:"string"`
+
 	// The barcode that you want to assign to the tape.
 	//
 	// Barcodes cannot be reused. This includes barcodes used for tapes that have
@@ -9099,6 +9108,9 @@ func (s *CreateTapeWithBarcodeInput) Validate() error {
 	if s.KMSKey != nil && len(*s.KMSKey) < 7 {
 		invalidParams.Add(request.NewErrParamMinLen("KMSKey", 7))
 	}
+	if s.PoolId != nil && len(*s.PoolId) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("PoolId", 1))
+	}
 	if s.TapeBarcode == nil {
 		invalidParams.Add(request.NewErrParamRequired("TapeBarcode"))
 	}
@@ -9133,6 +9145,12 @@ func (s *CreateTapeWithBarcodeInput) SetKMSKey(v string) *CreateTapeWithBarcodeI
 	return s
 }
 
+// SetPoolId sets the PoolId field's value.
+func (s *CreateTapeWithBarcodeInput) SetPoolId(v string) *CreateTapeWithBarcodeInput {
+	s.PoolId = &v
+	return s
+}
+
 // SetTapeBarcode sets the TapeBarcode field's value.
 func (s *CreateTapeWithBarcodeInput) SetTapeBarcode(v string) *CreateTapeWithBarcodeInput {
 	s.TapeBarcode = &v
@@ -9202,6 +9220,14 @@ type CreateTapesInput struct {
 	// NumTapesToCreate is a required field
 	NumTapesToCreate *int64 `min:"1" type:"integer" required:"true"`
 
+	// The ID of the pool that you want to add your tape to for archiving. The tape
+	// in this pool is archived in the S3 storage class you chose when you created
+	// the tape. When you use your backup application to eject the tape, the tape
+	// is archived directly into the storage class (Glacier or Deep Archive).
+	//
+	// Valid values: "GLACIER", "DEEP_ARCHIVE"
+	PoolId *string `min:"1" type:"string"`
+
 	// A prefix that you append to the barcode of the virtual tape you are creating.
 	// This prefix makes the barcode unique.
 	//
@@ -9253,6 +9279,9 @@ func (s *CreateTapesInput) Validate() error {
 	if s.NumTapesToCreate != nil && *s.NumTapesToCreate < 1 {
 		invalidParams.Add(request.NewErrParamMinValue("NumTapesToCreate", 1))
 	}
+	if s.PoolId != nil && len(*s.PoolId) < 1 {
+		invalidParams.Add(request.NewErrParamMinLen("PoolId", 1))
+	}
 	if s.TapeBarcodePrefix == nil {
 		invalidParams.Add(request.NewErrParamRequired("TapeBarcodePrefix"))
 	}
@@ -9299,6 +9328,12 @@ func (s *CreateTapesInput) SetNumTapesToCreate(v int64) *CreateTapesInput {
 	return s
 }
 
+// SetPoolId sets the PoolId field's value.
+func (s *CreateTapesInput) SetPoolId(v string) *CreateTapesInput {
+	s.PoolId = &v
+	return s
+}
+
 // SetTapeBarcodePrefix sets the TapeBarcodePrefix field's value.
 func (s *CreateTapesInput) SetTapeBarcodePrefix(v string) *CreateTapesInput {
 	s.TapeBarcodePrefix = &v
@@ -10398,10 +10433,9 @@ type DescribeGatewayInformationOutput struct {
 	// this field is not returned in the response.
 	NextUpdateAvailabilityDate *string `min:"1" type:"string"`
 
-	// A list of up to ten (10) tags assigned to the gateway are returned, sorted
-	// alphabetically by key name. Every tag is a key-value pair. For a gateway
-	// with more than 10 tags assigned, you can view all tags using the ListTagsForResource
-	// API.
+	// A list of up to 10 tags assigned to the gateway, sorted alphabetically by
+	// key name. Each tag is a key-value pair. For a gateway with more than 10 tags
+	// assigned, you can view all tags using the ListTagsForResource API operation.
 	Tags []*Tag `type:"list"`
 }
 
@@ -13208,10 +13242,9 @@ type NFSFileShareInfo struct {
 	//    * AllSquash - Everyone is mapped to anonymous user.
 	Squash *string `min:"5" type:"string"`
 
-	// A list of up to ten (10) tags assigned to the NFS file share are returned,
-	// sorted alphabetically by key name. Every tag is a key-value pair. For a gateway
-	// with more than 10 tags assigned, you can view all tags using the ListTagsForResource
-	// API.
+	// A list of up to 10 tags assigned to the NFS file share, sorted alphabetically
+	// by key name. Each tag is a key-value pair. For a gateway with more than 10
+	// tags assigned, you can view all tags using the ListTagsForResource API operation.
 	Tags []*Tag `type:"list"`
 }
 
@@ -13952,10 +13985,9 @@ type SMBFileShareInfo struct {
 	// storage.
 	Role *string `min:"20" type:"string"`
 
-	// A list of up to ten (10) tags assigned to the SMB file share are returned,
-	// sorted alphabetically by key name. Every tag is a key-value pair. For a gateway
-	// with more than 10 tags assigned, you can view all tags using the ListTagsForResource
-	// API.
+	// A list of up to 10 tags assigned to the SMB file share, sorted alphabetically
+	// by key name. Each tag is a key-value pair. For a gateway with more than 10
+	// tags assigned, you can view all tags using the ListTagsForResource API operation.
 	Tags []*Tag `type:"list"`
 
 	// A list of users or groups in the Active Directory that are allowed to access
@@ -14623,6 +14655,15 @@ type Tape struct {
 	// side encryption. This value can only be set when KMSEncrypted is true. Optional.
 	KMSKey *string `min:"7" type:"string"`
 
+	// The ID of the pool that contains tapes that will be archived. The tapes in
+	// this pool are archived in the S3 storage class that is associated with the
+	// pool. When you use your backup application to eject the tape, the tape is
+	// archived directly into the storage class (Glacier or Deep Archive) that corresponds
+	// to the pool.
+	//
+	// Valid values: "GLACIER", "DEEP_ARCHIVE"
+	PoolId *string `min:"1" type:"string"`
+
 	// For archiving virtual tapes, indicates how much data remains to be uploaded
 	// before archiving is complete.
 	//
@@ -14670,6 +14711,12 @@ func (s *Tape) SetKMSKey(v string) *Tape {
 	return s
 }
 
+// SetPoolId sets the PoolId field's value.
+func (s *Tape) SetPoolId(v string) *Tape {
+	s.PoolId = &v
+	return s
+}
+
 // SetProgress sets the Progress field's value.
 func (s *Tape) SetProgress(v float64) *Tape {
 	s.Progress = &v
@@ -14732,6 +14779,12 @@ type TapeArchive struct {
 	// side encryption. This value can only be set when KMSEncrypted is true. Optional.
 	KMSKey *string `min:"7" type:"string"`
 
+	// The ID of the pool that was used to archive the tape. The tapes in this pool
+	// are archived in the S3 storage class that is associated with the pool.
+	//
+	// Valid values: "GLACIER", "DEEP_ARCHIVE"
+	PoolId *string `min:"1" type:"string"`
+
 	// The Amazon Resource Name (ARN) of the tape gateway that the virtual tape
 	// is being retrieved to.
 	//
@@ -14781,6 +14834,12 @@ func (s *TapeArchive) SetKMSKey(v string) *TapeArchive {
 	return s
 }
 
+// SetPoolId sets the PoolId field's value.
+func (s *TapeArchive) SetPoolId(v string) *TapeArchive {
+	s.PoolId = &v
+	return s
+}
+
 // SetRetrievedTo sets the RetrievedTo field's value.
 func (s *TapeArchive) SetRetrievedTo(v string) *TapeArchive {
 	s.RetrievedTo = &v
@@ -14831,6 +14890,15 @@ type TapeInfo struct {
 	// to return a list of gateways for your account and region.
 	GatewayARN *string `min:"50" type:"string"`
 
+	// The ID of the pool that you want to add your tape to for archiving. The tape
+	// in this pool is archived in the S3 storage class that is associated with
+	// the pool. When you use your backup application to eject the tape, the tape
+	// is archived directly into the storage class (Glacier or Deep Archive) that
+	// corresponds to the pool.
+	//
+	// Valid values: "GLACIER", "DEEP_ARCHIVE"
+	PoolId *string `min:"1" type:"string"`
+
 	// The Amazon Resource Name (ARN) of a virtual tape.
 	TapeARN *string `min:"50" type:"string"`
 
@@ -14860,6 +14928,12 @@ func (s *TapeInfo) SetGatewayARN(v string) *TapeInfo {
 	return s
 }
 
+// SetPoolId sets the PoolId field's value.
+func (s *TapeInfo) SetPoolId(v string) *TapeInfo {
+	s.PoolId = &v
+	return s
+}
+
 // SetTapeARN sets the TapeARN field's value.
 func (s *TapeInfo) SetTapeARN(v string) *TapeInfo {
 	s.TapeARN = &v
diff --git a/vendor/github.com/aws/aws-sdk-go/service/transfer/api.go b/vendor/github.com/aws/aws-sdk-go/service/transfer/api.go
index e4641e7b8e4b..14a219e814b5 100644
--- a/vendor/github.com/aws/aws-sdk-go/service/transfer/api.go
+++ b/vendor/github.com/aws/aws-sdk-go/service/transfer/api.go
@@ -1708,6 +1708,10 @@ func (c *Transfer) UpdateUserWithContext(ctx aws.Context, input *UpdateUserInput
 type CreateServerInput struct {
 	_ struct{} `type:"structure"`
 
+	EndpointDetails *EndpointDetails `type:"structure"`
+
+	EndpointType *string `type:"string" enum:"EndpointType"`
+
 	// An array containing all of the information required to call a customer-supplied
 	// authentication API. This parameter is not required when the IdentityProviderType
 	// value of server that is created uses the SERVICE_MANAGED authentication method.
@@ -1720,7 +1724,7 @@ type CreateServerInput struct {
 	// by you to integrate an identity provider of your choice.
 	IdentityProviderType *string `type:"string" enum:"IdentityProviderType"`
 
-	// A value that allows the service to write your SFTP users’ activity to your
+	// A value that allows the service to write your SFTP users' activity to your
 	// Amazon CloudWatch logs for monitoring and auditing purposes.
 	LoggingRole *string `type:"string"`
 
@@ -1761,6 +1765,18 @@ func (s *CreateServerInput) Validate() error {
 	return nil
 }
 
+// SetEndpointDetails sets the EndpointDetails field's value.
+func (s *CreateServerInput) SetEndpointDetails(v *EndpointDetails) *CreateServerInput {
+	s.EndpointDetails = v
+	return s
+}
+
+// SetEndpointType sets the EndpointType field's value.
+func (s *CreateServerInput) SetEndpointType(v string) *CreateServerInput {
+	s.EndpointType = &v
+	return s
+}
+
 // SetIdentityProviderDetails sets the IdentityProviderDetails field's value.
 func (s *CreateServerInput) SetIdentityProviderDetails(v *IdentityProviderDetails) *CreateServerInput {
 	s.IdentityProviderDetails = v
@@ -1823,12 +1839,12 @@ type CreateUserInput struct {
 	// ${Transfer:HomeDirectory}, and ${Transfer:HomeBucket}.
 	Policy *string `type:"string"`
 
-	// The IAM role that controls your user’s access to your Amazon S3 bucket. The
+	// The IAM role that controls your user's access to your Amazon S3 bucket. The
 	// policies attached to this role will determine the level of access you want
 	// to provide your users when transferring files into and out of your Amazon
 	// S3 bucket or buckets. The IAM role should also contain a trust relationship
 	// that allows the SFTP server to access your resources when servicing your
-	// SFTP user’s transfer requests.
+	// SFTP user's transfer requests.
 	//
 	// Role is a required field
 	Role *string `type:"string" required:"true"`
@@ -2035,7 +2051,7 @@ type DeleteSshPublicKeyInput struct {
 	// ServerId is a required field
 	ServerId *string `type:"string" required:"true"`
 
-	// A unique identifier used to reference your user’s specific SSH key.
+	// A unique identifier used to reference your user's specific SSH key.
 	//
 	// SshPublicKeyId is a required field
 	SshPublicKeyId *string `type:"string" required:"true"`
@@ -2341,6 +2357,10 @@ type DescribedServer struct {
 	// Arn is a required field
 	Arn *string `min:"20" type:"string" required:"true"`
 
+	EndpointDetails *EndpointDetails `type:"structure"`
+
+	EndpointType *string `type:"string" enum:"EndpointType"`
+
 	// Specifies information to call a customer-supplied authentication API. This
 	// field is not populated when the IdentityProviderType of the server is SERVICE_MANAGED>.
 	IdentityProviderDetails *IdentityProviderDetails `type:"structure"`
@@ -2396,6 +2416,18 @@ func (s *DescribedServer) SetArn(v string) *DescribedServer {
 	return s
 }
 
+// SetEndpointDetails sets the EndpointDetails field's value.
+func (s *DescribedServer) SetEndpointDetails(v *EndpointDetails) *DescribedServer {
+	s.EndpointDetails = v
+	return s
+}
+
+// SetEndpointType sets the EndpointType field's value.
+func (s *DescribedServer) SetEndpointType(v string) *DescribedServer {
+	s.EndpointType = &v
+	return s
+}
+
 // SetIdentityProviderDetails sets the IdentityProviderDetails field's value.
 func (s *DescribedServer) SetIdentityProviderDetails(v *IdentityProviderDetails) *DescribedServer {
 	s.IdentityProviderDetails = v
@@ -2456,12 +2488,12 @@ type DescribedUser struct {
 	// Specifies the name of the policy in use for the described user.
 	Policy *string `type:"string"`
 
-	// This property specifies the IAM role that controls your user’s access to
+	// This property specifies the IAM role that controls your user's access to
 	// your Amazon S3 bucket. The policies attached to this role will determine
 	// the level of access you want to provide your users when transferring files
 	// into and out of your Amazon S3 bucket or buckets. The IAM role should also
 	// contain a trust relationship that allows the SFTP server to access your resources
-	// when servicing your SFTP user’s transfer requests.
+	// when servicing your SFTP user's transfer requests.
 	Role *string `type:"string"`
 
 	// This property contains the public key portion of the Secure Shell (SSH) keys
@@ -2530,6 +2562,28 @@ func (s *DescribedUser) SetUserName(v string) *DescribedUser {
 	return s
 }
 
+type EndpointDetails struct {
+	_ struct{} `type:"structure"`
+
+	VpcEndpointId *string `type:"string"`
+}
+
+// String returns the string representation
+func (s EndpointDetails) String() string {
+	return awsutil.Prettify(s)
+}
+
+// GoString returns the string representation
+func (s EndpointDetails) GoString() string {
+	return s.String()
+}
+
+// SetVpcEndpointId sets the VpcEndpointId field's value.
+func (s *EndpointDetails) SetVpcEndpointId(v string) *EndpointDetails {
+	s.VpcEndpointId = &v
+	return s
+}
+
 // Returns information related to the type of user authentication that is in
 // use for a server's users. A server can only have one method of authentication.
 type IdentityProviderDetails struct {
@@ -3008,6 +3062,8 @@ type ListedServer struct {
 	// Arn is a required field
 	Arn *string `min:"20" type:"string" required:"true"`
 
+	EndpointType *string `type:"string" enum:"EndpointType"`
+
 	// The authentication method used to validate a user for the server that was
 	// specified. listed. This can include Secure Shell (SSH), user name and password
 	// combinations, or your own custom authentication method. Valid values include
@@ -3053,6 +3109,12 @@ func (s *ListedServer) SetArn(v string) *ListedServer {
 	return s
 }
 
+// SetEndpointType sets the EndpointType field's value.
+func (s *ListedServer) SetEndpointType(v string) *ListedServer {
+	s.EndpointType = &v
+	return s
+}
+
 // SetIdentityProviderType sets the IdentityProviderType field's value.
 func (s *ListedServer) SetIdentityProviderType(v string) *ListedServer {
 	s.IdentityProviderType = &v
@@ -3637,6 +3699,10 @@ func (s UntagResourceOutput) GoString() string {
 type UpdateServerInput struct {
 	_ struct{} `type:"structure"`
 
+	EndpointDetails *EndpointDetails `type:"structure"`
+
+	EndpointType *string `type:"string" enum:"EndpointType"`
+
 	// This response parameter is an array containing all of the information required
 	// to call a customer's authentication API method.
 	IdentityProviderDetails *IdentityProviderDetails `type:"structure"`
@@ -3675,6 +3741,18 @@ func (s *UpdateServerInput) Validate() error {
 	return nil
 }
 
+// SetEndpointDetails sets the EndpointDetails field's value.
+func (s *UpdateServerInput) SetEndpointDetails(v *EndpointDetails) *UpdateServerInput {
+	s.EndpointDetails = v
+	return s
+}
+
+// SetEndpointType sets the EndpointType field's value.
+func (s *UpdateServerInput) SetEndpointType(v string) *UpdateServerInput {
+	s.EndpointType = &v
+	return s
+}
+
 // SetIdentityProviderDetails sets the IdentityProviderDetails field's value.
 func (s *UpdateServerInput) SetIdentityProviderDetails(v *IdentityProviderDetails) *UpdateServerInput {
 	s.IdentityProviderDetails = v
@@ -3734,12 +3812,12 @@ type UpdateUserInput struct {
 	// and ${Transfer:HomeBucket}.
 	Policy *string `type:"string"`
 
-	// The IAM role that controls your user’s access to your Amazon S3 bucket. The
+	// The IAM role that controls your user's access to your Amazon S3 bucket. The
 	// policies attached to this role will determine the level of access you want
 	// to provide your users when transferring files into and out of your Amazon
 	// S3 bucket or buckets. The IAM role should also contain a trust relationship
 	// that allows the Secure File Transfer Protocol (SFTP) server to access your
-	// resources when servicing your SFTP user’s transfer requests.
+	// resources when servicing your SFTP user's transfer requests.
 	Role *string `type:"string"`
 
 	// A system-assigned unique identifier for an SFTP server instance that the
@@ -3852,6 +3930,14 @@ func (s *UpdateUserOutput) SetUserName(v string) *UpdateUserOutput {
 	return s
 }
 
+const (
+	// EndpointTypePublic is a EndpointType enum value
+	EndpointTypePublic = "PUBLIC"
+
+	// EndpointTypeVpcEndpoint is a EndpointType enum value
+	EndpointTypeVpcEndpoint = "VPC_ENDPOINT"
+)
+
 // Returns information related to the type of user authentication that is in
 // use for a server's users. For SERVICE_MANAGED authentication, the Secure
 // Shell (SSH) public keys are stored with a user on an SFTP server instance.
diff --git a/vendor/modules.txt b/vendor/modules.txt
index e6d914e19186..d6d4ee40212b 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -13,7 +13,7 @@ github.com/apparentlymart/go-cidr/cidr
 github.com/apparentlymart/go-textseg/textseg
 # github.com/armon/go-radix v1.0.0
 github.com/armon/go-radix
-# github.com/aws/aws-sdk-go v1.19.1
+# github.com/aws/aws-sdk-go v1.19.4
 github.com/aws/aws-sdk-go/aws
 github.com/aws/aws-sdk-go/aws/arn
 github.com/aws/aws-sdk-go/aws/awserr