aws-sdk-go-v2/service/ecs/api_op_StartTask.go (140 lines of code) (raw):
// Code generated by smithy-go-codegen DO NOT EDIT.
package ecs
import (
awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
"context"
"fmt"
"github.com/aws/smithy-go/middleware"
smithyhttp "github.com/aws/smithy-go/transport/http"
"github.com/aws/aws-sdk-go-v2/service/ecs/types"
)
// Starts a new task from the specified task definition on the specified container
// instance or instances.
//
// On March 21, 2024, a change was made to resolve the task definition revision
// before authorization. When a task definition revision is not specified,
// authorization will occur using the latest revision of a task definition.
//
// Amazon Elastic Inference (EI) is no longer available to customers.
//
// Alternatively, you can use RunTask to place tasks for you. For more
// information, see [Scheduling Tasks]in the Amazon Elastic Container Service Developer Guide.
//
// You can attach Amazon EBS volumes to Amazon ECS tasks by configuring the volume
// when creating or updating a service. For more infomation, see [Amazon EBS volumes]in the Amazon
// Elastic Container Service Developer Guide.
//
// [Scheduling Tasks]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduling_tasks.html
// [Amazon EBS volumes]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-volumes.html#ebs-volume-types
func (c *Client) StartTask(ctx context.Context, params *StartTaskInput, optFns ...func(*Options)) (*StartTaskOutput, error) {
if params == nil { params = &StartTaskInput{} }
result, metadata, err := c.invokeOperation(ctx, "StartTask", params, optFns, c.addOperationStartTaskMiddlewares)
if err != nil { return nil, err }
out := result.(*StartTaskOutput)
out.ResultMetadata = metadata
return out, nil
}
type StartTaskInput struct {
// The container instance IDs or full ARN entries for the container instances
// where you would like to place your task. You can specify up to 10 container
// instances.
//
// This member is required.
ContainerInstances []string
// The family and revision ( family:revision ) or full ARN of the task definition
// to start. If a revision isn't specified, the latest ACTIVE revision is used.
//
// This member is required.
TaskDefinition *string
// The short name or full Amazon Resource Name (ARN) of the cluster where to start
// your task. If you do not specify a cluster, the default cluster is assumed.
Cluster *string
// Specifies whether to use Amazon ECS managed tags for the task. For more
// information, see [Tagging Your Amazon ECS Resources]in the Amazon Elastic Container Service Developer Guide.
//
// [Tagging Your Amazon ECS Resources]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-using-tags.html
EnableECSManagedTags bool
// Whether or not the execute command functionality is turned on for the task. If
// true , this turns on the execute command functionality on all containers in the
// task.
EnableExecuteCommand bool
// The name of the task group to associate with the task. The default value is the
// family name of the task definition (for example, family:my-family-name).
Group *string
// The VPC subnet and security group configuration for tasks that receive their
// own elastic network interface by using the awsvpc networking mode.
NetworkConfiguration *types.NetworkConfiguration
// A list of container overrides in JSON format that specify the name of a
// container in the specified task definition and the overrides it receives. You
// can override the default command for a container (that's specified in the task
// definition or Docker image) with a command override. You can also override
// existing environment variables (that are specified in the task definition or
// Docker image) on a container or add new environment variables to it with an
// environment override.
//
// A total of 8192 characters are allowed for overrides. This limit includes the
// JSON formatting characters of the override structure.
Overrides *types.TaskOverride
// Specifies whether to propagate the tags from the task definition or the service
// to the task. If no value is specified, the tags aren't propagated.
PropagateTags types.PropagateTags
// This parameter is only used by Amazon ECS. It is not intended for use by
// customers.
ReferenceId *string
// An optional tag specified when a task is started. For example, if you
// automatically trigger a task to run a batch process job, you could apply a
// unique identifier for that job to your task with the startedBy parameter. You
// can then identify which tasks belong to that job by filtering the results of a [ListTasks]
// call with the startedBy value. Up to 36 letters (uppercase and lowercase),
// numbers, hyphens (-), forward slash (/), and underscores (_) are allowed.
//
// If a task is started by an Amazon ECS service, the startedBy parameter contains
// the deployment ID of the service that starts it.
//
// [ListTasks]: https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListTasks.html
StartedBy *string
// The metadata that you apply to the task to help you categorize and organize
// them. Each tag consists of a key and an optional value, both of which you
// define.
//
// The following basic restrictions apply to tags:
//
// - Maximum number of tags per resource - 50
//
// - For each resource, each tag key must be unique, and each tag key can have
// only one value.
//
// - Maximum key length - 128 Unicode characters in UTF-8
//
// - Maximum value length - 256 Unicode characters in UTF-8
//
// - If your tagging schema is used across multiple services and resources,
// remember that other services may have restrictions on allowed characters.
// Generally allowed characters are: letters, numbers, and spaces representable in
// UTF-8, and the following characters: + - = . _ : / @.
//
// - Tag keys and values are case-sensitive.
//
// - Do not use aws: , AWS: , or any upper or lowercase combination of such as a
// prefix for either keys or values as it is reserved for Amazon Web Services use.
// You cannot edit or delete tag keys or values with this prefix. Tags with this
// prefix do not count against your tags per resource limit.
Tags []types.Tag
// The details of the volume that was configuredAtLaunch . You can configure the
// size, volumeType, IOPS, throughput, snapshot and encryption in [TaskManagedEBSVolumeConfiguration]. The name of
// the volume must match the name from the task definition.
//
// [TaskManagedEBSVolumeConfiguration]: https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_TaskManagedEBSVolumeConfiguration.html
VolumeConfigurations []types.TaskVolumeConfiguration
noSmithyDocumentSerde
}
type StartTaskOutput struct {
// Any failures associated with the call.
Failures []types.Failure
// A full description of the tasks that were started. Each task that was
// successfully placed on your container instances is described.
Tasks []types.Task
// Metadata pertaining to the operation's result.
ResultMetadata middleware.Metadata
noSmithyDocumentSerde
}
func (c *Client) addOperationStartTaskMiddlewares(stack *middleware.Stack, options Options) (err error) {
if err := stack.Serialize.Add(&setOperationInputMiddleware{}, middleware.After); err != nil {
return err
}
err = stack.Serialize.Add(&awsAwsjson11_serializeOpStartTask{}, middleware.After)
if err != nil { return err }
err = stack.Deserialize.Add(&awsAwsjson11_deserializeOpStartTask{}, middleware.After)
if err != nil { return err }
if err := addProtocolFinalizerMiddlewares(stack, options, "StartTask"); err != nil {
return fmt.Errorf("add protocol finalizers: %v", err)
}
if err = addlegacyEndpointContextSetter(stack, options); err != nil {
return err
}
if err = addSetLoggerMiddleware(stack, options); err != nil {
return err
}
if err = addClientRequestID(stack); err != nil {
return err
}
if err = addComputeContentLength(stack); err != nil {
return err
}
if err = addResolveEndpointMiddleware(stack, options); err != nil {
return err
}
if err = addComputePayloadSHA256(stack); err != nil {
return err
}
if err = addRetry(stack, options); err != nil {
return err
}
if err = addRawResponseToMetadata(stack); err != nil {
return err
}
if err = addRecordResponseTiming(stack); err != nil {
return err
}
if err = addSpanRetryLoop(stack, options); err != nil {
return err
}
if err = addClientUserAgent(stack, options); err != nil {
return err
}
if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
return err
}
if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
return err
}
if err = addSetLegacyContextSigningOptionsMiddleware(stack); err != nil {
return err
}
if err = addTimeOffsetBuild(stack, c); err != nil {
return err
}
if err = addUserAgentRetryMode(stack, options); err != nil {
return err
}
if err = addOpStartTaskValidationMiddleware(stack); err != nil {
return err
}
if err = stack.Initialize.Add(newServiceMetadataMiddleware_opStartTask(options.Region, ), middleware.Before); err != nil {
return err
}
if err = addRecursionDetection(stack); err != nil {
return err
}
if err = addRequestIDRetrieverMiddleware(stack); err != nil {
return err
}
if err = addResponseErrorMiddleware(stack); err != nil {
return err
}
if err = addRequestResponseLogging(stack, options); err != nil {
return err
}
if err = addDisableHTTPSMiddleware(stack, options); err != nil {
return err
}
if err = addSpanInitializeStart(stack); err != nil {
return err
}
if err = addSpanInitializeEnd(stack); err != nil {
return err
}
if err = addSpanBuildRequestStart(stack); err != nil {
return err
}
if err = addSpanBuildRequestEnd(stack); err != nil {
return err
}
return nil
}
func newServiceMetadataMiddleware_opStartTask(region string) *awsmiddleware.RegisterServiceMetadata {
return &awsmiddleware.RegisterServiceMetadata{
Region: region,
ServiceID: ServiceID,
OperationName: "StartTask",
}
}