1import type * as elbv2 from "@distilled.cloud/aws/elastic-load-balancing-v2";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { TargetGroup } from "./TargetGroup.ts";
5
6/**
7 * `DeregisterTargets` request with `TargetGroupArn` injected from the bound
8 * {@link TargetGroup}.
9 */
10export interface DeregisterTargetsRequest extends Omit<
11 elbv2.DeregisterTargetsInput,
12 "TargetGroupArn"
13> {}
14
15/**
16 * Runtime binding for the `DeregisterTargets` operation (IAM action
17 * `elasticloadbalancing:DeregisterTargets` scoped to the target-group ARN).
18 *
19 * Deregisters targets from the bound target group at runtime — the target
20 * enters `draining` and is removed once in-flight requests complete. Pairs
21 * with {@link RegisterTargets} for custom blue/green orchestration or
22 * graceful self-removal on shutdown.
23 * Provide the implementation with
24 * `Effect.provide(AWS.ELBv2.DeregisterTargetsHttp)`.
25 * ### Dynamic Target Management
26 * **Example:** Drain an IP target
27 * ```typescript
28 * // init — bind the operation to the target group
29 * const deregisterTargets = yield* AWS.ELBv2.DeregisterTargets(targetGroup);
30 *
31 * // runtime — start draining the target
32 * yield* deregisterTargets({
33 * Targets: [{ Id: "10.0.1.15", Port: 8080 }],
34 * });
35 * ```
36 *
37 * @binding
38 */
39export interface DeregisterTargets extends Binding.Service<
40 DeregisterTargets,
41 "AWS.ELBv2.DeregisterTargets",
42 (
43 targetGroup: TargetGroup,
44 ) => Effect.Effect<
45 (
46 request: DeregisterTargetsRequest,
47 ) => Effect.Effect<
48 elbv2.DeregisterTargetsOutput,
49 elbv2.DeregisterTargetsError
50 >
51 >
52> {}
53
54export const DeregisterTargets = Binding.Service<DeregisterTargets>(
55 "AWS.ELBv2.DeregisterTargets",
56);