You are viewing documentation for version 3 of the AWS SDK for Ruby. Version 2 documentation can be found here.

Class: Aws::AutoScaling::LifecycleHook

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

Defined Under Namespace

Classes: Collection

Actions collapse

Associations collapse

Read-Only Attributes collapse

Instance Method Summary collapse

Constructor Details

#initialize(group_name, name, options = {}) ⇒ LifecycleHook #initialize(options = {}) ⇒ LifecycleHook

Returns a new instance of LifecycleHook

Overloads:

  • #initialize(group_name, name, options = {}) ⇒ LifecycleHook

    Parameters:

    • group_name (String)
    • name (String)

    Options Hash (options):

  • #initialize(options = {}) ⇒ LifecycleHook

    Options Hash (options):

    • :group_name (required, String)
    • :name (required, String)
    • :client (Client)


21
22
23
24
25
26
27
# File 'gems/aws-sdk-autoscaling/lib/aws-sdk-autoscaling/lifecycle_hook.rb', line 21

def initialize(*args)
  options = Hash === args.last ? args.pop.dup : {}
  @group_name = extract_group_name(args, options)
  @name = extract_name(args, options)
  @data = options.delete(:data)
  @client = options.delete(:client) || Client.new(options)
end

Instance Method Details

#clientClient

Returns:



103
104
105
# File 'gems/aws-sdk-autoscaling/lib/aws-sdk-autoscaling/lifecycle_hook.rb', line 103

def client
  @client
end

#complete(options = {}) ⇒ Types::CompleteLifecycleActionAnswer

Examples:

Request syntax with placeholder values


lifecycle_hook.complete({
  lifecycle_action_token: "LifecycleActionToken",
  lifecycle_action_result: "LifecycleActionResult", # required
  instance_id: "XmlStringMaxLen19",
})

Parameters:

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

    ({})

Options Hash (options):

  • :lifecycle_action_token (String)

    A universally unique identifier (UUID) that identifies a specific lifecycle action associated with an instance. Auto Scaling sends this token to the notification target you specified when you created the lifecycle hook.

  • :lifecycle_action_result (required, String)

    The action for the group to take. This parameter can be either CONTINUE or ABANDON.

  • :instance_id (String)

    The ID of the instance.

Returns:



254
255
256
257
258
259
260
261
# File 'gems/aws-sdk-autoscaling/lib/aws-sdk-autoscaling/lifecycle_hook.rb', line 254

def complete(options = {})
  options = options.merge(
    auto_scaling_group_name: @group_name,
    lifecycle_hook_name: @name
  )
  resp = @client.complete_lifecycle_action(options)
  resp.data
end

#dataTypes::LifecycleHook

Returns the data for this Aws::AutoScaling::LifecycleHook. Calls Client#describe_lifecycle_hooks if #data_loaded? is false.

Returns:



126
127
128
129
# File 'gems/aws-sdk-autoscaling/lib/aws-sdk-autoscaling/lifecycle_hook.rb', line 126

def data
  load unless @data
  @data
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.



134
135
136
# File 'gems/aws-sdk-autoscaling/lib/aws-sdk-autoscaling/lifecycle_hook.rb', line 134

def data_loaded?
  !!@data
end

#default_resultString

Defines the action the Auto Scaling group should take when the lifecycle hook timeout elapses or if an unexpected failure occurs. The valid values are CONTINUE and ABANDON. The default value is CONTINUE.

Returns:

  • (String)


96
97
98
# File 'gems/aws-sdk-autoscaling/lib/aws-sdk-autoscaling/lifecycle_hook.rb', line 96

def default_result
  data[:default_result]
end

#delete(options = {}) ⇒ Types::DeleteLifecycleHookAnswer

Examples:

Request syntax with placeholder values


lifecycle_hook.delete()

Parameters:

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

    ({})

Returns:



268
269
270
271
272
273
274
275
# File 'gems/aws-sdk-autoscaling/lib/aws-sdk-autoscaling/lifecycle_hook.rb', line 268

def delete(options = {})
  options = options.merge(
    auto_scaling_group_name: @group_name,
    lifecycle_hook_name: @name
  )
  resp = @client.delete_lifecycle_hook(options)
  resp.data
end

#global_timeoutInteger

The maximum time, in seconds, that an instance can remain in a Pending:Wait or Terminating:Wait state. The maximum is 172800 seconds (48 hours) or 100 times HeartbeatTimeout, whichever is smaller.

Returns:

  • (Integer)


87
88
89
# File 'gems/aws-sdk-autoscaling/lib/aws-sdk-autoscaling/lifecycle_hook.rb', line 87

def global_timeout
  data[:global_timeout]
end

#groupAutoScalingGroup

Returns:



365
366
367
368
369
370
# File 'gems/aws-sdk-autoscaling/lib/aws-sdk-autoscaling/lifecycle_hook.rb', line 365

def group
  AutoScalingGroup.new(
    name: @group_name,
    client: @client
  )
end

#group_nameString Also known as: auto_scaling_group_name

Returns:

  • (String)


32
33
34
# File 'gems/aws-sdk-autoscaling/lib/aws-sdk-autoscaling/lifecycle_hook.rb', line 32

def group_name
  @group_name
end

#heartbeat_timeoutInteger

The maximum time, in seconds, that can elapse before the lifecycle hook times out. If the lifecycle hook times out, Auto Scaling performs the default action. You can prevent the lifecycle hook from timing out by calling RecordLifecycleActionHeartbeat.

Returns:

  • (Integer)


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

def heartbeat_timeout
  data[:heartbeat_timeout]
end

#lifecycle_transitionString

The state of the EC2 instance to which you want to attach the lifecycle hook. For a list of lifecycle hook types, see DescribeLifecycleHookTypes.

Returns:

  • (String)


47
48
49
# File 'gems/aws-sdk-autoscaling/lib/aws-sdk-autoscaling/lifecycle_hook.rb', line 47

def lifecycle_transition
  data[:lifecycle_transition]
end

#loadself Also known as: reload

Loads, or reloads #data for the current Aws::AutoScaling::LifecycleHook. Returns self making it possible to chain methods.

lifecycle_hook.reload.data

Returns:

  • (self)


113
114
115
116
117
118
119
120
# File 'gems/aws-sdk-autoscaling/lib/aws-sdk-autoscaling/lifecycle_hook.rb', line 113

def load
  resp = @client.describe_lifecycle_hooks(
    auto_scaling_group_name: @group_name,
    lifecycle_hook_names: [@name]
  )
  @data = resp.lifecycle_hooks[0]
  self
end

#nameString Also known as: lifecycle_hook_name

Returns:

  • (String)


38
39
40
# File 'gems/aws-sdk-autoscaling/lib/aws-sdk-autoscaling/lifecycle_hook.rb', line 38

def name
  @name
end

#notification_metadataString

Additional information that you want to include any time Auto Scaling sends a message to the notification target.

Returns:

  • (String)


69
70
71
# File 'gems/aws-sdk-autoscaling/lib/aws-sdk-autoscaling/lifecycle_hook.rb', line 69

def 
  data[:notification_metadata]
end

#notification_target_arnString

The ARN of the target that Auto Scaling sends notifications to when an instance is in the transition state for the lifecycle hook. The notification target can be either an SQS queue or an SNS topic.

Returns:

  • (String)


55
56
57
# File 'gems/aws-sdk-autoscaling/lib/aws-sdk-autoscaling/lifecycle_hook.rb', line 55

def notification_target_arn
  data[:notification_target_arn]
end

#put(options = {}) ⇒ Types::PutLifecycleHookAnswer

Examples:

Request syntax with placeholder values


lifecycle_hook.put({
  lifecycle_transition: "LifecycleTransition",
  role_arn: "ResourceName",
  notification_target_arn: "NotificationTargetResourceName",
  notification_metadata: "XmlStringMaxLen1023",
  heartbeat_timeout: 1,
  default_result: "LifecycleActionResult",
})

Parameters:

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

    ({})

Options Hash (options):

  • :lifecycle_transition (String)

    The instance state to which you want to attach the lifecycle hook. For a list of lifecycle hook types, see DescribeLifecycleHookTypes.

    This parameter is required for new lifecycle hooks, but optional when updating existing hooks.

  • :role_arn (String)

    The ARN of the IAM role that allows the Auto Scaling group to publish to the specified notification target.

    This parameter is required for new lifecycle hooks, but optional when updating existing hooks.

  • :notification_target_arn (String)

    The ARN of the notification target that Auto Scaling will use to notify you when an instance is in the transition state for the lifecycle hook. This target can be either an SQS queue or an SNS topic. If you specify an empty string, this overrides the current ARN.

    This operation uses the JSON format when sending notifications to an Amazon SQS queue, and an email key/value pair format when sending notifications to an Amazon SNS topic.

    When you specify a notification target, Auto Scaling sends it a test message. Test messages contains the following additional key/value pair: "Event": "autoscaling:TEST_NOTIFICATION".

  • :notification_metadata (String)

    Contains additional information that you want to include any time Auto Scaling sends a message to the notification target.

  • :heartbeat_timeout (Integer)

    The maximum time, in seconds, that can elapse before the lifecycle hook times out. The range is from 30 to 7200 seconds. The default is 3600 seconds (1 hour).

    If the lifecycle hook times out, Auto Scaling performs the default action. You can prevent the lifecycle hook from timing out by calling RecordLifecycleActionHeartbeat.

  • :default_result (String)

    Defines the action the Auto Scaling group should take when the lifecycle hook timeout elapses or if an unexpected failure occurs. This parameter can be either CONTINUE or ABANDON. The default value is ABANDON.

Returns:



330
331
332
333
334
335
336
337
# File 'gems/aws-sdk-autoscaling/lib/aws-sdk-autoscaling/lifecycle_hook.rb', line 330

def put(options = {})
  options = options.merge(
    auto_scaling_group_name: @group_name,
    lifecycle_hook_name: @name
  )
  resp = @client.put_lifecycle_hook(options)
  resp.data
end

#record_heartbeat(options = {}) ⇒ Types::RecordLifecycleActionHeartbeatAnswer

Examples:

Request syntax with placeholder values


lifecycle_hook.record_heartbeat({
  lifecycle_action_token: "LifecycleActionToken",
  instance_id: "XmlStringMaxLen19",
})

Parameters:

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

    ({})

Options Hash (options):

  • :lifecycle_action_token (String)

    A token that uniquely identifies a specific lifecycle action associated with an instance. Auto Scaling sends this token to the notification target you specified when you created the lifecycle hook.

  • :instance_id (String)

    The ID of the instance.

Returns:



353
354
355
356
357
358
359
360
# File 'gems/aws-sdk-autoscaling/lib/aws-sdk-autoscaling/lifecycle_hook.rb', line 353

def record_heartbeat(options = {})
  options = options.merge(
    auto_scaling_group_name: @group_name,
    lifecycle_hook_name: @name
  )
  resp = @client.record_lifecycle_action_heartbeat(options)
  resp.data
end

#role_arnString

The ARN of the IAM role that allows the Auto Scaling group to publish to the specified notification target.

Returns:

  • (String)


62
63
64
# File 'gems/aws-sdk-autoscaling/lib/aws-sdk-autoscaling/lifecycle_hook.rb', line 62

def role_arn
  data[:role_arn]
end

#wait_until(options = {}, &block) ⇒ Resource

Deprecated.

Use [Aws::AutoScaling::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) {|instance| instance.state.name == 'running' }

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

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



216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
# File 'gems/aws-sdk-autoscaling/lib/aws-sdk-autoscaling/lifecycle_hook.rb', line 216

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