CompleteLifecycleAction
Source:
src/AWS/AutoScaling/CompleteLifecycleAction.ts
A write binding that lets a Function/Instance complete or heartbeat paused
lifecycle actions on an Auto Scaling Group. Grants
autoscaling:CompleteLifecycleAction and
autoscaling:RecordLifecycleActionHeartbeat scoped to the group ARN.
Completing Lifecycle Actions
Section titled “Completing Lifecycle Actions”Signal CONTINUE from a lifecycle handler
const lifecycle = yield* CompleteLifecycleAction(group);yield* lifecycle.complete({ LifecycleHookName: event.detail.LifecycleHookName, LifecycleActionToken: event.detail.LifecycleActionToken, LifecycleActionResult: "CONTINUE",});Drain launching instances from a Lambda Function
import * as AWS from "alchemy/AWS";import { CompleteLifecycleAction, CompleteLifecycleActionHttp, consumeLifecycleActions,} from "alchemy/AWS/AutoScaling";
export class LifecycleFunction extends AWS.Lambda.Function<AWS.Lambda.Function>()( "LifecycleFunction",) {}
export default LifecycleFunction.make( { main: import.meta.url }, Effect.gen(function* () { const lifecycle = yield* CompleteLifecycleAction(group);
yield* consumeLifecycleActions( group, { lifecycleTransition: "LAUNCHING", heartbeatTimeout: "300 seconds" }, (events) => Stream.runForEach(events, (event) => lifecycle .complete({ LifecycleHookName: event.detail.LifecycleHookName, LifecycleActionToken: event.detail.LifecycleActionToken, LifecycleActionResult: "CONTINUE", }) .pipe(Effect.orDie), ), );
return {}; }).pipe( Effect.provide( Layer.mergeAll(AWS.Lambda.EventSource, CompleteLifecycleActionHttp), ), ),);Buy more time with a heartbeat
// reset the heartbeat timeout while a long drain is still in progressyield* lifecycle.heartbeat({ LifecycleHookName: event.detail.LifecycleHookName, LifecycleActionToken: event.detail.LifecycleActionToken,});