service/ec2/api_op_RunInstances.go (215 lines of code) (raw):

// Code generated by smithy-go-codegen DO NOT EDIT. package ec2 import ( "context" "fmt" awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware" "github.com/aws/aws-sdk-go-v2/service/ec2/types" "github.com/aws/smithy-go/middleware" smithyhttp "github.com/aws/smithy-go/transport/http" ) // Launches the specified number of instances using an AMI for which you have // permissions. // // You can specify a number of options, or leave the default options. The // following rules apply: // // - If you don't specify a subnet ID, we choose a default subnet from your // default VPC for you. If you don't have a default VPC, you must specify a subnet // ID in the request. // // - All instances have a network interface with a primary private IPv4 address. // If you don't specify this address, we choose one from the IPv4 range of your // subnet. // // - Not all instance types support IPv6 addresses. For more information, see [Instance types]. // // - If you don't specify a security group ID, we use the default security group // for the VPC. For more information, see [Security groups]. // // - If any of the AMIs have a product code attached for which the user has not // subscribed, the request fails. // // You can create a [launch template], which is a resource that contains the parameters to launch // an instance. When you launch an instance using RunInstances, you can specify the launch // template instead of specifying the launch parameters. // // To ensure faster instance launches, break up large requests into smaller // batches. For example, create five separate launch requests for 100 instances // each instead of one launch request for 500 instances. // // RunInstances is subject to both request rate limiting and resource rate // limiting. For more information, see [Request throttling]. // // An instance is ready for you to use when it's in the running state. You can // check the state of your instance using DescribeInstances. You can tag instances and EBS volumes // during launch, after launch, or both. For more information, see CreateTagsand [Tagging your Amazon EC2 resources]. // // Linux instances have access to the public key of the key pair at boot. You can // use this key to provide secure access to the instance. Amazon EC2 public images // use this feature to provide secure access without passwords. For more // information, see [Key pairs]. // // For troubleshooting, see [What to do if an instance immediately terminates], and [Troubleshooting connecting to your instance]. // // [Key pairs]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html // [What to do if an instance immediately terminates]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_InstanceStraightToTerminated.html // [Tagging your Amazon EC2 resources]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html // [launch template]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html // [Security groups]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html // [Request throttling]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-throttling.html // [Instance types]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html // [Troubleshooting connecting to your instance]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html func (c *Client) RunInstances(ctx context.Context, params *RunInstancesInput, optFns ...func(*Options)) (*RunInstancesOutput, error) { if params == nil { params = &RunInstancesInput{} } result, metadata, err := c.invokeOperation(ctx, "RunInstances", params, optFns, c.addOperationRunInstancesMiddlewares) if err != nil { return nil, err } out := result.(*RunInstancesOutput) out.ResultMetadata = metadata return out, nil } type RunInstancesInput struct { // The maximum number of instances to launch. If you specify a value that is more // capacity than Amazon EC2 can launch in the target Availability Zone, Amazon EC2 // launches the largest possible number of instances above the specified minimum // count. // // Constraints: Between 1 and the quota for the specified instance type for your // account for this Region. For more information, see [Amazon EC2 instance type quotas]. // // [Amazon EC2 instance type quotas]: https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-instance-quotas.html // // This member is required. MaxCount *int32 // The minimum number of instances to launch. If you specify a value that is more // capacity than Amazon EC2 can provide in the target Availability Zone, Amazon EC2 // does not launch any instances. // // Constraints: Between 1 and the quota for the specified instance type for your // account for this Region. For more information, see [Amazon EC2 instance type quotas]. // // [Amazon EC2 instance type quotas]: https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-instance-quotas.html // // This member is required. MinCount *int32 // Reserved. AdditionalInfo *string // The block device mapping, which defines the EBS volumes and instance store // volumes to attach to the instance at launch. For more information, see [Block device mappings]in the // Amazon EC2 User Guide. // // [Block device mappings]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html BlockDeviceMappings []types.BlockDeviceMapping // Information about the Capacity Reservation targeting option. If you do not // specify this parameter, the instance's Capacity Reservation preference defaults // to open , which enables it to run in any open Capacity Reservation that has // matching attributes (instance type, platform, Availability Zone, and tenancy). CapacityReservationSpecification *types.CapacityReservationSpecification // Unique, case-sensitive identifier you provide to ensure the idempotency of the // request. If you do not specify a client token, a randomly generated token is // used for the request to ensure idempotency. // // For more information, see [Ensuring Idempotency]. // // Constraints: Maximum 64 ASCII characters // // [Ensuring Idempotency]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html ClientToken *string // The CPU options for the instance. For more information, see [Optimize CPU options] in the Amazon EC2 // User Guide. // // [Optimize CPU options]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html CpuOptions *types.CpuOptionsRequest // The credit option for CPU usage of the burstable performance instance. Valid // values are standard and unlimited . To change this attribute after launch, use [ModifyInstanceCreditSpecification] // . For more information, see [Burstable performance instances]in the Amazon EC2 User Guide. // // Default: standard (T2 instances) or unlimited (T3/T3a/T4g instances) // // For T3 instances with host tenancy, only standard is supported. // // [ModifyInstanceCreditSpecification]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceCreditSpecification.html // [Burstable performance instances]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html CreditSpecification *types.CreditSpecificationRequest // Indicates whether an instance is enabled for stop protection. For more // information, see [Stop protection]. // // [Stop protection]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection DisableApiStop *bool // Indicates whether termination protection is enabled for the instance. The // default is false , which means that you can terminate the instance using the // Amazon EC2 console, command line tools, or API. You can enable termination // protection when you launch an instance, while the instance is running, or while // the instance is stopped. DisableApiTermination *bool // Checks whether you have the required permissions for the operation, without // actually making the request, and provides an error response. If you have the // required permissions, the error response is DryRunOperation . Otherwise, it is // UnauthorizedOperation . DryRun *bool // Indicates whether the instance is optimized for Amazon EBS I/O. This // optimization provides dedicated throughput to Amazon EBS and an optimized // configuration stack to provide optimal Amazon EBS I/O performance. This // optimization isn't available with all instance types. Additional usage charges // apply when using an EBS-optimized instance. // // Default: false EbsOptimized *bool // An elastic GPU to associate with the instance. // // Amazon Elastic Graphics reached end of life on January 8, 2024. ElasticGpuSpecification []types.ElasticGpuSpecification // An elastic inference accelerator to associate with the instance. // // Amazon Elastic Inference is no longer available. ElasticInferenceAccelerators []types.ElasticInferenceAccelerator // If you’re launching an instance into a dual-stack or IPv6-only subnet, you can // enable assigning a primary IPv6 address. A primary IPv6 address is an IPv6 GUA // address associated with an ENI that you have enabled to use a primary IPv6 // address. Use this option if an instance relies on its IPv6 address not changing. // When you launch the instance, Amazon Web Services will automatically assign an // IPv6 address associated with the ENI attached to your instance to be the primary // IPv6 address. Once you enable an IPv6 GUA address to be a primary IPv6, you // cannot disable it. When you enable an IPv6 GUA address to be a primary IPv6, the // first IPv6 GUA will be made the primary IPv6 address until the instance is // terminated or the network interface is detached. If you have multiple IPv6 // addresses associated with an ENI attached to your instance and you enable a // primary IPv6 address, the first IPv6 GUA address associated with the ENI becomes // the primary IPv6 address. EnablePrimaryIpv6 *bool // Indicates whether the instance is enabled for Amazon Web Services Nitro // Enclaves. For more information, see [What is Amazon Web Services Nitro Enclaves?]in the Amazon Web Services Nitro Enclaves // User Guide. // // You can't enable Amazon Web Services Nitro Enclaves and hibernation on the same // instance. // // [What is Amazon Web Services Nitro Enclaves?]: https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html EnclaveOptions *types.EnclaveOptionsRequest // Indicates whether an instance is enabled for hibernation. This parameter is // valid only if the instance meets the [hibernation prerequisites]. For more information, see [Hibernate your Amazon EC2 instance] in the Amazon // EC2 User Guide. // // You can't enable hibernation and Amazon Web Services Nitro Enclaves on the same // instance. // // [Hibernate your Amazon EC2 instance]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html // [hibernation prerequisites]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html HibernationOptions *types.HibernationOptionsRequest // The name or Amazon Resource Name (ARN) of an IAM instance profile. IamInstanceProfile *types.IamInstanceProfileSpecification // The ID of the AMI. An AMI ID is required to launch an instance and must be // specified here or in a launch template. ImageId *string // Indicates whether an instance stops or terminates when you initiate shutdown // from the instance (using the operating system command for system shutdown). // // Default: stop InstanceInitiatedShutdownBehavior types.ShutdownBehavior // The market (purchasing) option for the instances. // // For RunInstances, persistent Spot Instance requests are only supported when // InstanceInterruptionBehavior is set to either hibernate or stop . InstanceMarketOptions *types.InstanceMarketOptionsRequest // The instance type. For more information, see [Amazon EC2 instance types] in the Amazon EC2 User Guide. // // [Amazon EC2 instance types]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html InstanceType types.InstanceType // The number of IPv6 addresses to associate with the primary network interface. // Amazon EC2 chooses the IPv6 addresses from the range of your subnet. You cannot // specify this option and the option to assign specific IPv6 addresses in the same // request. You can specify this option if you've specified a minimum number of // instances to launch. // // You cannot specify this option and the network interfaces option in the same // request. Ipv6AddressCount *int32 // The IPv6 addresses from the range of the subnet to associate with the primary // network interface. You cannot specify this option and the option to assign a // number of IPv6 addresses in the same request. You cannot specify this option if // you've specified a minimum number of instances to launch. // // You cannot specify this option and the network interfaces option in the same // request. Ipv6Addresses []types.InstanceIpv6Address // The ID of the kernel. // // We recommend that you use PV-GRUB instead of kernels and RAM disks. For more // information, see [PV-GRUB]in the Amazon EC2 User Guide. // // [PV-GRUB]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html KernelId *string // The name of the key pair. You can create a key pair using [CreateKeyPair] or [ImportKeyPair]. // // If you do not specify a key pair, you can't connect to the instance unless you // choose an AMI that is configured to allow users another way to log in. // // [ImportKeyPair]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportKeyPair.html // [CreateKeyPair]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html KeyName *string // The launch template. Any additional parameters that you specify for the new // instance overwrite the corresponding parameters included in the launch template. LaunchTemplate *types.LaunchTemplateSpecification // The license configurations. LicenseSpecifications []types.LicenseConfigurationRequest // The maintenance and recovery options for the instance. MaintenanceOptions *types.InstanceMaintenanceOptionsRequest // The metadata options for the instance. For more information, see [Instance metadata and user data]. // // [Instance metadata and user data]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html MetadataOptions *types.InstanceMetadataOptionsRequest // Specifies whether detailed monitoring is enabled for the instance. Monitoring *types.RunInstancesMonitoringEnabled // The network interfaces to associate with the instance. NetworkInterfaces []types.InstanceNetworkInterfaceSpecification // Contains settings for the network performance options for the instance. NetworkPerformanceOptions *types.InstanceNetworkPerformanceOptionsRequest // Reserved for internal use. Operator *types.OperatorRequest // The placement for the instance. Placement *types.Placement // The options for the instance hostname. The default values are inherited from // the subnet. Applies only if creating a network interface, not attaching an // existing one. PrivateDnsNameOptions *types.PrivateDnsNameOptionsRequest // The primary IPv4 address. You must specify a value from the IPv4 address range // of the subnet. // // Only one private IP address can be designated as primary. You can't specify // this option if you've specified the option to designate a private IP address as // the primary IP address in a network interface specification. You cannot specify // this option if you're launching more than one instance in the request. // // You cannot specify this option and the network interfaces option in the same // request. PrivateIpAddress *string // The ID of the RAM disk to select. Some kernels require additional drivers at // launch. Check the kernel requirements for information about whether you need to // specify a RAM disk. To find kernel requirements, go to the Amazon Web Services // Resource Center and search for the kernel ID. // // We recommend that you use PV-GRUB instead of kernels and RAM disks. For more // information, see [PV-GRUB]in the Amazon EC2 User Guide. // // [PV-GRUB]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html RamdiskId *string // The IDs of the security groups. You can create a security group using [CreateSecurityGroup]. // // If you specify a network interface, you must specify any security groups as // part of the network interface instead of using this parameter. // // [CreateSecurityGroup]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSecurityGroup.html SecurityGroupIds []string // [Default VPC] The names of the security groups. // // If you specify a network interface, you must specify any security groups as // part of the network interface instead of using this parameter. // // Default: Amazon EC2 uses the default security group. SecurityGroups []string // The ID of the subnet to launch the instance into. // // If you specify a network interface, you must specify any subnets as part of the // network interface instead of using this parameter. SubnetId *string // The tags to apply to the resources that are created during instance launch. // // You can specify tags for the following resources only: // // - Instances // // - Volumes // // - Spot Instance requests // // - Network interfaces // // To tag a resource after it has been created, see [CreateTags]. // // [CreateTags]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html TagSpecifications []types.TagSpecification // The user data to make available to the instance. User data must be // base64-encoded. Depending on the tool or SDK that you're using, the // base64-encoding might be performed for you. For more information, see [Work with instance user data]. // // [Work with instance user data]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-add-user-data.html UserData *string noSmithyDocumentSerde } // Describes a launch request for one or more instances, and includes owner, // requester, and security group information that applies to all instances in the // launch request. type RunInstancesOutput struct { // Not supported. Groups []types.GroupIdentifier // The instances. Instances []types.Instance // The ID of the Amazon Web Services account that owns the reservation. OwnerId *string // The ID of the requester that launched the instances on your behalf (for // example, Amazon Web Services Management Console or Auto Scaling). RequesterId *string // The ID of the reservation. ReservationId *string // Metadata pertaining to the operation's result. ResultMetadata middleware.Metadata noSmithyDocumentSerde } func (c *Client) addOperationRunInstancesMiddlewares(stack *middleware.Stack, options Options) (err error) { if err := stack.Serialize.Add(&setOperationInputMiddleware{}, middleware.After); err != nil { return err } err = stack.Serialize.Add(&awsEc2query_serializeOpRunInstances{}, middleware.After) if err != nil { return err } err = stack.Deserialize.Add(&awsEc2query_deserializeOpRunInstances{}, middleware.After) if err != nil { return err } if err := addProtocolFinalizerMiddlewares(stack, options, "RunInstances"); err != nil { return fmt.Errorf("add protocol finalizers: %v", err) } if err = addlegacyEndpointContextSetter(stack, options); err != nil { return err } if err = addSetLoggerMiddleware(stack, options); err != nil { return err } if err = addClientRequestID(stack); err != nil { return err } if err = addComputeContentLength(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } if err = addComputePayloadSHA256(stack); err != nil { return err } if err = addRetry(stack, options); err != nil { return err } if err = addRawResponseToMetadata(stack); err != nil { return err } if err = addRecordResponseTiming(stack); err != nil { return err } if err = addSpanRetryLoop(stack, options); err != nil { return err } if err = addClientUserAgent(stack, options); err != nil { return err } if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil { return err } if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil { return err } if err = addSetLegacyContextSigningOptionsMiddleware(stack); err != nil { return err } if err = addTimeOffsetBuild(stack, c); err != nil { return err } if err = addUserAgentRetryMode(stack, options); err != nil { return err } if err = addCredentialSource(stack, options); err != nil { return err } if err = addIdempotencyToken_opRunInstancesMiddleware(stack, options); err != nil { return err } if err = addOpRunInstancesValidationMiddleware(stack); err != nil { return err } if err = stack.Initialize.Add(newServiceMetadataMiddleware_opRunInstances(options.Region), middleware.Before); err != nil { return err } if err = addRecursionDetection(stack); err != nil { return err } if err = addRequestIDRetrieverMiddleware(stack); err != nil { return err } if err = addResponseErrorMiddleware(stack); err != nil { return err } if err = addRequestResponseLogging(stack, options); err != nil { return err } if err = addDisableHTTPSMiddleware(stack, options); err != nil { return err } if err = addSpanInitializeStart(stack); err != nil { return err } if err = addSpanInitializeEnd(stack); err != nil { return err } if err = addSpanBuildRequestStart(stack); err != nil { return err } if err = addSpanBuildRequestEnd(stack); err != nil { return err } return nil } type idempotencyToken_initializeOpRunInstances struct { tokenProvider IdempotencyTokenProvider } func (*idempotencyToken_initializeOpRunInstances) ID() string { return "OperationIdempotencyTokenAutoFill" } func (m *idempotencyToken_initializeOpRunInstances) HandleInitialize(ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler) ( out middleware.InitializeOutput, metadata middleware.Metadata, err error, ) { if m.tokenProvider == nil { return next.HandleInitialize(ctx, in) } input, ok := in.Parameters.(*RunInstancesInput) if !ok { return out, metadata, fmt.Errorf("expected middleware input to be of type *RunInstancesInput ") } if input.ClientToken == nil { t, err := m.tokenProvider.GetIdempotencyToken() if err != nil { return out, metadata, err } input.ClientToken = &t } return next.HandleInitialize(ctx, in) } func addIdempotencyToken_opRunInstancesMiddleware(stack *middleware.Stack, cfg Options) error { return stack.Initialize.Add(&idempotencyToken_initializeOpRunInstances{tokenProvider: cfg.IdempotencyTokenProvider}, middleware.Before) } func newServiceMetadataMiddleware_opRunInstances(region string) *awsmiddleware.RegisterServiceMetadata { return &awsmiddleware.RegisterServiceMetadata{ Region: region, ServiceID: ServiceID, OperationName: "RunInstances", } }