aws-sdk-go-v2/service/ecs/api_op_RegisterTaskDefinition.go (144 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" ) // Registers a new task definition from the supplied family and // containerDefinitions . Optionally, you can add data volumes to your containers // with the volumes parameter. For more information about task definition // parameters and defaults, see [Amazon ECS Task Definitions]in the Amazon Elastic Container Service Developer // Guide. // // You can specify a role for your task with the taskRoleArn parameter. When you // specify a role for a task, its containers can then use the latest versions of // the CLI or SDKs to make API requests to the Amazon Web Services services that // are specified in the policy that's associated with the role. For more // information, see [IAM Roles for Tasks]in the Amazon Elastic Container Service Developer Guide. // // You can specify a Docker networking mode for the containers in your task // definition with the networkMode parameter. If you specify the awsvpc network // mode, the task is allocated an elastic network interface, and you must specify a // [NetworkConfiguration]when you create a service or run a task with the task definition. For more // information, see [Task Networking]in the Amazon Elastic Container Service Developer Guide. // // [Amazon ECS Task Definitions]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_defintions.html // [Task Networking]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html // [IAM Roles for Tasks]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html // [NetworkConfiguration]: https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_NetworkConfiguration.html func (c *Client) RegisterTaskDefinition(ctx context.Context, params *RegisterTaskDefinitionInput, optFns ...func(*Options)) (*RegisterTaskDefinitionOutput, error) { if params == nil { params = &RegisterTaskDefinitionInput{} } result, metadata, err := c.invokeOperation(ctx, "RegisterTaskDefinition", params, optFns, c.addOperationRegisterTaskDefinitionMiddlewares) if err != nil { return nil, err } out := result.(*RegisterTaskDefinitionOutput) out.ResultMetadata = metadata return out, nil } type RegisterTaskDefinitionInput struct { // A list of container definitions in JSON format that describe the different // containers that make up your task. // // This member is required. ContainerDefinitions []types.ContainerDefinition // You must specify a family for a task definition. You can use it track multiple // versions of the same task definition. The family is used as a name for your // task definition. Up to 255 letters (uppercase and lowercase), numbers, // underscores, and hyphens are allowed. // // This member is required. Family *string // The number of CPU units used by the task. It can be expressed as an integer // using CPU units (for example, 1024 ) or as a string using vCPUs (for example, 1 // vCPU or 1 vcpu ) in a task definition. String values are converted to an integer // indicating the CPU units when the task definition is registered. // // Task-level CPU and memory parameters are ignored for Windows containers. We // recommend specifying container-level resources for Windows containers. // // If you're using the EC2 launch type, this field is optional. Supported values // are between 128 CPU units ( 0.125 vCPUs) and 10240 CPU units ( 10 vCPUs). If // you do not specify a value, the parameter is ignored. // // If you're using the Fargate launch type, this field is required and you must // use one of the following values, which determines your range of supported values // for the memory parameter: // // The CPU units cannot be less than 1 vCPU when you use Windows containers on // Fargate. // // - 256 (.25 vCPU) - Available memory values: 512 (0.5 GB), 1024 (1 GB), 2048 (2 // GB) // // - 512 (.5 vCPU) - Available memory values: 1024 (1 GB), 2048 (2 GB), 3072 (3 // GB), 4096 (4 GB) // // - 1024 (1 vCPU) - Available memory values: 2048 (2 GB), 3072 (3 GB), 4096 (4 // GB), 5120 (5 GB), 6144 (6 GB), 7168 (7 GB), 8192 (8 GB) // // - 2048 (2 vCPU) - Available memory values: 4096 (4 GB) and 16384 (16 GB) in // increments of 1024 (1 GB) // // - 4096 (4 vCPU) - Available memory values: 8192 (8 GB) and 30720 (30 GB) in // increments of 1024 (1 GB) // // - 8192 (8 vCPU) - Available memory values: 16 GB and 60 GB in 4 GB increments // // This option requires Linux platform 1.4.0 or later. // // - 16384 (16vCPU) - Available memory values: 32GB and 120 GB in 8 GB increments // // This option requires Linux platform 1.4.0 or later. Cpu *string // The amount of ephemeral storage to allocate for the task. This parameter is // used to expand the total amount of ephemeral storage available, beyond the // default amount, for tasks hosted on Fargate. For more information, see [Using data volumes in tasks]in the // Amazon ECS Developer Guide. // // For tasks using the Fargate launch type, the task requires the following // platforms: // // - Linux platform version 1.4.0 or later. // // - Windows platform version 1.0.0 or later. // // [Using data volumes in tasks]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_data_volumes.html EphemeralStorage *types.EphemeralStorage // The Amazon Resource Name (ARN) of the task execution role that grants the // Amazon ECS container agent permission to make Amazon Web Services API calls on // your behalf. For informationabout the required IAM roles for Amazon ECS, see [IAM roles for Amazon ECS]in // the Amazon Elastic Container Service Developer Guide. // // [IAM roles for Amazon ECS]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/security-ecs-iam-role-overview.html ExecutionRoleArn *string // The Elastic Inference accelerators to use for the containers in the task. InferenceAccelerators []types.InferenceAccelerator // The IPC resource namespace to use for the containers in the task. The valid // values are host , task , or none . If host is specified, then all containers // within the tasks that specified the host IPC mode on the same container // instance share the same IPC resources with the host Amazon EC2 instance. If task // is specified, all containers within the specified task share the same IPC // resources. If none is specified, then IPC resources within the containers of a // task are private and not shared with other containers in a task or on the // container instance. If no value is specified, then the IPC resource namespace // sharing depends on the Docker daemon setting on the container instance. // // If the host IPC mode is used, be aware that there is a heightened risk of // undesired IPC namespace expose. // // If you are setting namespaced kernel parameters using systemControls for the // containers in the task, the following will apply to your IPC resource namespace. // For more information, see [System Controls]in the Amazon Elastic Container Service Developer // Guide. // // - For tasks that use the host IPC mode, IPC namespace related systemControls // are not supported. // // - For tasks that use the task IPC mode, IPC namespace related systemControls // will apply to all containers within a task. // // This parameter is not supported for Windows containers or tasks run on Fargate. // // [System Controls]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html IpcMode types.IpcMode // The amount of memory (in MiB) used by the task. It can be expressed as an // integer using MiB (for example , 1024 ) or as a string using GB (for example, // 1GB or 1 GB ) in a task definition. String values are converted to an integer // indicating the MiB when the task definition is registered. // // Task-level CPU and memory parameters are ignored for Windows containers. We // recommend specifying container-level resources for Windows containers. // // If using the EC2 launch type, this field is optional. // // If using the Fargate launch type, this field is required and you must use one // of the following values. This determines your range of supported values for the // cpu parameter. // // The CPU units cannot be less than 1 vCPU when you use Windows containers on // Fargate. // // - 512 (0.5 GB), 1024 (1 GB), 2048 (2 GB) - Available cpu values: 256 (.25 vCPU) // // - 1024 (1 GB), 2048 (2 GB), 3072 (3 GB), 4096 (4 GB) - Available cpu values: // 512 (.5 vCPU) // // - 2048 (2 GB), 3072 (3 GB), 4096 (4 GB), 5120 (5 GB), 6144 (6 GB), 7168 (7 // GB), 8192 (8 GB) - Available cpu values: 1024 (1 vCPU) // // - Between 4096 (4 GB) and 16384 (16 GB) in increments of 1024 (1 GB) - // Available cpu values: 2048 (2 vCPU) // // - Between 8192 (8 GB) and 30720 (30 GB) in increments of 1024 (1 GB) - // Available cpu values: 4096 (4 vCPU) // // - Between 16 GB and 60 GB in 4 GB increments - Available cpu values: 8192 (8 // vCPU) // // This option requires Linux platform 1.4.0 or later. // // - Between 32GB and 120 GB in 8 GB increments - Available cpu values: 16384 (16 // vCPU) // // This option requires Linux platform 1.4.0 or later. Memory *string // The Docker networking mode to use for the containers in the task. The valid // values are none , bridge , awsvpc , and host . If no network mode is specified, // the default is bridge . // // For Amazon ECS tasks on Fargate, the awsvpc network mode is required. For // Amazon ECS tasks on Amazon EC2 Linux instances, any network mode can be used. // For Amazon ECS tasks on Amazon EC2 Windows instances, or awsvpc can be used. If // the network mode is set to none , you cannot specify port mappings in your // container definitions, and the tasks containers do not have external // connectivity. The host and awsvpc network modes offer the highest networking // performance for containers because they use the EC2 network stack instead of the // virtualized network stack provided by the bridge mode. // // With the host and awsvpc network modes, exposed container ports are mapped // directly to the corresponding host port (for the host network mode) or the // attached elastic network interface port (for the awsvpc network mode), so you // cannot take advantage of dynamic host port mappings. // // When using the host network mode, you should not run containers using the root // user (UID 0). It is considered best practice to use a non-root user. // // If the network mode is awsvpc , the task is allocated an elastic network // interface, and you must specify a [NetworkConfiguration]value when you create a service or run a task // with the task definition. For more information, see [Task Networking]in the Amazon Elastic // Container Service Developer Guide. // // If the network mode is host , you cannot run multiple instantiations of the same // task on a single container instance when port mappings are used. // // [Task Networking]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html // [NetworkConfiguration]: https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_NetworkConfiguration.html NetworkMode types.NetworkMode // The process namespace to use for the containers in the task. The valid values // are host or task . On Fargate for Linux containers, the only valid value is task // . For example, monitoring sidecars might need pidMode to access information // about other containers running in the same task. // // If host is specified, all containers within the tasks that specified the host // PID mode on the same container instance share the same process namespace with // the host Amazon EC2 instance. // // If task is specified, all containers within the specified task share the same // process namespace. // // If no value is specified, the default is a private namespace for each container. // // If the host PID mode is used, there's a heightened risk of undesired process // namespace exposure. // // This parameter is not supported for Windows containers. // // This parameter is only supported for tasks that are hosted on Fargate if the // tasks are using platform version 1.4.0 or later (Linux). This isn't supported // for Windows containers on Fargate. PidMode types.PidMode // An array of placement constraint objects to use for the task. You can specify a // maximum of 10 constraints for each task. This limit includes constraints in the // task definition and those specified at runtime. PlacementConstraints []types.TaskDefinitionPlacementConstraint // The configuration details for the App Mesh proxy. // // For tasks hosted on Amazon EC2 instances, the container instances require at // least version 1.26.0 of the container agent and at least version 1.26.0-1 of // the ecs-init package to use a proxy configuration. If your container instances // are launched from the Amazon ECS-optimized AMI version 20190301 or later, then // they contain the required versions of the container agent and ecs-init . For // more information, see [Amazon ECS-optimized AMI versions]in the Amazon Elastic Container Service Developer Guide. // // [Amazon ECS-optimized AMI versions]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-ami-versions.html ProxyConfiguration *types.ProxyConfiguration // The task launch type that Amazon ECS validates the task definition against. A // client exception is returned if the task definition doesn't validate against the // compatibilities specified. If no value is specified, the parameter is omitted // from the response. RequiresCompatibilities []types.Compatibility // The operating system that your tasks definitions run on. A platform family is // specified only for tasks using the Fargate launch type. RuntimePlatform *types.RuntimePlatform // The metadata that you apply to the task definition to help you categorize and // organize them. Each tag consists of a key and an optional value. You define both // of them. // // The following basic restrictions apply to tags: // // - Maximum number of tags per resource - 50 // // - For each resource, each tag key must be unique, and each tag key can have // only one value. // // - Maximum key length - 128 Unicode characters in UTF-8 // // - Maximum value length - 256 Unicode characters in UTF-8 // // - If your tagging schema is used across multiple services and resources, // remember that other services may have restrictions on allowed characters. // Generally allowed characters are: letters, numbers, and spaces representable in // UTF-8, and the following characters: + - = . _ : / @. // // - Tag keys and values are case-sensitive. // // - Do not use aws: , AWS: , or any upper or lowercase combination of such as a // prefix for either keys or values as it is reserved for Amazon Web Services use. // You cannot edit or delete tag keys or values with this prefix. Tags with this // prefix do not count against your tags per resource limit. Tags []types.Tag // The short name or full Amazon Resource Name (ARN) of the IAM role that // containers in this task can assume. All containers in this task are granted the // permissions that are specified in this role. For more information, see [IAM Roles for Tasks]in the // Amazon Elastic Container Service Developer Guide. // // [IAM Roles for Tasks]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html TaskRoleArn *string // A list of volume definitions in JSON format that containers in your task might // use. Volumes []types.Volume noSmithyDocumentSerde } type RegisterTaskDefinitionOutput struct { // The list of tags associated with the task definition. Tags []types.Tag // The full description of the registered task definition. TaskDefinition *types.TaskDefinition // Metadata pertaining to the operation's result. ResultMetadata middleware.Metadata noSmithyDocumentSerde } func (c *Client) addOperationRegisterTaskDefinitionMiddlewares(stack *middleware.Stack, options Options) (err error) { if err := stack.Serialize.Add(&setOperationInputMiddleware{}, middleware.After); err != nil { return err } err = stack.Serialize.Add(&awsAwsjson11_serializeOpRegisterTaskDefinition{}, middleware.After) if err != nil { return err } err = stack.Deserialize.Add(&awsAwsjson11_deserializeOpRegisterTaskDefinition{}, middleware.After) if err != nil { return err } if err := addProtocolFinalizerMiddlewares(stack, options, "RegisterTaskDefinition"); 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 = addOpRegisterTaskDefinitionValidationMiddleware(stack); err != nil { return err } if err = stack.Initialize.Add(newServiceMetadataMiddleware_opRegisterTaskDefinition(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_opRegisterTaskDefinition(region string) *awsmiddleware.RegisterServiceMetadata { return &awsmiddleware.RegisterServiceMetadata{ Region: region, ServiceID: ServiceID, OperationName: "RegisterTaskDefinition", } }