mirror of
https://github.com/Sea-Haven-Industries/proposal-system.git
synced 2026-09-30 08:53:15 +00:00
Adds an env config layer resolved from CDK context (`-c env=staging`, default prod) and threads it through all three stacks so a fully isolated staging environment can be deployed in the same AWS account. prod is byte-identical: the prod config reproduces the deployed values exactly and stackSuffix='' keeps every construct ID, stack name, and physical resource name unchanged. Verified via synth — prod foundation keeps proposal-system-db / -uploads / db-credentials / -auth / seahaven; staging suffixes all of them. - config.ts: EnvConfig (prod + staging, same account) + resolveConfig - app.ts: env-aware stack naming + config passthrough - foundation/compute/frontend: ~40 physical names suffixed with config.stackSuffix; CORS, Cognito domain/callbacks, alarms email from config; RETAIN / deletionProtection gated on config.retainData so staging can be torn down - cdk.json: register `env` context (default prod) - post-deploy.sh: STACK_SUFFIX for dynamic stack-name lookup (default prod) Note: automated staging CI deploy needs a one-line `cdk-context` input added to the org reusable cd-cdk.yaml (companion change). prod deploy is unaffected (default prod).
46 lines
1.6 KiB
TypeScript
46 lines
1.6 KiB
TypeScript
import * as cdk from 'aws-cdk-lib';
|
|
import { FoundationStack } from '../lib/foundation-stack';
|
|
import { ComputeStack } from '../lib/compute-stack';
|
|
import { FrontendStack } from '../lib/frontend-stack';
|
|
import { resolveConfig } from '../lib/config';
|
|
|
|
const app = new cdk.App();
|
|
|
|
// Multi-env (PR2): `-c env=staging` (default prod). prod keeps the exact construct IDs
|
|
// and stack names of the deployed stacks (stackSuffix=''); only staging is suffixed.
|
|
const config = resolveConfig(app);
|
|
const { env, stackSuffix } = config;
|
|
|
|
const foundation = new FoundationStack(app, `proposal-system-foundation${stackSuffix}`, {
|
|
stackName: `proposal-system-foundation${stackSuffix}`,
|
|
env,
|
|
config,
|
|
description: 'Proposal System - VPC, RDS, S3, SQS, Cognito',
|
|
});
|
|
|
|
const compute = new ComputeStack(app, `proposal-system-compute${stackSuffix}`, {
|
|
stackName: `proposal-system-compute${stackSuffix}`,
|
|
env,
|
|
config,
|
|
description: 'Proposal System - API Lambda, Python Lambdas, Bedrock KB',
|
|
vpc: foundation.vpc,
|
|
lambdaSecurityGroup: foundation.lambdaSecurityGroup,
|
|
dbSecret: foundation.dbSecret,
|
|
uploadsBucket: foundation.uploadsBucket,
|
|
generatedBucket: foundation.generatedBucket,
|
|
libraryBucket: foundation.libraryBucket,
|
|
jobsQueue: foundation.jobsQueue,
|
|
userPool: foundation.userPool,
|
|
alarmTopic: foundation.alarmTopic,
|
|
webClientId: foundation.webClientId,
|
|
mobileClientId: foundation.mobileClientId,
|
|
});
|
|
|
|
new FrontendStack(app, `proposal-system-frontend${stackSuffix}`, {
|
|
stackName: `proposal-system-frontend${stackSuffix}`,
|
|
env,
|
|
config,
|
|
description: 'Proposal System - CloudFront + S3 web hosting',
|
|
});
|
|
|
|
void compute;
|