Configurer des constructions avec des plans CDK - AWS Kit de développement Cloud (AWS CDK) v2

Ceci est le guide du développeur du AWS CDK v2. L'ancien CDK v1 est entré en maintenance le 1er juin 2022 et a pris fin le 1er juin 2023.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configurer des constructions avec des plans CDK

Note

CDK Blueprints est en version préliminaire et est sujet à modification.

Utilisez les plans AWS CDK pour standardiser et distribuer les configurations de construction L2 au sein de votre organisation. Avec Blueprints, vous pouvez vous assurer que les AWS ressources sont configurées de manière cohérente conformément aux normes et aux meilleures pratiques de votre organisation. Par exemple, vous pouvez activer automatiquement le chiffrement pour tous les compartiments Amazon S3, appliquer des configurations de journalisation spécifiques à toutes les fonctions AWS Lambda ou appliquer des règles de sécurité standard pour tous les groupes de sécurité.

Les plans sont alimentés par injection de propriétés, un mécanisme introduit dans AWS CDK v2.196.0 qui vous permet de modifier les propriétés des constructions au moment de l'instanciation. Un Blueprint est un ensemble d'injecteurs de propriétés, où chaque injecteur de propriétés spécifie une configuration optimale pour une construction L2 spécifique. Le plan directeur représente l'ensemble des meilleures pratiques pour votre organisation.

Les plans ne sont pas un mécanisme d'application de la conformité. Les développeurs peuvent toujours remplacer les valeurs par défaut si nécessaire. Pour une application stricte de la conformité, pensez à utiliser AWS CloudFormation Guard, Service Control Policies ou CDK Aspects en plus des Blueprints.

Pour des informations détaillées sur la mise en œuvre, consultez la RFC sur l'injection de propriétés.

Principaux éléments des Blueprints

Les Blueprints sont des ensembles d'injecteurs de propriétés qui appliquent des propriétés par défaut aux constructions lors de leur instanciation. Un injecteur de propriétés est un composant qui implémente l'IPropertyInjectorinterface, qui intercepte la création de la construction et modifie ou ajoute des propriétés avant la création de la construction.

  • IPropertyInjecteur - An IPropertyInjector définit un moyen d'injecter des propriétés supplémentaires qui ne sont pas spécifiées dans les accessoires. Il est spécifique à une construction L2 et agit sur les propriétés de cette construction.

  • PropertyInjectors- PropertyInjectors sont un ensemble d'injecteurs attachés à l'arbre de construction. Les injecteurs peuvent être fixés à n'importe quelle construction, mais dans la pratique, nous nous attendons à ce que la plupart d'entre eux soient attachés àApp, Stage ouStack.

Cas d'utilisation courants des Blueprints

Vous pouvez utiliser les plans CDK pour standardiser de nombreux aspects de vos ressources AWS. Voici quelques cas d'utilisation courants :

Normes de sécurité
  • Assurez-vous que le chiffrement côté serveur est activé sur tous les compartiments Amazon S3.

  • Configurez tous les groupes de sécurité pour bloquer l'accès public par défaut.

  • Appliquez les autorisations AWS Identity and Access Management (IAM) avec le moindre privilège aux fonctions Lambda AWS .

  • Appliquez le protocole SSL pour toutes les communications réseau.

Excellence opérationnelle
  • Configurez la journalisation standardisée pour toutes les AWS fonctions Lambda.

  • Appliquez des stratégies de balisage cohérentes sur l'ensemble des ressources.

  • Définissez des seuils de surveillance et d'alerte par défaut.

  • Mettez en œuvre des politiques de conservation standard pour les journaux et les sauvegardes.

Optimisation des coûts
  • Configurez les tailles d'instance appropriées en fonction de l'environnement.

  • Appliquez des politiques d'auto-scaling avec les paramètres organisationnels par défaut.

  • Définissez des règles de cycle de vie pour les compartiments Amazon S3 afin de transférer les objets vers des classes de stockage moins coûteuses.

  • Configurez le débit provisionné par défaut pour les bases de données.

Exigences de conformité
  • Implémentez les paramètres de chiffrement requis pour les données réglementées.

  • Appliquez les politiques de sauvegarde nécessaires pour répondre aux exigences de conservation des données.

  • Configurez les paramètres Amazon VPC par défaut qui répondent aux exigences de sécurité.

  • Assurez-vous que les ressources disposent des balises requises pour la répartition des coûts.

Productivité des développeurs
  • Fournissez des valeurs par défaut judicieuses qui réduisent le besoin de code standard.

  • Créez des classes Stack spécifiques à l'organisation avec des injecteurs intégrés.

  • Partagez les meilleures pratiques entre les équipes grâce à des injecteurs réutilisables.

  • Simplifiez l'intégration en encodant les connaissances organisationnelles dans le code.

Commencer à utiliser Blueprints

Voici un exemple simple de création et d'utilisation d'un injecteur de propriétés :

Créez d'abord un injecteur de propriétés pour les compartiments Amazon S3 :

import { IPropertyInjector, InjectionContext } from 'aws-cdk-lib'; import { Bucket, BucketProps, BlockPublicAccess } from 'aws-cdk-lib/aws-s3'; export class SecureBucketDefaults implements IPropertyInjector { public readonly constructUniqueId: string; constructor() { this.constructUniqueId = Bucket.PROPERTY_INJECTION_ID; } public inject(originalProps: BucketProps, _context: InjectionContext): BucketProps { return { // Set security defaults blockPublicAccess: BlockPublicAccess.BLOCK_ALL, enforceSSL: true, // Include original props to allow overrides ...originalProps, }; } }

Ensuite, utilisez l'injecteur dans votre application CDK :

import { App, Stack } from 'aws-cdk-lib'; import { Bucket } from 'aws-cdk-lib/aws-s3'; import { SecureBucketDefaults } from './secure-bucket-defaults'; // Attach injectors when creating the App const app = new App({ propertyInjectors: [new SecureBucketDefaults()] }); const stack = new Stack(app, 'MyStack'); // This bucket automatically gets the default properties const myBucket = new Bucket(stack, 'MyBucket');

Vous pouvez également utiliser la PropertyInjectors.of() méthode suivante :

import { App, Stack, PropertyInjectors } from 'aws-cdk-lib'; import { SecureBucketDefaults } from './secure-bucket-defaults'; const app = new App(); PropertyInjectors.of(app).add(new SecureBucketDefaults()); const stack = new Stack(app, 'MyStack'); const myBucket = new Bucket(stack, 'MyBucket');

Bonnes pratiques

  • Placez les propriétés par défaut avant …​originalProps pour autoriser les remplacements.

  • Placez les propriétés forcées après …​originalProps pour éviter les remplacements.

  • Utilisez un indicateur de saut lors de la création de ressources pour éviter une récursion infinie. Par exemple, voir Que se passe-t-il lorsque vous devez créer un accessLogBucket pour un bucket ? dans la RFC Property Injection.

  • Ajoutez la journalisation pour le débogage.

  • Utilisez le contexte CDK pour activer/désactiver les injecteurs à des fins de test.

Pour des informations plus détaillées sur l'injection de propriétés, notamment les détails de mise en œuvre, les conseils de dépannage et les informations de référence, consultez la RFC sur l'injection de propriétés.