All Downloads are FREE. Search and download functionalities are using the official Maven repository.

software.amazon.awssdk.services.ecs.model.CreateServiceRequest Maven / Gradle / Ivy

/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
 * the License. A copy of the License is located at
 * 
 * http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
 * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
 * and limitations under the License.
 */

package software.amazon.awssdk.services.ecs.model;

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import software.amazon.awssdk.annotations.Generated;
import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration;
import software.amazon.awssdk.core.SdkField;
import software.amazon.awssdk.core.SdkPojo;
import software.amazon.awssdk.core.protocol.MarshallLocation;
import software.amazon.awssdk.core.protocol.MarshallingType;
import software.amazon.awssdk.core.traits.ListTrait;
import software.amazon.awssdk.core.traits.LocationTrait;
import software.amazon.awssdk.core.util.DefaultSdkAutoConstructList;
import software.amazon.awssdk.core.util.SdkAutoConstructList;
import software.amazon.awssdk.utils.ToString;
import software.amazon.awssdk.utils.builder.CopyableBuilder;
import software.amazon.awssdk.utils.builder.ToCopyableBuilder;

/**
 */
@Generated("software.amazon.awssdk:codegen")
public final class CreateServiceRequest extends EcsRequest implements
        ToCopyableBuilder {
    private static final SdkField CLUSTER_FIELD = SdkField. builder(MarshallingType.STRING).memberName("cluster")
            .getter(getter(CreateServiceRequest::cluster)).setter(setter(Builder::cluster))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("cluster").build()).build();

    private static final SdkField SERVICE_NAME_FIELD = SdkField. builder(MarshallingType.STRING)
            .memberName("serviceName").getter(getter(CreateServiceRequest::serviceName)).setter(setter(Builder::serviceName))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("serviceName").build()).build();

    private static final SdkField TASK_DEFINITION_FIELD = SdkField. builder(MarshallingType.STRING)
            .memberName("taskDefinition").getter(getter(CreateServiceRequest::taskDefinition))
            .setter(setter(Builder::taskDefinition))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("taskDefinition").build()).build();

    private static final SdkField> LOAD_BALANCERS_FIELD = SdkField
            .> builder(MarshallingType.LIST)
            .memberName("loadBalancers")
            .getter(getter(CreateServiceRequest::loadBalancers))
            .setter(setter(Builder::loadBalancers))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("loadBalancers").build(),
                    ListTrait
                            .builder()
                            .memberLocationName(null)
                            .memberFieldInfo(
                                    SdkField. builder(MarshallingType.SDK_POJO)
                                            .constructor(LoadBalancer::builder)
                                            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD)
                                                    .locationName("member").build()).build()).build()).build();

    private static final SdkField> SERVICE_REGISTRIES_FIELD = SdkField
            .> builder(MarshallingType.LIST)
            .memberName("serviceRegistries")
            .getter(getter(CreateServiceRequest::serviceRegistries))
            .setter(setter(Builder::serviceRegistries))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("serviceRegistries").build(),
                    ListTrait
                            .builder()
                            .memberLocationName(null)
                            .memberFieldInfo(
                                    SdkField. builder(MarshallingType.SDK_POJO)
                                            .constructor(ServiceRegistry::builder)
                                            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD)
                                                    .locationName("member").build()).build()).build()).build();

    private static final SdkField DESIRED_COUNT_FIELD = SdkField. builder(MarshallingType.INTEGER)
            .memberName("desiredCount").getter(getter(CreateServiceRequest::desiredCount)).setter(setter(Builder::desiredCount))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("desiredCount").build()).build();

    private static final SdkField CLIENT_TOKEN_FIELD = SdkField. builder(MarshallingType.STRING)
            .memberName("clientToken").getter(getter(CreateServiceRequest::clientToken)).setter(setter(Builder::clientToken))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("clientToken").build()).build();

    private static final SdkField LAUNCH_TYPE_FIELD = SdkField. builder(MarshallingType.STRING)
            .memberName("launchType").getter(getter(CreateServiceRequest::launchTypeAsString))
            .setter(setter(Builder::launchType))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("launchType").build()).build();

    private static final SdkField> CAPACITY_PROVIDER_STRATEGY_FIELD = SdkField
            .> builder(MarshallingType.LIST)
            .memberName("capacityProviderStrategy")
            .getter(getter(CreateServiceRequest::capacityProviderStrategy))
            .setter(setter(Builder::capacityProviderStrategy))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("capacityProviderStrategy").build(),
                    ListTrait
                            .builder()
                            .memberLocationName(null)
                            .memberFieldInfo(
                                    SdkField. builder(MarshallingType.SDK_POJO)
                                            .constructor(CapacityProviderStrategyItem::builder)
                                            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD)
                                                    .locationName("member").build()).build()).build()).build();

    private static final SdkField PLATFORM_VERSION_FIELD = SdkField. builder(MarshallingType.STRING)
            .memberName("platformVersion").getter(getter(CreateServiceRequest::platformVersion))
            .setter(setter(Builder::platformVersion))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("platformVersion").build()).build();

    private static final SdkField ROLE_FIELD = SdkField. builder(MarshallingType.STRING).memberName("role")
            .getter(getter(CreateServiceRequest::role)).setter(setter(Builder::role))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("role").build()).build();

    private static final SdkField DEPLOYMENT_CONFIGURATION_FIELD = SdkField
            . builder(MarshallingType.SDK_POJO).memberName("deploymentConfiguration")
            .getter(getter(CreateServiceRequest::deploymentConfiguration)).setter(setter(Builder::deploymentConfiguration))
            .constructor(DeploymentConfiguration::builder)
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("deploymentConfiguration").build())
            .build();

    private static final SdkField> PLACEMENT_CONSTRAINTS_FIELD = SdkField
            .> builder(MarshallingType.LIST)
            .memberName("placementConstraints")
            .getter(getter(CreateServiceRequest::placementConstraints))
            .setter(setter(Builder::placementConstraints))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("placementConstraints").build(),
                    ListTrait
                            .builder()
                            .memberLocationName(null)
                            .memberFieldInfo(
                                    SdkField. builder(MarshallingType.SDK_POJO)
                                            .constructor(PlacementConstraint::builder)
                                            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD)
                                                    .locationName("member").build()).build()).build()).build();

    private static final SdkField> PLACEMENT_STRATEGY_FIELD = SdkField
            .> builder(MarshallingType.LIST)
            .memberName("placementStrategy")
            .getter(getter(CreateServiceRequest::placementStrategy))
            .setter(setter(Builder::placementStrategy))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("placementStrategy").build(),
                    ListTrait
                            .builder()
                            .memberLocationName(null)
                            .memberFieldInfo(
                                    SdkField. builder(MarshallingType.SDK_POJO)
                                            .constructor(PlacementStrategy::builder)
                                            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD)
                                                    .locationName("member").build()).build()).build()).build();

    private static final SdkField NETWORK_CONFIGURATION_FIELD = SdkField
            . builder(MarshallingType.SDK_POJO).memberName("networkConfiguration")
            .getter(getter(CreateServiceRequest::networkConfiguration)).setter(setter(Builder::networkConfiguration))
            .constructor(NetworkConfiguration::builder)
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("networkConfiguration").build())
            .build();

    private static final SdkField HEALTH_CHECK_GRACE_PERIOD_SECONDS_FIELD = SdkField
            . builder(MarshallingType.INTEGER)
            .memberName("healthCheckGracePeriodSeconds")
            .getter(getter(CreateServiceRequest::healthCheckGracePeriodSeconds))
            .setter(setter(Builder::healthCheckGracePeriodSeconds))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("healthCheckGracePeriodSeconds")
                    .build()).build();

    private static final SdkField SCHEDULING_STRATEGY_FIELD = SdkField. builder(MarshallingType.STRING)
            .memberName("schedulingStrategy").getter(getter(CreateServiceRequest::schedulingStrategyAsString))
            .setter(setter(Builder::schedulingStrategy))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("schedulingStrategy").build())
            .build();

    private static final SdkField DEPLOYMENT_CONTROLLER_FIELD = SdkField
            . builder(MarshallingType.SDK_POJO).memberName("deploymentController")
            .getter(getter(CreateServiceRequest::deploymentController)).setter(setter(Builder::deploymentController))
            .constructor(DeploymentController::builder)
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("deploymentController").build())
            .build();

    private static final SdkField> TAGS_FIELD = SdkField
            .> builder(MarshallingType.LIST)
            .memberName("tags")
            .getter(getter(CreateServiceRequest::tags))
            .setter(setter(Builder::tags))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("tags").build(),
                    ListTrait
                            .builder()
                            .memberLocationName(null)
                            .memberFieldInfo(
                                    SdkField. builder(MarshallingType.SDK_POJO)
                                            .constructor(Tag::builder)
                                            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD)
                                                    .locationName("member").build()).build()).build()).build();

    private static final SdkField ENABLE_ECS_MANAGED_TAGS_FIELD = SdkField. builder(MarshallingType.BOOLEAN)
            .memberName("enableECSManagedTags").getter(getter(CreateServiceRequest::enableECSManagedTags))
            .setter(setter(Builder::enableECSManagedTags))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("enableECSManagedTags").build())
            .build();

    private static final SdkField PROPAGATE_TAGS_FIELD = SdkField. builder(MarshallingType.STRING)
            .memberName("propagateTags").getter(getter(CreateServiceRequest::propagateTagsAsString))
            .setter(setter(Builder::propagateTags))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("propagateTags").build()).build();

    private static final List> SDK_FIELDS = Collections.unmodifiableList(Arrays.asList(CLUSTER_FIELD,
            SERVICE_NAME_FIELD, TASK_DEFINITION_FIELD, LOAD_BALANCERS_FIELD, SERVICE_REGISTRIES_FIELD, DESIRED_COUNT_FIELD,
            CLIENT_TOKEN_FIELD, LAUNCH_TYPE_FIELD, CAPACITY_PROVIDER_STRATEGY_FIELD, PLATFORM_VERSION_FIELD, ROLE_FIELD,
            DEPLOYMENT_CONFIGURATION_FIELD, PLACEMENT_CONSTRAINTS_FIELD, PLACEMENT_STRATEGY_FIELD, NETWORK_CONFIGURATION_FIELD,
            HEALTH_CHECK_GRACE_PERIOD_SECONDS_FIELD, SCHEDULING_STRATEGY_FIELD, DEPLOYMENT_CONTROLLER_FIELD, TAGS_FIELD,
            ENABLE_ECS_MANAGED_TAGS_FIELD, PROPAGATE_TAGS_FIELD));

    private final String cluster;

    private final String serviceName;

    private final String taskDefinition;

    private final List loadBalancers;

    private final List serviceRegistries;

    private final Integer desiredCount;

    private final String clientToken;

    private final String launchType;

    private final List capacityProviderStrategy;

    private final String platformVersion;

    private final String role;

    private final DeploymentConfiguration deploymentConfiguration;

    private final List placementConstraints;

    private final List placementStrategy;

    private final NetworkConfiguration networkConfiguration;

    private final Integer healthCheckGracePeriodSeconds;

    private final String schedulingStrategy;

    private final DeploymentController deploymentController;

    private final List tags;

    private final Boolean enableECSManagedTags;

    private final String propagateTags;

    private CreateServiceRequest(BuilderImpl builder) {
        super(builder);
        this.cluster = builder.cluster;
        this.serviceName = builder.serviceName;
        this.taskDefinition = builder.taskDefinition;
        this.loadBalancers = builder.loadBalancers;
        this.serviceRegistries = builder.serviceRegistries;
        this.desiredCount = builder.desiredCount;
        this.clientToken = builder.clientToken;
        this.launchType = builder.launchType;
        this.capacityProviderStrategy = builder.capacityProviderStrategy;
        this.platformVersion = builder.platformVersion;
        this.role = builder.role;
        this.deploymentConfiguration = builder.deploymentConfiguration;
        this.placementConstraints = builder.placementConstraints;
        this.placementStrategy = builder.placementStrategy;
        this.networkConfiguration = builder.networkConfiguration;
        this.healthCheckGracePeriodSeconds = builder.healthCheckGracePeriodSeconds;
        this.schedulingStrategy = builder.schedulingStrategy;
        this.deploymentController = builder.deploymentController;
        this.tags = builder.tags;
        this.enableECSManagedTags = builder.enableECSManagedTags;
        this.propagateTags = builder.propagateTags;
    }

    /**
     * 

* The short name or full Amazon Resource Name (ARN) of the cluster on which to run your service. If you do not * specify a cluster, the default cluster is assumed. *

* * @return The short name or full Amazon Resource Name (ARN) of the cluster on which to run your service. If you do * not specify a cluster, the default cluster is assumed. */ public String cluster() { return cluster; } /** *

* The name of your service. Up to 255 letters (uppercase and lowercase), numbers, and hyphens are allowed. Service * names must be unique within a cluster, but you can have similarly named services in multiple clusters within a * Region or across multiple Regions. *

* * @return The name of your service. Up to 255 letters (uppercase and lowercase), numbers, and hyphens are allowed. * Service names must be unique within a cluster, but you can have similarly named services in multiple * clusters within a Region or across multiple Regions. */ public String serviceName() { return serviceName; } /** *

* The family and revision (family:revision) or full ARN of the task * definition to run in your service. If a revision is not specified, the latest ACTIVE * revision is used. *

*

* A task definition must be specified if the service is using the ECS deployment controller. *

* * @return The family and revision (family:revision) or full ARN of the task * definition to run in your service. If a revision is not specified, the latest * ACTIVE revision is used.

*

* A task definition must be specified if the service is using the ECS deployment controller. */ public String taskDefinition() { return taskDefinition; } /** * Returns true if the LoadBalancers property was specified by the sender (it may be empty), or false if the sender * did not specify the value (it will be empty). For responses returned by the SDK, the sender is the AWS service. */ public boolean hasLoadBalancers() { return loadBalancers != null && !(loadBalancers instanceof SdkAutoConstructList); } /** *

* A load balancer object representing the load balancers to use with your service. For more information, see Service Load * Balancing in the Amazon Elastic Container Service Developer Guide. *

*

* If the service is using the rolling update (ECS) deployment controller and using either an * Application Load Balancer or Network Load Balancer, you can specify multiple target groups to attach to the * service. The service-linked role is required for services that make use of multiple target groups. For more * information, see Using * Service-Linked Roles for Amazon ECS in the Amazon Elastic Container Service Developer Guide. *

*

* If the service is using the CODE_DEPLOY deployment controller, the service is required to use either * an Application Load Balancer or Network Load Balancer. When creating an AWS CodeDeploy deployment group, you * specify two target groups (referred to as a targetGroupPair). During a deployment, AWS CodeDeploy * determines which task set in your service has the status PRIMARY and associates one target group * with it, and then associates the other target group with the replacement task set. The load balancer can also * have up to two listeners: a required listener for production traffic and an optional listener that allows you * perform validation tests with Lambda functions before routing production traffic to it. *

*

* After you create a service using the ECS deployment controller, the load balancer name or target * group ARN, container name, and container port specified in the service definition are immutable. If you are using * the CODE_DEPLOY deployment controller, these values can be changed when updating the service. *

*

* For Application Load Balancers and Network Load Balancers, this object must contain the load balancer target * group ARN, the container name (as it appears in a container definition), and the container port to access from * the load balancer. When a task from this service is placed on a container instance, the container instance and * port combination is registered as a target in the target group specified here. *

*

* For Classic Load Balancers, this object must contain the load balancer name, the container name (as it appears in * a container definition), and the container port to access from the load balancer. When a task from this service * is placed on a container instance, the container instance is registered with the load balancer specified here. *

*

* Services with tasks that use the awsvpc network mode (for example, those with the Fargate launch * type) only support Application Load Balancers and Network Load Balancers. Classic Load Balancers are not * supported. Also, when you create any target groups for these services, you must choose ip as the * target type, not instance, because tasks that use the awsvpc network mode are * associated with an elastic network interface, not an Amazon EC2 instance. *

*

* Attempts to modify the collection returned by this method will result in an UnsupportedOperationException. *

*

* You can use {@link #hasLoadBalancers()} to see if a value was sent in this field. *

* * @return A load balancer object representing the load balancers to use with your service. For more information, * see Service * Load Balancing in the Amazon Elastic Container Service Developer Guide.

*

* If the service is using the rolling update (ECS) deployment controller and using either an * Application Load Balancer or Network Load Balancer, you can specify multiple target groups to attach to * the service. The service-linked role is required for services that make use of multiple target groups. * For more information, see Using * Service-Linked Roles for Amazon ECS in the Amazon Elastic Container Service Developer Guide. *

*

* If the service is using the CODE_DEPLOY deployment controller, the service is required to * use either an Application Load Balancer or Network Load Balancer. When creating an AWS CodeDeploy * deployment group, you specify two target groups (referred to as a targetGroupPair). During a * deployment, AWS CodeDeploy determines which task set in your service has the status PRIMARY * and associates one target group with it, and then associates the other target group with the replacement * task set. The load balancer can also have up to two listeners: a required listener for production traffic * and an optional listener that allows you perform validation tests with Lambda functions before routing * production traffic to it. *

*

* After you create a service using the ECS deployment controller, the load balancer name or * target group ARN, container name, and container port specified in the service definition are immutable. * If you are using the CODE_DEPLOY deployment controller, these values can be changed when * updating the service. *

*

* For Application Load Balancers and Network Load Balancers, this object must contain the load balancer * target group ARN, the container name (as it appears in a container definition), and the container port to * access from the load balancer. When a task from this service is placed on a container instance, the * container instance and port combination is registered as a target in the target group specified here. *

*

* For Classic Load Balancers, this object must contain the load balancer name, the container name (as it * appears in a container definition), and the container port to access from the load balancer. When a task * from this service is placed on a container instance, the container instance is registered with the load * balancer specified here. *

*

* Services with tasks that use the awsvpc network mode (for example, those with the Fargate * launch type) only support Application Load Balancers and Network Load Balancers. Classic Load Balancers * are not supported. Also, when you create any target groups for these services, you must choose * ip as the target type, not instance, because tasks that use the * awsvpc network mode are associated with an elastic network interface, not an Amazon EC2 * instance. */ public List loadBalancers() { return loadBalancers; } /** * Returns true if the ServiceRegistries property was specified by the sender (it may be empty), or false if the * sender did not specify the value (it will be empty). For responses returned by the SDK, the sender is the AWS * service. */ public boolean hasServiceRegistries() { return serviceRegistries != null && !(serviceRegistries instanceof SdkAutoConstructList); } /** *

* The details of the service discovery registries to assign to this service. For more information, see Service Discovery. *

* *

* Service discovery is supported for Fargate tasks if you are using platform version v1.1.0 or later. For more * information, see AWS * Fargate Platform Versions. *

*
*

* Attempts to modify the collection returned by this method will result in an UnsupportedOperationException. *

*

* You can use {@link #hasServiceRegistries()} to see if a value was sent in this field. *

* * @return The details of the service discovery registries to assign to this service. For more information, see Service * Discovery.

*

* Service discovery is supported for Fargate tasks if you are using platform version v1.1.0 or later. For * more information, see AWS Fargate * Platform Versions. *

*/ public List serviceRegistries() { return serviceRegistries; } /** *

* The number of instantiations of the specified task definition to place and keep running on your cluster. *

*

* This is required if schedulingStrategy is REPLICA or is not specified. If * schedulingStrategy is DAEMON then this is not required. *

* * @return The number of instantiations of the specified task definition to place and keep running on your * cluster.

*

* This is required if schedulingStrategy is REPLICA or is not specified. If * schedulingStrategy is DAEMON then this is not required. */ public Integer desiredCount() { return desiredCount; } /** *

* Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Up to 32 ASCII * characters are allowed. *

* * @return Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Up to 32 * ASCII characters are allowed. */ public String clientToken() { return clientToken; } /** *

* The launch type on which to run your service. For more information, see Amazon ECS Launch Types * in the Amazon Elastic Container Service Developer Guide. *

*

* If a launchType is specified, the capacityProviderStrategy parameter must be omitted. *

*

* If the service returns an enum value that is not available in the current SDK version, {@link #launchType} will * return {@link LaunchType#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is available from * {@link #launchTypeAsString}. *

* * @return The launch type on which to run your service. For more information, see Amazon ECS Launch * Types in the Amazon Elastic Container Service Developer Guide.

*

* If a launchType is specified, the capacityProviderStrategy parameter must be * omitted. * @see LaunchType */ public LaunchType launchType() { return LaunchType.fromValue(launchType); } /** *

* The launch type on which to run your service. For more information, see Amazon ECS Launch Types * in the Amazon Elastic Container Service Developer Guide. *

*

* If a launchType is specified, the capacityProviderStrategy parameter must be omitted. *

*

* If the service returns an enum value that is not available in the current SDK version, {@link #launchType} will * return {@link LaunchType#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is available from * {@link #launchTypeAsString}. *

* * @return The launch type on which to run your service. For more information, see Amazon ECS Launch * Types in the Amazon Elastic Container Service Developer Guide.

*

* If a launchType is specified, the capacityProviderStrategy parameter must be * omitted. * @see LaunchType */ public String launchTypeAsString() { return launchType; } /** * Returns true if the CapacityProviderStrategy property was specified by the sender (it may be empty), or false if * the sender did not specify the value (it will be empty). For responses returned by the SDK, the sender is the AWS * service. */ public boolean hasCapacityProviderStrategy() { return capacityProviderStrategy != null && !(capacityProviderStrategy instanceof SdkAutoConstructList); } /** *

* The capacity provider strategy to use for the service. *

*

* A capacity provider strategy consists of one or more capacity providers along with the base and * weight to assign to them. A capacity provider must be associated with the cluster to be used in a * capacity provider strategy. The PutClusterCapacityProviders API is used to associate a capacity provider * with a cluster. Only capacity providers with an ACTIVE or UPDATING status can be used. *

*

* If a capacityProviderStrategy is specified, the launchType parameter must be omitted. * If no capacityProviderStrategy or launchType is specified, the * defaultCapacityProviderStrategy for the cluster is used. *

*

* If specifying a capacity provider that uses an Auto Scaling group, the capacity provider must already be created. * New capacity providers can be created with the CreateCapacityProvider API operation. *

*

* To use a AWS Fargate capacity provider, specify either the FARGATE or FARGATE_SPOT * capacity providers. The AWS Fargate capacity providers are available to all accounts and only need to be * associated with a cluster to be used. *

*

* The PutClusterCapacityProviders API operation is used to update the list of available capacity providers * for a cluster after the cluster is created. *

*

* Attempts to modify the collection returned by this method will result in an UnsupportedOperationException. *

*

* You can use {@link #hasCapacityProviderStrategy()} to see if a value was sent in this field. *

* * @return The capacity provider strategy to use for the service.

*

* A capacity provider strategy consists of one or more capacity providers along with the base * and weight to assign to them. A capacity provider must be associated with the cluster to be * used in a capacity provider strategy. The PutClusterCapacityProviders API is used to associate a * capacity provider with a cluster. Only capacity providers with an ACTIVE or * UPDATING status can be used. *

*

* If a capacityProviderStrategy is specified, the launchType parameter must be * omitted. If no capacityProviderStrategy or launchType is specified, the * defaultCapacityProviderStrategy for the cluster is used. *

*

* If specifying a capacity provider that uses an Auto Scaling group, the capacity provider must already be * created. New capacity providers can be created with the CreateCapacityProvider API operation. *

*

* To use a AWS Fargate capacity provider, specify either the FARGATE or * FARGATE_SPOT capacity providers. The AWS Fargate capacity providers are available to all * accounts and only need to be associated with a cluster to be used. *

*

* The PutClusterCapacityProviders API operation is used to update the list of available capacity * providers for a cluster after the cluster is created. */ public List capacityProviderStrategy() { return capacityProviderStrategy; } /** *

* 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 in the Amazon Elastic Container Service Developer Guide. *

* * @return 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 in the Amazon Elastic Container Service Developer Guide. */ public String platformVersion() { return platformVersion; } /** *

* The name or full Amazon Resource Name (ARN) of the IAM role that allows Amazon ECS to make calls to your load * balancer on your behalf. This parameter is only permitted if you are using a load balancer with your service and * your task definition does not use the awsvpc network mode. If you specify the role * parameter, you must also specify a load balancer object with the loadBalancers parameter. *

* *

* If your account has already created the Amazon ECS service-linked role, that role is used by default for your * service unless you specify a role here. The service-linked role is required if your task definition uses the * awsvpc network mode or if the service is configured to use service discovery, an external deployment * controller, multiple target groups, or Elastic Inference accelerators in which case you should not specify a role * here. For more information, see Using * Service-Linked Roles for Amazon ECS in the Amazon Elastic Container Service Developer Guide. *

*
*

* If your specified role has a path other than /, then you must either specify the full role ARN (this * is recommended) or prefix the role name with the path. For example, if a role with the name bar has * a path of /foo/ then you would specify /foo/bar as the role name. For more information, * see Friendly Names and Paths in the IAM User Guide. *

* * @return The name or full Amazon Resource Name (ARN) of the IAM role that allows Amazon ECS to make calls to your * load balancer on your behalf. This parameter is only permitted if you are using a load balancer with your * service and your task definition does not use the awsvpc network mode. If you specify the * role parameter, you must also specify a load balancer object with the * loadBalancers parameter.

*

* If your account has already created the Amazon ECS service-linked role, that role is used by default for * your service unless you specify a role here. The service-linked role is required if your task definition * uses the awsvpc network mode or if the service is configured to use service discovery, an * external deployment controller, multiple target groups, or Elastic Inference accelerators in which case * you should not specify a role here. For more information, see Using * Service-Linked Roles for Amazon ECS in the Amazon Elastic Container Service Developer Guide. *

*
*

* If your specified role has a path other than /, then you must either specify the full role * ARN (this is recommended) or prefix the role name with the path. For example, if a role with the name * bar has a path of /foo/ then you would specify /foo/bar as the * role name. For more information, see Friendly Names and Paths in the IAM User Guide. */ public String role() { return role; } /** *

* Optional deployment parameters that control how many tasks run during the deployment and the ordering of stopping * and starting tasks. *

* * @return Optional deployment parameters that control how many tasks run during the deployment and the ordering of * stopping and starting tasks. */ public DeploymentConfiguration deploymentConfiguration() { return deploymentConfiguration; } /** * Returns true if the PlacementConstraints property was specified by the sender (it may be empty), or false if the * sender did not specify the value (it will be empty). For responses returned by the SDK, the sender is the AWS * service. */ public boolean hasPlacementConstraints() { return placementConstraints != null && !(placementConstraints instanceof SdkAutoConstructList); } /** *

* An array of placement constraint objects to use for tasks in your service. You can specify a maximum of 10 * constraints per task (this limit includes constraints in the task definition and those specified at runtime). *

*

* Attempts to modify the collection returned by this method will result in an UnsupportedOperationException. *

*

* You can use {@link #hasPlacementConstraints()} to see if a value was sent in this field. *

* * @return An array of placement constraint objects to use for tasks in your service. You can specify a maximum of * 10 constraints per task (this limit includes constraints in the task definition and those specified at * runtime). */ public List placementConstraints() { return placementConstraints; } /** * Returns true if the PlacementStrategy property was specified by the sender (it may be empty), or false if the * sender did not specify the value (it will be empty). For responses returned by the SDK, the sender is the AWS * service. */ public boolean hasPlacementStrategy() { return placementStrategy != null && !(placementStrategy instanceof SdkAutoConstructList); } /** *

* The placement strategy objects to use for tasks in your service. You can specify a maximum of five strategy rules * per service. *

*

* Attempts to modify the collection returned by this method will result in an UnsupportedOperationException. *

*

* You can use {@link #hasPlacementStrategy()} to see if a value was sent in this field. *

* * @return The placement strategy objects to use for tasks in your service. You can specify a maximum of five * strategy rules per service. */ public List placementStrategy() { return placementStrategy; } /** *

* The network configuration for the service. This parameter is required for task definitions that use the * awsvpc network mode to receive their own elastic network interface, and it is not supported for * other network modes. For more information, see Task Networking in * the Amazon Elastic Container Service Developer Guide. *

* * @return The network configuration for the service. This parameter is required for task definitions that use the * awsvpc network mode to receive their own elastic network interface, and it is not supported * for other network modes. For more information, see Task * Networking in the Amazon Elastic Container Service Developer Guide. */ public NetworkConfiguration networkConfiguration() { return networkConfiguration; } /** *

* The period of time, in seconds, that the Amazon ECS service scheduler should ignore unhealthy Elastic Load * Balancing target health checks after a task has first started. This is only used when your service is configured * to use a load balancer. If your service has a load balancer defined and you don't specify a health check grace * period value, the default value of 0 is used. *

*

* If your service's tasks take a while to start and respond to Elastic Load Balancing health checks, you can * specify a health check grace period of up to 2,147,483,647 seconds. During that time, the Amazon ECS service * scheduler ignores health check status. This grace period can prevent the service scheduler from marking tasks as * unhealthy and stopping them before they have time to come up. *

* * @return The period of time, in seconds, that the Amazon ECS service scheduler should ignore unhealthy Elastic * Load Balancing target health checks after a task has first started. This is only used when your service * is configured to use a load balancer. If your service has a load balancer defined and you don't specify a * health check grace period value, the default value of 0 is used.

*

* If your service's tasks take a while to start and respond to Elastic Load Balancing health checks, you * can specify a health check grace period of up to 2,147,483,647 seconds. During that time, the Amazon ECS * service scheduler ignores health check status. This grace period can prevent the service scheduler from * marking tasks as unhealthy and stopping them before they have time to come up. */ public Integer healthCheckGracePeriodSeconds() { return healthCheckGracePeriodSeconds; } /** *

* The scheduling strategy to use for the service. For more information, see Services. *

*

* There are two service scheduler strategies available: *

*
    *
  • *

    * REPLICA-The replica scheduling strategy places and maintains the desired number of tasks across your * cluster. By default, the service scheduler spreads tasks across Availability Zones. You can use task placement * strategies and constraints to customize task placement decisions. This scheduler strategy is required if the * service 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. The service scheduler also * evaluates the task placement constraints for running tasks and will stop tasks that do not meet the placement * constraints. When you're using this strategy, you don't need to specify a desired number of tasks, a task * placement strategy, or use Service Auto Scaling policies. *

    * *

    * Tasks using the Fargate launch type or the CODE_DEPLOY or EXTERNAL deployment * controller types don't support the DAEMON scheduling strategy. *

    *
  • *
*

* If the service returns an enum value that is not available in the current SDK version, * {@link #schedulingStrategy} will return {@link SchedulingStrategy#UNKNOWN_TO_SDK_VERSION}. The raw value returned * by the service is available from {@link #schedulingStrategyAsString}. *

* * @return The scheduling strategy to use for the service. For more information, see Services.

*

* There are two service scheduler strategies available: *

*
    *
  • *

    * REPLICA-The replica scheduling strategy places and maintains the desired number of tasks * across your cluster. By default, the service scheduler spreads tasks across Availability Zones. You can * use task placement strategies and constraints to customize task placement decisions. This scheduler * strategy is required if the service 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. The service * scheduler also evaluates the task placement constraints for running tasks and will stop tasks that do not * meet the placement constraints. When you're using this strategy, you don't need to specify a desired * number of tasks, a task placement strategy, or use Service Auto Scaling policies. *

    * *

    * Tasks using the Fargate launch type or the CODE_DEPLOY or EXTERNAL deployment * controller types don't support the DAEMON scheduling strategy. *

    *
  • * @see SchedulingStrategy */ public SchedulingStrategy schedulingStrategy() { return SchedulingStrategy.fromValue(schedulingStrategy); } /** *

    * The scheduling strategy to use for the service. For more information, see Services. *

    *

    * There are two service scheduler strategies available: *

    *
      *
    • *

      * REPLICA-The replica scheduling strategy places and maintains the desired number of tasks across your * cluster. By default, the service scheduler spreads tasks across Availability Zones. You can use task placement * strategies and constraints to customize task placement decisions. This scheduler strategy is required if the * service 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. The service scheduler also * evaluates the task placement constraints for running tasks and will stop tasks that do not meet the placement * constraints. When you're using this strategy, you don't need to specify a desired number of tasks, a task * placement strategy, or use Service Auto Scaling policies. *

      * *

      * Tasks using the Fargate launch type or the CODE_DEPLOY or EXTERNAL deployment * controller types don't support the DAEMON scheduling strategy. *

      *
    • *
    *

    * If the service returns an enum value that is not available in the current SDK version, * {@link #schedulingStrategy} will return {@link SchedulingStrategy#UNKNOWN_TO_SDK_VERSION}. The raw value returned * by the service is available from {@link #schedulingStrategyAsString}. *

    * * @return The scheduling strategy to use for the service. For more information, see Services.

    *

    * There are two service scheduler strategies available: *

    *
      *
    • *

      * REPLICA-The replica scheduling strategy places and maintains the desired number of tasks * across your cluster. By default, the service scheduler spreads tasks across Availability Zones. You can * use task placement strategies and constraints to customize task placement decisions. This scheduler * strategy is required if the service 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. The service * scheduler also evaluates the task placement constraints for running tasks and will stop tasks that do not * meet the placement constraints. When you're using this strategy, you don't need to specify a desired * number of tasks, a task placement strategy, or use Service Auto Scaling policies. *

      * *

      * Tasks using the Fargate launch type or the CODE_DEPLOY or EXTERNAL deployment * controller types don't support the DAEMON scheduling strategy. *

      *
    • * @see SchedulingStrategy */ public String schedulingStrategyAsString() { return schedulingStrategy; } /** *

      * The deployment controller to use for the service. *

      * * @return The deployment controller to use for the service. */ public DeploymentController deploymentController() { return deploymentController; } /** * Returns true if the Tags property was specified by the sender (it may be empty), or false if the sender did not * specify the value (it will be empty). For responses returned by the SDK, the sender is the AWS service. */ public boolean hasTags() { return tags != null && !(tags instanceof SdkAutoConstructList); } /** *

      * The metadata that you apply to the service to help you categorize and organize them. Each tag consists of a key * and an optional value, both of which you define. When a service is deleted, the tags are deleted as well. *

      *

      * The following basic restrictions apply to tags: *

      *
        *
      • *

        * Maximum number of tags per resource - 50 *

        *
      • *
      • *

        * For each resource, each tag key must be unique, and each tag key can have only one value. *

        *
      • *
      • *

        * Maximum key length - 128 Unicode characters in UTF-8 *

        *
      • *
      • *

        * Maximum value length - 256 Unicode characters in UTF-8 *

        *
      • *
      • *

        * If your tagging schema is used across multiple services and resources, remember that other services may have * restrictions on allowed characters. Generally allowed characters are: letters, numbers, and spaces representable * in UTF-8, and the following characters: + - = . _ : / @. *

        *
      • *
      • *

        * Tag keys and values are case-sensitive. *

        *
      • *
      • *

        * Do not use aws:, AWS:, or any upper or lowercase combination of such as a prefix for * either keys or values as it is reserved for AWS 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. *

        *
      • *
      *

      * Attempts to modify the collection returned by this method will result in an UnsupportedOperationException. *

      *

      * You can use {@link #hasTags()} to see if a value was sent in this field. *

      * * @return The metadata that you apply to the service to help you categorize and organize them. Each tag consists of * a key and an optional value, both of which you define. When a service is deleted, the tags are deleted as * well.

      *

      * The following basic restrictions apply to tags: *

      *
        *
      • *

        * Maximum number of tags per resource - 50 *

        *
      • *
      • *

        * For each resource, each tag key must be unique, and each tag key can have only one value. *

        *
      • *
      • *

        * Maximum key length - 128 Unicode characters in UTF-8 *

        *
      • *
      • *

        * Maximum value length - 256 Unicode characters in UTF-8 *

        *
      • *
      • *

        * If your tagging schema is used across multiple services and resources, remember that other services may * have restrictions on allowed characters. Generally allowed characters are: letters, numbers, and spaces * representable in UTF-8, and the following characters: + - = . _ : / @. *

        *
      • *
      • *

        * Tag keys and values are case-sensitive. *

        *
      • *
      • *

        * Do not use aws:, AWS:, or any upper or lowercase combination of such as a * prefix for either keys or values as it is reserved for AWS 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. *

        *
      • */ public List tags() { return tags; } /** *

        * Specifies whether to enable Amazon ECS managed tags for the tasks within the service. For more information, see * Tagging Your Amazon ECS * Resources in the Amazon Elastic Container Service Developer Guide. *

        * * @return Specifies whether to enable Amazon ECS managed tags for the tasks within the service. For more * information, see Tagging Your * Amazon ECS Resources in the Amazon Elastic Container Service Developer Guide. */ public Boolean enableECSManagedTags() { return enableECSManagedTags; } /** *

        * Specifies whether to propagate the tags from the task definition or the service to the tasks in the service. If * no value is specified, the tags are not propagated. Tags can only be propagated to the tasks within the service * during service creation. To add tags to a task after service creation, use the TagResource API action. *

        *

        * If the service returns an enum value that is not available in the current SDK version, {@link #propagateTags} * will return {@link PropagateTags#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is available from * {@link #propagateTagsAsString}. *

        * * @return Specifies whether to propagate the tags from the task definition or the service to the tasks in the * service. If no value is specified, the tags are not propagated. Tags can only be propagated to the tasks * within the service during service creation. To add tags to a task after service creation, use the * TagResource API action. * @see PropagateTags */ public PropagateTags propagateTags() { return PropagateTags.fromValue(propagateTags); } /** *

        * Specifies whether to propagate the tags from the task definition or the service to the tasks in the service. If * no value is specified, the tags are not propagated. Tags can only be propagated to the tasks within the service * during service creation. To add tags to a task after service creation, use the TagResource API action. *

        *

        * If the service returns an enum value that is not available in the current SDK version, {@link #propagateTags} * will return {@link PropagateTags#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is available from * {@link #propagateTagsAsString}. *

        * * @return Specifies whether to propagate the tags from the task definition or the service to the tasks in the * service. If no value is specified, the tags are not propagated. Tags can only be propagated to the tasks * within the service during service creation. To add tags to a task after service creation, use the * TagResource API action. * @see PropagateTags */ public String propagateTagsAsString() { return propagateTags; } @Override public Builder toBuilder() { return new BuilderImpl(this); } public static Builder builder() { return new BuilderImpl(); } public static Class serializableBuilderClass() { return BuilderImpl.class; } @Override public int hashCode() { int hashCode = 1; hashCode = 31 * hashCode + super.hashCode(); hashCode = 31 * hashCode + Objects.hashCode(cluster()); hashCode = 31 * hashCode + Objects.hashCode(serviceName()); hashCode = 31 * hashCode + Objects.hashCode(taskDefinition()); hashCode = 31 * hashCode + Objects.hashCode(hasLoadBalancers() ? loadBalancers() : null); hashCode = 31 * hashCode + Objects.hashCode(hasServiceRegistries() ? serviceRegistries() : null); hashCode = 31 * hashCode + Objects.hashCode(desiredCount()); hashCode = 31 * hashCode + Objects.hashCode(clientToken()); hashCode = 31 * hashCode + Objects.hashCode(launchTypeAsString()); hashCode = 31 * hashCode + Objects.hashCode(hasCapacityProviderStrategy() ? capacityProviderStrategy() : null); hashCode = 31 * hashCode + Objects.hashCode(platformVersion()); hashCode = 31 * hashCode + Objects.hashCode(role()); hashCode = 31 * hashCode + Objects.hashCode(deploymentConfiguration()); hashCode = 31 * hashCode + Objects.hashCode(hasPlacementConstraints() ? placementConstraints() : null); hashCode = 31 * hashCode + Objects.hashCode(hasPlacementStrategy() ? placementStrategy() : null); hashCode = 31 * hashCode + Objects.hashCode(networkConfiguration()); hashCode = 31 * hashCode + Objects.hashCode(healthCheckGracePeriodSeconds()); hashCode = 31 * hashCode + Objects.hashCode(schedulingStrategyAsString()); hashCode = 31 * hashCode + Objects.hashCode(deploymentController()); hashCode = 31 * hashCode + Objects.hashCode(hasTags() ? tags() : null); hashCode = 31 * hashCode + Objects.hashCode(enableECSManagedTags()); hashCode = 31 * hashCode + Objects.hashCode(propagateTagsAsString()); return hashCode; } @Override public boolean equals(Object obj) { return super.equals(obj) && equalsBySdkFields(obj); } @Override public boolean equalsBySdkFields(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (!(obj instanceof CreateServiceRequest)) { return false; } CreateServiceRequest other = (CreateServiceRequest) obj; return Objects.equals(cluster(), other.cluster()) && Objects.equals(serviceName(), other.serviceName()) && Objects.equals(taskDefinition(), other.taskDefinition()) && hasLoadBalancers() == other.hasLoadBalancers() && Objects.equals(loadBalancers(), other.loadBalancers()) && hasServiceRegistries() == other.hasServiceRegistries() && Objects.equals(serviceRegistries(), other.serviceRegistries()) && Objects.equals(desiredCount(), other.desiredCount()) && Objects.equals(clientToken(), other.clientToken()) && Objects.equals(launchTypeAsString(), other.launchTypeAsString()) && hasCapacityProviderStrategy() == other.hasCapacityProviderStrategy() && Objects.equals(capacityProviderStrategy(), other.capacityProviderStrategy()) && Objects.equals(platformVersion(), other.platformVersion()) && Objects.equals(role(), other.role()) && Objects.equals(deploymentConfiguration(), other.deploymentConfiguration()) && hasPlacementConstraints() == other.hasPlacementConstraints() && Objects.equals(placementConstraints(), other.placementConstraints()) && hasPlacementStrategy() == other.hasPlacementStrategy() && Objects.equals(placementStrategy(), other.placementStrategy()) && Objects.equals(networkConfiguration(), other.networkConfiguration()) && Objects.equals(healthCheckGracePeriodSeconds(), other.healthCheckGracePeriodSeconds()) && Objects.equals(schedulingStrategyAsString(), other.schedulingStrategyAsString()) && Objects.equals(deploymentController(), other.deploymentController()) && hasTags() == other.hasTags() && Objects.equals(tags(), other.tags()) && Objects.equals(enableECSManagedTags(), other.enableECSManagedTags()) && Objects.equals(propagateTagsAsString(), other.propagateTagsAsString()); } /** * Returns a string representation of this object. This is useful for testing and debugging. Sensitive data will be * redacted from this string using a placeholder value. */ @Override public String toString() { return ToString.builder("CreateServiceRequest").add("Cluster", cluster()).add("ServiceName", serviceName()) .add("TaskDefinition", taskDefinition()).add("LoadBalancers", hasLoadBalancers() ? loadBalancers() : null) .add("ServiceRegistries", hasServiceRegistries() ? serviceRegistries() : null) .add("DesiredCount", desiredCount()).add("ClientToken", clientToken()).add("LaunchType", launchTypeAsString()) .add("CapacityProviderStrategy", hasCapacityProviderStrategy() ? capacityProviderStrategy() : null) .add("PlatformVersion", platformVersion()).add("Role", role()) .add("DeploymentConfiguration", deploymentConfiguration()) .add("PlacementConstraints", hasPlacementConstraints() ? placementConstraints() : null) .add("PlacementStrategy", hasPlacementStrategy() ? placementStrategy() : null) .add("NetworkConfiguration", networkConfiguration()) .add("HealthCheckGracePeriodSeconds", healthCheckGracePeriodSeconds()) .add("SchedulingStrategy", schedulingStrategyAsString()).add("DeploymentController", deploymentController()) .add("Tags", hasTags() ? tags() : null).add("EnableECSManagedTags", enableECSManagedTags()) .add("PropagateTags", propagateTagsAsString()).build(); } public Optional getValueForField(String fieldName, Class clazz) { switch (fieldName) { case "cluster": return Optional.ofNullable(clazz.cast(cluster())); case "serviceName": return Optional.ofNullable(clazz.cast(serviceName())); case "taskDefinition": return Optional.ofNullable(clazz.cast(taskDefinition())); case "loadBalancers": return Optional.ofNullable(clazz.cast(loadBalancers())); case "serviceRegistries": return Optional.ofNullable(clazz.cast(serviceRegistries())); case "desiredCount": return Optional.ofNullable(clazz.cast(desiredCount())); case "clientToken": return Optional.ofNullable(clazz.cast(clientToken())); case "launchType": return Optional.ofNullable(clazz.cast(launchTypeAsString())); case "capacityProviderStrategy": return Optional.ofNullable(clazz.cast(capacityProviderStrategy())); case "platformVersion": return Optional.ofNullable(clazz.cast(platformVersion())); case "role": return Optional.ofNullable(clazz.cast(role())); case "deploymentConfiguration": return Optional.ofNullable(clazz.cast(deploymentConfiguration())); case "placementConstraints": return Optional.ofNullable(clazz.cast(placementConstraints())); case "placementStrategy": return Optional.ofNullable(clazz.cast(placementStrategy())); case "networkConfiguration": return Optional.ofNullable(clazz.cast(networkConfiguration())); case "healthCheckGracePeriodSeconds": return Optional.ofNullable(clazz.cast(healthCheckGracePeriodSeconds())); case "schedulingStrategy": return Optional.ofNullable(clazz.cast(schedulingStrategyAsString())); case "deploymentController": return Optional.ofNullable(clazz.cast(deploymentController())); case "tags": return Optional.ofNullable(clazz.cast(tags())); case "enableECSManagedTags": return Optional.ofNullable(clazz.cast(enableECSManagedTags())); case "propagateTags": return Optional.ofNullable(clazz.cast(propagateTagsAsString())); default: return Optional.empty(); } } @Override public List> sdkFields() { return SDK_FIELDS; } private static Function getter(Function g) { return obj -> g.apply((CreateServiceRequest) obj); } private static BiConsumer setter(BiConsumer s) { return (obj, val) -> s.accept((Builder) obj, val); } public interface Builder extends EcsRequest.Builder, SdkPojo, CopyableBuilder { /** *

        * The short name or full Amazon Resource Name (ARN) of the cluster on which to run your service. If you do not * specify a cluster, the default cluster is assumed. *

        * * @param cluster * The short name or full Amazon Resource Name (ARN) of the cluster on which to run your service. If you * do not specify a cluster, the default cluster is assumed. * @return Returns a reference to this object so that method calls can be chained together. */ Builder cluster(String cluster); /** *

        * The name of your service. Up to 255 letters (uppercase and lowercase), numbers, and hyphens are allowed. * Service names must be unique within a cluster, but you can have similarly named services in multiple clusters * within a Region or across multiple Regions. *

        * * @param serviceName * The name of your service. Up to 255 letters (uppercase and lowercase), numbers, and hyphens are * allowed. Service names must be unique within a cluster, but you can have similarly named services in * multiple clusters within a Region or across multiple Regions. * @return Returns a reference to this object so that method calls can be chained together. */ Builder serviceName(String serviceName); /** *

        * The family and revision (family:revision) or full ARN of the task * definition to run in your service. If a revision is not specified, the latest * ACTIVE revision is used. *

        *

        * A task definition must be specified if the service is using the ECS deployment controller. *

        * * @param taskDefinition * The family and revision (family:revision) or full ARN of the * task definition to run in your service. If a revision is not specified, the latest * ACTIVE revision is used.

        *

        * A task definition must be specified if the service is using the ECS deployment * controller. * @return Returns a reference to this object so that method calls can be chained together. */ Builder taskDefinition(String taskDefinition); /** *

        * A load balancer object representing the load balancers to use with your service. For more information, see Service Load * Balancing in the Amazon Elastic Container Service Developer Guide. *

        *

        * If the service is using the rolling update (ECS) deployment controller and using either an * Application Load Balancer or Network Load Balancer, you can specify multiple target groups to attach to the * service. The service-linked role is required for services that make use of multiple target groups. For more * information, see Using * Service-Linked Roles for Amazon ECS in the Amazon Elastic Container Service Developer Guide. *

        *

        * If the service is using the CODE_DEPLOY deployment controller, the service is required to use * either an Application Load Balancer or Network Load Balancer. When creating an AWS CodeDeploy deployment * group, you specify two target groups (referred to as a targetGroupPair). During a deployment, * AWS CodeDeploy determines which task set in your service has the status PRIMARY and associates * one target group with it, and then associates the other target group with the replacement task set. The load * balancer can also have up to two listeners: a required listener for production traffic and an optional * listener that allows you perform validation tests with Lambda functions before routing production traffic to * it. *

        *

        * After you create a service using the ECS deployment controller, the load balancer name or target * group ARN, container name, and container port specified in the service definition are immutable. If you are * using the CODE_DEPLOY deployment controller, these values can be changed when updating the * service. *

        *

        * For Application Load Balancers and Network Load Balancers, this object must contain the load balancer target * group ARN, the container name (as it appears in a container definition), and the container port to access * from the load balancer. When a task from this service is placed on a container instance, the container * instance and port combination is registered as a target in the target group specified here. *

        *

        * For Classic Load Balancers, this object must contain the load balancer name, the container name (as it * appears in a container definition), and the container port to access from the load balancer. When a task from * this service is placed on a container instance, the container instance is registered with the load balancer * specified here. *

        *

        * Services with tasks that use the awsvpc network mode (for example, those with the Fargate launch * type) only support Application Load Balancers and Network Load Balancers. Classic Load Balancers are not * supported. Also, when you create any target groups for these services, you must choose ip as the * target type, not instance, because tasks that use the awsvpc network mode are * associated with an elastic network interface, not an Amazon EC2 instance. *

        * * @param loadBalancers * A load balancer object representing the load balancers to use with your service. For more information, * see * Service Load Balancing in the Amazon Elastic Container Service Developer Guide.

        *

        * If the service is using the rolling update (ECS) deployment controller and using either * an Application Load Balancer or Network Load Balancer, you can specify multiple target groups to * attach to the service. The service-linked role is required for services that make use of multiple * target groups. For more information, see Using Service-Linked Roles for Amazon ECS in the Amazon Elastic Container Service Developer * Guide. *

        *

        * If the service is using the CODE_DEPLOY deployment controller, the service is required to * use either an Application Load Balancer or Network Load Balancer. When creating an AWS CodeDeploy * deployment group, you specify two target groups (referred to as a targetGroupPair). * During a deployment, AWS CodeDeploy determines which task set in your service has the status * PRIMARY and associates one target group with it, and then associates the other target * group with the replacement task set. The load balancer can also have up to two listeners: a required * listener for production traffic and an optional listener that allows you perform validation tests with * Lambda functions before routing production traffic to it. *

        *

        * After you create a service using the ECS deployment controller, the load balancer name or * target group ARN, container name, and container port specified in the service definition are * immutable. If you are using the CODE_DEPLOY deployment controller, these values can be * changed when updating the service. *

        *

        * For Application Load Balancers and Network Load Balancers, this object must contain the load balancer * target group ARN, the container name (as it appears in a container definition), and the container port * to access from the load balancer. When a task from this service is placed on a container instance, the * container instance and port combination is registered as a target in the target group specified here. *

        *

        * For Classic Load Balancers, this object must contain the load balancer name, the container name (as it * appears in a container definition), and the container port to access from the load balancer. When a * task from this service is placed on a container instance, the container instance is registered with * the load balancer specified here. *

        *

        * Services with tasks that use the awsvpc network mode (for example, those with the Fargate * launch type) only support Application Load Balancers and Network Load Balancers. Classic Load * Balancers are not supported. Also, when you create any target groups for these services, you must * choose ip as the target type, not instance, because tasks that use the * awsvpc network mode are associated with an elastic network interface, not an Amazon EC2 * instance. * @return Returns a reference to this object so that method calls can be chained together. */ Builder loadBalancers(Collection loadBalancers); /** *

        * A load balancer object representing the load balancers to use with your service. For more information, see Service Load * Balancing in the Amazon Elastic Container Service Developer Guide. *

        *

        * If the service is using the rolling update (ECS) deployment controller and using either an * Application Load Balancer or Network Load Balancer, you can specify multiple target groups to attach to the * service. The service-linked role is required for services that make use of multiple target groups. For more * information, see Using * Service-Linked Roles for Amazon ECS in the Amazon Elastic Container Service Developer Guide. *

        *

        * If the service is using the CODE_DEPLOY deployment controller, the service is required to use * either an Application Load Balancer or Network Load Balancer. When creating an AWS CodeDeploy deployment * group, you specify two target groups (referred to as a targetGroupPair). During a deployment, * AWS CodeDeploy determines which task set in your service has the status PRIMARY and associates * one target group with it, and then associates the other target group with the replacement task set. The load * balancer can also have up to two listeners: a required listener for production traffic and an optional * listener that allows you perform validation tests with Lambda functions before routing production traffic to * it. *

        *

        * After you create a service using the ECS deployment controller, the load balancer name or target * group ARN, container name, and container port specified in the service definition are immutable. If you are * using the CODE_DEPLOY deployment controller, these values can be changed when updating the * service. *

        *

        * For Application Load Balancers and Network Load Balancers, this object must contain the load balancer target * group ARN, the container name (as it appears in a container definition), and the container port to access * from the load balancer. When a task from this service is placed on a container instance, the container * instance and port combination is registered as a target in the target group specified here. *

        *

        * For Classic Load Balancers, this object must contain the load balancer name, the container name (as it * appears in a container definition), and the container port to access from the load balancer. When a task from * this service is placed on a container instance, the container instance is registered with the load balancer * specified here. *

        *

        * Services with tasks that use the awsvpc network mode (for example, those with the Fargate launch * type) only support Application Load Balancers and Network Load Balancers. Classic Load Balancers are not * supported. Also, when you create any target groups for these services, you must choose ip as the * target type, not instance, because tasks that use the awsvpc network mode are * associated with an elastic network interface, not an Amazon EC2 instance. *

        * * @param loadBalancers * A load balancer object representing the load balancers to use with your service. For more information, * see * Service Load Balancing in the Amazon Elastic Container Service Developer Guide.

        *

        * If the service is using the rolling update (ECS) deployment controller and using either * an Application Load Balancer or Network Load Balancer, you can specify multiple target groups to * attach to the service. The service-linked role is required for services that make use of multiple * target groups. For more information, see Using Service-Linked Roles for Amazon ECS in the Amazon Elastic Container Service Developer * Guide. *

        *

        * If the service is using the CODE_DEPLOY deployment controller, the service is required to * use either an Application Load Balancer or Network Load Balancer. When creating an AWS CodeDeploy * deployment group, you specify two target groups (referred to as a targetGroupPair). * During a deployment, AWS CodeDeploy determines which task set in your service has the status * PRIMARY and associates one target group with it, and then associates the other target * group with the replacement task set. The load balancer can also have up to two listeners: a required * listener for production traffic and an optional listener that allows you perform validation tests with * Lambda functions before routing production traffic to it. *

        *

        * After you create a service using the ECS deployment controller, the load balancer name or * target group ARN, container name, and container port specified in the service definition are * immutable. If you are using the CODE_DEPLOY deployment controller, these values can be * changed when updating the service. *

        *

        * For Application Load Balancers and Network Load Balancers, this object must contain the load balancer * target group ARN, the container name (as it appears in a container definition), and the container port * to access from the load balancer. When a task from this service is placed on a container instance, the * container instance and port combination is registered as a target in the target group specified here. *

        *

        * For Classic Load Balancers, this object must contain the load balancer name, the container name (as it * appears in a container definition), and the container port to access from the load balancer. When a * task from this service is placed on a container instance, the container instance is registered with * the load balancer specified here. *

        *

        * Services with tasks that use the awsvpc network mode (for example, those with the Fargate * launch type) only support Application Load Balancers and Network Load Balancers. Classic Load * Balancers are not supported. Also, when you create any target groups for these services, you must * choose ip as the target type, not instance, because tasks that use the * awsvpc network mode are associated with an elastic network interface, not an Amazon EC2 * instance. * @return Returns a reference to this object so that method calls can be chained together. */ Builder loadBalancers(LoadBalancer... loadBalancers); /** *

        * A load balancer object representing the load balancers to use with your service. For more information, see Service Load * Balancing in the Amazon Elastic Container Service Developer Guide. *

        *

        * If the service is using the rolling update (ECS) deployment controller and using either an * Application Load Balancer or Network Load Balancer, you can specify multiple target groups to attach to the * service. The service-linked role is required for services that make use of multiple target groups. For more * information, see Using * Service-Linked Roles for Amazon ECS in the Amazon Elastic Container Service Developer Guide. *

        *

        * If the service is using the CODE_DEPLOY deployment controller, the service is required to use * either an Application Load Balancer or Network Load Balancer. When creating an AWS CodeDeploy deployment * group, you specify two target groups (referred to as a targetGroupPair). During a deployment, * AWS CodeDeploy determines which task set in your service has the status PRIMARY and associates * one target group with it, and then associates the other target group with the replacement task set. The load * balancer can also have up to two listeners: a required listener for production traffic and an optional * listener that allows you perform validation tests with Lambda functions before routing production traffic to * it. *

        *

        * After you create a service using the ECS deployment controller, the load balancer name or target * group ARN, container name, and container port specified in the service definition are immutable. If you are * using the CODE_DEPLOY deployment controller, these values can be changed when updating the * service. *

        *

        * For Application Load Balancers and Network Load Balancers, this object must contain the load balancer target * group ARN, the container name (as it appears in a container definition), and the container port to access * from the load balancer. When a task from this service is placed on a container instance, the container * instance and port combination is registered as a target in the target group specified here. *

        *

        * For Classic Load Balancers, this object must contain the load balancer name, the container name (as it * appears in a container definition), and the container port to access from the load balancer. When a task from * this service is placed on a container instance, the container instance is registered with the load balancer * specified here. *

        *

        * Services with tasks that use the awsvpc network mode (for example, those with the Fargate launch * type) only support Application Load Balancers and Network Load Balancers. Classic Load Balancers are not * supported. Also, when you create any target groups for these services, you must choose ip as the * target type, not instance, because tasks that use the awsvpc network mode are * associated with an elastic network interface, not an Amazon EC2 instance. *

        * This is a convenience that creates an instance of the {@link List.Builder} avoiding the need to * create one manually via {@link List#builder()}. * * When the {@link Consumer} completes, {@link List.Builder#build()} is called immediately and its * result is passed to {@link #loadBalancers(List)}. * * @param loadBalancers * a consumer that will call methods on {@link List.Builder} * @return Returns a reference to this object so that method calls can be chained together. * @see #loadBalancers(List) */ Builder loadBalancers(Consumer... loadBalancers); /** *

        * The details of the service discovery registries to assign to this service. For more information, see Service * Discovery. *

        * *

        * Service discovery is supported for Fargate tasks if you are using platform version v1.1.0 or later. For more * information, see AWS Fargate * Platform Versions. *

        *
        * * @param serviceRegistries * The details of the service discovery registries to assign to this service. For more information, see * Service * Discovery.

        *

        * Service discovery is supported for Fargate tasks if you are using platform version v1.1.0 or later. * For more information, see AWS Fargate * Platform Versions. *

        * @return Returns a reference to this object so that method calls can be chained together. */ Builder serviceRegistries(Collection serviceRegistries); /** *

        * The details of the service discovery registries to assign to this service. For more information, see Service * Discovery. *

        * *

        * Service discovery is supported for Fargate tasks if you are using platform version v1.1.0 or later. For more * information, see AWS Fargate * Platform Versions. *

        *
        * * @param serviceRegistries * The details of the service discovery registries to assign to this service. For more information, see * Service * Discovery.

        *

        * Service discovery is supported for Fargate tasks if you are using platform version v1.1.0 or later. * For more information, see AWS Fargate * Platform Versions. *

        * @return Returns a reference to this object so that method calls can be chained together. */ Builder serviceRegistries(ServiceRegistry... serviceRegistries); /** *

        * The details of the service discovery registries to assign to this service. For more information, see Service * Discovery. *

        * *

        * Service discovery is supported for Fargate tasks if you are using platform version v1.1.0 or later. For more * information, see AWS Fargate * Platform Versions. *

        *
        This is a convenience that creates an instance of the {@link List.Builder} avoiding * the need to create one manually via {@link List#builder()}. * * When the {@link Consumer} completes, {@link List.Builder#build()} is called immediately and * its result is passed to {@link #serviceRegistries(List)}. * * @param serviceRegistries * a consumer that will call methods on {@link List.Builder} * @return Returns a reference to this object so that method calls can be chained together. * @see #serviceRegistries(List) */ Builder serviceRegistries(Consumer... serviceRegistries); /** *

        * The number of instantiations of the specified task definition to place and keep running on your cluster. *

        *

        * This is required if schedulingStrategy is REPLICA or is not specified. If * schedulingStrategy is DAEMON then this is not required. *

        * * @param desiredCount * The number of instantiations of the specified task definition to place and keep running on your * cluster.

        *

        * This is required if schedulingStrategy is REPLICA or is not specified. If * schedulingStrategy is DAEMON then this is not required. * @return Returns a reference to this object so that method calls can be chained together. */ Builder desiredCount(Integer desiredCount); /** *

        * Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Up to 32 ASCII * characters are allowed. *

        * * @param clientToken * Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Up to 32 * ASCII characters are allowed. * @return Returns a reference to this object so that method calls can be chained together. */ Builder clientToken(String clientToken); /** *

        * The launch type on which to run your service. For more information, see Amazon ECS Launch * Types in the Amazon Elastic Container Service Developer Guide. *

        *

        * If a launchType is specified, the capacityProviderStrategy parameter must be * omitted. *

        * * @param launchType * The launch type on which to run your service. For more information, see Amazon ECS Launch * Types in the Amazon Elastic Container Service Developer Guide.

        *

        * If a launchType is specified, the capacityProviderStrategy parameter must be * omitted. * @see LaunchType * @return Returns a reference to this object so that method calls can be chained together. * @see LaunchType */ Builder launchType(String launchType); /** *

        * The launch type on which to run your service. For more information, see Amazon ECS Launch * Types in the Amazon Elastic Container Service Developer Guide. *

        *

        * If a launchType is specified, the capacityProviderStrategy parameter must be * omitted. *

        * * @param launchType * The launch type on which to run your service. For more information, see Amazon ECS Launch * Types in the Amazon Elastic Container Service Developer Guide.

        *

        * If a launchType is specified, the capacityProviderStrategy parameter must be * omitted. * @see LaunchType * @return Returns a reference to this object so that method calls can be chained together. * @see LaunchType */ Builder launchType(LaunchType launchType); /** *

        * The capacity provider strategy to use for the service. *

        *

        * A capacity provider strategy consists of one or more capacity providers along with the base and * weight to assign to them. A capacity provider must be associated with the cluster to be used in * a capacity provider strategy. The PutClusterCapacityProviders API is used to associate a capacity * provider with a cluster. Only capacity providers with an ACTIVE or UPDATING status * can be used. *

        *

        * If a capacityProviderStrategy is specified, the launchType parameter must be * omitted. If no capacityProviderStrategy or launchType is specified, the * defaultCapacityProviderStrategy for the cluster is used. *

        *

        * If specifying a capacity provider that uses an Auto Scaling group, the capacity provider must already be * created. New capacity providers can be created with the CreateCapacityProvider API operation. *

        *

        * To use a AWS Fargate capacity provider, specify either the FARGATE or FARGATE_SPOT * capacity providers. The AWS Fargate capacity providers are available to all accounts and only need to be * associated with a cluster to be used. *

        *

        * The PutClusterCapacityProviders API operation is used to update the list of available capacity * providers for a cluster after the cluster is created. *

        * * @param capacityProviderStrategy * The capacity provider strategy to use for the service.

        *

        * A capacity provider strategy consists of one or more capacity providers along with the * base and weight to assign to them. A capacity provider must be associated * with the cluster to be used in a capacity provider strategy. The PutClusterCapacityProviders * API is used to associate a capacity provider with a cluster. Only capacity providers with an * ACTIVE or UPDATING status can be used. *

        *

        * If a capacityProviderStrategy is specified, the launchType parameter must be * omitted. If no capacityProviderStrategy or launchType is specified, the * defaultCapacityProviderStrategy for the cluster is used. *

        *

        * If specifying a capacity provider that uses an Auto Scaling group, the capacity provider must already * be created. New capacity providers can be created with the CreateCapacityProvider API * operation. *

        *

        * To use a AWS Fargate capacity provider, specify either the FARGATE or * FARGATE_SPOT capacity providers. The AWS Fargate capacity providers are available to all * accounts and only need to be associated with a cluster to be used. *

        *

        * The PutClusterCapacityProviders API operation is used to update the list of available capacity * providers for a cluster after the cluster is created. * @return Returns a reference to this object so that method calls can be chained together. */ Builder capacityProviderStrategy(Collection capacityProviderStrategy); /** *

        * The capacity provider strategy to use for the service. *

        *

        * A capacity provider strategy consists of one or more capacity providers along with the base and * weight to assign to them. A capacity provider must be associated with the cluster to be used in * a capacity provider strategy. The PutClusterCapacityProviders API is used to associate a capacity * provider with a cluster. Only capacity providers with an ACTIVE or UPDATING status * can be used. *

        *

        * If a capacityProviderStrategy is specified, the launchType parameter must be * omitted. If no capacityProviderStrategy or launchType is specified, the * defaultCapacityProviderStrategy for the cluster is used. *

        *

        * If specifying a capacity provider that uses an Auto Scaling group, the capacity provider must already be * created. New capacity providers can be created with the CreateCapacityProvider API operation. *

        *

        * To use a AWS Fargate capacity provider, specify either the FARGATE or FARGATE_SPOT * capacity providers. The AWS Fargate capacity providers are available to all accounts and only need to be * associated with a cluster to be used. *

        *

        * The PutClusterCapacityProviders API operation is used to update the list of available capacity * providers for a cluster after the cluster is created. *

        * * @param capacityProviderStrategy * The capacity provider strategy to use for the service.

        *

        * A capacity provider strategy consists of one or more capacity providers along with the * base and weight to assign to them. A capacity provider must be associated * with the cluster to be used in a capacity provider strategy. The PutClusterCapacityProviders * API is used to associate a capacity provider with a cluster. Only capacity providers with an * ACTIVE or UPDATING status can be used. *

        *

        * If a capacityProviderStrategy is specified, the launchType parameter must be * omitted. If no capacityProviderStrategy or launchType is specified, the * defaultCapacityProviderStrategy for the cluster is used. *

        *

        * If specifying a capacity provider that uses an Auto Scaling group, the capacity provider must already * be created. New capacity providers can be created with the CreateCapacityProvider API * operation. *

        *

        * To use a AWS Fargate capacity provider, specify either the FARGATE or * FARGATE_SPOT capacity providers. The AWS Fargate capacity providers are available to all * accounts and only need to be associated with a cluster to be used. *

        *

        * The PutClusterCapacityProviders API operation is used to update the list of available capacity * providers for a cluster after the cluster is created. * @return Returns a reference to this object so that method calls can be chained together. */ Builder capacityProviderStrategy(CapacityProviderStrategyItem... capacityProviderStrategy); /** *

        * The capacity provider strategy to use for the service. *

        *

        * A capacity provider strategy consists of one or more capacity providers along with the base and * weight to assign to them. A capacity provider must be associated with the cluster to be used in * a capacity provider strategy. The PutClusterCapacityProviders API is used to associate a capacity * provider with a cluster. Only capacity providers with an ACTIVE or UPDATING status * can be used. *

        *

        * If a capacityProviderStrategy is specified, the launchType parameter must be * omitted. If no capacityProviderStrategy or launchType is specified, the * defaultCapacityProviderStrategy for the cluster is used. *

        *

        * If specifying a capacity provider that uses an Auto Scaling group, the capacity provider must already be * created. New capacity providers can be created with the CreateCapacityProvider API operation. *

        *

        * To use a AWS Fargate capacity provider, specify either the FARGATE or FARGATE_SPOT * capacity providers. The AWS Fargate capacity providers are available to all accounts and only need to be * associated with a cluster to be used. *

        *

        * The PutClusterCapacityProviders API operation is used to update the list of available capacity * providers for a cluster after the cluster is created. *

        * This is a convenience that creates an instance of the {@link List.Builder} * avoiding the need to create one manually via {@link List#builder()}. * * When the {@link Consumer} completes, {@link List.Builder#build()} is called * immediately and its result is passed to {@link #capacityProviderStrategy(List)} * . * * @param capacityProviderStrategy * a consumer that will call methods on {@link List.Builder} * @return Returns a reference to this object so that method calls can be chained together. * @see #capacityProviderStrategy(List) */ Builder capacityProviderStrategy(Consumer... capacityProviderStrategy); /** *

        * 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 in the Amazon Elastic Container Service Developer Guide. *

        * * @param platformVersion * 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 in the Amazon Elastic Container Service Developer Guide. * @return Returns a reference to this object so that method calls can be chained together. */ Builder platformVersion(String platformVersion); /** *

        * The name or full Amazon Resource Name (ARN) of the IAM role that allows Amazon ECS to make calls to your load * balancer on your behalf. This parameter is only permitted if you are using a load balancer with your service * and your task definition does not use the awsvpc network mode. If you specify the * role parameter, you must also specify a load balancer object with the loadBalancers * parameter. *

        * *

        * If your account has already created the Amazon ECS service-linked role, that role is used by default for your * service unless you specify a role here. The service-linked role is required if your task definition uses the * awsvpc network mode or if the service is configured to use service discovery, an external * deployment controller, multiple target groups, or Elastic Inference accelerators in which case you should not * specify a role here. For more information, see Using * Service-Linked Roles for Amazon ECS in the Amazon Elastic Container Service Developer Guide. *

        *
        *

        * If your specified role has a path other than /, then you must either specify the full role ARN * (this is recommended) or prefix the role name with the path. For example, if a role with the name * bar has a path of /foo/ then you would specify /foo/bar as the role * name. For more information, see Friendly Names and Paths in the IAM User Guide. *

        * * @param role * The name or full Amazon Resource Name (ARN) of the IAM role that allows Amazon ECS to make calls to * your load balancer on your behalf. This parameter is only permitted if you are using a load balancer * with your service and your task definition does not use the awsvpc network mode. If you * specify the role parameter, you must also specify a load balancer object with the * loadBalancers parameter.

        *

        * If your account has already created the Amazon ECS service-linked role, that role is used by default * for your service unless you specify a role here. The service-linked role is required if your task * definition uses the awsvpc network mode or if the service is configured to use service * discovery, an external deployment controller, multiple target groups, or Elastic Inference * accelerators in which case you should not specify a role here. For more information, see Using Service-Linked Roles for Amazon ECS in the Amazon Elastic Container Service Developer * Guide. *

        *
        *

        * If your specified role has a path other than /, then you must either specify the full * role ARN (this is recommended) or prefix the role name with the path. For example, if a role with the * name bar has a path of /foo/ then you would specify /foo/bar as * the role name. For more information, see Friendly Names and Paths in the IAM User Guide. * @return Returns a reference to this object so that method calls can be chained together. */ Builder role(String role); /** *

        * Optional deployment parameters that control how many tasks run during the deployment and the ordering of * stopping and starting tasks. *

        * * @param deploymentConfiguration * Optional deployment parameters that control how many tasks run during the deployment and the ordering * of stopping and starting tasks. * @return Returns a reference to this object so that method calls can be chained together. */ Builder deploymentConfiguration(DeploymentConfiguration deploymentConfiguration); /** *

        * Optional deployment parameters that control how many tasks run during the deployment and the ordering of * stopping and starting tasks. *

        * This is a convenience that creates an instance of the {@link DeploymentConfiguration.Builder} avoiding the * need to create one manually via {@link DeploymentConfiguration#builder()}. * * When the {@link Consumer} completes, {@link DeploymentConfiguration.Builder#build()} is called immediately * and its result is passed to {@link #deploymentConfiguration(DeploymentConfiguration)}. * * @param deploymentConfiguration * a consumer that will call methods on {@link DeploymentConfiguration.Builder} * @return Returns a reference to this object so that method calls can be chained together. * @see #deploymentConfiguration(DeploymentConfiguration) */ default Builder deploymentConfiguration(Consumer deploymentConfiguration) { return deploymentConfiguration(DeploymentConfiguration.builder().applyMutation(deploymentConfiguration).build()); } /** *

        * An array of placement constraint objects to use for tasks in your service. You can specify a maximum of 10 * constraints per task (this limit includes constraints in the task definition and those specified at runtime). *

        * * @param placementConstraints * An array of placement constraint objects to use for tasks in your service. You can specify a maximum * of 10 constraints per task (this limit includes constraints in the task definition and those specified * at runtime). * @return Returns a reference to this object so that method calls can be chained together. */ Builder placementConstraints(Collection placementConstraints); /** *

        * An array of placement constraint objects to use for tasks in your service. You can specify a maximum of 10 * constraints per task (this limit includes constraints in the task definition and those specified at runtime). *

        * * @param placementConstraints * An array of placement constraint objects to use for tasks in your service. You can specify a maximum * of 10 constraints per task (this limit includes constraints in the task definition and those specified * at runtime). * @return Returns a reference to this object so that method calls can be chained together. */ Builder placementConstraints(PlacementConstraint... placementConstraints); /** *

        * An array of placement constraint objects to use for tasks in your service. You can specify a maximum of 10 * constraints per task (this limit includes constraints in the task definition and those specified at runtime). *

        * This is a convenience that creates an instance of the {@link List.Builder} avoiding the * need to create one manually via {@link List#builder()}. * * When the {@link Consumer} completes, {@link List.Builder#build()} is called immediately * and its result is passed to {@link #placementConstraints(List)}. * * @param placementConstraints * a consumer that will call methods on {@link List.Builder} * @return Returns a reference to this object so that method calls can be chained together. * @see #placementConstraints(List) */ Builder placementConstraints(Consumer... placementConstraints); /** *

        * The placement strategy objects to use for tasks in your service. You can specify a maximum of five strategy * rules per service. *

        * * @param placementStrategy * The placement strategy objects to use for tasks in your service. You can specify a maximum of five * strategy rules per service. * @return Returns a reference to this object so that method calls can be chained together. */ Builder placementStrategy(Collection placementStrategy); /** *

        * The placement strategy objects to use for tasks in your service. You can specify a maximum of five strategy * rules per service. *

        * * @param placementStrategy * The placement strategy objects to use for tasks in your service. You can specify a maximum of five * strategy rules per service. * @return Returns a reference to this object so that method calls can be chained together. */ Builder placementStrategy(PlacementStrategy... placementStrategy); /** *

        * The placement strategy objects to use for tasks in your service. You can specify a maximum of five strategy * rules per service. *

        * This is a convenience that creates an instance of the {@link List.Builder} avoiding the * need to create one manually via {@link List#builder()}. * * When the {@link Consumer} completes, {@link List.Builder#build()} is called immediately * and its result is passed to {@link #placementStrategy(List)}. * * @param placementStrategy * a consumer that will call methods on {@link List.Builder} * @return Returns a reference to this object so that method calls can be chained together. * @see #placementStrategy(List) */ Builder placementStrategy(Consumer... placementStrategy); /** *

        * The network configuration for the service. This parameter is required for task definitions that use the * awsvpc network mode to receive their own elastic network interface, and it is not supported for * other network modes. For more information, see Task Networking * in the Amazon Elastic Container Service Developer Guide. *

        * * @param networkConfiguration * The network configuration for the service. This parameter is required for task definitions that use * the awsvpc network mode to receive their own elastic network interface, and it is not * supported for other network modes. For more information, see Task * Networking in the Amazon Elastic Container Service Developer Guide. * @return Returns a reference to this object so that method calls can be chained together. */ Builder networkConfiguration(NetworkConfiguration networkConfiguration); /** *

        * The network configuration for the service. This parameter is required for task definitions that use the * awsvpc network mode to receive their own elastic network interface, and it is not supported for * other network modes. For more information, see Task Networking * in the Amazon Elastic Container Service Developer Guide. *

        * This is a convenience that creates an instance of the {@link NetworkConfiguration.Builder} avoiding the need * to create one manually via {@link NetworkConfiguration#builder()}. * * When the {@link Consumer} completes, {@link NetworkConfiguration.Builder#build()} is called immediately and * its result is passed to {@link #networkConfiguration(NetworkConfiguration)}. * * @param networkConfiguration * a consumer that will call methods on {@link NetworkConfiguration.Builder} * @return Returns a reference to this object so that method calls can be chained together. * @see #networkConfiguration(NetworkConfiguration) */ default Builder networkConfiguration(Consumer networkConfiguration) { return networkConfiguration(NetworkConfiguration.builder().applyMutation(networkConfiguration).build()); } /** *

        * The period of time, in seconds, that the Amazon ECS service scheduler should ignore unhealthy Elastic Load * Balancing target health checks after a task has first started. This is only used when your service is * configured to use a load balancer. If your service has a load balancer defined and you don't specify a health * check grace period value, the default value of 0 is used. *

        *

        * If your service's tasks take a while to start and respond to Elastic Load Balancing health checks, you can * specify a health check grace period of up to 2,147,483,647 seconds. During that time, the Amazon ECS service * scheduler ignores health check status. This grace period can prevent the service scheduler from marking tasks * as unhealthy and stopping them before they have time to come up. *

        * * @param healthCheckGracePeriodSeconds * The period of time, in seconds, that the Amazon ECS service scheduler should ignore unhealthy Elastic * Load Balancing target health checks after a task has first started. This is only used when your * service is configured to use a load balancer. If your service has a load balancer defined and you * don't specify a health check grace period value, the default value of 0 is used.

        *

        * If your service's tasks take a while to start and respond to Elastic Load Balancing health checks, you * can specify a health check grace period of up to 2,147,483,647 seconds. During that time, the Amazon * ECS service scheduler ignores health check status. This grace period can prevent the service scheduler * from marking tasks as unhealthy and stopping them before they have time to come up. * @return Returns a reference to this object so that method calls can be chained together. */ Builder healthCheckGracePeriodSeconds(Integer healthCheckGracePeriodSeconds); /** *

        * The scheduling strategy to use for the service. For more information, see Services. *

        *

        * There are two service scheduler strategies available: *

        *
          *
        • *

          * REPLICA-The replica scheduling strategy places and maintains the desired number of tasks across * your cluster. By default, the service scheduler spreads tasks across Availability Zones. You can use task * placement strategies and constraints to customize task placement decisions. This scheduler strategy is * required if the service 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. The service scheduler also * evaluates the task placement constraints for running tasks and will stop tasks that do not meet the placement * constraints. When you're using this strategy, you don't need to specify a desired number of tasks, a task * placement strategy, or use Service Auto Scaling policies. *

          * *

          * Tasks using the Fargate launch type or the CODE_DEPLOY or EXTERNAL deployment * controller types don't support the DAEMON scheduling strategy. *

          *
        • *
        * * @param schedulingStrategy * The scheduling strategy to use for the service. For more information, see Services.

        *

        * There are two service scheduler strategies available: *

        *
          *
        • *

          * REPLICA-The replica scheduling strategy places and maintains the desired number of tasks * across your cluster. By default, the service scheduler spreads tasks across Availability Zones. You * can use task placement strategies and constraints to customize task placement decisions. This * scheduler strategy is required if the service 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. The * service scheduler also evaluates the task placement constraints for running tasks and will stop tasks * that do not meet the placement constraints. When you're using this strategy, you don't need to specify * a desired number of tasks, a task placement strategy, or use Service Auto Scaling policies. *

          * *

          * Tasks using the Fargate launch type or the CODE_DEPLOY or EXTERNAL * deployment controller types don't support the DAEMON scheduling strategy. *

          *
        • * @see SchedulingStrategy * @return Returns a reference to this object so that method calls can be chained together. * @see SchedulingStrategy */ Builder schedulingStrategy(String schedulingStrategy); /** *

          * The scheduling strategy to use for the service. For more information, see Services. *

          *

          * There are two service scheduler strategies available: *

          *
            *
          • *

            * REPLICA-The replica scheduling strategy places and maintains the desired number of tasks across * your cluster. By default, the service scheduler spreads tasks across Availability Zones. You can use task * placement strategies and constraints to customize task placement decisions. This scheduler strategy is * required if the service 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. The service scheduler also * evaluates the task placement constraints for running tasks and will stop tasks that do not meet the placement * constraints. When you're using this strategy, you don't need to specify a desired number of tasks, a task * placement strategy, or use Service Auto Scaling policies. *

            * *

            * Tasks using the Fargate launch type or the CODE_DEPLOY or EXTERNAL deployment * controller types don't support the DAEMON scheduling strategy. *

            *
          • *
          * * @param schedulingStrategy * The scheduling strategy to use for the service. For more information, see Services.

          *

          * There are two service scheduler strategies available: *

          *
            *
          • *

            * REPLICA-The replica scheduling strategy places and maintains the desired number of tasks * across your cluster. By default, the service scheduler spreads tasks across Availability Zones. You * can use task placement strategies and constraints to customize task placement decisions. This * scheduler strategy is required if the service 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. The * service scheduler also evaluates the task placement constraints for running tasks and will stop tasks * that do not meet the placement constraints. When you're using this strategy, you don't need to specify * a desired number of tasks, a task placement strategy, or use Service Auto Scaling policies. *

            * *

            * Tasks using the Fargate launch type or the CODE_DEPLOY or EXTERNAL * deployment controller types don't support the DAEMON scheduling strategy. *

            *
          • * @see SchedulingStrategy * @return Returns a reference to this object so that method calls can be chained together. * @see SchedulingStrategy */ Builder schedulingStrategy(SchedulingStrategy schedulingStrategy); /** *

            * The deployment controller to use for the service. *

            * * @param deploymentController * The deployment controller to use for the service. * @return Returns a reference to this object so that method calls can be chained together. */ Builder deploymentController(DeploymentController deploymentController); /** *

            * The deployment controller to use for the service. *

            * This is a convenience that creates an instance of the {@link DeploymentController.Builder} avoiding the need * to create one manually via {@link DeploymentController#builder()}. * * When the {@link Consumer} completes, {@link DeploymentController.Builder#build()} is called immediately and * its result is passed to {@link #deploymentController(DeploymentController)}. * * @param deploymentController * a consumer that will call methods on {@link DeploymentController.Builder} * @return Returns a reference to this object so that method calls can be chained together. * @see #deploymentController(DeploymentController) */ default Builder deploymentController(Consumer deploymentController) { return deploymentController(DeploymentController.builder().applyMutation(deploymentController).build()); } /** *

            * The metadata that you apply to the service to help you categorize and organize them. Each tag consists of a * key and an optional value, both of which you define. When a service is deleted, the tags are deleted as well. *

            *

            * The following basic restrictions apply to tags: *

            *
              *
            • *

              * Maximum number of tags per resource - 50 *

              *
            • *
            • *

              * For each resource, each tag key must be unique, and each tag key can have only one value. *

              *
            • *
            • *

              * Maximum key length - 128 Unicode characters in UTF-8 *

              *
            • *
            • *

              * Maximum value length - 256 Unicode characters in UTF-8 *

              *
            • *
            • *

              * If your tagging schema is used across multiple services and resources, remember that other services may have * restrictions on allowed characters. Generally allowed characters are: letters, numbers, and spaces * representable in UTF-8, and the following characters: + - = . _ : / @. *

              *
            • *
            • *

              * Tag keys and values are case-sensitive. *

              *
            • *
            • *

              * Do not use aws:, AWS:, or any upper or lowercase combination of such as a prefix * for either keys or values as it is reserved for AWS 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. *

              *
            • *
            * * @param tags * The metadata that you apply to the service to help you categorize and organize them. Each tag consists * of a key and an optional value, both of which you define. When a service is deleted, the tags are * deleted as well.

            *

            * The following basic restrictions apply to tags: *

            *
              *
            • *

              * Maximum number of tags per resource - 50 *

              *
            • *
            • *

              * For each resource, each tag key must be unique, and each tag key can have only one value. *

              *
            • *
            • *

              * Maximum key length - 128 Unicode characters in UTF-8 *

              *
            • *
            • *

              * Maximum value length - 256 Unicode characters in UTF-8 *

              *
            • *
            • *

              * If your tagging schema is used across multiple services and resources, remember that other services * may have restrictions on allowed characters. Generally allowed characters are: letters, numbers, and * spaces representable in UTF-8, and the following characters: + - = . _ : / @. *

              *
            • *
            • *

              * Tag keys and values are case-sensitive. *

              *
            • *
            • *

              * Do not use aws:, AWS:, or any upper or lowercase combination of such as a * prefix for either keys or values as it is reserved for AWS 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. *

              *
            • * @return Returns a reference to this object so that method calls can be chained together. */ Builder tags(Collection tags); /** *

              * The metadata that you apply to the service to help you categorize and organize them. Each tag consists of a * key and an optional value, both of which you define. When a service is deleted, the tags are deleted as well. *

              *

              * The following basic restrictions apply to tags: *

              *
                *
              • *

                * Maximum number of tags per resource - 50 *

                *
              • *
              • *

                * For each resource, each tag key must be unique, and each tag key can have only one value. *

                *
              • *
              • *

                * Maximum key length - 128 Unicode characters in UTF-8 *

                *
              • *
              • *

                * Maximum value length - 256 Unicode characters in UTF-8 *

                *
              • *
              • *

                * If your tagging schema is used across multiple services and resources, remember that other services may have * restrictions on allowed characters. Generally allowed characters are: letters, numbers, and spaces * representable in UTF-8, and the following characters: + - = . _ : / @. *

                *
              • *
              • *

                * Tag keys and values are case-sensitive. *

                *
              • *
              • *

                * Do not use aws:, AWS:, or any upper or lowercase combination of such as a prefix * for either keys or values as it is reserved for AWS 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. *

                *
              • *
              * * @param tags * The metadata that you apply to the service to help you categorize and organize them. Each tag consists * of a key and an optional value, both of which you define. When a service is deleted, the tags are * deleted as well.

              *

              * The following basic restrictions apply to tags: *

              *
                *
              • *

                * Maximum number of tags per resource - 50 *

                *
              • *
              • *

                * For each resource, each tag key must be unique, and each tag key can have only one value. *

                *
              • *
              • *

                * Maximum key length - 128 Unicode characters in UTF-8 *

                *
              • *
              • *

                * Maximum value length - 256 Unicode characters in UTF-8 *

                *
              • *
              • *

                * If your tagging schema is used across multiple services and resources, remember that other services * may have restrictions on allowed characters. Generally allowed characters are: letters, numbers, and * spaces representable in UTF-8, and the following characters: + - = . _ : / @. *

                *
              • *
              • *

                * Tag keys and values are case-sensitive. *

                *
              • *
              • *

                * Do not use aws:, AWS:, or any upper or lowercase combination of such as a * prefix for either keys or values as it is reserved for AWS 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. *

                *
              • * @return Returns a reference to this object so that method calls can be chained together. */ Builder tags(Tag... tags); /** *

                * The metadata that you apply to the service to help you categorize and organize them. Each tag consists of a * key and an optional value, both of which you define. When a service is deleted, the tags are deleted as well. *

                *

                * The following basic restrictions apply to tags: *

                *
                  *
                • *

                  * Maximum number of tags per resource - 50 *

                  *
                • *
                • *

                  * For each resource, each tag key must be unique, and each tag key can have only one value. *

                  *
                • *
                • *

                  * Maximum key length - 128 Unicode characters in UTF-8 *

                  *
                • *
                • *

                  * Maximum value length - 256 Unicode characters in UTF-8 *

                  *
                • *
                • *

                  * If your tagging schema is used across multiple services and resources, remember that other services may have * restrictions on allowed characters. Generally allowed characters are: letters, numbers, and spaces * representable in UTF-8, and the following characters: + - = . _ : / @. *

                  *
                • *
                • *

                  * Tag keys and values are case-sensitive. *

                  *
                • *
                • *

                  * Do not use aws:, AWS:, or any upper or lowercase combination of such as a prefix * for either keys or values as it is reserved for AWS 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. *

                  *
                • *
                * This is a convenience that creates an instance of the {@link List.Builder} avoiding the need to create * one manually via {@link List#builder()}. * * When the {@link Consumer} completes, {@link List.Builder#build()} is called immediately and its result * is passed to {@link #tags(List)}. * * @param tags * a consumer that will call methods on {@link List.Builder} * @return Returns a reference to this object so that method calls can be chained together. * @see #tags(List) */ Builder tags(Consumer... tags); /** *

                * Specifies whether to enable Amazon ECS managed tags for the tasks within the service. For more information, * see Tagging Your * Amazon ECS Resources in the Amazon Elastic Container Service Developer Guide. *

                * * @param enableECSManagedTags * Specifies whether to enable Amazon ECS managed tags for the tasks within the service. For more * information, see Tagging Your * Amazon ECS Resources in the Amazon Elastic Container Service Developer Guide. * @return Returns a reference to this object so that method calls can be chained together. */ Builder enableECSManagedTags(Boolean enableECSManagedTags); /** *

                * Specifies whether to propagate the tags from the task definition or the service to the tasks in the service. * If no value is specified, the tags are not propagated. Tags can only be propagated to the tasks within the * service during service creation. To add tags to a task after service creation, use the TagResource API * action. *

                * * @param propagateTags * Specifies whether to propagate the tags from the task definition or the service to the tasks in the * service. If no value is specified, the tags are not propagated. Tags can only be propagated to the * tasks within the service during service creation. To add tags to a task after service creation, use * the TagResource API action. * @see PropagateTags * @return Returns a reference to this object so that method calls can be chained together. * @see PropagateTags */ Builder propagateTags(String propagateTags); /** *

                * Specifies whether to propagate the tags from the task definition or the service to the tasks in the service. * If no value is specified, the tags are not propagated. Tags can only be propagated to the tasks within the * service during service creation. To add tags to a task after service creation, use the TagResource API * action. *

                * * @param propagateTags * Specifies whether to propagate the tags from the task definition or the service to the tasks in the * service. If no value is specified, the tags are not propagated. Tags can only be propagated to the * tasks within the service during service creation. To add tags to a task after service creation, use * the TagResource API action. * @see PropagateTags * @return Returns a reference to this object so that method calls can be chained together. * @see PropagateTags */ Builder propagateTags(PropagateTags propagateTags); @Override Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration); @Override Builder overrideConfiguration(Consumer builderConsumer); } static final class BuilderImpl extends EcsRequest.BuilderImpl implements Builder { private String cluster; private String serviceName; private String taskDefinition; private List loadBalancers = DefaultSdkAutoConstructList.getInstance(); private List serviceRegistries = DefaultSdkAutoConstructList.getInstance(); private Integer desiredCount; private String clientToken; private String launchType; private List capacityProviderStrategy = DefaultSdkAutoConstructList.getInstance(); private String platformVersion; private String role; private DeploymentConfiguration deploymentConfiguration; private List placementConstraints = DefaultSdkAutoConstructList.getInstance(); private List placementStrategy = DefaultSdkAutoConstructList.getInstance(); private NetworkConfiguration networkConfiguration; private Integer healthCheckGracePeriodSeconds; private String schedulingStrategy; private DeploymentController deploymentController; private List tags = DefaultSdkAutoConstructList.getInstance(); private Boolean enableECSManagedTags; private String propagateTags; private BuilderImpl() { } private BuilderImpl(CreateServiceRequest model) { super(model); cluster(model.cluster); serviceName(model.serviceName); taskDefinition(model.taskDefinition); loadBalancers(model.loadBalancers); serviceRegistries(model.serviceRegistries); desiredCount(model.desiredCount); clientToken(model.clientToken); launchType(model.launchType); capacityProviderStrategy(model.capacityProviderStrategy); platformVersion(model.platformVersion); role(model.role); deploymentConfiguration(model.deploymentConfiguration); placementConstraints(model.placementConstraints); placementStrategy(model.placementStrategy); networkConfiguration(model.networkConfiguration); healthCheckGracePeriodSeconds(model.healthCheckGracePeriodSeconds); schedulingStrategy(model.schedulingStrategy); deploymentController(model.deploymentController); tags(model.tags); enableECSManagedTags(model.enableECSManagedTags); propagateTags(model.propagateTags); } public final String getCluster() { return cluster; } @Override public final Builder cluster(String cluster) { this.cluster = cluster; return this; } public final void setCluster(String cluster) { this.cluster = cluster; } public final String getServiceName() { return serviceName; } @Override public final Builder serviceName(String serviceName) { this.serviceName = serviceName; return this; } public final void setServiceName(String serviceName) { this.serviceName = serviceName; } public final String getTaskDefinition() { return taskDefinition; } @Override public final Builder taskDefinition(String taskDefinition) { this.taskDefinition = taskDefinition; return this; } public final void setTaskDefinition(String taskDefinition) { this.taskDefinition = taskDefinition; } public final Collection getLoadBalancers() { if (loadBalancers instanceof SdkAutoConstructList) { return null; } return loadBalancers != null ? loadBalancers.stream().map(LoadBalancer::toBuilder).collect(Collectors.toList()) : null; } @Override public final Builder loadBalancers(Collection loadBalancers) { this.loadBalancers = LoadBalancersCopier.copy(loadBalancers); return this; } @Override @SafeVarargs public final Builder loadBalancers(LoadBalancer... loadBalancers) { loadBalancers(Arrays.asList(loadBalancers)); return this; } @Override @SafeVarargs public final Builder loadBalancers(Consumer... loadBalancers) { loadBalancers(Stream.of(loadBalancers).map(c -> LoadBalancer.builder().applyMutation(c).build()) .collect(Collectors.toList())); return this; } public final void setLoadBalancers(Collection loadBalancers) { this.loadBalancers = LoadBalancersCopier.copyFromBuilder(loadBalancers); } public final Collection getServiceRegistries() { if (serviceRegistries instanceof SdkAutoConstructList) { return null; } return serviceRegistries != null ? serviceRegistries.stream().map(ServiceRegistry::toBuilder) .collect(Collectors.toList()) : null; } @Override public final Builder serviceRegistries(Collection serviceRegistries) { this.serviceRegistries = ServiceRegistriesCopier.copy(serviceRegistries); return this; } @Override @SafeVarargs public final Builder serviceRegistries(ServiceRegistry... serviceRegistries) { serviceRegistries(Arrays.asList(serviceRegistries)); return this; } @Override @SafeVarargs public final Builder serviceRegistries(Consumer... serviceRegistries) { serviceRegistries(Stream.of(serviceRegistries).map(c -> ServiceRegistry.builder().applyMutation(c).build()) .collect(Collectors.toList())); return this; } public final void setServiceRegistries(Collection serviceRegistries) { this.serviceRegistries = ServiceRegistriesCopier.copyFromBuilder(serviceRegistries); } public final Integer getDesiredCount() { return desiredCount; } @Override public final Builder desiredCount(Integer desiredCount) { this.desiredCount = desiredCount; return this; } public final void setDesiredCount(Integer desiredCount) { this.desiredCount = desiredCount; } public final String getClientToken() { return clientToken; } @Override public final Builder clientToken(String clientToken) { this.clientToken = clientToken; return this; } public final void setClientToken(String clientToken) { this.clientToken = clientToken; } public final String getLaunchType() { return launchType; } @Override public final Builder launchType(String launchType) { this.launchType = launchType; return this; } @Override public final Builder launchType(LaunchType launchType) { this.launchType(launchType == null ? null : launchType.toString()); return this; } public final void setLaunchType(String launchType) { this.launchType = launchType; } public final Collection getCapacityProviderStrategy() { if (capacityProviderStrategy instanceof SdkAutoConstructList) { return null; } return capacityProviderStrategy != null ? capacityProviderStrategy.stream() .map(CapacityProviderStrategyItem::toBuilder).collect(Collectors.toList()) : null; } @Override public final Builder capacityProviderStrategy(Collection capacityProviderStrategy) { this.capacityProviderStrategy = CapacityProviderStrategyCopier.copy(capacityProviderStrategy); return this; } @Override @SafeVarargs public final Builder capacityProviderStrategy(CapacityProviderStrategyItem... capacityProviderStrategy) { capacityProviderStrategy(Arrays.asList(capacityProviderStrategy)); return this; } @Override @SafeVarargs public final Builder capacityProviderStrategy(Consumer... capacityProviderStrategy) { capacityProviderStrategy(Stream.of(capacityProviderStrategy) .map(c -> CapacityProviderStrategyItem.builder().applyMutation(c).build()).collect(Collectors.toList())); return this; } public final void setCapacityProviderStrategy( Collection capacityProviderStrategy) { this.capacityProviderStrategy = CapacityProviderStrategyCopier.copyFromBuilder(capacityProviderStrategy); } public final String getPlatformVersion() { return platformVersion; } @Override public final Builder platformVersion(String platformVersion) { this.platformVersion = platformVersion; return this; } public final void setPlatformVersion(String platformVersion) { this.platformVersion = platformVersion; } public final String getRole() { return role; } @Override public final Builder role(String role) { this.role = role; return this; } public final void setRole(String role) { this.role = role; } public final DeploymentConfiguration.Builder getDeploymentConfiguration() { return deploymentConfiguration != null ? deploymentConfiguration.toBuilder() : null; } @Override public final Builder deploymentConfiguration(DeploymentConfiguration deploymentConfiguration) { this.deploymentConfiguration = deploymentConfiguration; return this; } public final void setDeploymentConfiguration(DeploymentConfiguration.BuilderImpl deploymentConfiguration) { this.deploymentConfiguration = deploymentConfiguration != null ? deploymentConfiguration.build() : null; } public final Collection getPlacementConstraints() { if (placementConstraints instanceof SdkAutoConstructList) { return null; } return placementConstraints != null ? placementConstraints.stream().map(PlacementConstraint::toBuilder) .collect(Collectors.toList()) : null; } @Override public final Builder placementConstraints(Collection placementConstraints) { this.placementConstraints = PlacementConstraintsCopier.copy(placementConstraints); return this; } @Override @SafeVarargs public final Builder placementConstraints(PlacementConstraint... placementConstraints) { placementConstraints(Arrays.asList(placementConstraints)); return this; } @Override @SafeVarargs public final Builder placementConstraints(Consumer... placementConstraints) { placementConstraints(Stream.of(placementConstraints).map(c -> PlacementConstraint.builder().applyMutation(c).build()) .collect(Collectors.toList())); return this; } public final void setPlacementConstraints(Collection placementConstraints) { this.placementConstraints = PlacementConstraintsCopier.copyFromBuilder(placementConstraints); } public final Collection getPlacementStrategy() { if (placementStrategy instanceof SdkAutoConstructList) { return null; } return placementStrategy != null ? placementStrategy.stream().map(PlacementStrategy::toBuilder) .collect(Collectors.toList()) : null; } @Override public final Builder placementStrategy(Collection placementStrategy) { this.placementStrategy = PlacementStrategiesCopier.copy(placementStrategy); return this; } @Override @SafeVarargs public final Builder placementStrategy(PlacementStrategy... placementStrategy) { placementStrategy(Arrays.asList(placementStrategy)); return this; } @Override @SafeVarargs public final Builder placementStrategy(Consumer... placementStrategy) { placementStrategy(Stream.of(placementStrategy).map(c -> PlacementStrategy.builder().applyMutation(c).build()) .collect(Collectors.toList())); return this; } public final void setPlacementStrategy(Collection placementStrategy) { this.placementStrategy = PlacementStrategiesCopier.copyFromBuilder(placementStrategy); } public final NetworkConfiguration.Builder getNetworkConfiguration() { return networkConfiguration != null ? networkConfiguration.toBuilder() : null; } @Override public final Builder networkConfiguration(NetworkConfiguration networkConfiguration) { this.networkConfiguration = networkConfiguration; return this; } public final void setNetworkConfiguration(NetworkConfiguration.BuilderImpl networkConfiguration) { this.networkConfiguration = networkConfiguration != null ? networkConfiguration.build() : null; } public final Integer getHealthCheckGracePeriodSeconds() { return healthCheckGracePeriodSeconds; } @Override public final Builder healthCheckGracePeriodSeconds(Integer healthCheckGracePeriodSeconds) { this.healthCheckGracePeriodSeconds = healthCheckGracePeriodSeconds; return this; } public final void setHealthCheckGracePeriodSeconds(Integer healthCheckGracePeriodSeconds) { this.healthCheckGracePeriodSeconds = healthCheckGracePeriodSeconds; } public final String getSchedulingStrategy() { return schedulingStrategy; } @Override public final Builder schedulingStrategy(String schedulingStrategy) { this.schedulingStrategy = schedulingStrategy; return this; } @Override public final Builder schedulingStrategy(SchedulingStrategy schedulingStrategy) { this.schedulingStrategy(schedulingStrategy == null ? null : schedulingStrategy.toString()); return this; } public final void setSchedulingStrategy(String schedulingStrategy) { this.schedulingStrategy = schedulingStrategy; } public final DeploymentController.Builder getDeploymentController() { return deploymentController != null ? deploymentController.toBuilder() : null; } @Override public final Builder deploymentController(DeploymentController deploymentController) { this.deploymentController = deploymentController; return this; } public final void setDeploymentController(DeploymentController.BuilderImpl deploymentController) { this.deploymentController = deploymentController != null ? deploymentController.build() : null; } public final Collection getTags() { if (tags instanceof SdkAutoConstructList) { return null; } return tags != null ? tags.stream().map(Tag::toBuilder).collect(Collectors.toList()) : null; } @Override public final Builder tags(Collection tags) { this.tags = TagsCopier.copy(tags); return this; } @Override @SafeVarargs public final Builder tags(Tag... tags) { tags(Arrays.asList(tags)); return this; } @Override @SafeVarargs public final Builder tags(Consumer... tags) { tags(Stream.of(tags).map(c -> Tag.builder().applyMutation(c).build()).collect(Collectors.toList())); return this; } public final void setTags(Collection tags) { this.tags = TagsCopier.copyFromBuilder(tags); } public final Boolean getEnableECSManagedTags() { return enableECSManagedTags; } @Override public final Builder enableECSManagedTags(Boolean enableECSManagedTags) { this.enableECSManagedTags = enableECSManagedTags; return this; } public final void setEnableECSManagedTags(Boolean enableECSManagedTags) { this.enableECSManagedTags = enableECSManagedTags; } public final String getPropagateTags() { return propagateTags; } @Override public final Builder propagateTags(String propagateTags) { this.propagateTags = propagateTags; return this; } @Override public final Builder propagateTags(PropagateTags propagateTags) { this.propagateTags(propagateTags == null ? null : propagateTags.toString()); return this; } public final void setPropagateTags(String propagateTags) { this.propagateTags = propagateTags; } @Override public Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration) { super.overrideConfiguration(overrideConfiguration); return this; } @Override public Builder overrideConfiguration(Consumer builderConsumer) { super.overrideConfiguration(builderConsumer); return this; } @Override public CreateServiceRequest build() { return new CreateServiceRequest(this); } @Override public List> sdkFields() { return SDK_FIELDS; } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy