Class: Aws::EC2::Snapshot

Inherits:
Object
  • Object
show all
Extended by:
Deprecations
Defined in:
lib/aws-sdk-ec2/snapshot.rb

Defined Under Namespace

Classes: Collection

Read-Only Attributes collapse

Actions collapse

Associations collapse

Instance Method Summary collapse

Constructor Details

#initialize(id, options = {}) ⇒ Snapshot #initialize(options = {}) ⇒ Snapshot

Returns a new instance of Snapshot.

Overloads:

  • #initialize(id, options = {}) ⇒ Snapshot

    Parameters:

    • id (String)

    Options Hash (options):

  • #initialize(options = {}) ⇒ Snapshot

    Options Hash (options):

    • :id (required, String)
    • :client (Client)


22
23
24
25
26
27
28
# File 'lib/aws-sdk-ec2/snapshot.rb', line 22

def initialize(*args)
  options = Hash === args.last ? args.pop.dup : {}
  @id = extract_id(args, options)
  @data = options.delete(:data)
  @client = options.delete(:client) || Client.new(options)
  @waiter_block_warned = false
end

Instance Method Details

#clientClient

Returns:



207
208
209
# File 'lib/aws-sdk-ec2/snapshot.rb', line 207

def client
  @client
end

#completion_duration_minutesInteger

<note markdown=“1”> Only for snapshot copies created with time-based snapshot copy operations.

</note>

The completion duration requested for the time-based snapshot copy operation.

Returns:

  • (Integer)


115
116
117
# File 'lib/aws-sdk-ec2/snapshot.rb', line 115

def completion_duration_minutes
  data[:completion_duration_minutes]
end

#completion_timeTime

The time stamp when the snapshot was completed.

Returns:

  • (Time)


121
122
123
# File 'lib/aws-sdk-ec2/snapshot.rb', line 121

def completion_time
  data[:completion_time]
end

#copy(options = {}) ⇒ Types::CopySnapshotResult

Examples:

Request syntax with placeholder values


snapshot.copy({
  description: "String",
  destination_outpost_arn: "String",
  destination_region: "String",
  encrypted: false,
  kms_key_id: "KmsKeyId",
  presigned_url: "CopySnapshotRequestPSU",
  source_region: "String", # required
  tag_specifications: [
    {
      resource_type: "capacity-reservation", # accepts capacity-reservation, client-vpn-endpoint, customer-gateway, carrier-gateway, coip-pool, declarative-policies-report, dedicated-host, dhcp-options, egress-only-internet-gateway, elastic-ip, elastic-gpu, export-image-task, export-instance-task, fleet, fpga-image, host-reservation, image, import-image-task, import-snapshot-task, instance, instance-event-window, internet-gateway, ipam, ipam-pool, ipam-scope, ipv4pool-ec2, ipv6pool-ec2, key-pair, launch-template, local-gateway, local-gateway-route-table, local-gateway-virtual-interface, local-gateway-virtual-interface-group, local-gateway-route-table-vpc-association, local-gateway-route-table-virtual-interface-group-association, natgateway, network-acl, network-interface, network-insights-analysis, network-insights-path, network-insights-access-scope, network-insights-access-scope-analysis, placement-group, prefix-list, replace-root-volume-task, reserved-instances, route-table, security-group, security-group-rule, snapshot, spot-fleet-request, spot-instances-request, subnet, subnet-cidr-reservation, traffic-mirror-filter, traffic-mirror-session, traffic-mirror-target, transit-gateway, transit-gateway-attachment, transit-gateway-connect-peer, transit-gateway-multicast-domain, transit-gateway-policy-table, transit-gateway-route-table, transit-gateway-route-table-announcement, volume, vpc, vpc-endpoint, vpc-endpoint-connection, vpc-endpoint-service, vpc-endpoint-service-permission, vpc-peering-connection, vpn-connection, vpn-gateway, vpc-flow-log, capacity-reservation-fleet, traffic-mirror-filter-rule, vpc-endpoint-connection-device-type, verified-access-instance, verified-access-group, verified-access-endpoint, verified-access-policy, verified-access-trust-provider, vpn-connection-device-type, vpc-block-public-access-exclusion, ipam-resource-discovery, ipam-resource-discovery-association, instance-connect-endpoint, verified-access-endpoint-target, ipam-external-resource-verification-token
      tags: [
        {
          key: "String",
          value: "String",
        },
      ],
    },
  ],
  completion_duration_minutes: 1,
  dry_run: false,
})

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :description (String)

    A description for the EBS snapshot.

  • :destination_outpost_arn (String)

    The Amazon Resource Name (ARN) of the Outpost to which to copy the snapshot. Only specify this parameter when copying a snapshot from an Amazon Web Services Region to an Outpost. The snapshot must be in the Region for the destination Outpost. You cannot copy a snapshot from an Outpost to a Region, from one Outpost to another, or within the same Outpost.

    For more information, see [ Copy snapshots from an Amazon Web Services Region to an Outpost] in the *Amazon EBS User Guide*.

    [1]: docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html#copy-snapshots

  • :destination_region (String)

    The destination Region to use in the ‘PresignedUrl` parameter of a snapshot copy operation. This parameter is only valid for specifying the destination Region in a `PresignedUrl` parameter, where it is required.

    The snapshot copy is sent to the regional endpoint that you sent the HTTP request to (for example, ‘ec2.us-east-1.amazonaws.com`). With the CLI, this is specified using the `–region` parameter or the default Region in your Amazon Web Services configuration file.

  • :encrypted (Boolean)

    To encrypt a copy of an unencrypted snapshot if encryption by default is not enabled, enable encryption using this parameter. Otherwise, omit this parameter. Encrypted snapshots are encrypted, even if you omit this parameter and encryption by default is not enabled. You cannot set this parameter to false. For more information, see [Amazon EBS encryption] in the *Amazon EBS User Guide*.

    [1]: docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html

  • :kms_key_id (String)

    The identifier of the KMS key to use for Amazon EBS encryption. If this parameter is not specified, your KMS key for Amazon EBS is used. If ‘KmsKeyId` is specified, the encrypted state must be `true`.

    You can specify the KMS key using any of the following:

    • Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.

    • Key alias. For example, alias/ExampleAlias.

    • Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/1234abcd-12ab-34cd-56ef-1234567890ab.

    • Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias.

    Amazon Web Services authenticates the KMS key asynchronously. Therefore, if you specify an ID, alias, or ARN that is not valid, the action can appear to complete, but eventually fails.

  • :presigned_url (String)

    When you copy an encrypted source snapshot using the Amazon EC2 Query API, you must supply a pre-signed URL. This parameter is optional for unencrypted snapshots. For more information, see [Query requests].

    The ‘PresignedUrl` should use the snapshot source endpoint, the `CopySnapshot` action, and include the `SourceRegion`, `SourceSnapshotId`, and `DestinationRegion` parameters. The `PresignedUrl` must be signed using Amazon Web Services Signature Version 4. Because EBS snapshots are stored in Amazon S3, the signing algorithm for this parameter uses the same logic that is described in [ Authenticating Requests: Using Query Parameters (Amazon Web Services Signature Version 4)] in the *Amazon S3 API Reference*. An invalid or improperly signed `PresignedUrl` will cause the copy operation to fail asynchronously, and the snapshot will move to an `error` state.

    [1]: docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html [2]: docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html

  • :source_region (required, String)

    The ID of the Region that contains the snapshot to be copied.

  • :tag_specifications (Array<Types::TagSpecification>)

    The tags to apply to the new snapshot.

  • :completion_duration_minutes (Integer)

    Specify a completion duration, in 15 minute increments, to initiate a time-based snapshot copy. Time-based snapshot copy operations complete within the specified duration. For more information, see [ Time-based copies].

    If you do not specify a value, the snapshot copy operation is completed on a best-effort basis.

    [1]: docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html

  • :dry_run (Boolean)

    Checks whether you have the required permissions for the action, 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`.

Returns:



486
487
488
489
490
491
492
# File 'lib/aws-sdk-ec2/snapshot.rb', line 486

def copy(options = {})
  options = options.merge(source_snapshot_id: @id)
  resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
    @client.copy_snapshot(options)
  end
  resp.data
end

#create_tags(options = {}) ⇒ Tag::Collection

Examples:

Request syntax with placeholder values


tag = snapshot.create_tags({
  dry_run: false,
  tags: [ # required
    {
      key: "String",
      value: "String",
    },
  ],
})

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :dry_run (Boolean)

    Checks whether you have the required permissions for the action, 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`.

  • :tags (required, Array<Types::Tag>)

    The tags. The ‘value` parameter is required, but if you don’t want the tag to have a value, specify the parameter with no value, and we set the value to an empty string.

Returns:



516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
# File 'lib/aws-sdk-ec2/snapshot.rb', line 516

def create_tags(options = {})
  batch = []
  options = Aws::Util.deep_merge(options, resources: [@id])
  resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
    @client.create_tags(options)
  end
  options[:tags].each do |t|
    batch << Tag.new(
      resource_id: @id,
      key: t[:key],
      value: t[:value],
      client: @client
    )
  end
  Tag::Collection.new([batch], size: batch.size)
end

#dataTypes::Snapshot

Returns the data for this Aws::EC2::Snapshot. Calls Client#describe_snapshots if #data_loaded? is ‘false`.

Returns:



229
230
231
232
# File 'lib/aws-sdk-ec2/snapshot.rb', line 229

def data
  load unless @data
  @data
end

#data_encryption_key_idString

The data encryption key identifier for the snapshot. This value is a unique identifier that corresponds to the data encryption key that was used to encrypt the original volume or snapshot copy. Because data encryption keys are inherited by volumes created from snapshots, and vice versa, if snapshots share the same data encryption key identifier, then they belong to the same volume/snapshot lineage. This parameter is only returned by DescribeSnapshots.

Returns:

  • (String)


200
201
202
# File 'lib/aws-sdk-ec2/snapshot.rb', line 200

def data_encryption_key_id
  data[:data_encryption_key_id]
end

#data_loaded?Boolean

Returns ‘true` if this resource is loaded. Accessing attributes or #data on an unloaded resource will trigger a call to #load.

Returns:

  • (Boolean)

    Returns ‘true` if this resource is loaded. Accessing attributes or #data on an unloaded resource will trigger a call to #load.



237
238
239
# File 'lib/aws-sdk-ec2/snapshot.rb', line 237

def data_loaded?
  !!@data
end

#delete(options = {}) ⇒ EmptyStructure

Examples:

Request syntax with placeholder values


snapshot.delete({
  dry_run: false,
})

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :dry_run (Boolean)

    Checks whether you have the required permissions for the action, 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`.

Returns:

  • (EmptyStructure)


592
593
594
595
596
597
598
# File 'lib/aws-sdk-ec2/snapshot.rb', line 592

def delete(options = {})
  options = options.merge(snapshot_id: @id)
  resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
    @client.delete_snapshot(options)
  end
  resp.data
end

#delete_tags(options = {}) ⇒ Tag::Collection

Examples:

Request syntax with placeholder values


tag = snapshot.delete_tags({
  dry_run: false,
  tags: [
    {
      key: "String",
      value: "String",
    },
  ],
})

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :dry_run (Boolean)

    Checks whether you have the required permissions for the action, 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`.

  • :tags (Array<Types::Tag>)

    The tags to delete. Specify a tag key and an optional tag value to delete specific tags. If you specify a tag key without a tag value, we delete any tag with this key regardless of its value. If you specify a tag key with an empty string as the tag value, we delete the tag only if its value is an empty string.

    If you omit this parameter, we delete all user-defined tags for the specified resources. We do not delete Amazon Web Services-generated tags (tags that have the ‘aws:` prefix).

    Constraints: Up to 1000 tags.

Returns:



563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
# File 'lib/aws-sdk-ec2/snapshot.rb', line 563

def delete_tags(options = {})
  batch = []
  options = Aws::Util.deep_merge(options, resources: [@id])
  resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
    @client.delete_tags(options)
  end
  options[:tags].each do |t|
    batch << Tag.new(
      resource_id: @id,
      key: t[:key],
      value: t[:value],
      client: @client
    )
  end
  Tag::Collection.new([batch], size: batch.size)
end

#describe_attribute(options = {}) ⇒ Types::DescribeSnapshotAttributeResult

Examples:

Request syntax with placeholder values


snapshot.describe_attribute({
  attribute: "productCodes", # required, accepts productCodes, createVolumePermission
  dry_run: false,
})

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :attribute (required, String)

    The snapshot attribute you would like to view.

  • :dry_run (Boolean)

    Checks whether you have the required permissions for the action, 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`.

Returns:



615
616
617
618
619
620
621
# File 'lib/aws-sdk-ec2/snapshot.rb', line 615

def describe_attribute(options = {})
  options = options.merge(snapshot_id: @id)
  resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
    @client.describe_snapshot_attribute(options)
  end
  resp.data
end

#descriptionString

The description for the snapshot.

Returns:

  • (String)


169
170
171
# File 'lib/aws-sdk-ec2/snapshot.rb', line 169

def description
  data[:description]
end

#encryptedBoolean

Indicates whether the snapshot is encrypted.

Returns:

  • (Boolean)


181
182
183
# File 'lib/aws-sdk-ec2/snapshot.rb', line 181

def encrypted
  data[:encrypted]
end

#idString Also known as: snapshot_id

Returns:

  • (String)


33
34
35
# File 'lib/aws-sdk-ec2/snapshot.rb', line 33

def id
  @id
end

#identifiersObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Deprecated.


712
713
714
# File 'lib/aws-sdk-ec2/snapshot.rb', line 712

def identifiers
  { id: @id }
end

#kms_key_idString

The Amazon Resource Name (ARN) of the KMS key that was used to protect the volume encryption key for the parent volume.

Returns:

  • (String)


188
189
190
# File 'lib/aws-sdk-ec2/snapshot.rb', line 188

def kms_key_id
  data[:kms_key_id]
end

#loadself Also known as: reload

Loads, or reloads #data for the current Aws::EC2::Snapshot. Returns ‘self` making it possible to chain methods.

snapshot.reload.data

Returns:

  • (self)


217
218
219
220
221
222
223
# File 'lib/aws-sdk-ec2/snapshot.rb', line 217

def load
  resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
    @client.describe_snapshots(snapshot_ids: [@id])
  end
  @data = resp.snapshots[0]
  self
end

#modify_attribute(options = {}) ⇒ EmptyStructure

Examples:

Request syntax with placeholder values


snapshot.modify_attribute({
  attribute: "productCodes", # accepts productCodes, createVolumePermission
  create_volume_permission: {
    add: [
      {
        user_id: "String",
        group: "all", # accepts all
      },
    ],
    remove: [
      {
        user_id: "String",
        group: "all", # accepts all
      },
    ],
  },
  group_names: ["SecurityGroupName"],
  operation_type: "add", # accepts add, remove
  user_ids: ["String"],
  dry_run: false,
})

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :attribute (String)

    The snapshot attribute to modify. Only volume creation permissions can be modified.

  • :create_volume_permission (Types::CreateVolumePermissionModifications)

    A JSON representation of the snapshot attribute modification.

  • :group_names (Array<String>)

    The group to modify for the snapshot.

  • :operation_type (String)

    The type of operation to perform to the attribute.

  • :user_ids (Array<String>)

    The account ID to modify for the snapshot.

  • :dry_run (Boolean)

    Checks whether you have the required permissions for the action, 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`.

Returns:

  • (EmptyStructure)


664
665
666
667
668
669
670
# File 'lib/aws-sdk-ec2/snapshot.rb', line 664

def modify_attribute(options = {})
  options = options.merge(snapshot_id: @id)
  resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
    @client.modify_snapshot_attribute(options)
  end
  resp.data
end

#outpost_arnString

The ARN of the Outpost on which the snapshot is stored. For more information, see [Amazon EBS local snapshots on Outposts] in the *Amazon EBS User Guide*.

[1]: docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html

Returns:

  • (String)


54
55
56
# File 'lib/aws-sdk-ec2/snapshot.rb', line 54

def outpost_arn
  data[:outpost_arn]
end

#owner_aliasString

The Amazon Web Services owner alias, from an Amazon-maintained list (‘amazon`). This is not the user-configured Amazon Web Services account alias set using the IAM console.

Returns:

  • (String)


42
43
44
# File 'lib/aws-sdk-ec2/snapshot.rb', line 42

def owner_alias
  data[:owner_alias]
end

#owner_idString

The ID of the Amazon Web Services account that owns the EBS snapshot.

Returns:

  • (String)


163
164
165
# File 'lib/aws-sdk-ec2/snapshot.rb', line 163

def owner_id
  data[:owner_id]
end

#progressString

The progress of the snapshot, as a percentage.

Returns:

  • (String)


157
158
159
# File 'lib/aws-sdk-ec2/snapshot.rb', line 157

def progress
  data[:progress]
end

#reset_attribute(options = {}) ⇒ EmptyStructure

Examples:

Request syntax with placeholder values


snapshot.reset_attribute({
  attribute: "productCodes", # required, accepts productCodes, createVolumePermission
  dry_run: false,
})

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :attribute (required, String)

    The attribute to reset. Currently, only the attribute for permission to create volumes can be reset.

  • :dry_run (Boolean)

    Checks whether you have the required permissions for the action, 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`.

Returns:

  • (EmptyStructure)


688
689
690
691
692
693
694
# File 'lib/aws-sdk-ec2/snapshot.rb', line 688

def reset_attribute(options = {})
  options = options.merge(snapshot_id: @id)
  resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
    @client.reset_snapshot_attribute(options)
  end
  resp.data
end

#restore_expiry_timeTime

Only for archived snapshots that are temporarily restored. Indicates the date and time when a temporarily restored snapshot will be automatically re-archived.

Returns:

  • (Time)


77
78
79
# File 'lib/aws-sdk-ec2/snapshot.rb', line 77

def restore_expiry_time
  data[:restore_expiry_time]
end

#sse_typeString

Reserved for future use.

Returns:

  • (String)


83
84
85
# File 'lib/aws-sdk-ec2/snapshot.rb', line 83

def sse_type
  data[:sse_type]
end

#start_timeTime

The time stamp when the snapshot was initiated.

Returns:

  • (Time)


151
152
153
# File 'lib/aws-sdk-ec2/snapshot.rb', line 151

def start_time
  data[:start_time]
end

#stateString

The snapshot state.

Returns:

  • (String)


135
136
137
# File 'lib/aws-sdk-ec2/snapshot.rb', line 135

def state
  data[:state]
end

#state_messageString

Encrypted Amazon EBS snapshots are copied asynchronously. If a snapshot copy operation fails (for example, if the proper KMS permissions are not obtained) this field displays error state details to help you diagnose why the error occurred. This parameter is only returned by DescribeSnapshots.

Returns:

  • (String)


145
146
147
# File 'lib/aws-sdk-ec2/snapshot.rb', line 145

def state_message
  data[:state_message]
end

#storage_tierString

The storage tier in which the snapshot is stored. ‘standard` indicates that the snapshot is stored in the standard snapshot storage tier and that it is ready for use. `archive` indicates that the snapshot is currently archived and that it must be restored before it can be used.

Returns:

  • (String)


69
70
71
# File 'lib/aws-sdk-ec2/snapshot.rb', line 69

def storage_tier
  data[:storage_tier]
end

#tagsArray<Types::Tag>

Any tags assigned to the snapshot.

Returns:



60
61
62
# File 'lib/aws-sdk-ec2/snapshot.rb', line 60

def tags
  data[:tags]
end

#transfer_typeString

<note markdown=“1”> Only for snapshot copies.

</note>

Indicates whether the snapshot copy was created with a standard or time-based snapshot copy operation. Time-based snapshot copy operations complete within the completion duration specified in the request. Standard snapshot copy operations are completed on a best-effort basis.

  • ‘standard` - The snapshot copy was created with a standard snapshot copy operation.

  • ‘time-based` - The snapshot copy was created with a time-based snapshot copy operation.

Returns:

  • (String)


103
104
105
# File 'lib/aws-sdk-ec2/snapshot.rb', line 103

def transfer_type
  data[:transfer_type]
end

#volumeVolume?

Returns:



699
700
701
702
703
704
705
706
707
708
# File 'lib/aws-sdk-ec2/snapshot.rb', line 699

def volume
  if data[:volume_id]
    Volume.new(
      id: data[:volume_id],
      client: @client
    )
  else
    nil
  end
end

#volume_idString

The ID of the volume that was used to create the snapshot. Snapshots created by the CopySnapshot action have an arbitrary volume ID that should not be used for any purpose.

Returns:

  • (String)


129
130
131
# File 'lib/aws-sdk-ec2/snapshot.rb', line 129

def volume_id
  data[:volume_id]
end

#volume_sizeInteger

The size of the volume, in GiB.

Returns:

  • (Integer)


175
176
177
# File 'lib/aws-sdk-ec2/snapshot.rb', line 175

def volume_size
  data[:volume_size]
end

#wait_until(options = {}) {|resource| ... } ⇒ Resource

Deprecated.

Use [Aws::EC2::Client] #wait_until instead

Note:

The waiting operation is performed on a copy. The original resource remains unchanged.

Waiter polls an API operation until a resource enters a desired state.

## Basic Usage

Waiter will polls until it is successful, it fails by entering a terminal state, or until a maximum number of attempts are made.

# polls in a loop until condition is true
resource.wait_until(options) {|resource| condition}

## Example

instance.wait_until(max_attempts:10, delay:5) do |instance|
  instance.state.name == 'running'
end

## Configuration

You can configure the maximum number of polling attempts, and the delay (in seconds) between each polling attempt. The waiting condition is set by passing a block to #wait_until:

# poll for ~25 seconds
resource.wait_until(max_attempts:5,delay:5) {|resource|...}

## Callbacks

You can be notified before each polling attempt and before each delay. If you throw ‘:success` or `:failure` from these callbacks, it will terminate the waiter.

started_at = Time.now
# poll for 1 hour, instead of a number of attempts
proc = Proc.new do |attempts, response|
  throw :failure if Time.now - started_at > 3600
end

  # disable max attempts
instance.wait_until(before_wait:proc, max_attempts:nil) {...}

## Handling Errors

When a waiter is successful, it returns the Resource. When a waiter fails, it raises an error.

begin
  resource.wait_until(...)
rescue Aws::Waiters::Errors::WaiterFailed
  # resource did not enter the desired state in time
end

attempts attempt in seconds invoked before each attempt invoked before each wait

Parameters:

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • :max_attempts (Integer) — default: 10

    Maximum number of

  • :delay (Integer) — default: 10

    Delay between each

  • :before_attempt (Proc) — default: nil

    Callback

  • :before_wait (Proc) — default: nil

    Callback

Yield Parameters:

  • resource (Resource)

    to be used in the waiting condition.

Returns:

  • (Resource)

    if the waiter was successful

Raises:

  • (Aws::Waiters::Errors::FailureStateError)

    Raised when the waiter terminates because the waiter has entered a state that it will not transition out of, preventing success.

    yet successful.

  • (Aws::Waiters::Errors::UnexpectedError)

    Raised when an error is encountered while polling for a resource that is not expected.

  • (NotImplementedError)

    Raised when the resource does not



341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
# File 'lib/aws-sdk-ec2/snapshot.rb', line 341

def wait_until(options = {}, &block)
  self_copy = self.dup
  attempts = 0
  options[:max_attempts] = 10 unless options.key?(:max_attempts)
  options[:delay] ||= 10
  options[:poller] = Proc.new do
    attempts += 1
    if block.call(self_copy)
      [:success, self_copy]
    else
      self_copy.reload unless attempts == options[:max_attempts]
      :retry
    end
  end
  Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
    Aws::Waiters::Waiter.new(options).wait({})
  end
end

#wait_until_completed(options = {}, &block) ⇒ Snapshot

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :max_attempts (Integer) — default: 40
  • :delay (Float) — default: 15
  • :before_attempt (Proc)
  • :before_wait (Proc)

Returns:



247
248
249
250
251
252
253
254
255
256
257
258
259
# File 'lib/aws-sdk-ec2/snapshot.rb', line 247

def wait_until_completed(options = {}, &block)
  options, params = separate_params_and_options(options)
  waiter = Waiters::SnapshotCompleted.new(options)
  yield_waiter_and_warn(waiter, &block) if block_given?
  resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
    waiter.wait(params.merge(snapshot_ids: [@id]))
  end
  Snapshot.new({
    id: @id,
    data: resp.data.snapshots[0],
    client: @client
  })
end