@venturekit/infra 0.0.40 → 0.0.41
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/README.md +91 -0
- package/dist/cdk/app-stack.d.ts +15 -0
- package/dist/cdk/app-stack.d.ts.map +1 -1
- package/dist/cdk/app-stack.js +16 -0
- package/dist/cdk/app-stack.js.map +1 -1
- package/dist/cdk/compute-stack.d.ts +146 -0
- package/dist/cdk/compute-stack.d.ts.map +1 -0
- package/dist/cdk/compute-stack.js +485 -0
- package/dist/cdk/compute-stack.js.map +1 -0
- package/dist/cdk/config-stack.d.ts.map +1 -1
- package/dist/cdk/config-stack.js +14 -0
- package/dist/cdk/config-stack.js.map +1 -1
- package/dist/cdk/data-stack.d.ts.map +1 -1
- package/dist/cdk/data-stack.js +30 -14
- package/dist/cdk/data-stack.js.map +1 -1
- package/dist/cdk/edge-stack.d.ts.map +1 -1
- package/dist/cdk/edge-stack.js +42 -6
- package/dist/cdk/edge-stack.js.map +1 -1
- package/dist/cdk/index.d.ts +7 -1
- package/dist/cdk/index.d.ts.map +1 -1
- package/dist/cdk/index.js +7 -1
- package/dist/cdk/index.js.map +1 -1
- package/dist/cdk/services-stack.d.ts +143 -0
- package/dist/cdk/services-stack.d.ts.map +1 -0
- package/dist/cdk/services-stack.js +562 -0
- package/dist/cdk/services-stack.js.map +1 -0
- package/dist/cdk/shared/service-alarms.d.ts +83 -0
- package/dist/cdk/shared/service-alarms.d.ts.map +1 -0
- package/dist/cdk/shared/service-alarms.js +180 -0
- package/dist/cdk/shared/service-alarms.js.map +1 -0
- package/dist/cdk/shared/ssm-keys.d.ts +104 -0
- package/dist/cdk/shared/ssm-keys.d.ts.map +1 -1
- package/dist/cdk/shared/ssm-keys.js +56 -0
- package/dist/cdk/shared/ssm-keys.js.map +1 -1
- package/dist/venture.d.ts +23 -1
- package/dist/venture.d.ts.map +1 -1
- package/dist/venture.js +52 -0
- package/dist/venture.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,485 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tier — Compute stack: the pools `services[]` run on (`compute[]`).
|
|
3
|
+
*
|
|
4
|
+
* One ECS cluster per pool, and per `kind`:
|
|
5
|
+
*
|
|
6
|
+
* - `instance` — the machines every service of the pool runs on: an Auto
|
|
7
|
+
* Scaling group of `instances.min`–`max` (the preset's `machines.count`
|
|
8
|
+
* by default) behind an explicit launch template (a launch
|
|
9
|
+
* *configuration* is deprecated and refused in accounts opened after
|
|
10
|
+
* June 2024), in the private subnets unless `placement: 'public'`, a
|
|
11
|
+
* capacity provider the cluster knows them by, a security group that is
|
|
12
|
+
* every service's door (tasks use the host's network), and a private
|
|
13
|
+
* hosted zone for their names. Operators reach a machine through SSM
|
|
14
|
+
* Session Manager: no key pair, no open port.
|
|
15
|
+
*
|
|
16
|
+
* What fronts the machines is decided by the services' ports:
|
|
17
|
+
* - any `public` port → an internet-facing Network Load Balancer with an
|
|
18
|
+
* Elastic IP per AZ — the fixed addresses devices are configured
|
|
19
|
+
* with — the group as instance target, client addresses preserved;
|
|
20
|
+
* - any `shared` port, or a `vpc` port of a named service on a pool of
|
|
21
|
+
* several machines → an internal Network Load Balancer, and, for the
|
|
22
|
+
* shared ports, a VPC Endpoint Service other ventures reach through
|
|
23
|
+
* a private link.
|
|
24
|
+
* A pool of one machine with neither is just the machine: the zone's
|
|
25
|
+
* wildcard record points at its private IP, registered at boot. The zone
|
|
26
|
+
* exists for names — a pool none of whose services declares `dns` has
|
|
27
|
+
* none.
|
|
28
|
+
* - `serverless` — the cluster and, for named services, a Cloud Map private
|
|
29
|
+
* DNS namespace on the same zone name; the services tier registers each
|
|
30
|
+
* task's name in it.
|
|
31
|
+
*
|
|
32
|
+
* # Why the pool knows the services
|
|
33
|
+
*
|
|
34
|
+
* On an `instance` pool the machines' security group admits what the
|
|
35
|
+
* services' ports declare, the balancers' listeners are those ports, the
|
|
36
|
+
* machines' disks carry the services' persistent volumes, and the machines —
|
|
37
|
+
* not a task — are what the databases they use admit. So this stack reads
|
|
38
|
+
* `services[]` too, for the pool's sake only; the tasks themselves are the
|
|
39
|
+
* services tier's.
|
|
40
|
+
*
|
|
41
|
+
* # Lifecycle position
|
|
42
|
+
*
|
|
43
|
+
* Rarely updated: a size, a count, a disk. The balancer's Elastic IPs are the
|
|
44
|
+
* external contract — units in the field are configured with them — hence
|
|
45
|
+
* `retainAddress` (default: retained under strict data safety).
|
|
46
|
+
*
|
|
47
|
+
* # Public surface (via SSM)
|
|
48
|
+
*
|
|
49
|
+
* - `computeKeys.clusterName / privateZoneName` per pool;
|
|
50
|
+
* - `computeKeys.capacityProviderName / instanceSecurityGroupId /
|
|
51
|
+
* alarmTopicArn` per instance pool;
|
|
52
|
+
* - `computeKeys.loadBalancerDnsName / addresses` when the pool has a
|
|
53
|
+
* public balancer, `internalLoadBalancerDnsName / endpointServiceName`
|
|
54
|
+
* when it has an internal one / an endpoint service.
|
|
55
|
+
*/
|
|
56
|
+
import * as cdk from 'aws-cdk-lib';
|
|
57
|
+
import * as autoscaling from 'aws-cdk-lib/aws-autoscaling';
|
|
58
|
+
import * as ec2 from 'aws-cdk-lib/aws-ec2';
|
|
59
|
+
import * as ecs from 'aws-cdk-lib/aws-ecs';
|
|
60
|
+
import * as elbv2 from 'aws-cdk-lib/aws-elasticloadbalancingv2';
|
|
61
|
+
import * as iam from 'aws-cdk-lib/aws-iam';
|
|
62
|
+
import * as route53 from 'aws-cdk-lib/aws-route53';
|
|
63
|
+
import * as route53Targets from 'aws-cdk-lib/aws-route53-targets';
|
|
64
|
+
import * as servicediscovery from 'aws-cdk-lib/aws-servicediscovery';
|
|
65
|
+
import { DATA_SAFETY_CONFIG, architectureOf, assertValid, poolMachineCount, validateComputeAndServices, } from '@venturekit/core';
|
|
66
|
+
import { writeSsm } from './shared/cross-stack-refs.js';
|
|
67
|
+
import { computeKeys } from './shared/ssm-keys.js';
|
|
68
|
+
import { ServiceAlarms } from './shared/service-alarms.js';
|
|
69
|
+
/** Memory the ECS agent keeps for the operating system and itself on an instance pool, MiB. */
|
|
70
|
+
export const INSTANCE_RESERVED_MEMORY_MIB = 384;
|
|
71
|
+
/** Where an instance pool keeps the services' persistent volumes: `<root>/<service>/<volume>`. */
|
|
72
|
+
export const INSTANCE_VOLUME_ROOT = '/var/lib/venturekit';
|
|
73
|
+
/** The zone services are named under when the pool gives none. */
|
|
74
|
+
export function defaultPrivateZone(projectName, stage) {
|
|
75
|
+
return `${stage}.${projectName}.internal`;
|
|
76
|
+
}
|
|
77
|
+
/** The host path of a service's persistent volume on an instance pool. */
|
|
78
|
+
export function instanceVolumePath(serviceId, volume) {
|
|
79
|
+
return `${INSTANCE_VOLUME_ROOT}/${serviceId}/${volume}`;
|
|
80
|
+
}
|
|
81
|
+
/** The pool a service is on: its own `compute`, else the first declared. */
|
|
82
|
+
export function poolOf(service, compute) {
|
|
83
|
+
return service.compute === undefined ? compute[0] : compute.find((p) => p.id === service.compute);
|
|
84
|
+
}
|
|
85
|
+
/** The instance type of a pool: spelled out on the intent, else the stage's table for its `size`. */
|
|
86
|
+
export function instanceTypeOf(intent, envConfig) {
|
|
87
|
+
return intent.instanceType ?? envConfig.machines.sizes[intent.size ?? 'medium'];
|
|
88
|
+
}
|
|
89
|
+
export class VentureComputeStack extends cdk.Stack {
|
|
90
|
+
/** In-process handles for the services tier, keyed by pool id. */
|
|
91
|
+
pools = new Map();
|
|
92
|
+
isStrictRetain;
|
|
93
|
+
constructor(scope, id, props) {
|
|
94
|
+
super(scope, id, props);
|
|
95
|
+
const { projectName, stage, envConfig, infrastructure, vpc } = props;
|
|
96
|
+
assertValid(validateComputeAndServices(infrastructure));
|
|
97
|
+
this.isStrictRetain = DATA_SAFETY_CONFIG[envConfig.dataSafety].removalPolicy === 'retain';
|
|
98
|
+
const compute = infrastructure.compute ?? [];
|
|
99
|
+
const services = (infrastructure.services ?? []).filter((s) => !s.external);
|
|
100
|
+
for (const intent of compute) {
|
|
101
|
+
const onPool = services.filter((s) => poolOf(s, compute)?.id === intent.id);
|
|
102
|
+
const pool = intent.kind === 'instance'
|
|
103
|
+
? this.createInstancePool(intent, onPool, props)
|
|
104
|
+
: this.createServerlessPool(intent, onPool, projectName, stage, vpc);
|
|
105
|
+
this.pools.set(intent.id, pool);
|
|
106
|
+
writeSsm(this, computeKeys.clusterName(projectName, stage, intent.id), pool.cluster.clusterName, {
|
|
107
|
+
description: `ECS cluster of compute pool '${intent.id}' (${intent.kind}).`,
|
|
108
|
+
});
|
|
109
|
+
if (pool.hasZone) {
|
|
110
|
+
writeSsm(this, computeKeys.privateZoneName(projectName, stage, intent.id), pool.zoneName, {
|
|
111
|
+
description: `Private DNS zone services on pool '${intent.id}' are named under; resolves inside the VPC only.`,
|
|
112
|
+
});
|
|
113
|
+
new cdk.CfnOutput(this, `Pool${logicalSuffix(intent.id)}Zone`, {
|
|
114
|
+
value: pool.zoneName,
|
|
115
|
+
description: `*.${pool.zoneName} names the services of pool ${intent.id}, inside the VPC`,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
createServerlessPool(intent, onPool, projectName, stage, vpc) {
|
|
121
|
+
const name = `${projectName}-${stage}-${intent.id}`;
|
|
122
|
+
const zoneName = intent.privateZone ?? defaultPrivateZone(projectName, stage);
|
|
123
|
+
// Container Insights is a per-metric bill; the services' log groups say what their tasks are doing.
|
|
124
|
+
const cluster = new ecs.Cluster(this, `Cluster${logicalSuffix(intent.id)}`, {
|
|
125
|
+
vpc,
|
|
126
|
+
clusterName: name,
|
|
127
|
+
containerInsightsV2: ecs.ContainerInsights.DISABLED,
|
|
128
|
+
});
|
|
129
|
+
const namespace = onPool.some((s) => s.dns)
|
|
130
|
+
? new servicediscovery.PrivateDnsNamespace(this, `Namespace${logicalSuffix(intent.id)}`, {
|
|
131
|
+
name: zoneName,
|
|
132
|
+
vpc,
|
|
133
|
+
description: `${name}: the services of the pool, by name, for the venture's Lambdas`,
|
|
134
|
+
})
|
|
135
|
+
: undefined;
|
|
136
|
+
return {
|
|
137
|
+
intent,
|
|
138
|
+
kind: 'serverless',
|
|
139
|
+
architecture: intent.architecture ?? 'arm64',
|
|
140
|
+
cluster,
|
|
141
|
+
zoneName,
|
|
142
|
+
hasZone: namespace !== undefined,
|
|
143
|
+
machines: { min: 0, max: 0 },
|
|
144
|
+
namespace,
|
|
145
|
+
addresses: [],
|
|
146
|
+
targetGroups: new Map(),
|
|
147
|
+
sharedPorts: [],
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
createInstancePool(intent, onPool, props) {
|
|
151
|
+
const { projectName, stage, envConfig, vpc } = props;
|
|
152
|
+
const name = `${projectName}-${stage}-${intent.id}`;
|
|
153
|
+
const suffix = logicalSuffix(intent.id);
|
|
154
|
+
const instanceType = instanceTypeOf(intent, envConfig);
|
|
155
|
+
const architecture = architectureOf(instanceType);
|
|
156
|
+
const zoneName = intent.privateZone ?? defaultPrivateZone(projectName, stage);
|
|
157
|
+
const machines = poolMachineCount(intent, envConfig.machines.count);
|
|
158
|
+
const fleet = machines.max > 1;
|
|
159
|
+
const placement = intent.placement ?? 'private';
|
|
160
|
+
const swapMiB = intent.swapMiB ?? 0;
|
|
161
|
+
const retainAddresses = intent.retainAddress ?? this.isStrictRetain;
|
|
162
|
+
const addressPolicy = retainAddresses ? cdk.RemovalPolicy.RETAIN : cdk.RemovalPolicy.DESTROY;
|
|
163
|
+
// ── The ports, from the services ─────────────────────────────────
|
|
164
|
+
const ports = [];
|
|
165
|
+
for (const service of onPool) {
|
|
166
|
+
for (const container of service.containers ?? []) {
|
|
167
|
+
for (const p of container.ports ?? []) {
|
|
168
|
+
if (p.expose && p.expose !== 'none')
|
|
169
|
+
ports.push({ serviceId: service.id, containerName: container.name, port: p.port, expose: p.expose, from: p.from ?? [], tls: p.tls });
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
const publicPorts = ports.filter((p) => p.expose === 'public');
|
|
174
|
+
const sharedPorts = ports.filter((p) => p.expose === 'shared');
|
|
175
|
+
const vpcPorts = ports.filter((p) => p.expose === 'vpc');
|
|
176
|
+
const named = new Set(onPool.filter((s) => s.dns).map((s) => s.id));
|
|
177
|
+
// On several machines a name has to be a balancer's; a vpc port of a named service is a listener on the internal one.
|
|
178
|
+
const internalListeners = [...sharedPorts, ...(fleet ? vpcPorts.filter((p) => named.has(p.serviceId)) : [])];
|
|
179
|
+
const healthOf = (serviceId) => onPool.find((s) => s.id === serviceId)?.health;
|
|
180
|
+
// ── The door ─────────────────────────────────────────────────────
|
|
181
|
+
// Tasks use the host's network, so this group is every service's:
|
|
182
|
+
// what their ports declare, and nothing else. Public ports admit their
|
|
183
|
+
// ranges (a balancer preserves the client's address) and the VPC (the
|
|
184
|
+
// balancer's own health checks and TLS-terminated traffic come from
|
|
185
|
+
// inside it); vpc and shared ports admit the VPC; health ports admit
|
|
186
|
+
// the VPC. Operators come in through Session Manager, which needs no
|
|
187
|
+
// port.
|
|
188
|
+
const securityGroup = new ec2.SecurityGroup(this, `InstanceSg${suffix}`, {
|
|
189
|
+
vpc,
|
|
190
|
+
description: `${name}: the services' declared ports, nothing else`,
|
|
191
|
+
allowAllOutbound: true,
|
|
192
|
+
});
|
|
193
|
+
const vpcRange = ec2.Peer.ipv4(vpc.vpcCidrBlock);
|
|
194
|
+
// EC2 rule descriptions reject apostrophes — a-zA-Z0-9. _-:/()#,@[]+=&;{}!$* only.
|
|
195
|
+
for (const p of ports) {
|
|
196
|
+
if (p.expose === 'public') {
|
|
197
|
+
for (const cidr of p.from)
|
|
198
|
+
securityGroup.addIngressRule(ec2.Peer.ipv4(cidr), ec2.Port.tcp(p.port), `${p.serviceId}/${p.containerName} :${p.port} from ${cidr}`);
|
|
199
|
+
}
|
|
200
|
+
securityGroup.addIngressRule(vpcRange, ec2.Port.tcp(p.port), `${p.serviceId}/${p.containerName} :${p.port} from the VPC`);
|
|
201
|
+
}
|
|
202
|
+
for (const service of onPool) {
|
|
203
|
+
if (service.health)
|
|
204
|
+
securityGroup.addIngressRule(vpcRange, ec2.Port.tcp(service.health.port), `${service.id} health checks :${service.health.port} from the VPC`);
|
|
205
|
+
}
|
|
206
|
+
// The machines, once, for every task on them — the rule lands in THIS
|
|
207
|
+
// stack against the imported group, the way the app stack admits its Lambdas.
|
|
208
|
+
const databases = new Set(onPool.map((s) => s.database).filter((d) => d !== undefined));
|
|
209
|
+
for (const dbId of databases) {
|
|
210
|
+
const conn = props.databaseConnectionsById?.get(dbId);
|
|
211
|
+
if (!conn) {
|
|
212
|
+
throw new Error(`[venturekit] compute stack: a service on pool '${intent.id}' declares database '${dbId}' ` +
|
|
213
|
+
`but databaseConnectionsById has no entry for it. The CLI generator must wire dataStack.databases into VentureComputeStackProps.`);
|
|
214
|
+
}
|
|
215
|
+
const dbSg = ec2.SecurityGroup.fromSecurityGroupId(this, `ImportedDbSg${suffix}-${dbId}`, conn.securityGroupId, { mutable: true });
|
|
216
|
+
dbSg.connections.allowFrom(securityGroup, ec2.Port.tcp(conn.port), `Allow ${name} to connect to db ${dbId}`);
|
|
217
|
+
}
|
|
218
|
+
// ── The machines ─────────────────────────────────────────────────
|
|
219
|
+
// The zone exists for names: none of the services named, none needed.
|
|
220
|
+
const zone = named.size > 0
|
|
221
|
+
? new route53.PrivateHostedZone(this, `Zone${suffix}`, {
|
|
222
|
+
zoneName,
|
|
223
|
+
vpc,
|
|
224
|
+
comment: `${name}: the services on the machines, by name`,
|
|
225
|
+
})
|
|
226
|
+
: undefined;
|
|
227
|
+
const cluster = new ecs.Cluster(this, `Cluster${suffix}`, {
|
|
228
|
+
vpc,
|
|
229
|
+
clusterName: name,
|
|
230
|
+
containerInsightsV2: ecs.ContainerInsights.DISABLED,
|
|
231
|
+
});
|
|
232
|
+
const role = new iam.Role(this, `InstanceRole${suffix}`, {
|
|
233
|
+
assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'),
|
|
234
|
+
description: `${name}: what a machine may do for itself; the ECS agent's permissions come from the capacity provider`,
|
|
235
|
+
});
|
|
236
|
+
const launchTemplate = new ec2.LaunchTemplate(this, `LaunchTemplate${suffix}`, {
|
|
237
|
+
instanceType: new ec2.InstanceType(instanceType),
|
|
238
|
+
machineImage: ecs.EcsOptimizedImage.amazonLinux2023(architecture === 'arm64' ? ecs.AmiHardwareType.ARM : ecs.AmiHardwareType.STANDARD),
|
|
239
|
+
securityGroup,
|
|
240
|
+
role,
|
|
241
|
+
userData: ec2.UserData.forLinux(),
|
|
242
|
+
requireImdsv2: true,
|
|
243
|
+
// Private machines have no public address at all and leave through the VPC's NAT.
|
|
244
|
+
associatePublicIpAddress: placement === 'public',
|
|
245
|
+
blockDevices: [
|
|
246
|
+
{
|
|
247
|
+
deviceName: '/dev/xvda',
|
|
248
|
+
volume: ec2.BlockDeviceVolume.ebs(intent.diskGiB ?? envConfig.machines.diskGiB, {
|
|
249
|
+
volumeType: ec2.EbsDeviceVolumeType.GP3,
|
|
250
|
+
encrypted: true,
|
|
251
|
+
deleteOnTermination: true,
|
|
252
|
+
}),
|
|
253
|
+
},
|
|
254
|
+
],
|
|
255
|
+
});
|
|
256
|
+
const group = new autoscaling.AutoScalingGroup(this, `Group${suffix}`, {
|
|
257
|
+
vpc,
|
|
258
|
+
vpcSubnets: { subnetType: placement === 'public' ? ec2.SubnetType.PUBLIC : ec2.SubnetType.PRIVATE_WITH_EGRESS },
|
|
259
|
+
launchTemplate,
|
|
260
|
+
minCapacity: machines.min,
|
|
261
|
+
maxCapacity: machines.max,
|
|
262
|
+
desiredCapacity: machines.min,
|
|
263
|
+
// Free, and what the no-instance alarm reads.
|
|
264
|
+
groupMetrics: [autoscaling.GroupMetrics.all()],
|
|
265
|
+
// A new AMI or user data replaces the machines one at a time; a pool of
|
|
266
|
+
// several keeps all but one in service throughout, a pool of one comes
|
|
267
|
+
// back on the replacement within minutes.
|
|
268
|
+
updatePolicy: autoscaling.UpdatePolicy.rollingUpdate({ minInstancesInService: fleet ? machines.min - 1 : 0, maxBatchSize: 1 }),
|
|
269
|
+
newInstancesProtectedFromScaleIn: false,
|
|
270
|
+
});
|
|
271
|
+
// What a machine may do for itself: be reached through Session Manager,
|
|
272
|
+
// and — alone on its pool — publish its name. Everything the ECS agent
|
|
273
|
+
// needs is granted by the capacity provider below.
|
|
274
|
+
group.role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonSSMManagedInstanceCore'));
|
|
275
|
+
if (zone && !fleet) {
|
|
276
|
+
group.role.addToPrincipalPolicy(new iam.PolicyStatement({
|
|
277
|
+
sid: 'PublishTheName',
|
|
278
|
+
actions: ['route53:ChangeResourceRecordSets'],
|
|
279
|
+
resources: [zone.hostedZoneArn],
|
|
280
|
+
}));
|
|
281
|
+
}
|
|
282
|
+
const volumePaths = onPool.flatMap((s) => (s.volumes ?? []).filter((v) => v.persistent).map((v) => instanceVolumePath(s.id, v.name)));
|
|
283
|
+
group.addUserData('set -euo pipefail',
|
|
284
|
+
// The ECS agent: the OS's share is not the tasks'.
|
|
285
|
+
`echo ECS_RESERVED_MEMORY=${INSTANCE_RESERVED_MEMORY_MIB} >> /etc/ecs/ecs.config`, 'echo ECS_ENABLE_CONTAINER_METADATA=true >> /etc/ecs/ecs.config', ...(swapMiB > 0
|
|
286
|
+
? [`fallocate -l ${swapMiB}M /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile && echo '/swapfile none swap sw 0 0' >> /etc/fstab`]
|
|
287
|
+
: []), ...volumePaths.map((p) => `mkdir -p ${p} && chmod 0777 ${p}`), ...(!zone || fleet
|
|
288
|
+
? []
|
|
289
|
+
: [
|
|
290
|
+
// Alone on the pool, the machine is the name: every service on it, under the pool's zone (IMDSv2).
|
|
291
|
+
`TOKEN=$(curl -sS -X PUT http://169.254.169.254/latest/api/token -H 'X-aws-ec2-metadata-token-ttl-seconds: 60')`,
|
|
292
|
+
`PRIVATE_IP=$(curl -sS -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/local-ipv4)`,
|
|
293
|
+
`aws route53 change-resource-record-sets --hosted-zone-id ${zone.hostedZoneId} --change-batch "{\\"Changes\\":[{\\"Action\\":\\"UPSERT\\",\\"ResourceRecordSet\\":{\\"Name\\":\\"*.${zoneName}.\\",\\"Type\\":\\"A\\",\\"TTL\\":60,\\"ResourceRecords\\":[{\\"Value\\":\\"$PRIVATE_IP\\"}]}}]}"`,
|
|
294
|
+
]));
|
|
295
|
+
const capacityProvider = new ecs.AsgCapacityProvider(this, `Capacity${suffix}`, {
|
|
296
|
+
capacityProviderName: `${name}-machines`,
|
|
297
|
+
autoScalingGroup: group,
|
|
298
|
+
// The count is the intent's; nothing scales the group.
|
|
299
|
+
enableManagedScaling: false,
|
|
300
|
+
enableManagedTerminationProtection: false,
|
|
301
|
+
machineImageType: ecs.MachineImageType.AMAZON_LINUX_2,
|
|
302
|
+
});
|
|
303
|
+
cluster.addAsgCapacityProvider(capacityProvider);
|
|
304
|
+
// ── What fronts them ─────────────────────────────────────────────
|
|
305
|
+
const targetGroups = new Map();
|
|
306
|
+
const targetGroupFor = (p, preserveClientIp) => {
|
|
307
|
+
const existing = targetGroups.get(p.port);
|
|
308
|
+
if (existing)
|
|
309
|
+
return existing;
|
|
310
|
+
const health = healthOf(p.serviceId);
|
|
311
|
+
const targetGroup = new elbv2.NetworkTargetGroup(this, `Targets${suffix}${p.port}`, {
|
|
312
|
+
vpc,
|
|
313
|
+
port: p.port,
|
|
314
|
+
protocol: elbv2.Protocol.TCP,
|
|
315
|
+
targetType: elbv2.TargetType.INSTANCE,
|
|
316
|
+
preserveClientIp,
|
|
317
|
+
// A client whose machine is going away should reconnect now, not when its keepalive notices.
|
|
318
|
+
connectionTermination: true,
|
|
319
|
+
deregistrationDelay: cdk.Duration.seconds(30),
|
|
320
|
+
healthCheck: health
|
|
321
|
+
? { protocol: elbv2.Protocol.HTTP, path: health.path, port: String(health.port), interval: cdk.Duration.seconds(10), timeout: cdk.Duration.seconds(5), healthyThresholdCount: 2, unhealthyThresholdCount: 2 }
|
|
322
|
+
: { protocol: elbv2.Protocol.TCP, interval: cdk.Duration.seconds(10), healthyThresholdCount: 2, unhealthyThresholdCount: 2 },
|
|
323
|
+
});
|
|
324
|
+
targetGroup.addTarget(group);
|
|
325
|
+
targetGroups.set(p.port, targetGroup);
|
|
326
|
+
return targetGroup;
|
|
327
|
+
};
|
|
328
|
+
let publicLoadBalancer;
|
|
329
|
+
const addresses = [];
|
|
330
|
+
if (publicPorts.length > 0) {
|
|
331
|
+
const balancerSg = new ec2.SecurityGroup(this, `PublicBalancerSg${suffix}`, {
|
|
332
|
+
vpc,
|
|
333
|
+
description: `${name} public balancer: the public ports from their ranges, TLS doors from anywhere`,
|
|
334
|
+
allowAllOutbound: true,
|
|
335
|
+
});
|
|
336
|
+
for (const p of publicPorts) {
|
|
337
|
+
for (const cidr of p.from)
|
|
338
|
+
balancerSg.addIngressRule(ec2.Peer.ipv4(cidr), ec2.Port.tcp(p.port), `${p.serviceId}/${p.containerName} :${p.port} from ${cidr}`);
|
|
339
|
+
if (p.tls)
|
|
340
|
+
balancerSg.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(p.tls.port ?? 443), `${p.serviceId}/${p.containerName} TLS to :${p.port}`);
|
|
341
|
+
if (p.from.length === 0) {
|
|
342
|
+
cdk.Annotations.of(this).addWarningV2(`venturekit:compute:public-port-closed:${p.serviceId}:${p.port}`, `${name}: port ${p.port} of ${p.serviceId}/${p.containerName} is public with no ranges in 'from', so it admits nobody. List the ranges that may reach it.`);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
vpc.publicSubnets.forEach((_, i) => {
|
|
346
|
+
const address = new ec2.CfnEIP(this, `Address${suffix}${i + 1}`, { domain: 'vpc', tags: [{ key: 'Name', value: `${name}-${i + 1}` }] });
|
|
347
|
+
address.applyRemovalPolicy(addressPolicy);
|
|
348
|
+
addresses.push(address);
|
|
349
|
+
});
|
|
350
|
+
publicLoadBalancer = new elbv2.NetworkLoadBalancer(this, `PublicBalancer${suffix}`, {
|
|
351
|
+
vpc,
|
|
352
|
+
loadBalancerName: `${name}-pub`.slice(0, 32),
|
|
353
|
+
internetFacing: true,
|
|
354
|
+
// One machine in one AZ must be reachable through every address.
|
|
355
|
+
crossZoneEnabled: true,
|
|
356
|
+
securityGroups: [balancerSg],
|
|
357
|
+
subnetMappings: vpc.publicSubnets.map((subnet, i) => ({ subnet, allocationId: addresses[i].attrAllocationId })),
|
|
358
|
+
});
|
|
359
|
+
for (const p of publicPorts) {
|
|
360
|
+
const targetGroup = targetGroupFor(p, true);
|
|
361
|
+
publicLoadBalancer.addListener(`Listener${suffix}${p.port}`, { port: p.port, protocol: elbv2.Protocol.TCP, defaultTargetGroups: [targetGroup] });
|
|
362
|
+
if (p.tls) {
|
|
363
|
+
publicLoadBalancer.addListener(`Tls${suffix}${p.port}`, {
|
|
364
|
+
port: p.tls.port ?? 443,
|
|
365
|
+
protocol: elbv2.Protocol.TLS,
|
|
366
|
+
certificates: [elbv2.ListenerCertificate.fromArn(p.tls.certificateArn)],
|
|
367
|
+
sslPolicy: elbv2.SslPolicy.RECOMMENDED_TLS,
|
|
368
|
+
defaultTargetGroups: [targetGroup],
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
let internalLoadBalancer;
|
|
374
|
+
let endpointService;
|
|
375
|
+
if (internalListeners.length > 0) {
|
|
376
|
+
// No group on the internal balancer: a private link's traffic arrives
|
|
377
|
+
// from AWS, not from an address a rule could name; the machines' group
|
|
378
|
+
// is the door (it admits the VPC on these ports, which is where the
|
|
379
|
+
// balancer's addresses are).
|
|
380
|
+
internalLoadBalancer = new elbv2.NetworkLoadBalancer(this, `InternalBalancer${suffix}`, {
|
|
381
|
+
vpc,
|
|
382
|
+
loadBalancerName: `${name}-int`.slice(0, 32),
|
|
383
|
+
internetFacing: false,
|
|
384
|
+
vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS },
|
|
385
|
+
crossZoneEnabled: true,
|
|
386
|
+
});
|
|
387
|
+
const seen = new Set();
|
|
388
|
+
for (const p of internalListeners) {
|
|
389
|
+
if (seen.has(p.port))
|
|
390
|
+
continue;
|
|
391
|
+
seen.add(p.port);
|
|
392
|
+
// Client addresses cannot be preserved through a private link; the machines see the balancer's.
|
|
393
|
+
internalLoadBalancer.addListener(`Internal${suffix}${p.port}`, { port: p.port, protocol: elbv2.Protocol.TCP, defaultTargetGroups: [targetGroupFor(p, false)] });
|
|
394
|
+
}
|
|
395
|
+
if (zone && fleet) {
|
|
396
|
+
new route53.ARecord(this, `ZoneAlias${suffix}`, {
|
|
397
|
+
zone,
|
|
398
|
+
recordName: `*.${zoneName}`,
|
|
399
|
+
target: route53.RecordTarget.fromAlias(new route53Targets.LoadBalancerTarget(internalLoadBalancer)),
|
|
400
|
+
comment: `${name}: every named service on the pool, through the internal balancer`,
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
if (sharedPorts.length > 0) {
|
|
404
|
+
// Other ventures of this account connect their interface endpoints
|
|
405
|
+
// here; no acceptance step, the account is the boundary.
|
|
406
|
+
endpointService = new ec2.VpcEndpointService(this, `EndpointService${suffix}`, {
|
|
407
|
+
vpcEndpointServiceLoadBalancers: [internalLoadBalancer],
|
|
408
|
+
acceptanceRequired: false,
|
|
409
|
+
allowedPrincipals: [new iam.ArnPrincipal(`arn:${this.partition}:iam::${this.account}:root`)],
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
// ── Who hears when the machines are gone ─────────────────────────
|
|
414
|
+
const alarms = new ServiceAlarms(this, `Alarms${suffix}`, { name, email: intent.alarms?.email });
|
|
415
|
+
alarms.instanceOut(group, `${name} (the machines every service of the pool runs on)`, machines.min);
|
|
416
|
+
// ── Public surface ───────────────────────────────────────────────
|
|
417
|
+
writeSsm(this, computeKeys.capacityProviderName(projectName, stage, intent.id), capacityProvider.capacityProviderName, {
|
|
418
|
+
description: `Capacity provider a service names to land on pool '${intent.id}''s machines.`,
|
|
419
|
+
});
|
|
420
|
+
writeSsm(this, computeKeys.instanceSecurityGroupId(projectName, stage, intent.id), securityGroup.securityGroupId, {
|
|
421
|
+
description: `Security group of pool '${intent.id}''s machines — every service on them uses the host network, so this is their door.`,
|
|
422
|
+
});
|
|
423
|
+
writeSsm(this, computeKeys.alarmTopicArn(projectName, stage, intent.id), alarms.topic.topicArn, {
|
|
424
|
+
description: `SNS topic pool '${intent.id}''s machine alarms ring.`,
|
|
425
|
+
});
|
|
426
|
+
if (publicLoadBalancer) {
|
|
427
|
+
writeSsm(this, computeKeys.loadBalancerDnsName(projectName, stage, intent.id), publicLoadBalancer.loadBalancerDnsName, {
|
|
428
|
+
description: `Internet-facing balancer in front of pool '${intent.id}''s public ports — a CNAME target.`,
|
|
429
|
+
});
|
|
430
|
+
writeSsm(this, computeKeys.addresses(projectName, stage, intent.id), cdk.Fn.join(',', addresses.map((a) => a.ref)), {
|
|
431
|
+
description: `Fixed public addresses of pool '${intent.id}' (one per AZ) — what devices are configured with.`,
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
if (internalLoadBalancer) {
|
|
435
|
+
writeSsm(this, computeKeys.internalLoadBalancerDnsName(projectName, stage, intent.id), internalLoadBalancer.loadBalancerDnsName, {
|
|
436
|
+
description: `Internal balancer in front of pool '${intent.id}''s shared and named ports; resolves inside the VPC only.`,
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
if (endpointService) {
|
|
440
|
+
writeSsm(this, computeKeys.endpointServiceName(projectName, stage, intent.id), endpointService.vpcEndpointServiceName, {
|
|
441
|
+
description: `Endpoint service other ventures connect an interface endpoint to, for pool '${intent.id}''s shared ports.`,
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
new cdk.CfnOutput(this, `Pool${suffix}Machines`, { value: `${machines.min}–${machines.max} × ${instanceType} (${architecture}), ${placement} subnets` });
|
|
445
|
+
if (publicLoadBalancer) {
|
|
446
|
+
new cdk.CfnOutput(this, `Pool${suffix}Addresses`, {
|
|
447
|
+
value: cdk.Fn.join(', ', addresses.map((a) => a.ref)),
|
|
448
|
+
description: 'One Elastic IP per AZ — point the public hostname at them, or a CNAME at the balancer name',
|
|
449
|
+
});
|
|
450
|
+
new cdk.CfnOutput(this, `Pool${suffix}LoadBalancerDnsName`, { value: publicLoadBalancer.loadBalancerDnsName });
|
|
451
|
+
}
|
|
452
|
+
if (endpointService) {
|
|
453
|
+
new cdk.CfnOutput(this, `Pool${suffix}EndpointService`, { value: endpointService.vpcEndpointServiceName, description: 'What a consumer venture names in services[].external (resolved from SSM for it)' });
|
|
454
|
+
}
|
|
455
|
+
new cdk.CfnOutput(this, `Pool${suffix}Shell`, {
|
|
456
|
+
value: `aws ssm start-session --region ${this.region} --target <instance id from: aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names ${group.autoScalingGroupName}>`,
|
|
457
|
+
description: 'A shell on a machine, no key pair, no open port',
|
|
458
|
+
});
|
|
459
|
+
return {
|
|
460
|
+
intent,
|
|
461
|
+
kind: 'instance',
|
|
462
|
+
architecture,
|
|
463
|
+
cluster,
|
|
464
|
+
zoneName,
|
|
465
|
+
hasZone: zone !== undefined,
|
|
466
|
+
machines,
|
|
467
|
+
capacityProvider,
|
|
468
|
+
publicLoadBalancer,
|
|
469
|
+
addresses,
|
|
470
|
+
internalLoadBalancer,
|
|
471
|
+
endpointService,
|
|
472
|
+
targetGroups,
|
|
473
|
+
sharedPorts: [...new Set(sharedPorts.map((p) => p.port))],
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
/** `my-pool` → `MyPool`, for construct ids. */
|
|
478
|
+
function logicalSuffix(id) {
|
|
479
|
+
return id
|
|
480
|
+
.split(/[^a-zA-Z0-9]+/)
|
|
481
|
+
.filter(Boolean)
|
|
482
|
+
.map((part) => part[0].toUpperCase() + part.slice(1))
|
|
483
|
+
.join('');
|
|
484
|
+
}
|
|
485
|
+
//# sourceMappingURL=compute-stack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute-stack.js","sourceRoot":"","sources":["../../src/cdk/compute-stack.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-stack.d.ts","sourceRoot":"","sources":["../../src/cdk/config-stack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsFG;AAEH,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AACnC,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,cAAc,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAuC1B,MAAM,WAAW,uBAAwB,SAAQ,GAAG,CAAC,UAAU;IAC7D,oBAAoB;IACpB,WAAW,EAAE,MAAM,CAAC;IAEpB,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IAEd,yCAAyC;IACzC,SAAS,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,cAAc,EAAE,aAAa,CAAC;CAC/B;AAED,qBAAa,kBAAmB,SAAQ,GAAG,CAAC,KAAK;IAC/C,wDAAwD;IACxD,SAAgB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAa;IAExE,gDAAgD;IAChD,SAAgB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,eAAe,CAAC,CAAa;IAEzE,yEAAyE;IACzE,SAAgB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAa;IAE/E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;gBAE7B,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB;IAiBxE;;;;;;;;;OASG;IACH,OAAO,CAAC,mBAAmB;IA+C3B,OAAO,CAAC,YAAY;
|
|
1
|
+
{"version":3,"file":"config-stack.d.ts","sourceRoot":"","sources":["../../src/cdk/config-stack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsFG;AAEH,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AACnC,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,cAAc,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAuC1B,MAAM,WAAW,uBAAwB,SAAQ,GAAG,CAAC,UAAU;IAC7D,oBAAoB;IACpB,WAAW,EAAE,MAAM,CAAC;IAEpB,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IAEd,yCAAyC;IACzC,SAAS,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,cAAc,EAAE,aAAa,CAAC;CAC/B;AAED,qBAAa,kBAAmB,SAAQ,GAAG,CAAC,KAAK;IAC/C,wDAAwD;IACxD,SAAgB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAa;IAExE,gDAAgD;IAChD,SAAgB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,eAAe,CAAC,CAAa;IAEzE,yEAAyE;IACzE,SAAgB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAa;IAE/E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;gBAE7B,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB;IAiBxE;;;;;;;;;OASG;IACH,OAAO,CAAC,mBAAmB;IA+C3B,OAAO,CAAC,YAAY;CAoFrB"}
|
package/dist/cdk/config-stack.js
CHANGED
|
@@ -194,12 +194,26 @@ export class VentureConfigStack extends cdk.Stack {
|
|
|
194
194
|
const isStrictRetain = this.isStrictRetain;
|
|
195
195
|
const resourceName = `${projectName}-${intent.id}`;
|
|
196
196
|
if (intent.store === 'secretsmanager') {
|
|
197
|
+
// `generate` shapes the initial random value for a secret that is
|
|
198
|
+
// used as generated rather than pasted over — a key shared between
|
|
199
|
+
// a service container and the Lambdas that call it. Absent, the
|
|
200
|
+
// CloudFormation default (32 characters, punctuation included)
|
|
201
|
+
// applies, exactly as before.
|
|
202
|
+
const generateSecretString = intent.generate
|
|
203
|
+
? {
|
|
204
|
+
passwordLength: intent.generate.length ?? 32,
|
|
205
|
+
excludePunctuation: intent.generate.punctuation === false,
|
|
206
|
+
includeSpace: false,
|
|
207
|
+
requireEachIncludedType: false,
|
|
208
|
+
}
|
|
209
|
+
: undefined;
|
|
197
210
|
const secret = new secretsmanager.Secret(this, resourceName, {
|
|
198
211
|
// Operator-namespace name (no `venturekit/` prefix) — gives
|
|
199
212
|
// the operator a recognizable name in the SM console
|
|
200
213
|
// independent of internal SSM key conventions.
|
|
201
214
|
secretName: `${projectName}/${stage}/${intent.id}`,
|
|
202
215
|
description: intent.description || `Secret for ${intent.id}`,
|
|
216
|
+
...(generateSecretString ? { generateSecretString } : {}),
|
|
203
217
|
// Operator-paste-in values can't be re-generated by
|
|
204
218
|
// VentureKit; an accidental delete forces the operator to
|
|
205
219
|
// manually rotate the credential at the third party. RETAIN
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-stack.js","sourceRoot":"","sources":["../../src/cdk/config-stack.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config-stack.js","sourceRoot":"","sources":["../../src/cdk/config-stack.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-stack.d.ts","sourceRoot":"","sources":["../../src/cdk/data-stack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAEH,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AACnC,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEzC,OAAO,KAAK,QAAQ,MAAM,0BAA0B,CAAC;AAGrD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAsB,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAM1F,MAAM,WAAW,qBAAsB,SAAQ,GAAG,CAAC,UAAU;IAC3D,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IAEpB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IAEd,iEAAiE;IACjE,SAAS,EAAE,SAAS,CAAC;IAErB;;;;OAIG;IACH,cAAc,EAAE,aAAa,CAAC;IAE9B;;;;;;;;;;OAUG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;IAEf,yDAAyD;IACzD,UAAU,EAAE,OAAO,CAAC;IAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,UAAU,CAAC,EAAE;QACX,gEAAgE;QAChE,UAAU,EAAE,MAAM,CAAC;QAEnB;;;;WAIG;QACH,YAAY,EAAE,MAAM,CAAC;QAErB;;;;;WAKG;QACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;KAClC,CAAC;CACH;AAgCD,qBAAa,gBAAiB,SAAQ,GAAG,CAAC,KAAK;IAC7C;;;;;;OAMG;IACH,SAAgB,SAAS,EAAE,GAAG,CAC5B,MAAM,EACN;QACE,QAAQ,EAAE,GAAG,CAAC,gBAAgB,GAAG,GAAG,CAAC,4BAA4B,CAAC;QAClE,MAAM,EAAE,GAAG,CAAC;QACZ,kDAAkD;QAClD,KAAK,CAAC,EAAE,GAAG,CAAC,aAAa,CAAC;QAC1B;;;WAGG;QACH,OAAO,EAAE,MAAM,CAAC;QAChB;;;;WAIG;QACH,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CACF,CAAa;IAEd,SAAgB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE,CAAC,CAAa;IAErF,SAAgB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAa;IAEtE;;;OAGG;IACH,SAAgB,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAC;IAE/C;;;;;;OAMG;IACH,SAAgB,gBAAgB,EAAE,QAAQ,CAAC,KAAK,CAAC;IAEjD;;;OAGG;IACH,SAAgB,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC;IAE1C;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IAEzC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAU;IAEnD;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAsC;IAExE,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAE1C,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB;IA8FtE,OAAO,CAAC,cAAc;IAgQtB,OAAO,CAAC,mBAAmB;IAiD3B,OAAO,CAAC,oBAAoB;IAW5B;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IAyC1B,OAAO,CAAC,aAAa;
|
|
1
|
+
{"version":3,"file":"data-stack.d.ts","sourceRoot":"","sources":["../../src/cdk/data-stack.ts"],"names":[],"mappings":"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"}
|