1import type * as autoscaling from "@distilled.cloud/aws/auto-scaling";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { AutoScalingGroup } from "./AutoScalingGroup.ts";
5
6/**
7 * `TerminateInstanceInAutoScalingGroup` request. The operation is
8 * instance-scoped — EC2 Auto Scaling resolves the instance's owning group for
9 * authorization, which the binding grants on the bound
10 * {@link AutoScalingGroup}'s ARN.
11 */
12export interface TerminateInstanceRequest
13 extends autoscaling.TerminateInstanceInAutoScalingGroupType {}
14
15/**
16 * Runtime binding for the `TerminateInstanceInAutoScalingGroup` operation
17 * (IAM action `autoscaling:TerminateInstanceInAutoScalingGroup` scoped to the
18 * group ARN).
19 *
20 * Requests termination of a specific instance, optionally decrementing the
21 * desired capacity — e.g. recycling a wedged worker (the group launches a
22 * replacement) or retiring the instance it runs on. Provide the
23 * implementation with
24 * `Effect.provide(AWS.AutoScaling.TerminateInstanceInAutoScalingGroupHttp)`.
25 * ### Manual Scaling
26 * **Example:** Recycle a wedged instance
27 * ```typescript
28 * // init — bind the operation to the group
29 * const terminateInstance =
30 * yield* AWS.AutoScaling.TerminateInstanceInAutoScalingGroup(group);
31 *
32 * // runtime — terminate and let the group launch a replacement
33 * const { Activity } = yield* terminateInstance({
34 * InstanceId: instanceId,
35 * ShouldDecrementDesiredCapacity: false,
36 * });
37 * ```
38 *
39 * @binding
40 */
41export interface TerminateInstanceInAutoScalingGroup extends Binding.Service<
42 TerminateInstanceInAutoScalingGroup,
43 "AWS.AutoScaling.TerminateInstanceInAutoScalingGroup",
44 (
45 group: AutoScalingGroup,
46 ) => Effect.Effect<
47 (
48 request: TerminateInstanceRequest,
49 ) => Effect.Effect<
50 autoscaling.ActivityType,
51 autoscaling.TerminateInstanceInAutoScalingGroupError
52 >
53 >
54> {}
55
56export const TerminateInstanceInAutoScalingGroup =
57 Binding.Service<TerminateInstanceInAutoScalingGroup>(
58 "AWS.AutoScaling.TerminateInstanceInAutoScalingGroup",
59 );