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
});