/*
* 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.
*/
/*
* Do not modify this file. This file is generated from the batch-2016-08-10.normal.json service model.
*/
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.Batch.Model
{
///
/// Container for the parameters to the CreateComputeEnvironment operation.
/// Creates an Batch compute environment. You can create MANAGED
or UNMANAGED
/// compute environments. MANAGED
compute environments can use Amazon EC2
/// or Fargate resources. UNMANAGED
compute environments can only use EC2
/// resources.
///
///
///
/// In a managed compute environment, Batch manages the capacity and instance types of
/// the compute resources within the environment. This is based on the compute resource
/// specification that you define or the launch
/// template that you specify when you create the compute environment. Either, you
/// can choose to use EC2 On-Demand Instances and EC2 Spot Instances. Or, you can use
/// Fargate and Fargate Spot capacity in your managed compute environment. You can optionally
/// set a maximum price so that Spot Instances only launch when the Spot Instance price
/// is less than a specified percentage of the On-Demand price.
///
///
///
/// Multi-node parallel jobs aren't supported on Spot Instances.
///
///
///
/// In an unmanaged compute environment, you can manage your own EC2 compute resources
/// and have flexibility with how you configure your compute resources. For example, you
/// can use custom AMIs. However, you must verify that each of your AMIs meet the Amazon
/// ECS container instance AMI specification. For more information, see container
/// instance AMIs in the Amazon Elastic Container Service Developer Guide.
/// After you created your unmanaged compute environment, you can use the DescribeComputeEnvironments
/// operation to find the Amazon ECS cluster that's associated with it. Then, launch your
/// container instances into that Amazon ECS cluster. For more information, see Launching
/// an Amazon ECS container instance in the Amazon Elastic Container Service Developer
/// Guide.
///
///
///
/// To create a compute environment that uses EKS resources, the caller must have permissions
/// to call eks:DescribeCluster
.
///
///
///
/// Batch doesn't automatically upgrade the AMIs in a compute environment after it's created.
/// For example, it also doesn't update the AMIs in your compute environment when a newer
/// version of the Amazon ECS optimized AMI is available. You're responsible for the management
/// of the guest operating system. This includes any updates and security patches. You're
/// also responsible for any additional application software or utilities that you install
/// on the compute resources. There are two ways to use a new AMI for your Batch jobs.
/// The original method is to complete these steps:
///
/// -
///
/// Create a new compute environment with the new AMI.
///
///
-
///
/// Add the compute environment to an existing job queue.
///
///
-
///
/// Remove the earlier compute environment from your job queue.
///
///
-
///
/// Delete the earlier compute environment.
///
///
///
/// In April 2022, Batch added enhanced support for updating compute environments. For
/// more information, see Updating
/// compute environments. To use the enhanced updating of compute environments to
/// update AMIs, follow these rules:
///
/// -
///
/// Either don't set the service role (
serviceRole
) parameter or set it to
/// the AWSBatchServiceRole service-linked role.
///
/// -
///
/// Set the allocation strategy (
allocationStrategy
) parameter to BEST_FIT_PROGRESSIVE
/// or SPOT_CAPACITY_OPTIMIZED
.
///
/// -
///
/// Set the update to latest image version (
updateToLatestImageVersion
) parameter
/// to true
. The updateToLatestImageVersion
parameter is used
/// when you update a compute environment. This parameter is ignored when you create a
/// compute environment.
///
/// -
///
/// Don't specify an AMI ID in
imageId
, imageIdOverride
(in
///
/// ec2Configuration
), or in the launch template (launchTemplate
).
/// In that case, Batch selects the latest Amazon ECS optimized AMI that's supported by
/// Batch at the time the infrastructure update is initiated. Alternatively, you can specify
/// the AMI ID in the imageId
or imageIdOverride
parameters,
/// or the launch template identified by the LaunchTemplate
properties. Changing
/// any of these properties starts an infrastructure update. If the AMI ID is specified
/// in the launch template, it can't be replaced by specifying an AMI ID in either the
/// imageId
or imageIdOverride
parameters. It can only be replaced
/// by specifying a different launch template, or if the launch template version is set
/// to $Default
or $Latest
, by setting either a new default
/// version for the launch template (if $Default
) or by adding a new version
/// to the launch template (if $Latest
).
///
///
///
/// If these rules are followed, any update that starts an infrastructure update causes
/// the AMI ID to be re-selected. If the version
setting in the launch template
/// (launchTemplate
) is set to $Latest
or $Default
,
/// the latest or default version of the launch template is evaluated up at the time of
/// the infrastructure update, even if the launchTemplate
wasn't updated.
///
///
///
public partial class CreateComputeEnvironmentRequest : AmazonBatchRequest
{
private string _computeEnvironmentName;
private ComputeResource _computeResources;
private EksConfiguration _eksConfiguration;
private string _serviceRole;
private CEState _state;
private Dictionary _tags = new Dictionary();
private CEType _type;
private int? _unmanagedvCpus;
///
/// Gets and sets the property ComputeEnvironmentName.
///
/// The name for your compute environment. It can be up to 128 characters long. It can
/// contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_).
///
///
[AWSProperty(Required=true)]
public string ComputeEnvironmentName
{
get { return this._computeEnvironmentName; }
set { this._computeEnvironmentName = value; }
}
// Check to see if ComputeEnvironmentName property is set
internal bool IsSetComputeEnvironmentName()
{
return this._computeEnvironmentName != null;
}
///
/// Gets and sets the property ComputeResources.
///
/// Details about the compute resources managed by the compute environment. This parameter
/// is required for managed compute environments. For more information, see Compute
/// Environments in the Batch User Guide.
///
///
public ComputeResource ComputeResources
{
get { return this._computeResources; }
set { this._computeResources = value; }
}
// Check to see if ComputeResources property is set
internal bool IsSetComputeResources()
{
return this._computeResources != null;
}
///
/// Gets and sets the property EksConfiguration.
///
/// The details for the Amazon EKS cluster that supports the compute environment.
///
///
public EksConfiguration EksConfiguration
{
get { return this._eksConfiguration; }
set { this._eksConfiguration = value; }
}
// Check to see if EksConfiguration property is set
internal bool IsSetEksConfiguration()
{
return this._eksConfiguration != null;
}
///
/// Gets and sets the property ServiceRole.
///
/// The full Amazon Resource Name (ARN) of the IAM role that allows Batch to make calls
/// to other Amazon Web Services services on your behalf. For more information, see Batch
/// service IAM role in the Batch User Guide.
///
///
///
/// If your account already created the Batch service-linked role, that role is used by
/// default for your compute environment unless you specify a different role here. If
/// the Batch service-linked role doesn't exist in your account, and no role is specified
/// here, the service attempts to create the Batch service-linked role in your account.
///
///
///
/// If your specified role has a path other than /
, then you must specify
/// either the full role ARN (recommended) or prefix the role name with the path. For
/// example, if a role with the name bar
has a path of /foo/
,
/// specify /foo/bar
as the role name. For more information, see Friendly
/// names and paths in the IAM User Guide.
///
///
///
/// Depending on how you created your Batch service role, its ARN might contain the service-role
/// path prefix. When you only specify the name of the service role, Batch assumes that
/// your ARN doesn't use the service-role
path prefix. Because of this, we
/// recommend that you specify the full ARN of your service role when you create compute
/// environments.
///
///
///
public string ServiceRole
{
get { return this._serviceRole; }
set { this._serviceRole = value; }
}
// Check to see if ServiceRole property is set
internal bool IsSetServiceRole()
{
return this._serviceRole != null;
}
///
/// Gets and sets the property State.
///
/// The state of the compute environment. If the state is ENABLED
, then the
/// compute environment accepts jobs from a queue and can scale out automatically based
/// on queues.
///
///
///
/// If the state is ENABLED
, then the Batch scheduler can attempt to place
/// jobs from an associated job queue on the compute resources within the environment.
/// If the compute environment is managed, then it can scale its instances out or in automatically,
/// based on the job queue demand.
///
///
///
/// If the state is DISABLED
, then the Batch scheduler doesn't attempt to
/// place jobs within the environment. Jobs in a STARTING
or RUNNING
/// state continue to progress normally. Managed compute environments in the DISABLED
/// state don't scale out.
///
///
///
/// Compute environments in a DISABLED
state may continue to incur billing
/// charges. To prevent additional charges, turn off and then delete the compute environment.
/// For more information, see State
/// in the Batch User Guide.
///
///
///
/// When an instance is idle, the instance scales down to the minvCpus
value.
/// However, the instance size doesn't change. For example, consider a c5.8xlarge
/// instance with a minvCpus
value of 4
and a desiredvCpus
/// value of 36
. This instance doesn't scale down to a c5.large
/// instance.
///
///
public CEState State
{
get { return this._state; }
set { this._state = value; }
}
// Check to see if State property is set
internal bool IsSetState()
{
return this._state != null;
}
///
/// Gets and sets the property Tags.
///
/// The tags that you apply to the compute environment to help you categorize and organize
/// your resources. Each tag consists of a key and an optional value. For more information,
/// see Tagging
/// Amazon Web Services Resources in Amazon Web Services General Reference.
///
///
///
/// These tags can be updated or removed using the TagResource
/// and UntagResource
/// API operations. These tags don't propagate to the underlying compute resources.
///
///
[AWSProperty(Min=1, Max=50)]
public Dictionary Tags
{
get { return this._tags; }
set { this._tags = value; }
}
// Check to see if Tags property is set
internal bool IsSetTags()
{
return this._tags != null && this._tags.Count > 0;
}
///
/// Gets and sets the property Type.
///
/// The type of the compute environment: MANAGED
or UNMANAGED
.
/// For more information, see Compute
/// Environments in the Batch User Guide.
///
///
[AWSProperty(Required=true)]
public CEType Type
{
get { return this._type; }
set { this._type = value; }
}
// Check to see if Type property is set
internal bool IsSetType()
{
return this._type != null;
}
///
/// Gets and sets the property UnmanagedvCpus.
///
/// The maximum number of vCPUs for an unmanaged compute environment. This parameter is
/// only used for fair share scheduling to reserve vCPU capacity for new share identifiers.
/// If this parameter isn't provided for a fair share job queue, no vCPU capacity is reserved.
///
///
///
/// This parameter is only supported when the type
parameter is set to UNMANAGED
.
///
///
///
public int UnmanagedvCpus
{
get { return this._unmanagedvCpus.GetValueOrDefault(); }
set { this._unmanagedvCpus = value; }
}
// Check to see if UnmanagedvCpus property is set
internal bool IsSetUnmanagedvCpus()
{
return this._unmanagedvCpus.HasValue;
}
}
}