@intentius/chant-lexicon-aws 0.0.13 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,175 @@
1
+ ---
2
+ skill: chant-eks
3
+ description: End-to-end EKS workflow bridging AWS infrastructure and Kubernetes workloads
4
+ user-invocable: true
5
+ ---
6
+
7
+ # EKS End-to-End Workflow
8
+
9
+ ## Overview
10
+
11
+ This skill bridges two lexicons:
12
+ - **`@intentius/chant-lexicon-aws`** — EKS cluster, node groups, IAM roles, OIDC provider (CloudFormation)
13
+ - **`@intentius/chant-lexicon-k8s`** — Kubernetes workloads, IRSA, ALB Ingress, storage, observability (K8s YAML)
14
+
15
+ ## Architecture
16
+
17
+ ```
18
+ AWS Lexicon (CloudFormation) K8s Lexicon (kubectl apply)
19
+ ┌────────────────────────┐ ┌────────────────────────────┐
20
+ │ VPC + Subnets │ │ NamespaceEnv (quotas) │
21
+ │ EKS Cluster │ │ AutoscaledService (app) │
22
+ │ Managed Node Group │──ARNs──→ │ IrsaServiceAccount (IRSA) │
23
+ │ OIDC Provider │ │ AlbIngress (ALB) │
24
+ │ IAM Roles (IRSA) │ │ EbsStorageClass (gp3) │
25
+ │ EKS Add-ons │ │ FluentBitAgent (logs) │
26
+ └────────────────────────┘ │ ExternalDnsAgent (DNS) │
27
+ └────────────────────────────┘
28
+ ```
29
+
30
+ ## Step 1: Provision AWS Infrastructure
31
+
32
+ ```bash
33
+ # Build CloudFormation template
34
+ chant build src/infra/ --output infra.json
35
+
36
+ # Deploy
37
+ aws cloudformation deploy \
38
+ --template-file infra.json \
39
+ --stack-name my-eks-cluster \
40
+ --capabilities CAPABILITY_NAMED_IAM
41
+ ```
42
+
43
+ Key AWS resources:
44
+ - **EKS Cluster** — control plane
45
+ - **Managed Node Group** — EC2 worker nodes
46
+ - **OIDC Provider** — enables IRSA (IAM Roles for Service Accounts)
47
+ - **IAM Roles** — node role, app IRSA roles, ALB controller role
48
+
49
+ ## Step 2: Configure kubectl
50
+
51
+ ```bash
52
+ aws eks update-kubeconfig --name my-cluster --region us-east-1
53
+ kubectl get nodes # verify connectivity
54
+ ```
55
+
56
+ ## Step 3: Deploy K8s Workloads
57
+
58
+ ```bash
59
+ # Build K8s manifests
60
+ chant build src/k8s/ --output manifests.yaml
61
+
62
+ # Apply
63
+ kubectl apply -f manifests.yaml
64
+ ```
65
+
66
+ ### Key K8s composites for EKS
67
+
68
+ ```typescript
69
+ import {
70
+ NamespaceEnv,
71
+ AutoscaledService,
72
+ IrsaServiceAccount,
73
+ AlbIngress,
74
+ EbsStorageClass,
75
+ FluentBitAgent,
76
+ ExternalDnsAgent,
77
+ } from "@intentius/chant-lexicon-k8s";
78
+
79
+ // 1. Namespace with quotas and network isolation
80
+ const ns = NamespaceEnv({
81
+ name: "prod",
82
+ cpuQuota: "16",
83
+ memoryQuota: "32Gi",
84
+ defaultCpuRequest: "100m",
85
+ defaultMemoryRequest: "128Mi",
86
+ defaultDenyIngress: true,
87
+ });
88
+
89
+ // 2. IRSA ServiceAccount (use IAM Role ARN from CloudFormation outputs)
90
+ const irsa = IrsaServiceAccount({
91
+ name: "app-sa",
92
+ iamRoleArn: "arn:aws:iam::123456789012:role/app-role", // from CF output
93
+ namespace: "prod",
94
+ });
95
+
96
+ // 3. Application with autoscaling
97
+ const app = AutoscaledService({
98
+ name: "api",
99
+ image: "api:1.0",
100
+ port: 8080,
101
+ maxReplicas: 10,
102
+ cpuRequest: "200m",
103
+ memoryRequest: "256Mi",
104
+ namespace: "prod",
105
+ });
106
+
107
+ // 4. ALB Ingress (use ACM cert ARN from CloudFormation outputs)
108
+ const ingress = AlbIngress({
109
+ name: "api-ingress",
110
+ hosts: [{ hostname: "api.example.com", paths: [{ path: "/", serviceName: "api", servicePort: 80 }] }],
111
+ certificateArn: "arn:aws:acm:us-east-1:123456789012:certificate/abc", // from CF output
112
+ namespace: "prod",
113
+ });
114
+
115
+ // 5. Storage
116
+ const storage = EbsStorageClass({ name: "gp3-encrypted", type: "gp3", encrypted: true });
117
+
118
+ // 6. Observability
119
+ const logging = FluentBitAgent({
120
+ logGroup: "/aws/eks/my-cluster/containers",
121
+ region: "us-east-1",
122
+ clusterName: "my-cluster",
123
+ });
124
+
125
+ // 7. DNS
126
+ const dns = ExternalDnsAgent({
127
+ iamRoleArn: "arn:aws:iam::123456789012:role/external-dns-role",
128
+ domainFilters: ["example.com"],
129
+ });
130
+ ```
131
+
132
+ ## Step 4: Verify
133
+
134
+ ```bash
135
+ kubectl get pods -n prod
136
+ kubectl get ingress -n prod
137
+ kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=fluent-bit
138
+ ```
139
+
140
+ ## Cleanup
141
+
142
+ ```bash
143
+ # Delete K8s workloads first
144
+ kubectl delete -f manifests.yaml
145
+
146
+ # Then delete AWS infrastructure
147
+ aws cloudformation delete-stack --stack-name my-eks-cluster
148
+ aws cloudformation wait stack-delete-complete --stack-name my-eks-cluster
149
+ ```
150
+
151
+ ## Cross-Lexicon Value Flow
152
+
153
+ CloudFormation outputs flow into K8s composite props:
154
+
155
+ | CloudFormation Output | K8s Composite Prop |
156
+ |----------------------|-------------------|
157
+ | App IAM Role ARN | `IrsaServiceAccount.iamRoleArn` |
158
+ | ALB Controller Role ARN | `IrsaServiceAccount.iamRoleArn` (for ALB controller SA) |
159
+ | ACM Certificate ARN | `AlbIngress.certificateArn` |
160
+ | ExternalDNS Role ARN | `ExternalDnsAgent.iamRoleArn` |
161
+ | EKS Cluster Name | `FluentBitAgent.clusterName`, `AdotCollector.clusterName` |
162
+ | EFS Filesystem ID | `EfsStorageClass.fileSystemId` |
163
+
164
+ ## EKS Init Template
165
+
166
+ Scaffold a dual-lexicon EKS project:
167
+
168
+ ```bash
169
+ chant init --lexicon aws --template eks
170
+ ```
171
+
172
+ This creates:
173
+ - `src/infra/` — EKS cluster, node group, IAM (AWS lexicon)
174
+ - `src/k8s/` — namespace, app, ingress, storage (K8s lexicon)
175
+ - `package.json` with both `@intentius/chant-lexicon-aws` and `@intentius/chant-lexicon-k8s`
@@ -8251,7 +8251,8 @@ export declare class DbCluster {
8251
8251
  Valid for Cluster Type: Aurora DB clusters only */
8252
8252
  EngineMode?: string;
8253
8253
  /** The version number of the database engine to use.
8254
- To list all of the available engine versions for Aurora MySQL version 2 (5.7-compatible) and version 3 (8.0-compatible), use the following command:
8254
+ Don't use this property if your DB cluster is a member of a global database cluster. Instead, specify the ``EngineVersion`` property on the [AWS::RDS::GlobalCluster](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-globalcluster.html) resource. Major version upgrades aren't supported for individual members of a global cluster. Use ``ModifyGlobalCluster`` to upgrade all members of the global cluster.
8255
+ To list all of the available engine versions for Aurora MySQL version 2 (5.7-compatible) and version 3 (8.0-compatible), use the following command:
8255
8256
  ``aws rds describe-db-engine-versions --engine aurora-mysql --query "DBEngineVersions[].EngineVersion"``
8256
8257
  You can supply either ``5.7`` or ``8.0`` to use the default engine version for Aurora MySQL version 2 or version 3, respectively.
8257
8258
  To list all of the available engine versions for Aurora PostgreSQL, use the following command:
@@ -8997,7 +8998,14 @@ export declare class DbInstance {
8997
8998
  /** The AWS KMS key identifier for encryption of Performance Insights data.
8998
8999
  The KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key.
8999
9000
  If you do not specify a value for ``PerformanceInsightsKMSKeyId``, then Amazon RDS uses your default KMS key. There is a default KMS key for your AWS account. Your AWS account has a different default KMS key for each AWS Region.
9000
- For information about enabling Performance Insights, see [EnablePerformanceInsights](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-enableperformanceinsights). */
9001
+ *Update behavior:* Once Performance Insights is enabled with a KMS key, you cannot change to a different physical KMS key without replacing the DB instance. However, the following updates do not require replacement:
9002
+ + Enabling or disabling Performance Insights using the ``EnablePerformanceInsights`` property
9003
+ + Changing between different identifier formats (key ARN, key ID, alias ARN, alias name) of the same physical KMS key
9004
+ + Removing the ``PerformanceInsightsKMSKeyId`` property from your template
9005
+
9006
+ *Drift behavior:* If you specify ``PerformanceInsightsKMSKeyId`` while ``EnablePerformanceInsights`` is set to ``false``, CloudFormation will report drift. This occurs because the RDS API does not allow setting a KMS key when Performance Insights is disabled. CloudFormation ignores the ``PerformanceInsightsKMSKeyId`` value during instance creation to avoid API errors, resulting in a mismatch between your template and the actual instance configuration.
9007
+ To avoid drift, omit both ``EnablePerformanceInsights`` and ``PerformanceInsightsKMSKeyId`` during initial instance creation, then set both properties together when you're ready to enable Performance Insights.
9008
+ For information about enabling Performance Insights, see [EnablePerformanceInsights](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-enableperformanceinsights). */
9001
9009
  PerformanceInsightsKMSKeyId?: string;
9002
9010
  /** The number of days to retain Performance Insights data. When creating a DB instance without enabling Performance Insights, you can't specify the parameter ``PerformanceInsightsRetentionPeriod``.
9003
9011
  This setting doesn't apply to RDS Custom DB instances.
@@ -17793,23 +17801,20 @@ export declare class LambdaAlias {
17793
17801
 
17794
17802
  export declare class LambdaCapacityProvider {
17795
17803
  constructor(props: {
17796
- /** IAM permissions configuration for the capacity provider. */
17804
+ /** The permissions configuration for the capacity provider. */
17797
17805
  PermissionsConfig: LambdaCapacityProvider_CapacityProviderPermissionsConfig;
17798
- /** VPC configuration for the capacity provider. */
17806
+ /** The VPC configuration for the capacity provider. */
17799
17807
  VpcConfig: LambdaCapacityProvider_CapacityProviderVpcConfig;
17800
- /** The Amazon Resource Name (ARN) of the capacity provider. This is a read-only property that is automatically generated when the capacity provider is created. */
17801
17808
  Arn?: string;
17802
- /** The name of the capacity provider. The name must be unique within your AWS account and region. If you don't specify a name, CloudFormation generates one. */
17803
17809
  CapacityProviderName?: string;
17804
17810
  /** The scaling configuration for the capacity provider. */
17805
17811
  CapacityProviderScalingConfig?: LambdaCapacityProvider_CapacityProviderScalingConfig;
17806
- /** Specifications for the types of EC2 instances that the capacity provider can use. */
17812
+ /** The instance requirements for compute resources managed by the capacity provider. */
17807
17813
  InstanceRequirements?: LambdaCapacityProvider_InstanceRequirements;
17808
- /** The ARN of the AWS Key Management Service (KMS) key used by the capacity provider. */
17814
+ /** The ARN of the KMS key used to encrypt the capacity provider's resources. */
17809
17815
  KmsKeyArn?: string;
17810
- /** The current state of the capacity provider. */
17811
17816
  State?: LambdaCapacityProvider_CapacityProviderState;
17812
- /** A list of tags to apply to the capacity provider. */
17817
+ /** A key-value pair that provides metadata for the capacity provider. */
17813
17818
  Tags?: LambdaCapacityProvider_Tag[];
17814
17819
  }, attributes?: CFResourceAttributes);
17815
17820
  readonly Arn: string;
@@ -19590,20 +19595,32 @@ export declare class MailManagerTrafficPolicy {
19590
19595
 
19591
19596
  export declare class MaintenanceWindow {
19592
19597
  constructor(props: {
19598
+ /** Enables a maintenance window task to run on managed instances, even if you have not registered those instances as targets. If enabled, then you must specify the unregistered instances (by instance ID) when you register a task with the maintenance window. */
19593
19599
  AllowUnassociatedTargets: boolean;
19600
+ /** The number of hours before the end of the maintenance window that AWS Systems Manager stops scheduling new tasks for execution. */
19594
19601
  Cutoff: number;
19602
+ /** The duration of the maintenance window in hours. */
19595
19603
  Duration: number;
19604
+ /** The name of the maintenance window. */
19596
19605
  Name: string;
19606
+ /** The schedule of the maintenance window in the form of a cron or rate expression. */
19597
19607
  Schedule: string;
19608
+ /** A description of the maintenance window. */
19598
19609
  Description?: string;
19610
+ /** The date and time, in ISO-8601 Extended format, for when the maintenance window is scheduled to become inactive. */
19599
19611
  EndDate?: string;
19600
- Id?: string;
19612
+ /** The number of days to wait to run a maintenance window after the scheduled cron expression date and time. */
19601
19613
  ScheduleOffset?: number;
19614
+ /** The time zone that the scheduled maintenance window executions are based on, in Internet Assigned Numbers Authority (IANA) format. */
19602
19615
  ScheduleTimezone?: string;
19616
+ /** The date and time, in ISO-8601 Extended format, for when the maintenance window is scheduled to become active. StartDate allows you to delay activation of the maintenance window until the specified future date. */
19603
19617
  StartDate?: string;
19618
+ /** Optional metadata that you assign to a resource in the form of an arbitrary set of tags (key-value pairs). Tags enable you to categorize a resource in different ways, such as by purpose, owner, or environment. For example, you might want to tag a maintenance window to identify the type of tasks it will run, the types of targets, and the environment it will run in. */
19604
19619
  Tags?: MaintenanceWindow_Tag[];
19620
+ /** The ID of the maintenance window. */
19621
+ WindowId?: string;
19605
19622
  }, attributes?: CFResourceAttributes);
19606
- readonly Id: string;
19623
+ readonly WindowId: string;
19607
19624
  }
19608
19625
 
19609
19626
  export declare class MaintenanceWindowTarget {
@@ -22595,6 +22612,8 @@ export declare class OpenSearchServiceApplication {
22595
22612
  IamIdentityCenterOptions?: Record<string, unknown>;
22596
22613
  /** The identifier of the application. */
22597
22614
  Id?: string;
22615
+ /** The ARN of the KMS key used to encrypt the application. */
22616
+ KmsKeyArn?: string;
22598
22617
  /** An arbitrary set of tags (key-value pairs) for this application. */
22599
22618
  Tags?: OpenSearchServiceApplication_Tag[];
22600
22619
  }, attributes?: CFResourceAttributes);
@@ -54633,15 +54652,16 @@ export declare class CapacityProviderConfig {
54633
54652
 
54634
54653
  export declare class CapacityProviderPermissionsConfig {
54635
54654
  constructor(props: {
54636
- /** The ARN of the IAM role that Lambda assumes to manage the capacity provider. */
54655
+ /** The ARN of the IAM role that the capacity provider uses to manage compute instances and other AWS resources. */
54637
54656
  CapacityProviderOperatorRoleArn: string;
54638
54657
  });
54639
54658
  }
54640
54659
 
54641
54660
  export declare class CapacityProviderScalingConfig {
54642
54661
  constructor(props: {
54643
- /** The maximum number of EC2 instances that the capacity provider can scale up to. */
54662
+ /** The maximum number of vCPUs that the capacity provider can provision across all compute instances. */
54644
54663
  MaxVCpuCount?: number;
54664
+ /** The scaling mode that determines how the capacity provider responds to changes in demand. */
54645
54665
  ScalingMode?: LambdaCapacityProvider_CapacityProviderScalingMode;
54646
54666
  /** A list of target tracking scaling policies for the capacity provider. */
54647
54667
  ScalingPolicies?: LambdaCapacityProvider_TargetTrackingScalingPolicy[];
@@ -54658,9 +54678,9 @@ export declare class CapacityProviderStrategy {
54658
54678
 
54659
54679
  export declare class CapacityProviderVpcConfig {
54660
54680
  constructor(props: {
54661
- /** A list of security group IDs to associate with EC2 instances. */
54681
+ /** A list of security group IDs that control network access for compute instances managed by the capacity provider. */
54662
54682
  SecurityGroupIds: string[];
54663
- /** A list of subnet IDs where the capacity provider can launch EC2 instances. */
54683
+ /** A list of subnet IDs where the capacity provider launches compute instances. */
54664
54684
  SubnetIds: string[];
54665
54685
  });
54666
54686
  }
@@ -54711,6 +54731,13 @@ export declare class CapacityReservationOptionsRequest {
54711
54731
  });
54712
54732
  }
54713
54733
 
54734
+ export declare class CapacityReservationRequest {
54735
+ constructor(props: {
54736
+ ReservationGroupArn?: string;
54737
+ ReservationPreference?: "RESERVATIONS_EXCLUDED" | "RESERVATIONS_FIRST" | "RESERVATIONS_ONLY";
54738
+ });
54739
+ }
54740
+
54714
54741
  export declare class CapacitySize {
54715
54742
  constructor(props: {
54716
54743
  /** Specifies whether the `Value` is an instance count or a capacity unit. */
@@ -74098,11 +74125,19 @@ export declare class ECSCapacityProvider_BaselineEbsBandwidthMbpsRequest {
74098
74125
  });
74099
74126
  }
74100
74127
 
74128
+ export declare class ECSCapacityProvider_CapacityReservationRequest {
74129
+ constructor(props: {
74130
+ ReservationGroupArn?: string;
74131
+ ReservationPreference?: "RESERVATIONS_EXCLUDED" | "RESERVATIONS_FIRST" | "RESERVATIONS_ONLY";
74132
+ });
74133
+ }
74134
+
74101
74135
  export declare class ECSCapacityProvider_InstanceLaunchTemplate {
74102
74136
  constructor(props: {
74103
74137
  Ec2InstanceProfileArn: string;
74104
74138
  NetworkConfiguration: ECSCapacityProvider_ManagedInstancesNetworkConfiguration;
74105
- CapacityOptionType?: "ON_DEMAND" | "SPOT";
74139
+ CapacityOptionType?: "ON_DEMAND" | "RESERVED" | "SPOT";
74140
+ CapacityReservations?: ECSCapacityProvider_CapacityReservationRequest;
74106
74141
  FipsEnabled?: boolean;
74107
74142
  InstanceRequirements?: ECSCapacityProvider_InstanceRequirementsRequest;
74108
74143
  Monitoring?: ECSCapacityProvider_ManagedInstancesMonitoringOptions;
@@ -90276,7 +90311,8 @@ export declare class InstanceLaunchTemplate {
90276
90311
  constructor(props: {
90277
90312
  Ec2InstanceProfileArn: string;
90278
90313
  NetworkConfiguration: ECSCapacityProvider_ManagedInstancesNetworkConfiguration;
90279
- CapacityOptionType?: "ON_DEMAND" | "SPOT";
90314
+ CapacityOptionType?: "ON_DEMAND" | "RESERVED" | "SPOT";
90315
+ CapacityReservations?: ECSCapacityProvider_CapacityReservationRequest;
90280
90316
  FipsEnabled?: boolean;
90281
90317
  InstanceRequirements?: ECSCapacityProvider_InstanceRequirementsRequest;
90282
90318
  Monitoring?: ECSCapacityProvider_ManagedInstancesMonitoringOptions;
@@ -94879,15 +94915,16 @@ export declare class LambdaAlias_VersionWeight {
94879
94915
 
94880
94916
  export declare class LambdaCapacityProvider_CapacityProviderPermissionsConfig {
94881
94917
  constructor(props: {
94882
- /** The ARN of the IAM role that Lambda assumes to manage the capacity provider. */
94918
+ /** The ARN of the IAM role that the capacity provider uses to manage compute instances and other AWS resources. */
94883
94919
  CapacityProviderOperatorRoleArn: string;
94884
94920
  });
94885
94921
  }
94886
94922
 
94887
94923
  export declare class LambdaCapacityProvider_CapacityProviderScalingConfig {
94888
94924
  constructor(props: {
94889
- /** The maximum number of EC2 instances that the capacity provider can scale up to. */
94925
+ /** The maximum number of vCPUs that the capacity provider can provision across all compute instances. */
94890
94926
  MaxVCpuCount?: number;
94927
+ /** The scaling mode that determines how the capacity provider responds to changes in demand. */
94891
94928
  ScalingMode?: LambdaCapacityProvider_CapacityProviderScalingMode;
94892
94929
  /** A list of target tracking scaling policies for the capacity provider. */
94893
94930
  ScalingPolicies?: LambdaCapacityProvider_TargetTrackingScalingPolicy[];
@@ -94896,20 +94933,20 @@ export declare class LambdaCapacityProvider_CapacityProviderScalingConfig {
94896
94933
 
94897
94934
  export declare class LambdaCapacityProvider_CapacityProviderVpcConfig {
94898
94935
  constructor(props: {
94899
- /** A list of security group IDs to associate with EC2 instances. */
94936
+ /** A list of security group IDs that control network access for compute instances managed by the capacity provider. */
94900
94937
  SecurityGroupIds: string[];
94901
- /** A list of subnet IDs where the capacity provider can launch EC2 instances. */
94938
+ /** A list of subnet IDs where the capacity provider launches compute instances. */
94902
94939
  SubnetIds: string[];
94903
94940
  });
94904
94941
  }
94905
94942
 
94906
94943
  export declare class LambdaCapacityProvider_InstanceRequirements {
94907
94944
  constructor(props: {
94908
- /** A list of instance types that the capacity provider can use. Supports wildcards (for example, m5.*). */
94945
+ /** A list of EC2 instance types that the capacity provider is allowed to use. If not specified, all compatible instance types are allowed. */
94909
94946
  AllowedInstanceTypes?: string[];
94910
- /** The instruction set architecture for EC2 instances. Specify either x86_64 or arm64. */
94947
+ /** A list of supported CPU architectures for compute instances. Valid values include ``x86_64`` and ``arm64``. */
94911
94948
  Architectures?: LambdaCapacityProvider_Architecture[];
94912
- /** A list of instance types that the capacity provider should not use. Takes precedence over AllowedInstanceTypes. */
94949
+ /** A list of EC2 instance types that the capacity provider should not use, even if they meet other requirements. */
94913
94950
  ExcludedInstanceTypes?: string[];
94914
94951
  });
94915
94952
  }
@@ -94925,8 +94962,9 @@ export declare class LambdaCapacityProvider_Tag {
94925
94962
 
94926
94963
  export declare class LambdaCapacityProvider_TargetTrackingScalingPolicy {
94927
94964
  constructor(props: {
94965
+ /** The predefined metric type to track for scaling decisions. */
94928
94966
  PredefinedMetricType: LambdaCapacityProvider_CapacityProviderPredefinedMetricType;
94929
- /** The target value for the metric as a percentage (for example, 70.0 for 70%). */
94967
+ /** The target value for the metric that the scaling policy attempts to maintain through scaling actions. */
94930
94968
  TargetValue: number;
94931
94969
  });
94932
94970
  }
@@ -99160,7 +99198,9 @@ export declare class MaintenanceStrategies {
99160
99198
 
99161
99199
  export declare class MaintenanceWindow_Tag {
99162
99200
  constructor(props: {
99201
+ /** The name of the tag. */
99163
99202
  Key: string;
99203
+ /** The value of the tag. */
99164
99204
  Value: string;
99165
99205
  });
99166
99206
  }
@@ -143418,8 +143458,9 @@ export declare class TargetTrackingScalingConfiguration {
143418
143458
 
143419
143459
  export declare class TargetTrackingScalingPolicy {
143420
143460
  constructor(props: {
143461
+ /** The predefined metric type to track for scaling decisions. */
143421
143462
  PredefinedMetricType: LambdaCapacityProvider_CapacityProviderPredefinedMetricType;
143422
- /** The target value for the metric as a percentage (for example, 70.0 for 70%). */
143463
+ /** The target value for the metric that the scaling policy attempts to maintain through scaling actions. */
143423
143464
  TargetValue: number;
143424
143465
  });
143425
143466
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intentius/chant-lexicon-aws",
3
- "version": "0.0.13",
3
+ "version": "0.0.14",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "files": ["src/", "dist/"],
@@ -22,7 +22,7 @@
22
22
  "prepack": "bun run bundle && bun run validate"
23
23
  },
24
24
  "dependencies": {
25
- "@intentius/chant": "0.0.12",
25
+ "@intentius/chant": "0.0.13",
26
26
  "fflate": "^0.8.2",
27
27
  "js-yaml": "^4.1.0"
28
28
  },
@@ -149,22 +149,23 @@ When you reference a resource or attribute from another file (e.g. \`dataBucket.
149
149
 
150
150
  CloudFormation parameters let you customize a stack at deploy time. Export a \`Parameter\` to add it to the template's \`Parameters\` section:
151
151
 
152
- {{file:docs-snippets/src/parameter-ref.ts}}
152
+ {{file:docs-snippets/src/parameter-declaration.ts}}
153
153
 
154
154
  Produces:
155
155
 
156
156
  \`\`\`json
157
157
  "Parameters": {
158
- "Name": {
158
+ "Environment": {
159
159
  "Type": "String",
160
- "Description": "Project name used in resource naming"
160
+ "Default": "dev",
161
+ "Description": "Deployment environment"
161
162
  }
162
163
  }
163
164
  \`\`\`
164
165
 
165
166
  Reference parameters with \`Ref\`:
166
167
 
167
- {{file:docs-snippets/src/parameter-ref.ts}}
168
+ {{file:docs-snippets/src/parameter-cross-file-ref.ts}}
168
169
 
169
170
  ## Outputs
170
171
 
@@ -201,7 +202,7 @@ Runtime context values available in every template, accessed via the \`AWS\` nam
201
202
 
202
203
  ## Intrinsic functions
203
204
 
204
- The lexicon provides 8 intrinsic functions (\`Sub\`, \`Ref\`, \`GetAtt\`, \`If\`, \`Join\`, \`Select\`, \`Split\`, \`Base64\`) that map directly to CloudFormation \`Fn::\` calls. See [Intrinsic Functions](../intrinsics/) for full usage examples.
205
+ The lexicon provides 9 intrinsic functions (\`Sub\`, \`Ref\`, \`GetAtt\`, \`If\`, \`Join\`, \`Select\`, \`Split\`, \`Base64\`, \`GetAZs\`) that map directly to CloudFormation \`Fn::\` calls. See [Intrinsic Functions](../intrinsics/) for full usage examples.
205
206
 
206
207
  ## Dependencies
207
208
 
@@ -369,7 +370,13 @@ Splits a string by a delimiter:
369
370
 
370
371
  Encodes a string to Base64, commonly used for EC2 user data:
371
372
 
372
- {{file:docs-snippets/src/intrinsics-detail.ts:23-27}}`,
373
+ {{file:docs-snippets/src/intrinsics-detail.ts:23-27}}
374
+
375
+ ## \`GetAZs\` — availability zones
376
+
377
+ Returns the list of Availability Zones for a region:
378
+
379
+ {{file:docs-snippets/src/intrinsics-detail.ts:29-31}}`,
373
380
  },
374
381
  {
375
382
  slug: "composites",
@@ -750,6 +757,72 @@ WAW030: API Gateway Deployment "MyDeployment" has no DependsOn on any Method
750
757
  WAW030: ScalableTarget "MyTarget" targets DynamoDB but has no DependsOn on any Table
751
758
  \`\`\`
752
759
 
760
+ ### WAW018 — S3 Bucket Missing Public Access Block
761
+
762
+ **Severity:** error | **Category:** security
763
+
764
+ Flags S3 buckets without a \`PublicAccessBlockConfiguration\`. Without an explicit public access block, the bucket may be publicly accessible. Always set \`BlockPublicAcls\`, \`BlockPublicPolicy\`, \`IgnorePublicAcls\`, and \`RestrictPublicBuckets\` to \`true\`.
765
+
766
+ ### WAW019 — Security Group Unrestricted Ingress on Sensitive Ports
767
+
768
+ **Severity:** error | **Category:** security
769
+
770
+ Flags security group ingress rules that allow unrestricted access (\`0.0.0.0/0\` or \`::/0\`) on sensitive ports (22, 3389, 3306, 5432, 1433, 6379, 27017). Restrict ingress to known CIDR ranges or security groups.
771
+
772
+ ### WAW020 — IAM Policy Uses Wildcard Action
773
+
774
+ **Severity:** warning | **Category:** security
775
+
776
+ Flags IAM policy statements that use wildcard actions (\`"Action": "*"\` or \`"Action": "s3:*"\`). Use specific action names following the principle of least privilege.
777
+
778
+ ### WAW021 — RDS Storage Not Encrypted
779
+
780
+ **Severity:** error | **Category:** security
781
+
782
+ Flags RDS instances without \`StorageEncrypted: true\`. All RDS instances should encrypt data at rest to meet compliance and security requirements.
783
+
784
+ ### WAW022 — Lambda Not in VPC
785
+
786
+ **Severity:** warning | **Category:** security
787
+
788
+ Flags Lambda functions without a \`VpcConfig\`. Functions that access internal resources (databases, caches, internal APIs) should run inside a VPC. Functions that only call public APIs can safely skip VPC configuration.
789
+
790
+ ### WAW023 — CloudFront Without WAF
791
+
792
+ **Severity:** warning | **Category:** security
793
+
794
+ Flags CloudFront distributions without a \`WebACLId\`. Attaching a WAF web ACL protects your distribution from common web exploits and bots.
795
+
796
+ ### WAW024 — ALB Without Access Logging
797
+
798
+ **Severity:** warning | **Category:** best practice
799
+
800
+ Flags Application Load Balancers without access logging enabled. Enable \`access_logs.s3.enabled\` to capture request logs for debugging and compliance.
801
+
802
+ ### WAW025 — SNS Topic Not Encrypted
803
+
804
+ **Severity:** warning | **Category:** security
805
+
806
+ Flags SNS topics without \`KmsMasterKeyId\`. Encrypting topics at rest protects sensitive notification payloads.
807
+
808
+ ### WAW026 — SQS Queue Not Encrypted
809
+
810
+ **Severity:** warning | **Category:** security
811
+
812
+ Flags SQS queues without \`KmsMasterKeyId\` or \`SqsManagedSseEnabled\`. Encrypting queues at rest protects sensitive message payloads.
813
+
814
+ ### WAW027 — DynamoDB Missing Point-in-Time Recovery
815
+
816
+ **Severity:** info | **Category:** best practice
817
+
818
+ Flags DynamoDB tables without \`PointInTimeRecoverySpecification.PointInTimeRecoveryEnabled\` set to \`true\`. Point-in-time recovery provides continuous backups and protects against accidental writes or deletes.
819
+
820
+ ### WAW028 — EBS Volume Not Encrypted
821
+
822
+ **Severity:** warning | **Category:** security
823
+
824
+ Flags EBS volumes without \`Encrypted: true\`. All EBS volumes should encrypt data at rest for compliance and security.
825
+
753
826
  ## Running lint
754
827
 
755
828
  \`\`\`bash
@@ -954,7 +1027,19 @@ src/
954
1027
  - **Composite presets** — \`SecureApi\` (low memory, short timeout) and \`HighMemoryApi\` (high memory, longer timeout)
955
1028
  - **Custom lint rule** — \`api-timeout.ts\` enforces API Gateway's 29-second timeout limit (see [Custom Lint Rules](../custom-rules/))
956
1029
 
957
- The example produces 10 CloudFormation resources: 1 S3 bucket + 3 composites × 3 members each.`,
1030
+ The example produces 10 CloudFormation resources: 1 S3 bucket + 3 composites × 3 members each.
1031
+
1032
+ ## RDS Instance
1033
+
1034
+ \`examples/rds-postgres/\` — production RDS PostgreSQL instance using the \`RdsInstance\` composite with VPC networking and SSM parameter references.
1035
+
1036
+ {{file:rds-postgres/src/params.ts}}
1037
+
1038
+ {{file:rds-postgres/src/network.ts}}
1039
+
1040
+ {{file:rds-postgres/src/database.ts}}
1041
+
1042
+ Produces a complete RDS stack: VPC infrastructure (from \`VpcDefault\`), DB subnet group, security group, and RDS instance with encrypted storage.`,
958
1043
  },
959
1044
  {
960
1045
  slug: "skills",