
Samenvatting
Nextnet is een in Silicon Valley gevestigd AI Enterprise softwarebedrijf dat zich richt op de life sciences en gezondheidszorg als eerste doelmarkt. Het bedrijf heeft met succes een uitgebreid AI-aangedreven SaaS-platform gebouwd en uitgerold, gebruikmakend van AWS beheerde diensten en Infrastructure as Code (IaC). Deze case study toont aan hoe AWS CDK en een weloverwogen keuze van AWS-diensten snelle ontwikkeling, consistente implementaties over meerdere omgevingen en naadloze integratie van geavanceerde AI-mogelijkheden mogelijk maakten, terwijl tegelijkertijd een beveiliging en schaalbaarheid op ondernemingsniveau behouden bleven die bestand zijn tegen elk niveau van technische due diligence van tier-1 durfkapitaalinvesteerders.
Belangrijkste resultaten:
- Serverloze architectuur met aanzienlijk minder beheer van infrastructuur.
- Implementatie in meerdere omgevingen (ontwikkeling, staging, productie) met consistente configuraties en isolatie/deling van resources.
- AI-gedreven functies met AWS Bedrock en Retrieval-Augmented Generation (RAG)-mogelijkheden.
- Beveiligingsmodel over meerdere accounts met geautomatiseerde DNS-delegatie voor geautomatiseerd beheer van domeinen en subdomeinen.
- Volledige reproduceerbaarheid van de infrastructuur door simpelweg op de knop "Deploy" te drukken.
- Moderne en veilige wachtwoordloze authenticatiestroom, aangedreven door AWS Cognito en AWS Amplify Gen 2 als kern.
Projectoverzicht
Zakelijke uitdaging
Nextnet streeft ernaar om:
- Het meest vertrouwde AI-kennisplatform ter wereld te worden voor alle aspecten van menselijke gezondheid en welzijn.
- AI-gestuurde chat- en zoekmogelijkheden te bieden, samen met een volledig interactieve, grafiek-gebaseerde linkanalyse gebaseerd op daadwerkelijke wetenschappelijke bewijzen.
- Directe resultaten te leveren ondanks petabytes aan gestructureerde, semi-gestructureerde en ongestructureerde multimodale data.
- Wetenschappers niet alleen een conversatie-interface te bieden, maar ook een meeslepende verkenningstool in de vorm van een dicht verbonden kennisgrafiek, evenals de mogelijkheid om moeiteloos tussen deze te wisselen.
- Gebruikersauthenticatie, autorisatie en een complexe matrix van toegangslogica voor functies te beheren.
- Variabele verkeers- en gebruikspatronen te accommoderen.
- Gescheiden identieke omgevingen te handhaven voor snelle iteratie, wetenschappelijke validatie door een raad van geselecteerde toonaangevende opinieleiders uit de industrie, en een garantie voor veerkrachtige, fouttolerante productie-omgevingen.
- Beveiliging en compliance op ondernemingsniveau te waarborgen ter voorbereiding op aankomende Amerikaanse en Europese compliance-controles.
Oplossingsarchitectuur
De oplossing maakt gebruik van AWS beheerde dienststacks, volledig georkestreerd via AWS CDK, waardoor handmatige provisioning van infrastructuur overbodig wordt en consistente, herhaalbare implementaties worden gegarandeerd die tijdens de bouw ook worden gevalideerd aan de hand van de Well-Architected principes van AWS.
Technische Architectuur
Opmerking: De getoonde fragmenten zijn geanonimiseerde uitsneden van de IaC-levering. Front-end code is weggelaten.
Kerncomponenten van de infrastructuur
1. Frontend & Hosting
// AWS Amplify Gen 2 for serverless, distributed web hosting and more.
const app = new App(this, 'App', {
appName: 'Core Application',
sourceCodeProvider: new CodeCommitSourceCodeProvider({ repository }),
customRules: [CustomRule.SINGLE_PAGE_APPLICATION_REDIRECT],
…
});
Gebruikte AWS-diensten:
- AWS Amplify Gen 2: Serverloze webhosting met CI/CD en verbeterde developer experience (DX)
- Amazon Route53: DNS-beheer met cross-account delegatie
- AWS Certificate Manager: Automatisering van SSL/TLS-certificaten
- Amazon CloudFront: Wereldwijd content delivery netwerk
- AWS CodeCommit: Git-gebaseerde versiebeheer voor code
2. Authenticatie & API
// AWS Cognito for user management, authentication and authorisation
const userPool = new UserPool(this, 'UserPool', {
customDomain: { domainName: `auth.${domain}` }
…
});
// AWS AppSync for a serverless GraphQL API
const api = new GraphqlApi(this, 'Api', {
authorizationConfig: {
defaultAuthorization: { authorizationType: AuthorizationType.USER_POOL }
}
…
});
Gebruikte AWS-diensten:
- AWS Cognito: Gebruikersauthenticatie en -autorisatie
- AWS AppSync: Beheerde GraphQL API met real-time subscriptions
- AWS DynamoDB: NoSQL-database met automatische schaalvergroting
- AWS OpenSearch: Reverse-index full-text zoekmachine
- AWS Amplify Gen 2: De ‘auth’- en ‘data’-onderdelen van het framework
3. AI/ML-integratie
// AWS Bedrock Knowledge Base for RAG
const knowledgeBase = new KnowledgeBaseVector(this, "KnowledgeBase", {
id: env.KNOWLEDGE_BASE_ID,
executionRoleArn: env.KNOWLEDGE_BASE_EXECUTION_ROLE_ARN,
});
// AWS Lambda functions with AWS Bedrock integration
backend.chat.resources.lambda.addToRolePolicy(
new PolicyStatement({
actions: ["bedrock:InvokeModelWithResponseStream"],
resources: [`arn:aws:bedrock:*::foundation-model/${modelId}`],
})
);
Gebruikte AWS-diensten:
- Amazon Bedrock: Foundation models (Claude 3.5 Haiku, Claude 3.7 Sonnet, Claude 4 Sonnet, Amazon Titan v2)
- AWS S3: Voor multimodale documentopslag
- Amazon Bedrock Knowledge Base: RAG (Retrieval-Augmented Generation)
- AWS RDS: Vector-database aangedreven door pgVector
- AWS Amplify Gen 2: De AI Kit voor agent-gebaseerde conversatie- en generatielogica
4. Opslag & Gegevensbeheer
// AWS S3 buckets for different data types
const storage = defineStorage({
name: "storage",
access: (allow) => ({
"profile-pictures/*": [allow.authenticated.to(["read", "write"])],
"knowledge-base-sources/*": [allow.authenticated.to(["read"])],
}),
});
Gebruikte AWS-diensten:
- Amazon S3: Objectopslag voor bestanden, bronnen van de kennisbank en back-ups
- Amazon DynamoDB: Primaire database met point-in-time recovery
- Amplify Gen 2: Voor CDN-cloudopslag van statische middelen, geïntegreerd met authenticatie
Multi-omgevingarchitectuur
Cross-accountstrategie
De oplossing implementeert een geavanceerde multi-accountstrategie:
// Production Account
const crossAccountDelegationRole = new Role(this, "CrossAccountRole", {
assumedBy: new AccountPrincipal("111111111111"),
roleName: "CrossAccountDelegationRoleCoreApplicationProduction",
});
// Development Account
const devDelegationRole = new Role(this, "DevDelegationRole", {
assumedBy: new AccountPrincipal("222222222222"),
roleName: "CrossAccountDelegationRoleCoreApplicationDevelopment",
});
Omgevingsscheiding:
- Productieaccount: Volledige productie-werklast met deployment vanuit de hoofdbranch
- Ontwikkelaccount: Ontwikkelomgeving met basisauthenticatie
- Staging (Preview) account: Voor grondige validatie door een geselecteerde raad van professionals en adviseurs uit de industrie
- Root-account: Gecentraliseerd domeinbeheer en cross-account IAM-rollen
Belangrijkste voordelen van de AWS CDK-implementatie
1. Voordelen van Infrastructure as Code
Reproduceerbaarheid: Elk infrastructuuronderdeel is gedefinieerd in code, wat identieke implementaties over verschillende omgevingen garandeert.
// Environment-specific configurations
if (process.env.ENV === 'prd') {
const main = app.addBranch('main', {
…
});
} else {
const develop = app.addBranch('develop', {
basicAuth: BasicAuth.fromCredentials('SOME_USERNAME',
SecretValue.unsafePlainText(process.env.SOME_PASSWORD)),
…
});
}
Versiebeheer: Alle wijzigingen aan de infrastructuur worden gevolgd, beoordeeld en goedgekeurd via standaard ontwikkelworkflows.
Consistentie: CDK garandeert consistente naamgeving, tagging en configuratie van resources in alle omgevingen.
Minimalisme: De volledige levering bevindt zich in één enkele code-repository.
2. Voordelen van AWS-beheerde diensten
Geen infrastructuurbeheer: Door volledig beheerde diensten te gebruiken, heeft het team het volgende geëlimineerd:
En het allerbelangrijkste: het team kon functionaliteit op industrieniveau leveren binnen een zeer krap budget — en snel.
- Serverprovisioning en -onderhoud
- Databasebeheer
- Beveiligingsupdates
- Capaciteitsplanning
- Backupbeheer
Automatische schaalvergroting: Diensten zoals DynamoDB, Lambda en Amplify schalen automatisch mee met de vraag, waardoor handmatige tussenkomst overbodig wordt.
Ingebouwde beveiliging: Dankzij het gedeelde verantwoordelijkheidsmodel van AWS bieden beheerde diensten standaard beveiligingsfuncties op ondernemingsniveau:
- Versleuteling in rust en tijdens transport
- IAM-integratie
- VPC-isolatie waar nodig
- Voldoen aan certificeringsvereisten
3. Kostenoptimalisatie
Pay-per-Use model: Serverloze architectuur zorgt ervoor dat de kosten direct meeschalen met het daadwerkelijke gebruik.
// DynamoDB with on-demand billing
const table = new Table(this, "Table", {
billingMode: BillingMode.PAY_PER_REQUEST,
pointInTimeRecovery: true,
});
Geen inactieve resources: Lambda-functies en andere serverloze diensten veroorzaken alleen kosten wanneer ze daadwerkelijk verzoeken verwerken.
Soms vergt het enige creativiteit in de oplossingenarchitectuur om elke cent uit de maandelijkse AWS-rekening te halen. Maar in een sterk engineeringbedrijf kun je onder een zeer laag verbruiksniveau opereren. Bijvoorbeeld: laat ontwikkelaars op verzoek een database creëren en vernietigen via een Slack-bericht. Vernietig de database automatisch als hij een uur lang niet in gebruik is geweest.
Implementatie van Geavanceerde Functionaliteiten
AI‑Powered Mogelijkheden
Retrieval‑Augmented Generation (RAG)
// Knowledge base integration for contextual AI responses
backend.retrieveAndGenerateResponse.resources.lambda.addToRolePolicy(
new PolicyStatement({
actions: ["bedrock:Retrieve", "bedrock:RetrieveAndGenerate"],
resources: [`arn:aws:bedrock:*:*:knowledge-base/${knowledgeBaseId}`],
})
);
Multi-model AI-strategie
- Claude 3.5 Haiku: Genereren van trefwoorden en lichtgewicht taken
- Claude 3.7 Sonnet: Complexe RAG-antwoorden en documentanalyse
- Claude 4 Sonnet: Geavanceerde chatfunctionaliteit en redeneervermogen
Beveiligingsimplementatie
Cross-account toegangscontrole
const crossAccountPolicy = new PolicyDocument({
statements: [
new PolicyStatement({
actions: ["route53:ChangeResourceRecordSets"],
resources: [hostedZone.hostedZoneArn],
conditions: {
"ForAllValues:StringEquals": {
"route53:ChangeResourceRecordSetsActions": ["UPSERT", "DELETE"],
},
},
}),
],
});
Geheimenbeheer
new secretsManager.Secret(this, "SecretKey", {
secretName: "secret-key",
secretStringValue: SecretValue.unsafePlainText(props.secretKey),
});
Betaalintegratie
// Stripe event processing with EventBridge
new Payments(backend.createStack('payments'), 'payments', {
destinationId: env.STRIPE_EVENTBRIDGE_DESTINATION_ID,
graphqlApi: backend.data.resources.graphqlApi,
…
});
Deploymentsstrategie
Omgevingsspecifieke deployments
De CDK-configuratie past zich automatisch aan op basis van omgevingsvariabelen:
// Production configuration
if (env.ENV === "prd") {
this.hostedZone = new PublicHostedZone(this, "HostedZone", {
zoneName: "domainname.com",
caaAmazon: true,
});
} else {
// Development configuration
this.hostedZone = new PublicHostedZone(this, "HostedZone", {
zoneName: `${env.ENV}.domainname.com`,
});
}
CI/CD-integratie
AWS Amplify biedt ingebouwde CI/CD met:
- Automatische builds bij code commits
- Omgevingsspecifieke deployments
- Mogelijkheid tot rollback
- Beheer van build-artifacts
Prestaties & Monitoring
Observability Stack
// AWS X-Ray tracing for distributed systems
backend.data.resources.cfnResources.cfnGraphqlApi.xrayEnabled = true;
// AWS CloudWatch logging
const graphQlApiLogsRole = new Role(backend.data, 'GraphQlApiLogsRole', {
assumedBy: new ServicePrincipal('appsync.amazonaws.com'),
managedPolicies: [
ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSAppSyncPushToCloudWatchLogs')
],
…
});
Gegevensbescherming
// Point-in-time recovery for all AWS DynamoDB tables
Object.values(
backend.data.resources.cfnResources.amplifyDynamoDbTables
).forEach((tableConfig) => {
tableConfig.pointInTimeRecoveryEnabled = true;
});
Resultaten & Zakelijke Impact
Technische prestaties
- 100% serverloos: Geen beheer van servers meer nodig.
- Multi-regio klaar: Architectuur ondersteunt wereldwijde uitbreiding.
- Automatische schaalvergroting: Omgaat met verkeerspieken zonder handmatige tussenkomst.
- Kostenbesparend: Pay-per-use model optimaliseert operationele kosten.
Ontwikkelsnelheid
- Snelle prototyping: Nieuwe functies worden binnen enkele minuten uitgerold, niet uren.
- Consistente omgevingen: Ontwikkelomgevingen weerspiegelen de productieomgeving.
- Geautomatiseerd testen: Infrastructuurwijzigingen worden getest vóór implementatie.
- Team samenwerking: Infrastructuurwijzigingen worden beoordeeld, net als applicatiecode.
Operationele excellentie
- Hoge beschikbaarheid: Ingebouwde redundantie over AWS Availability Zones (AZ).
- Disaster recovery: Geautomatiseerde back-ups en point-in-time herstel.
- Beveiligingscompliance: Enterprise-grade beveiliging zonder extra overhead.
- Monitoring: Uitgebreide observability met minimale configuratie.
Geleerde lessen & Best Practices
Geïmplementeerde CDK Best Practices
- Omgevingsparameterisatie: Gebruik omgevingsvariabelen voor configuratieverschillen.
- Resource tagging: Implementeer een consistente taggingstrategie voor nauwkeurige kostenallocatie en beheer.
- Security by default: Het principe van minste privilege in alle IAM-beleidsregels.
- Modulair ontwerp: Herbruikbare constructs voor veelvoorkomende patronen.
AWS Managed Services Strategie
- Geef de voorkeur aan beheerde diensten boven zelfbeheer: Kies beheerde diensten om operationele overhead te verminderen.
- Maak gebruik van service-integratie: Gebruik native AWS-service-integraties voor betere prestaties.
- Plan voor schaalbaarheid: Ontwerp vanaf dag één met automatische schaalmogelijkheden.
- Monitor alles: Implementeer uitgebreide monitoring en waarschuwingen.
Conclusie
Deze case study toont aan hoe AWS CDK en beheerde AWS-diensten organisaties in staat stellen om geavanceerde, AI-aangedreven applicaties te bouwen zonder de traditionele complexiteit van infrastructuur. Door infrastructuur als code te behandelen en te kiezen voor de juiste cloudtools heeft Nextnet bereikt:
- Snellere time-to-market: Infrastructuurconfiguratie gereduceerd van maanden/weken naar dagen/uren.
- Lagere operationele kosten: Infrastructuurbeheer overhead geëlimineerd.
- Verbeterde betrouwbaarheid: Gebruikgemaakt van bewezen beheerde AWS-diensten.
- Verhoogde beveiliging: Ingebouwde beveiligingsfuncties op ondernemingsniveau.
- Schaalbare architectuur: Klaar voor wereldwijde uitbreiding en toename van verkeer.
De combinatie van AWS CDK voor infrastructuurdefinitie en AWS beheerde diensten voor runtime-functionaliteiten biedt een robuuste basis voor moderne applicatieontwikkeling. Organisaties die willen bouwen op AWS doen er goed aan deze aanpak te overwegen vanwege de balans tussen flexibiliteit, betrouwbaarheid en operationele eenvoud.
Wil je het ook bouwen?
Enkele suggesties:
- Begin met CDK: Start infrastructuurprojecten vanaf dag één met AWS CDK
- Omarm beheerde diensten: Geef de voorkeur aan AWS beheerde diensten boven zelfbeheer
- Implementeer een multi-omgevingstrategie: Plan vanaf het begin voor ontwikkeling, staging en productie
- Investeer in monitoring: Implementeer vroegtijdig uitgebreide observability in het project
- Plan voor AI-integratie: Beschouw AI/ML-capaciteiten als volwaardige onderdelen van je architectuur
Dit architectuurpatroon biedt een blauwdruk voor het bouwen van moderne, schaalbare en onderhoudbare applicaties op AWS, terwijl operationele complexiteit wordt geminimaliseerd en de ontwikkelsnelheid wordt gemaximaliseerd.
Deze case study vertegenwoordigt een real-world implementatie van AWS best practices en toont de kracht aan van Infrastructure as Code gecombineerd met beheerde diensten voor het bouwen van productieklare applicaties.
#case-study