1import type * as efs from "@distilled.cloud/aws/efs";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { FileSystem } from "./FileSystem.ts";
5
6/**
7 * `PutLifecycleConfiguration` request with `FileSystemId` injected from the
8 * bound {@link FileSystem}.
9 */
10export interface PutLifecycleConfigurationRequest extends Omit<
11 efs.PutLifecycleConfigurationRequest,
12 "FileSystemId"
13> {}
14
15/**
16 * Runtime binding for the `PutLifecycleConfiguration` operation (IAM action
17 * `elasticfilesystem:PutLifecycleConfiguration` on the file system ARN).
18 *
19 * Replaces the bound {@link FileSystem}'s lifecycle management rules at
20 * runtime; an empty `LifecyclePolicies` array disables lifecycle management.
21 * For declarative control, prefer the FileSystem resource's
22 * `lifecyclePolicies` prop — this binding is for operational tooling that
23 * tunes storage tiering on demand. Provide the implementation with
24 * `Effect.provide(AWS.EFS.PutLifecycleConfigurationHttp)`.
25 * ### Lifecycle Management
26 * **Example:** Tier cold files to Infrequent Access
27 * ```typescript
28 * const putLifecycleConfiguration =
29 * yield* AWS.EFS.PutLifecycleConfiguration(files);
30 *
31 * yield* putLifecycleConfiguration({
32 * LifecyclePolicies: [{ TransitionToIA: "AFTER_30_DAYS" }],
33 * });
34 * ```
35 *
36 * @binding
37 */
38export interface PutLifecycleConfiguration extends Binding.Service<
39 PutLifecycleConfiguration,
40 "AWS.EFS.PutLifecycleConfiguration",
41 (
42 fileSystem: FileSystem,
43 ) => Effect.Effect<
44 (
45 request: PutLifecycleConfigurationRequest,
46 ) => Effect.Effect<
47 efs.LifecycleConfigurationDescription,
48 efs.PutLifecycleConfigurationError
49 >
50 >
51> {}
52export const PutLifecycleConfiguration =
53 Binding.Service<PutLifecycleConfiguration>(
54 "AWS.EFS.PutLifecycleConfiguration",
55 );