1VM::EC2::REST::instanceU(s3e)r Contributed Perl DocumentaVtMi:o:nEC2::REST::instance(3)
2
3
4
6 VM::EC2::REST::instance - VM::EC2 methods for controlling instances
7
9 use VM::EC2 ':standard';
10
12 The methods in this section allow you to retrieve information about EC2
13 instances, launch new instances, control the instance lifecycle (e.g.
14 starting and stopping them), and fetching the console output from
15 instances.
16
17 Implemented:
18 ConfirmProductInstance
19 DescribeInstanceAttribute
20 DescribeInstances
21 DescribeInstanceStatus
22 ModifyInstanceAttribute
23 RebootInstances
24 ResetInstanceAttribute
25 RunInstances
26 StartInstances
27 StopInstances
28 TerminateInstances
29
30 Unimplemented:
31 (none)
32
33 The primary object manipulated by these methods is VM::EC2::Instance.
34 Please see the VM::EC2::Instance manual page for additional methods
35 that allow you to attach and detach volumes, modify an instance's
36 attributes, and convert instances into images.
37
38 @instances = $ec2->describe_instances(@instance_ids)
39 @instances = $ec2->describe_instances(\%filters)
40 @instances =
41 $ec2->describe_instances(-instance_id=>\@ids,-filter=>\%filters)
42 Return a series of VM::EC2::Instance objects. Optional arguments are:
43
44 -instance_id ID of the instance(s) to return information on.
45 This can be a string scalar, or an arrayref.
46
47 -filter Tags and other filters to apply.
48
49 The filter argument is a hashreference in which the keys are the filter
50 names, and the values are the match strings. Some filters accept
51 wildcards.
52
53 A typical filter example:
54
55 $ec2->describe_instances(
56 -filter => {'block-device-mapping.device-name'=>'/dev/sdh',
57 'architecture' => 'i386',
58 'tag:Role' => 'Server'
59 });
60
61 You may omit the -filter argument name if there are no other arguments:
62
63 $ec2->describe_instances({'block-device-mapping.device-name'=>'/dev/sdh',
64 'architecture' => 'i386',
65 'tag:Role' => 'Server'});
66
67 There are a large number of filters, which are listed in full at
68 http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeInstances.html.
69
70 Here is a alpha-sorted list of filter names: architecture,
71 availability-zone, block-device-mapping.attach-time,
72 block-device-mapping.delete-on-termination,
73 block-device-mapping.device-name, block-device-mapping.status,
74 block-device-mapping.volume-id, client-token, dns-name, group-id,
75 group-name, hypervisor, image-id, instance-id, instance-lifecycle,
76 instance-state-code, instance-state-name, instance-type,
77 instance.group-id, instance.group-name, ip-address, kernel-id, key-
78 name, launch-index, launch-time, monitoring-state, owner-id, placement-
79 group-name, platform, private-dns-name, private-ip-address, product-
80 code, ramdisk-id, reason, requester-id, reservation-id, root-device-
81 name, root-device-type, source-dest-check, spot-instance-request-id,
82 state-reason-code, state-reason-message, subnet-id, tag-key, tag-value,
83 tag:key, virtualization-type, vpc-id.
84
85 Note that the objects returned from this method are the instances
86 themselves, and not a reservation set. The reservation ID can be
87 retrieved from each instance by calling its reservationId() method.
88
89 @i = $ec2->run_instances($ami_id)
90 @i = $ec2->run_instances(-image_id=>$id,%other_args)
91 This method will provision and launch one or more instances given an
92 AMI ID. If successful, the method returns a series of VM::EC2::Instance
93 objects.
94
95 If called with a single argument this will be interpreted as the AMI to
96 launch, and all other arguments will take their defaults. Otherwise,
97 the arguments will be taken as a -parameter=>$argument list.
98
99 Required arguments:
100 -image_id ID of an AMI to launch
101
102 Optional arguments:
103 -min_count Minimum number of instances to launch [1]
104
105 -max_count Maximum number of instances to launch [1]
106
107 -key_name Name of the keypair to use
108
109 -security_group_id Security group ID to use for this instance.
110 Use an arrayref for multiple group IDs
111
112 -security_group Security group name to use for this instance.
113 Use an arrayref for multiple values.
114
115 -user_data User data to pass to the instances. Do NOT base64
116 encode this. It will be done for you.
117
118 -instance_type Type of the instance to use. See below for a
119 list.
120
121 -availability_zone The availability zone you want to launch the
122 instance into. Call $ec2->regions for a list.
123
124 -zone Short version of -availability_aone.
125
126 -placement_zone Deprecated version of -availability_zone.
127
128 -placement_group An existing placement group to launch the
129 instance into. Applicable to cluster instances
130 only.
131
132 -tenancy Specify 'dedicated' to launch the instance on a
133 dedicated server. Only applicable for VPC
134 instances.
135
136 -kernel_id ID of the kernel to use for the instances,
137 overriding the kernel specified in the image.
138
139 -ramdisk_id ID of the ramdisk to use for the instances,
140 overriding the ramdisk specified in the image.
141
142 -block_devices Specify block devices to map onto the instances,
143 overriding the values specified in the image.
144 See below for the syntax of this argument.
145
146 -block_device_mapping Alias for -block_devices.
147
148 -monitoring Pass a true value to enable detailed monitoring.
149
150 -subnet_id ID of the subnet to launch the instance
151 into. Only applicable for VPC instances.
152
153 -termination_protection Pass true to lock the instance so that it
154 cannot be terminated using the API. Use
155 modify_instance() to unset this if youu wish to
156 terminate the instance later.
157
158 -disable_api_termination -- Same as above.
159
160 -shutdown_behavior Pass "stop" (the default) to stop the instance
161 and save its disk state when "shutdown" is called
162 from within the instance. Stopped instances can
163 be restarted later. Pass "terminate" to
164 instead terminate the instance and discard its
165 state completely.
166
167 -instance_initiated_shutdown_behavior -- Same as above.
168
169 -private_ip_address Assign the instance to a specific IP address
170 from a VPC subnet (VPC only).
171
172 -client_token Unique identifier that you can provide to ensure
173 idempotency of the request. You can use
174 $ec2->token() to generate a suitable identifier.
175 See http://docs.amazonwebservices.com/AWSEC2/
176 latest/UserGuide/Run_Instance_Idempotency.html
177
178 -network_interfaces A single network interface specification string
179 or a list of them as an array reference (VPC only).
180 These are described in more detail below.
181
182 -iam_arn The Amazon resource name (ARN) of the IAM Instance Profile (IIP)
183 to associate with the instances.
184
185 -iam_name The name of the IAM instance profile (IIP) to associate with the
186 instances.
187
188 -ebs_optimized Boolean. If true, create an EBS-optimized instance
189 (valid only for certain instance types.
190
191 Instance types
192 The following is the list of instance types currently allowed by
193 Amazon:
194
195 m1.small c1.medium m2.xlarge cc1.4xlarge cg1.4xlarge t1.micro
196 m1.large c1.xlarge m2.2xlarge
197 m1.xlarge m2.4xlarge
198
199 Block device syntax
200 The syntax of -block_devices is identical to what is used by the
201 ec2-run-instances command-line tool. Borrowing from the manual page
202 of that tool:
203
204 The format is '<device>=<block-device>', where 'block-device' can
205 be one of the following:
206
207 - 'none': indicates that a block device that would be exposed at the
208 specified device should be suppressed. For example: '/dev/sdb=none'
209
210 - 'ephemeral[0-3]': indicates that the Amazon EC2 ephemeral store
211 (instance local storage) should be exposed at the specified device.
212 For example: '/dev/sdc=ephemeral0'.
213
214 - 'vol-12345678': A volume ID will attempt to attach the given volume to the
215 instance, contingent on volume state and availability zone.
216
217 - 'none': Suppress this block device, even if it is mapped in the AMI.
218
219 - '[<snapshot-id>][:<size>[:<delete-on-termination>[:<volume-type>[:<iops>]]]]':
220 indicates that an Amazon EBS volume, created from the specified Amazon EBS
221 snapshot, should be exposed at the specified device. The following
222 combinations are supported:
223
224 - '<snapshot-id>': the ID of an Amazon EBS snapshot, which must
225 be owned by or restorable by the caller. May be left out if a
226 <size> is specified, creating an empty Amazon EBS volume of
227 the specified size.
228
229 - '<size>': the size (GiBs) of the Amazon EBS volume to be
230 created. If a snapshot was specified, this may not be smaller
231 than the size of the snapshot itself.
232
233 - '<delete-on-termination>': indicates whether the Amazon EBS
234 volume should be deleted on instance termination. If not
235 specified, this will default to 'true' and the volume will be
236 deleted.
237
238 - '<volume-type>': The volume type. One of "standard", "gp2" or "io1".
239 "gp2" is the new general purpose SSD type.
240
241 - '<iops>': The number of I/O operations per second (IOPS) that
242 the volume suports. A number between 100 to 4000. Only valid
243 for volumes of type "io1".
244
245 Examples: -block_devices => '/dev/sdb=snap-7eb96d16'
246 -block_devices => '/dev/sdc=snap-7eb96d16:80:false'
247 -block_devices => '/dev/sdd=:120'
248 -block_devices => '/dev/sdc=:120:true:io1:500'
249
250 To provide multiple mappings, use an array reference. In this
251 example, we launch two 'm1.small' instance in which /dev/sdb is
252 mapped to ephemeral storage and /dev/sdc is mapped to a new 100 G
253 EBS volume:
254
255 @i=$ec2->run_instances(-image_id => 'ami-12345',
256 -min_count => 2,
257 -block_devices => ['/dev/sdb=ephemeral0',
258 '/dev/sdc=:100:true']
259 )
260
261 Network interface syntax
262 Each instance has a single primary network interface and private IP
263 address that is ordinarily automatically assigned by Amazon. When
264 you are running VPC instances, however, you can add additional
265 elastic network interfaces (ENIs) to the instance and add secondary
266 private IP addresses to one or more of these ENIs. ENIs can exist
267 independently of instances, and be detached and reattached in much
268 the same way as EBS volumes. This is explained in detail at
269 http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/using-instance-addressing.html.
270
271 The network configuration can be specified using the
272 -network_interface parameter:
273
274 -network_interfaces => ['eth0=10.10.0.12:subnet-1234567:sg-1234567:true:My Custom Eth0',
275 'eth1=10.10.1.12,10.10.1.13:subnet-999999:sg-1234567:true:My Custom Eth1']
276
277 or
278
279 -network_interfaces => ['eth0=10.10.0.12:subnet-1234567:sg-1234567:true:My Custom Eth0:true']
280
281 The format is '<device>=<specification>'. The device is an ethernet
282 interface name such as eth0, eth1, eth2, etc. The specification has
283 up to five fields, each separated by the ":" character. All fields
284 are optional and can be left blank. If missing, AWS will choose a
285 default.
286
287 10.10.1.12,10.10.1.13:subnet-999999:sg-1234567:true:My Custom Eth1
288
289 1. IP address(es): A single IP address in standard dot form, or a
290 list of IP addresses separated by commas. The first address in the
291 list will become the primary private IP address for the interface.
292 Subsequent addresses will become secondary private addresses. You
293 may specify "auto" or leave the field blank to have AWS choose an
294 address automatically from within the subnetwork. To allocate
295 several secondary IP addresses and have AWS pick the addresses
296 automatically, give the count of secondary addresses you wish to
297 allocate as an integer following the primary IP address. For
298 example, "auto,3" will allocate an automatic primary IP address and
299 three automatic secondary addresses, while "10.10.1.12,3" will
300 force the primary address to be 10.10.1.12 and create three
301 automatic secondary addresses.
302
303 2. Subnetwork ID: The ID of the VPC subnetwork in which the ENI
304 resides. An instance may have several ENIs associated with it, and
305 each ENI may be attached to a different subnetwork.
306
307 3. Security group IDs: A comma-delimited list of the security group
308 IDs to associate with this ENI.
309
310 4. DeleteOnTerminate: True if this ENI should be automatically
311 deleted when the instance terminates.
312
313 5. Description: A human-readable description of the ENI.
314
315 6. Associate Public Address: Indicates whether to assign a public
316 IP address to the ENI on an instance in a VPC. Can only be
317 specified as true when a single network interface of device index 0
318 is created. Defaults to true when launching in a Default VPC.
319
320 As an alternative syntax, you may specify the ID of an existing ENI
321 in lieu of the primary IP address and other fields. The ENI will be
322 attached to the instance if its permissions allow:
323
324 -network_interfaces => 'eth0=eni-123456'
325
326 Return value
327 On success, this method returns a list of VM::EC2::Instance
328 objects. If called in a scalar context AND only one instance was
329 requested, it will return a single instance object (rather than
330 returning a list of size one which is then converted into numeric
331 "1", as would be the usual Perl behavior).
332
333 Note that this behavior is different from the Amazon API, which
334 returns a ReservationSet. In this API, ask the instances for the
335 the reservation, owner, requester, and group information using
336 reservationId(), ownerId(), requesterId() and groups() methods.
337
338 Tips
339 1. If you have a VM::EC2::Image object returned from
340 Describe_images(), you may run it using run_instances():
341
342 my $image = $ec2->describe_images(-image_id => 'ami-12345');
343 $image->run_instances( -min_count => 10,
344 -block_devices => ['/dev/sdb=ephemeral0',
345 '/dev/sdc=:100:true']
346 )
347
348 2. It may take a short while for a newly-launched instance to be
349 returned by describe_instances(). You may need to sleep for 1-2
350 seconds
351 before current_status() returns the correct value.
352
353 3. Each instance object has a current_status() method which will
354 return the current run state of the instance. You may poll this
355 method to wait until the instance is running:
356
357 my $instance = $ec2->run_instances(...);
358 sleep 1;
359 while ($instance->current_status ne 'running') {
360 sleep 5;
361 }
362
363 4. The utility method wait_for_instances() will wait until all
364 passed instances are in the 'running' or other terminal state.
365
366 my @instances = $ec2->run_instances(...);
367 $ec2->wait_for_instances(@instances);
368
369 @s = $ec2->start_instances(@instance_ids)
370 @s = $ec2->start_instances(-instance_id=>\@instance_ids)
371 Start the instances named by @instance_ids and return one or more
372 VM::EC2::Instance::State::Change objects.
373
374 To wait for the all the instance ids to reach their final state
375 ("running" unless an error occurs), call wait_for_instances().
376
377 Example:
378
379 # find all stopped instances
380 @instances = $ec2->describe_instances(-filter=>{'instance-state-name'=>'stopped'});
381
382 # start them
383 $ec2->start_instances(@instances)
384
385 # pause till they are running (or crashed)
386 $ec2->wait_for_instances(@instances)
387
388 You can also start an instance by calling the object's start() method:
389
390 $instances[0]->start('wait'); # start instance and wait for it to
391 # be running
392
393 The objects returned by calling start_instances() indicate the current
394 and previous states of the instance. The previous state is typically
395 "stopped" and the current state is usually "pending." This information
396 is only current to the time that the start_instances() method was
397 called. To get the current run state of the instance, call its
398 status() method:
399
400 die "ouch!" unless $instances[0]->current_status eq 'running';
401
402 @s = $ec2->stop_instances(@instance_ids)
403 @s = $ec2->stop_instances(-instance_id=>\@instance_ids,-force=>1)
404 Stop the instances named by @instance_ids and return one or more
405 VM::EC2::Instance::State::Change objects. In the named parameter
406 version of this method, you may optionally provide a -force argument,
407 which if true, forces the instance to halt without giving it a chance
408 to run its shutdown procedure (the equivalent of pulling a physical
409 machine's plug).
410
411 To wait for instances to reach their final state, call
412 wait_for_instances().
413
414 Example:
415
416 # find all running instances
417 @instances = $ec2->describe_instances(-filter=>{'instance-state-name'=>'running'});
418
419 # stop them immediately and wait for confirmation
420 $ec2->stop_instances(-instance_id=>\@instances,-force=>1);
421 $ec2->wait_for_instances(@instances);
422
423 You can also stop an instance by calling the object's start() method:
424
425 $instances[0]->stop('wait'); # stop first instance and wait for it to
426 # stop completely
427
428 @s = $ec2->terminate_instances(@instance_ids)
429 @s = $ec2->terminate_instances(-instance_id=>\@instance_ids)
430 Terminate the instances named by @instance_ids and return one or more
431 VM::EC2::Instance::State::Change objects. This method will fail for any
432 instances whose termination protection field is set.
433
434 To wait for the all the instances to reach their final state, call
435 wait_for_instances().
436
437 Example:
438
439 # find all instances tagged as "Version 0.5"
440 @instances = $ec2->describe_instances({'tag:Version'=>'0.5'});
441
442 # terminate them
443 $ec2->terminate_instances(@instances);
444
445 You can also terminate an instance by calling its terminate() method:
446
447 $instances[0]->terminate;
448
449 @s = $ec2->reboot_instances(@instance_ids)
450 @s = $ec2->reboot_instances(-instance_id=>\@instance_ids)
451 Reboot the instances named by @instance_ids and return one or more
452 VM::EC2::Instance::State::Change objects.
453
454 To wait for the all the instances to reach their final state, call
455 wait_for_instances().
456
457 You can also reboot an instance by calling its terminate() method:
458
459 $instances[0]->reboot;
460
461 $boolean =
462 $ec2->confirm_product_instance($instance_id,$product_code,$callback)
463 $boolean =
464 $ec2->confirm_product_instance(-instance_id=>$instance_id,-product_code=>$product_code,-cb=>$callback)
465 Return "true" if the instance indicated by $instance_id is associated
466 with the given product code.
467
468 $meta = VM::EC2->instance_metadata
469 $meta = $ec2->instance_metadata
470 For use on running EC2 instances only: This method returns a
471 VM::EC2::Instance::Metadata object that will return information about
472 the currently running instance using the HTTP:// metadata fields
473 described at
474 http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?instancedata-data-categories.html.
475 This is usually fastest way to get runtime information on the current
476 instance.
477
478 Note that this method can be called as either an instance or a class
479 method.
480
481 @data =
482 $ec2->describe_instance_attribute($instance_id,$attribute,$callback)
483 This method returns instance attributes. Only one attribute can be
484 retrieved at a time. The following is the list of attributes that can
485 be retrieved:
486
487 instanceType -- scalar
488 kernel -- scalar
489 ramdisk -- scalar
490 userData -- scalar
491 disableApiTermination -- scalar
492 instanceInitiatedShutdownBehavior -- scalar
493 rootDeviceName -- scalar
494 blockDeviceMapping -- list of hashref
495 sourceDestCheck -- scalar
496 groupSet -- list of scalar
497 productCodes -- list of hashref
498 ebsOptimized -- scalar
499 sriovNetSupport -- scalar
500
501 All of these values can be retrieved more conveniently from the
502 VM::EC2::Instance object returned from describe_instances(), so there
503 is no attempt to parse the results of this call into Perl objects.
504 Therefore, some of the attributes, in particular 'blockDeviceMapping'
505 will be returned as raw hashrefs.
506
507 $boolean =
508 $ec2->modify_instance_attribute($instance_id,-$attribute_name=>$value)
509 This method changes instance attributes. It can only be applied to
510 stopped instances. The following is the list of attributes that can be
511 set:
512
513 -instance_type -- type of instance, e.g. "m1.small"
514 -kernel -- kernel id
515 -ramdisk -- ramdisk id
516 -user_data -- user data
517 -termination_protection -- true to prevent termination from the console
518 -disable_api_termination -- same as the above
519 -shutdown_behavior -- "stop" or "terminate"
520 -instance_initiated_shutdown_behavior -- same as above
521 -root_device_name -- root device name
522 -source_dest_check -- enable NAT (VPC only)
523 -group_id -- VPC security group
524 -block_devices -- Specify block devices to change
525 deleteOnTermination flag
526 -block_device_mapping -- Alias for -block_devices
527 -ebs_optimization -- EBS Optmization
528 -sriov_net_support -- Enhanced networking support
529
530 Only one attribute can be changed in a single request. For example:
531
532 $ec2->modify_instance_attribute('i-12345',-kernel=>'aki-f70657b2');
533
534 The result code is true if the attribute was successfully modified,
535 false otherwise. In the latter case, $ec2->error() will provide the
536 error message.
537
538 The ability to change the deleteOnTermination flag for attached block
539 devices is not documented in the official Amazon API documentation, but
540 appears to work. The syntax is:
541
542 # turn on deleteOnTermination
543 $ec2->modify_instance_attribute(-block_devices=>'/dev/sdf=v-12345') #
544 turn off deleteOnTermination
545 $ec2->modify_instance_attribute(-block_devices=>'/dev/sdf=v-12345')
546
547 The syntax is slightly different from what is used by -block_devices in
548 run_instances(), and is "device=volumeId:boolean". Multiple block
549 devices can be specified using an arrayref.
550
551 $boolean = $ec2->reset_instance_attribute($instance_id,$attribute
552 [,$callback])
553 This method resets an attribute of the given instance to its default
554 value. Valid attributes are "kernel", "ramdisk" and "sourceDestCheck".
555 The result code is true if the reset was successful.
556
557 @status_list = $ec2->describe_instance_status(@instance_ids);
558 @status_list =
559 $ec2->describe_instance_status(-instance_id=>\@ids,-filter=>\%filters,%other_args);
560 @status_list = $ec2->describe_instance_status(\%filters);
561 This method returns a list of VM::EC2::Instance::Status objects
562 corresponding to status checks and scheduled maintenance events on the
563 instances of interest. You may provide a list of instances to return
564 information on, a set of filters, or both.
565
566 The filters are described at
567 http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeInstanceStatus.html.
568 The brief list is:
569
570 availability-zone, event.code, event.description, event.not-after,
571 event.not-before, instance-state-name, instance-state-code,
572 system-status.status, system-status.reachability,
573 instance-status.status, instance-status.reachability.
574
575 Request arguments are:
576
577 -instance_id Scalar or array ref containing the instance ID(s) to return
578 information about (optional).
579
580 -filter Filters to apply (optional).
581
582 -include_all_instances If true, include all instances, including those that are
583 stopped, pending and shutting down. Otherwise, returns
584 the status of running instances only.
585
586 -max_results An integer corresponding to the number of instance items
587 per response (must be greater than 5).
588
589 If -max_results is specified, then the call will return at most the
590 number of instances you requested. You may see whether there are
591 additional results by calling more_instance_status(), and then retrieve
592 the next set of results with additional call(s) to
593 describe_instance_status():
594
595 my @results = $ec2->describe_instance_status(-max_results => 10);
596 do_something(\@results);
597 while ($ec2->more_instance_status) {
598 @results = $ec2->describe_instance_status;
599 do_something(\@results);
600 }
601
602 NOTE: As of 29 July 2012, passing -include_all_instances causes an EC2
603 "unknown parameter" error, indicating some mismatch between the
604 documented API and the actual one.
605
606 $t = $ec2->token
607 Return a client token for use with start_instances().
608
609 $ec2->wait_for_instances(@instances)
610 Wait for all members of the provided list of instances to reach some
611 terminal state ("running", "stopped" or "terminated"), and then return
612 a hash reference that maps each instance ID to its final state.
613
614 Typical usage:
615
616 my @instances = $image->run_instances(-key_name =>'My_key',
617 -security_group=>'default',
618 -min_count =>2,
619 -instance_type => 't1.micro')
620 or die $ec2->error_str;
621 my $status = $ec2->wait_for_instances(@instances);
622 my @failed = grep {$status->{$_} ne 'running'} @instances;
623 print "The following failed: @failed\n";
624
625 If no terminal state is reached within a set timeout, then this method
626 returns undef and sets $ec2->error_str() to a suitable message. The
627 timeout, which defaults to 10 minutes (600 seconds), can be get or set
628 with $ec2->wait_for_timeout().
629
631 VM::EC2
632
634 Lincoln Stein <lincoln.stein@gmail.com>.
635
636 Copyright (c) 2011 Ontario Institute for Cancer Research
637
638 This package and its accompanying libraries is free software; you can
639 redistribute it and/or modify it under the terms of the GPL (either
640 version 1, or at your option, any later version) or the Artistic
641 License 2.0. Refer to LICENSE for the full license text. In addition,
642 please see DISCLAIMER.txt for disclaimers of warranty.
643
644
645
646perl v5.36.0 2023-01-20 VM::EC2::REST::instance(3)