@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.
- package/dist/integrity.json +25 -24
- package/dist/manifest.json +1 -1
- package/dist/meta.json +349 -325
- package/dist/skills/chant-eks.md +175 -0
- package/dist/types/index.d.ts +68 -27
- package/package.json +2 -2
- package/src/codegen/docs.ts +92 -7
- package/src/generated/index.d.ts +68 -27
- package/src/generated/index.ts +3 -1
- package/src/generated/lexicon-aws.json +349 -325
- package/src/plugin.ts +318 -1
|
@@ -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`
|
package/dist/types/index.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
17812
|
+
/** The instance requirements for compute resources managed by the capacity provider. */
|
|
17807
17813
|
InstanceRequirements?: LambdaCapacityProvider_InstanceRequirements;
|
|
17808
|
-
/** The ARN of the
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
/**
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
25
|
+
"@intentius/chant": "0.0.13",
|
|
26
26
|
"fflate": "^0.8.2",
|
|
27
27
|
"js-yaml": "^4.1.0"
|
|
28
28
|
},
|
package/src/codegen/docs.ts
CHANGED
|
@@ -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-
|
|
152
|
+
{{file:docs-snippets/src/parameter-declaration.ts}}
|
|
153
153
|
|
|
154
154
|
Produces:
|
|
155
155
|
|
|
156
156
|
\`\`\`json
|
|
157
157
|
"Parameters": {
|
|
158
|
-
"
|
|
158
|
+
"Environment": {
|
|
159
159
|
"Type": "String",
|
|
160
|
-
"
|
|
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
|
|
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",
|