Skip to content

LifecycleHook

The LifecycleHook resource allows you to manage AWS AutoScaling LifecycleHooks which enable you to perform custom actions during the instance launch and termination process.

Minimal Example

Create a basic LifecycleHook with required properties and one optional property.

ts
import AWS from "alchemy/aws/control";

const lifecycleHook = await AWS.AutoScaling.LifecycleHook("myLifecycleHook", {
  LifecycleHookName: "InstanceLaunchHook",
  LifecycleTransition: "autoscaling:EC2_INSTANCE_LAUNCHING",
  AutoScalingGroupName: "myAutoScalingGroup",
  HeartbeatTimeout: 300 // Wait for up to 5 minutes for a heartbeat
});

Advanced Configuration

Configure a LifecycleHook with additional parameters including notification settings and IAM role.

ts
const advancedLifecycleHook = await AWS.AutoScaling.LifecycleHook("myAdvancedLifecycleHook", {
  LifecycleHookName: "InstanceTerminationHook",
  LifecycleTransition: "autoscaling:EC2_INSTANCE_TERMINATING",
  AutoScalingGroupName: "myAutoScalingGroup",
  HeartbeatTimeout: 600, // Wait for up to 10 minutes for a heartbeat
  NotificationTargetARN: "arn:aws:sns:us-west-2:123456789012:mySnsTopic",
  RoleARN: "arn:aws:iam::123456789012:role/myAutoScalingRole",
  DefaultResult: "ABANDON" // Default action to take if no heartbeat is received
});

Using Notification Metadata

This example demonstrates how to include notification metadata for the LifecycleHook.

ts
const lifecycleHookWithMetadata = await AWS.AutoScaling.LifecycleHook("myLifecycleHookWithMetadata", {
  LifecycleHookName: "InstanceLaunchHookWithMetadata",
  LifecycleTransition: "autoscaling:EC2_INSTANCE_LAUNCHING",
  AutoScalingGroupName: "myAutoScalingGroup",
  NotificationMetadata: JSON.stringify({ instanceId: "i-1234567890abcdef0", action: "launch" })
});

Adopting Existing Resources

This example shows how to adopt an existing LifecycleHook resource instead of failing when it already exists.

ts
const adoptLifecycleHook = await AWS.AutoScaling.LifecycleHook("myAdoptedLifecycleHook", {
  LifecycleHookName: "ExistingHook",
  LifecycleTransition: "autoscaling:EC2_INSTANCE_TERMINATING",
  AutoScalingGroupName: "myAutoScalingGroup",
  adopt: true // Adopt existing resource if it already exists
});