aws-sdk-go-v2/service/ecs/api_op_RunTask.go (173 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 using the specified task definition. // // 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. // // You can allow Amazon ECS to place tasks for you, or you can customize how // Amazon ECS places tasks using placement constraints and placement strategies. // For more information, see [Scheduling Tasks]in the Amazon Elastic Container Service Developer // Guide. // // Alternatively, you can use StartTask to use your own scheduler or place tasks // manually on specific container instances. // // 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. // // The Amazon ECS API follows an eventual consistency model. This is because of // the distributed nature of the system supporting the API. This means that the // result of an API command you run that affects your Amazon ECS resources might // not be immediately visible to all subsequent commands you run. Keep this in mind // when you carry out an API command that immediately follows a previous API // command. // // To manage eventual consistency, you can do the following: // // - Confirm the state of the resource before you run a command to modify it. // Run the DescribeTasks command using an exponential backoff algorithm to ensure // that you allow enough time for the previous command to propagate through the // system. To do this, run the DescribeTasks command repeatedly, starting with a // couple of seconds of wait time and increasing gradually up to five minutes of // wait time. // // - Add wait time between subsequent commands, even if the DescribeTasks // command returns an accurate response. Apply an exponential backoff algorithm // starting with a couple of seconds of wait time, and increase gradually up to // about five minutes of wait time. // // [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) RunTask(ctx context.Context, params *RunTaskInput, optFns ...func(*Options)) (*RunTaskOutput, error) { if params == nil { params = &RunTaskInput{} } result, metadata, err := c.invokeOperation(ctx, "RunTask", params, optFns, c.addOperationRunTaskMiddlewares) if err != nil { return nil, err } out := result.(*RunTaskOutput) out.ResultMetadata = metadata return out, nil } type RunTaskInput struct { // The family and revision ( family:revision ) or full ARN of the task definition // to run. If a revision isn't specified, the latest ACTIVE revision is used. // // The full ARN value must match the value that you specified as the Resource of // the principal's permissions policy. // // When you specify a task definition, you must either specify a specific // revision, or all revisions in the ARN. // // To specify a specific revision, include the revision number in the ARN. For // example, to specify revision 2, use // arn:aws:ecs:us-east-1:111122223333:task-definition/TaskFamilyName:2 . // // To specify all revisions, use the wildcard (*) in the ARN. For example, to // specify all revisions, use // arn:aws:ecs:us-east-1:111122223333:task-definition/TaskFamilyName:* . // // For more information, see [Policy Resources for Amazon ECS] in the Amazon Elastic Container Service Developer // Guide. // // [Policy Resources for Amazon ECS]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/security_iam_service-with-iam.html#security_iam_service-with-iam-id-based-policies-resources // // This member is required. TaskDefinition *string // The capacity provider strategy to use for the task. // // If a capacityProviderStrategy is specified, the launchType parameter must be // omitted. If no capacityProviderStrategy or launchType is specified, the // defaultCapacityProviderStrategy for the cluster is used. // // When you use cluster auto scaling, you must specify capacityProviderStrategy // and not launchType . // // A capacity provider strategy may contain a maximum of 6 capacity providers. CapacityProviderStrategy []types.CapacityProviderStrategyItem // An identifier that you provide to ensure the idempotency of the request. It // must be unique and is case sensitive. Up to 64 characters are allowed. The valid // characters are characters in the range of 33-126, inclusive. For more // information, see [Ensuring idempotency]. // // [Ensuring idempotency]: https://docs.aws.amazon.com/AmazonECS/latest/APIReference/ECS_Idempotency.html ClientToken *string // The short name or full Amazon Resource Name (ARN) of the cluster to run your // task on. If you do not specify a cluster, the default cluster is assumed. Cluster *string // The number of instantiations of the specified task to place on your cluster. // You can specify up to 10 tasks for each call. Count *int32 // 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 // Determines whether to use the execute command functionality for the containers // in this task. If true , this enables execute command functionality on all // containers in the task. // // If true , then the task definition must have a task role, or you must provide // one as an override. EnableExecuteCommand bool // 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 infrastructure to run your standalone task on. For more information, see [Amazon ECS launch types] // in the Amazon Elastic Container Service Developer Guide. // // The FARGATE launch type runs your tasks on Fargate On-Demand infrastructure. // // Fargate Spot infrastructure is available for use but a capacity provider // strategy must be used. For more information, see [Fargate capacity providers]in the Amazon ECS Developer // Guide. // // The EC2 launch type runs your tasks on Amazon EC2 instances registered to your // cluster. // // The EXTERNAL launch type runs your tasks on your on-premises server or virtual // machine (VM) capacity registered to your cluster. // // A task can use either a launch type or a capacity provider strategy. If a // launchType is specified, the capacityProviderStrategy parameter must be omitted. // // When you use cluster auto scaling, you must specify capacityProviderStrategy // and not launchType . // // [Amazon ECS launch types]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html // [Fargate capacity providers]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-capacity-providers.html LaunchType types.LaunchType // The network configuration for the task. This parameter is required for task // definitions that use the awsvpc network mode to receive their own elastic // network interface, and it isn't supported for other network modes. For more // information, see [Task networking]in the Amazon Elastic Container Service Developer Guide. // // [Task networking]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html 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 should receive. // You can override the default command for a container (that's specified in the // task definition or Docker image) with a command override. You can also override // existing environment variables (that are specified in the task definition or // Docker image) on a container or add new environment variables to it with an // environment override. // // A total of 8192 characters are allowed for overrides. This limit includes the // JSON formatting characters of the override structure. Overrides *types.TaskOverride // An array of placement constraint objects to use for the task. You can specify // up to 10 constraints for each task (including constraints in the task definition // and those specified at runtime). PlacementConstraints []types.PlacementConstraint // The placement strategy objects to use for the task. You can specify a maximum // of 5 strategy rules for each task. PlacementStrategy []types.PlacementStrategy // The platform version the task uses. A platform version is only specified for // tasks hosted on Fargate. If one isn't specified, the LATEST platform version is // used. For more information, see [Fargate platform versions]in the Amazon Elastic Container Service // Developer Guide. // // [Fargate platform versions]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html PlatformVersion *string // Specifies whether to propagate the tags from the task definition to the task. // If no value is specified, the tags aren't propagated. Tags can only be // propagated to the task during task creation. To add tags to a task after task // creation, use the[TagResource] API action. // // An error will be received if you specify the SERVICE option when running a task. // // [TagResource]: https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_TagResource.html 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 128 letters (uppercase and lowercase), // numbers, hyphens (-), forward slash (/), and underscores (_) are allowed. // // If a task is started by an Amazon ECS service, then the startedBy parameter // contains the deployment ID of the service that starts it. // // [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 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 RunTaskOutput struct { // Any failures associated with the call. // // For information about how to address failures, see [Service event messages] and [API failure reasons] in the Amazon Elastic // Container Service Developer Guide. // // [API failure reasons]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/api_failures_messages.html // [Service event messages]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-event-messages.html#service-event-messages-list Failures []types.Failure // A full description of the tasks that were run. The tasks that were successfully // placed on your cluster are described here. Tasks []types.Task // Metadata pertaining to the operation's result. ResultMetadata middleware.Metadata noSmithyDocumentSerde } func (c *Client) addOperationRunTaskMiddlewares(stack *middleware.Stack, options Options) (err error) { if err := stack.Serialize.Add(&setOperationInputMiddleware{}, middleware.After); err != nil { return err } err = stack.Serialize.Add(&awsAwsjson11_serializeOpRunTask{}, middleware.After) if err != nil { return err } err = stack.Deserialize.Add(&awsAwsjson11_deserializeOpRunTask{}, middleware.After) if err != nil { return err } if err := addProtocolFinalizerMiddlewares(stack, options, "RunTask"); 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 = addIdempotencyToken_opRunTaskMiddleware(stack, options); err != nil { return err } if err = addOpRunTaskValidationMiddleware(stack); err != nil { return err } if err = stack.Initialize.Add(newServiceMetadataMiddleware_opRunTask(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 } type idempotencyToken_initializeOpRunTask struct { tokenProvider IdempotencyTokenProvider } func (*idempotencyToken_initializeOpRunTask) ID() string { return "OperationIdempotencyTokenAutoFill" } func (m *idempotencyToken_initializeOpRunTask) HandleInitialize(ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler) ( out middleware.InitializeOutput, metadata middleware.Metadata, err error, ) { if m.tokenProvider == nil { return next.HandleInitialize(ctx, in) } input, ok := in.Parameters.(*RunTaskInput) if !ok { return out, metadata, fmt.Errorf("expected middleware input to be of type *RunTaskInput ")} if input.ClientToken == nil { t, err := m.tokenProvider.GetIdempotencyToken() if err != nil { return out, metadata, err } input.ClientToken = &t } return next.HandleInitialize(ctx, in) } func addIdempotencyToken_opRunTaskMiddleware(stack *middleware.Stack, cfg Options) error { return stack.Initialize.Add(&idempotencyToken_initializeOpRunTask{tokenProvider: cfg.IdempotencyTokenProvider}, middleware.Before) } func newServiceMetadataMiddleware_opRunTask(region string) *awsmiddleware.RegisterServiceMetadata { return &awsmiddleware.RegisterServiceMetadata{ Region: region, ServiceID: ServiceID, OperationName: "RunTask", } }