Class: Aws::EC2::Snapshot

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

Defined Under Namespace

Classes: Collection

Actions collapse

Associations collapse

Read-Only Attributes 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 'gems/aws-sdk-ec2/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:



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

def client
  @client
end

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

Examples:

Request syntax with placeholder values


snapshot.copy({
  description: "String",
  destination_region: "String",
  encrypted: false,
  kms_key_id: "KmsKeyId",
  presigned_url: "String",
  source_region: "String", # required
  tag_specifications: [
    {
      resource_type: "client-vpn-endpoint", # accepts client-vpn-endpoint, customer-gateway, dedicated-host, dhcp-options, elastic-ip, elastic-gpu, export-image-task, export-instance-task, fleet, fpga-image, host-reservation, image, import-image-task, import-snapshot-task, instance, internet-gateway, key-pair, launch-template, local-gateway-route-table-vpc-association, natgateway, network-acl, network-interface, placement-group, reserved-instances, route-table, security-group, snapshot, spot-fleet-request, spot-instances-request, subnet, traffic-mirror-filter, traffic-mirror-session, traffic-mirror-target, transit-gateway, transit-gateway-attachment, transit-gateway-multicast-domain, transit-gateway-route-table, volume, vpc, vpc-peering-connection, vpn-connection, vpn-gateway, vpc-flow-log
      tags: [
        {
          key: "String",
          value: "String",
        },
      ],
    },
  ],
  dry_run: false,
})

Parameters:

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

    ({})

Options Hash (options):

  • :description (String)

    A description for the EBS snapshot.

  • :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 AWS CLI, this is specified using the --region parameter or the default Region in your AWS 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 Elastic Compute Cloud User Guide.

  • :kms_key_id (String)

    The identifier of the AWS Key Management Service (AWS KMS) customer master key (CMK) to use for Amazon EBS encryption. If this parameter is not specified, your AWS managed CMK for EBS is used. If KmsKeyId is specified, the encrypted state must be true.

    You can specify the CMK using any of the following:

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

    • Key alias. For example, alias/ExampleAlias.

    • Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef.

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

    AWS authenticates the CMK 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 AWS 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 by Using Query Parameters (AWS Signature Version 4) in the Amazon Simple Storage Service 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.

  • :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.

  • :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:



382
383
384
385
386
# File 'gems/aws-sdk-ec2/lib/aws-sdk-ec2/snapshot.rb', line 382

def copy(options = {})
  options = options.merge(source_snapshot_id: @id)
  resp = @client.copy_snapshot(options)
  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:



410
411
412
413
414
415
416
417
418
419
420
421
422
423
# File 'gems/aws-sdk-ec2/lib/aws-sdk-ec2/snapshot.rb', line 410

def create_tags(options = {})
  batch = []
  options = Aws::Util.deep_merge(options, resources: [@id])
  resp = @client.create_tags(options)
  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:



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

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)


46
47
48
# File 'gems/aws-sdk-ec2/lib/aws-sdk-ec2/snapshot.rb', line 46

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.



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

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)


480
481
482
483
484
# File 'gems/aws-sdk-ec2/lib/aws-sdk-ec2/snapshot.rb', line 480

def delete(options = {})
  options = options.merge(snapshot_id: @id)
  resp = @client.delete_snapshot(options)
  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 AWS-generated tags (tags that have the aws: prefix).

Returns:



453
454
455
456
457
458
459
460
461
462
463
464
465
466
# File 'gems/aws-sdk-ec2/lib/aws-sdk-ec2/snapshot.rb', line 453

def delete_tags(options = {})
  batch = []
  options = Aws::Util.deep_merge(options, resources: [@id])
  resp = @client.delete_tags(options)
  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:



501
502
503
504
505
# File 'gems/aws-sdk-ec2/lib/aws-sdk-ec2/snapshot.rb', line 501

def describe_attribute(options = {})
  options = options.merge(snapshot_id: @id)
  resp = @client.describe_snapshot_attribute(options)
  resp.data
end

#descriptionString

The description for the snapshot.

Returns:

  • (String)


52
53
54
# File 'gems/aws-sdk-ec2/lib/aws-sdk-ec2/snapshot.rb', line 52

def description
  data[:description]
end

#encryptedBoolean

Indicates whether the snapshot is encrypted.

Returns:

  • (Boolean)


58
59
60
# File 'gems/aws-sdk-ec2/lib/aws-sdk-ec2/snapshot.rb', line 58

def encrypted
  data[:encrypted]
end

#idString Also known as: snapshot_id

Returns:

  • (String)


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

def id
  @id
end

#kms_key_idString

The Amazon Resource Name (ARN) of the AWS Key Management Service (AWS KMS) customer master key (CMK) that was used to protect the volume encryption key for the parent volume.

Returns:

  • (String)


66
67
68
# File 'gems/aws-sdk-ec2/lib/aws-sdk-ec2/snapshot.rb', line 66

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)


146
147
148
149
150
# File 'gems/aws-sdk-ec2/lib/aws-sdk-ec2/snapshot.rb', line 146

def load
  resp = @client.describe_snapshots(snapshot_ids: [@id])
  @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: [
      {
        group: "all", # accepts all
        user_id: "String",
      },
    ],
    remove: [
      {
        group: "all", # accepts all
        user_id: "String",
      },
    ],
  },
  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)


548
549
550
551
552
# File 'gems/aws-sdk-ec2/lib/aws-sdk-ec2/snapshot.rb', line 548

def modify_attribute(options = {})
  options = options.merge(snapshot_id: @id)
  resp = @client.modify_snapshot_attribute(options)
  resp.data
end

#owner_aliasString

The AWS owner alias, as maintained by Amazon. The possible values are: amazon | self | all | aws-marketplace | microsoft. This AWS owner alias is not to be confused with the user-configured AWS account alias, which is set from the IAM console.

Returns:

  • (String)


123
124
125
# File 'gems/aws-sdk-ec2/lib/aws-sdk-ec2/snapshot.rb', line 123

def owner_alias
  data[:owner_alias]
end

#owner_idString

The AWS account ID of the EBS snapshot owner.

Returns:

  • (String)


72
73
74
# File 'gems/aws-sdk-ec2/lib/aws-sdk-ec2/snapshot.rb', line 72

def owner_id
  data[:owner_id]
end

#progressString

The progress of the snapshot, as a percentage.

Returns:

  • (String)


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

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)


570
571
572
573
574
# File 'gems/aws-sdk-ec2/lib/aws-sdk-ec2/snapshot.rb', line 570

def reset_attribute(options = {})
  options = options.merge(snapshot_id: @id)
  resp = @client.reset_snapshot_attribute(options)
  resp.data
end

#start_timeTime

The time stamp when the snapshot was initiated.

Returns:

  • (Time)


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

def start_time
  data[:start_time]
end

#stateString

The snapshot state.

Returns:

  • (String)


90
91
92
# File 'gems/aws-sdk-ec2/lib/aws-sdk-ec2/snapshot.rb', line 90

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 AWS Key Management Service (AWS 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)


100
101
102
# File 'gems/aws-sdk-ec2/lib/aws-sdk-ec2/snapshot.rb', line 100

def state_message
  data[:state_message]
end

#tagsArray<Types::Tag>

Any tags assigned to the snapshot.

Returns:



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

def tags
  data[:tags]
end

#volumeVolume?

Returns:



579
580
581
582
583
584
585
586
587
588
# File 'gems/aws-sdk-ec2/lib/aws-sdk-ec2/snapshot.rb', line 579

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)


108
109
110
# File 'gems/aws-sdk-ec2/lib/aws-sdk-ec2/snapshot.rb', line 108

def volume_id
  data[:volume_id]
end

#volume_sizeInteger

The size of the volume, in GiB.

Returns:

  • (Integer)


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

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



266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
# File 'gems/aws-sdk-ec2/lib/aws-sdk-ec2/snapshot.rb', line 266

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::Waiters::Waiter.new(options).wait({})
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:



174
175
176
177
178
179
180
181
182
183
184
# File 'gems/aws-sdk-ec2/lib/aws-sdk-ec2/snapshot.rb', line 174

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 = waiter.wait(params.merge(snapshot_ids: [@id]))
  Snapshot.new({
    id: @id,
    data: resp.data.snapshots[0],
    client: @client
  })
end