/*
* 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
{
///
/// An object that represents an Batch compute resource. For more information, see Compute
/// environments in the Batch User Guide.
///
public partial class ComputeResource
{
private CRAllocationStrategy _allocationStrategy;
private int? _bidPercentage;
private int? _desiredvCpus;
private List _ec2Configuration = new List();
private string _ec2KeyPair;
private string _imageId;
private string _instanceRole;
private List _instanceTypes = new List();
private LaunchTemplateSpecification _launchTemplate;
private int? _maxvCpus;
private int? _minvCpus;
private string _placementGroup;
private List _securityGroupIds = new List();
private string _spotIamFleetRole;
private List _subnets = new List();
private Dictionary _tags = new Dictionary();
private CRType _type;
///
/// Gets and sets the property AllocationStrategy.
///
/// The allocation strategy to use for the compute resource if not enough instances of
/// the best fitting instance type can be allocated. This might be because of availability
/// of the instance type in the Region or Amazon
/// EC2 service limits. For more information, see Allocation
/// strategies in the Batch User Guide.
///
///
///
/// This parameter isn't applicable to jobs that are running on Fargate resources. Don't
/// specify it.
///
/// - BEST_FIT (default)
-
///
/// Batch selects an instance type that best fits the needs of the jobs with a preference
/// for the lowest-cost instance type. If additional instances of the selected instance
/// type aren't available, Batch waits for the additional instances to be available. If
/// there aren't enough instances available or the user is reaching Amazon
/// EC2 service limits, additional jobs aren't run until the currently running jobs
/// are completed. This allocation strategy keeps costs lower but can limit scaling. If
/// you're using Spot Fleets with
BEST_FIT
, the Spot Fleet IAM Role must
/// be specified. Compute resources that use a BEST_FIT
allocation strategy
/// don't support infrastructure updates and can't update some parameters. For more information,
/// see Updating
/// compute environments in the Batch User Guide.
///
/// - BEST_FIT_PROGRESSIVE
-
///
/// Batch selects additional instance types that are large enough to meet the requirements
/// of the jobs in the queue. Its preference is for instance types with lower cost vCPUs.
/// If additional instances of the previously selected instance types aren't available,
/// Batch selects new instance types.
///
///
- SPOT_CAPACITY_OPTIMIZED
-
///
/// Batch selects one or more instance types that are large enough to meet the requirements
/// of the jobs in the queue. Its preference is for instance types that are less likely
/// to be interrupted. This allocation strategy is only available for Spot Instance compute
/// resources.
///
///
///
/// With both BEST_FIT_PROGRESSIVE
and SPOT_CAPACITY_OPTIMIZED
/// strategies using On-Demand or Spot Instances, and the BEST_FIT
strategy
/// using Spot Instances, Batch might need to exceed maxvCpus
to meet your
/// capacity requirements. In this event, Batch never exceeds maxvCpus
by
/// more than a single instance.
///
///
public CRAllocationStrategy AllocationStrategy
{
get { return this._allocationStrategy; }
set { this._allocationStrategy = value; }
}
// Check to see if AllocationStrategy property is set
internal bool IsSetAllocationStrategy()
{
return this._allocationStrategy != null;
}
///
/// Gets and sets the property BidPercentage.
///
/// The maximum percentage that a Spot Instance price can be when compared with the On-Demand
/// price for that instance type before instances are launched. For example, if your maximum
/// percentage is 20%, then the Spot price must be less than 20% of the current On-Demand
/// price for that Amazon EC2 instance. You always pay the lowest (market) price and never
/// more than your maximum percentage. If you leave this field empty, the default value
/// is 100% of the On-Demand price. For most use cases, we recommend leaving this field
/// empty.
///
///
///
/// This parameter isn't applicable to jobs that are running on Fargate resources. Don't
/// specify it.
///
///
///
public int BidPercentage
{
get { return this._bidPercentage.GetValueOrDefault(); }
set { this._bidPercentage = value; }
}
// Check to see if BidPercentage property is set
internal bool IsSetBidPercentage()
{
return this._bidPercentage.HasValue;
}
///
/// Gets and sets the property DesiredvCpus.
///
/// The desired number of vCPUS in the compute environment. Batch modifies this value
/// between the minimum and maximum values based on job queue demand.
///
///
///
/// This parameter isn't applicable to jobs that are running on Fargate resources. Don't
/// specify it.
///
///
///
public int DesiredvCpus
{
get { return this._desiredvCpus.GetValueOrDefault(); }
set { this._desiredvCpus = value; }
}
// Check to see if DesiredvCpus property is set
internal bool IsSetDesiredvCpus()
{
return this._desiredvCpus.HasValue;
}
///
/// Gets and sets the property Ec2Configuration.
///
/// Provides information that's used to select Amazon Machine Images (AMIs) for EC2 instances
/// in the compute environment. If Ec2Configuration
isn't specified, the
/// default is ECS_AL2
.
///
///
///
/// One or two values can be provided.
///
///
///
/// This parameter isn't applicable to jobs that are running on Fargate resources. Don't
/// specify it.
///
///
///
public List Ec2Configuration
{
get { return this._ec2Configuration; }
set { this._ec2Configuration = value; }
}
// Check to see if Ec2Configuration property is set
internal bool IsSetEc2Configuration()
{
return this._ec2Configuration != null && this._ec2Configuration.Count > 0;
}
///
/// Gets and sets the property Ec2KeyPair.
///
/// The Amazon EC2 key pair that's used for instances launched in the compute environment.
/// You can use this key pair to log in to your instances with SSH.
///
///
///
/// This parameter isn't applicable to jobs that are running on Fargate resources. Don't
/// specify it.
///
///
///
public string Ec2KeyPair
{
get { return this._ec2KeyPair; }
set { this._ec2KeyPair = value; }
}
// Check to see if Ec2KeyPair property is set
internal bool IsSetEc2KeyPair()
{
return this._ec2KeyPair != null;
}
///
/// Gets and sets the property ImageId.
///
/// The Amazon Machine Image (AMI) ID used for instances launched in the compute environment.
/// This parameter is overridden by the imageIdOverride
member of the Ec2Configuration
/// structure.
///
///
///
/// This parameter isn't applicable to jobs that are running on Fargate resources. Don't
/// specify it.
///
///
///
/// The AMI that you choose for a compute environment must match the architecture of the
/// instance types that you intend to use for that compute environment. For example, if
/// your compute environment uses A1 instance types, the compute resource AMI that you
/// choose must support ARM instances. Amazon ECS vends both x86 and ARM versions of the
/// Amazon ECS-optimized Amazon Linux 2 AMI. For more information, see Amazon
/// ECS-optimized Amazon Linux 2 AMI in the Amazon Elastic Container Service Developer
/// Guide.
///
///
///
[Obsolete("This field is deprecated, use ec2Configuration[].imageIdOverride instead.")]
public string ImageId
{
get { return this._imageId; }
set { this._imageId = value; }
}
// Check to see if ImageId property is set
internal bool IsSetImageId()
{
return this._imageId != null;
}
///
/// Gets and sets the property InstanceRole.
///
/// The Amazon ECS instance profile applied to Amazon EC2 instances in a compute environment.
/// You can specify the short name or full Amazon Resource Name (ARN) of an instance profile.
/// For example, ecsInstanceRole
or arn:aws:iam::<aws_account_id>:instance-profile/ecsInstanceRole
///
. For more information, see Amazon
/// ECS instance role in the Batch User Guide.
///
///
///
/// This parameter isn't applicable to jobs that are running on Fargate resources. Don't
/// specify it.
///
///
///
public string InstanceRole
{
get { return this._instanceRole; }
set { this._instanceRole = value; }
}
// Check to see if InstanceRole property is set
internal bool IsSetInstanceRole()
{
return this._instanceRole != null;
}
///
/// Gets and sets the property InstanceTypes.
///
/// The instances types that can be launched. You can specify instance families to launch
/// any instance type within those families (for example, c5
or p3
),
/// or you can specify specific sizes within a family (such as c5.8xlarge
).
/// You can also choose optimal
to select instance types (from the C4, M4,
/// and R4 instance families) that match the demand of your job queues.
///
///
///
/// This parameter isn't applicable to jobs that are running on Fargate resources. Don't
/// specify it.
///
///
///
/// When you create a compute environment, the instance types that you select for the
/// compute environment must share the same architecture. For example, you can't mix x86
/// and ARM instances in the same compute environment.
///
///
///
/// Currently, optimal
uses instance types from the C4, M4, and R4 instance
/// families. In Regions that don't have instance types from those instance families,
/// instance types from the C5, M5, and R5 instance families are used.
///
///
///
public List InstanceTypes
{
get { return this._instanceTypes; }
set { this._instanceTypes = value; }
}
// Check to see if InstanceTypes property is set
internal bool IsSetInstanceTypes()
{
return this._instanceTypes != null && this._instanceTypes.Count > 0;
}
///
/// Gets and sets the property LaunchTemplate.
///
/// The launch template to use for your compute resources. Any other compute resource
/// parameters that you specify in a CreateComputeEnvironment API operation override
/// the same parameters in the launch template. You must specify either the launch template
/// ID or launch template name in the request, but not both. For more information, see
/// Launch
/// template support in the Batch User Guide.
///
///
///
/// This parameter isn't applicable to jobs that are running on Fargate resources. Don't
/// specify it.
///
///
///
public LaunchTemplateSpecification LaunchTemplate
{
get { return this._launchTemplate; }
set { this._launchTemplate = value; }
}
// Check to see if LaunchTemplate property is set
internal bool IsSetLaunchTemplate()
{
return this._launchTemplate != null;
}
///
/// Gets and sets the property MaxvCpus.
///
/// The maximum number of vCPUs that a compute environment can support.
///
///
///
/// With both BEST_FIT_PROGRESSIVE
and SPOT_CAPACITY_OPTIMIZED
/// allocation strategies using On-Demand or Spot Instances, and the BEST_FIT
/// strategy using Spot Instances, Batch might need to exceed maxvCpus
to
/// meet your capacity requirements. In this event, Batch never exceeds maxvCpus
/// by more than a single instance. For example, no more than a single instance from among
/// those specified in your compute environment is allocated.
///
///
///
[AWSProperty(Required=true)]
public int MaxvCpus
{
get { return this._maxvCpus.GetValueOrDefault(); }
set { this._maxvCpus = value; }
}
// Check to see if MaxvCpus property is set
internal bool IsSetMaxvCpus()
{
return this._maxvCpus.HasValue;
}
///
/// Gets and sets the property MinvCpus.
///
/// The minimum number of vCPUs that a compute environment should maintain (even if the
/// compute environment is DISABLED
).
///
///
///
/// This parameter isn't applicable to jobs that are running on Fargate resources. Don't
/// specify it.
///
///
///
public int MinvCpus
{
get { return this._minvCpus.GetValueOrDefault(); }
set { this._minvCpus = value; }
}
// Check to see if MinvCpus property is set
internal bool IsSetMinvCpus()
{
return this._minvCpus.HasValue;
}
///
/// Gets and sets the property PlacementGroup.
///
/// The Amazon EC2 placement group to associate with your compute resources. If you intend
/// to submit multi-node parallel jobs to your compute environment, you should consider
/// creating a cluster placement group and associate it with your compute resources. This
/// keeps your multi-node parallel job on a logical grouping of instances within a single
/// Availability Zone with high network flow potential. For more information, see Placement
/// groups in the Amazon EC2 User Guide for Linux Instances.
///
///
///
/// This parameter isn't applicable to jobs that are running on Fargate resources. Don't
/// specify it.
///
///
///
public string PlacementGroup
{
get { return this._placementGroup; }
set { this._placementGroup = value; }
}
// Check to see if PlacementGroup property is set
internal bool IsSetPlacementGroup()
{
return this._placementGroup != null;
}
///
/// Gets and sets the property SecurityGroupIds.
///
/// The Amazon EC2 security groups that are associated with instances launched in the
/// compute environment. One or more security groups must be specified, either in securityGroupIds
/// or using a launch template referenced in launchTemplate
. This parameter
/// is required for jobs that are running on Fargate resources and must contain at least
/// one security group. Fargate doesn't support launch templates. If security groups are
/// specified using both securityGroupIds
and launchTemplate
,
/// the values in securityGroupIds
are used.
///
///
public List SecurityGroupIds
{
get { return this._securityGroupIds; }
set { this._securityGroupIds = value; }
}
// Check to see if SecurityGroupIds property is set
internal bool IsSetSecurityGroupIds()
{
return this._securityGroupIds != null && this._securityGroupIds.Count > 0;
}
///
/// Gets and sets the property SpotIamFleetRole.
///
/// The Amazon Resource Name (ARN) of the Amazon EC2 Spot Fleet IAM role applied to a
/// SPOT
compute environment. This role is required if the allocation strategy
/// set to BEST_FIT
or if the allocation strategy isn't specified. For more
/// information, see Amazon
/// EC2 spot fleet role in the Batch User Guide.
///
///
///
/// This parameter isn't applicable to jobs that are running on Fargate resources. Don't
/// specify it.
///
///
///
/// To tag your Spot Instances on creation, the Spot Fleet IAM role specified here must
/// use the newer AmazonEC2SpotFleetTaggingRole managed policy. The previously
/// recommended AmazonEC2SpotFleetRole managed policy doesn't have the required
/// permissions to tag Spot Instances. For more information, see Spot
/// instances not tagged on creation in the Batch User Guide.
///
///
///
public string SpotIamFleetRole
{
get { return this._spotIamFleetRole; }
set { this._spotIamFleetRole = value; }
}
// Check to see if SpotIamFleetRole property is set
internal bool IsSetSpotIamFleetRole()
{
return this._spotIamFleetRole != null;
}
///
/// Gets and sets the property Subnets.
///
/// The VPC subnets where the compute resources are launched. These subnets must be within
/// the same VPC. Fargate compute resources can contain up to 16 subnets. For more information,
/// see VPCs
/// and subnets in the Amazon VPC User Guide.
///
///
///
/// Batch on Amazon EC2 and Batch on Amazon EKS support Local Zones. For more information,
/// see
/// Local Zones in the Amazon EC2 User Guide for Linux Instances, Amazon
/// EKS and Amazon Web Services Local Zones in the Amazon EKS User Guide and
///
/// Amazon ECS clusters in Local Zones, Wavelength Zones, and Amazon Web Services Outposts
/// in the Amazon ECS Developer Guide.
///
///
///
/// Batch on Fargate doesn't currently support Local Zones.
///
///
///
[AWSProperty(Required=true)]
public List Subnets
{
get { return this._subnets; }
set { this._subnets = value; }
}
// Check to see if Subnets property is set
internal bool IsSetSubnets()
{
return this._subnets != null && this._subnets.Count > 0;
}
///
/// Gets and sets the property Tags.
///
/// Key-value pair tags to be applied to EC2 resources that are launched in the compute
/// environment. For Batch, these take the form of "String1": "String2"
,
/// where String1
is the tag key and String2
is the tag value-for
/// example, { "Name": "Batch Instance - C4OnDemand" }
. This is helpful for
/// recognizing your Batch instances in the Amazon EC2 console. Updating these tags requires
/// an infrastructure update to the compute environment. For more information, see Updating
/// compute environments in the Batch User Guide. These tags aren't seen when
/// using the Batch ListTagsForResource
API operation.
///
///
///
/// This parameter isn't applicable to jobs that are running on Fargate resources. Don't
/// specify it.
///
///
///
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 compute environment: EC2
, SPOT
, FARGATE
,
/// or FARGATE_SPOT
. For more information, see Compute
/// environments in the Batch User Guide.
///
///
///
/// If you choose SPOT
, you must also specify an Amazon EC2 Spot Fleet role
/// with the spotIamFleetRole
parameter. For more information, see Amazon
/// EC2 spot fleet role in the Batch User Guide.
///
///
[AWSProperty(Required=true)]
public CRType Type
{
get { return this._type; }
set { this._type = value; }
}
// Check to see if Type property is set
internal bool IsSetType()
{
return this._type != null;
}
}
}