Configure construcciones con CDK Blueprints - AWS Kit Cloud Development Kit (AWS CDK) v2

Esta es la guía para desarrolladores de AWS CDK v2. La primera versión del CDK pasó a la etapa de mantenimiento el 1.° de junio de 2022 y no cuenta con soporte desde el 1.° de junio de 2023.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Configure construcciones con CDK Blueprints

nota

CDK Blueprints se encuentra en versión preliminar y está sujeto a cambios.

Utilice los planos de AWS CDK para estandarizar y distribuir las configuraciones de construcción de nivel 2 en toda su organización. Con Blueprints, puede asegurarse de que AWS los recursos se configuren de manera coherente de acuerdo con los estándares y las mejores prácticas de su organización. Por ejemplo, puede habilitar automáticamente el cifrado para todos los buckets de Amazon S3, aplicar configuraciones de registro específicas a todas las funciones de AWS Lambda o aplicar reglas de seguridad estándar para todos los grupos de seguridad.

Los blueprints se basan en la inyección de propiedades, un mecanismo introducido en la versión 2.196.0 de la AWS CDK que permite modificar las propiedades del constructo en el momento de la instanciación. Un plano es un conjunto de inyectores de propiedades, en el que cada inyector de propiedades especifica la configuración óptima para una construcción L2 específica. El plan representa las mejores prácticas generales para su organización.

Los planes no son un mecanismo de cumplimiento. Los desarrolladores aún pueden anular los valores predeterminados si es necesario. Para garantizar un cumplimiento estricto, considere la posibilidad de utilizar AWS CloudFormation Guard, Service Control Policies o CDK Aspects además de Blueprints.

Para obtener información detallada sobre la implementación, consulte el RFC sobre inyección de propiedades.

Componentes clave de los planos

Los planos son conjuntos de inyectores de propiedades que aplican las propiedades predeterminadas a las construcciones cuando se crean instancias de las mismas. Un inyector de propiedades es un componente que implementa la IPropertyInjector interfaz, que intercepta la creación de la construcción y modifica o añade propiedades antes de que se cree la construcción.

  • IPropertyInyector: IPropertyInjector define una forma de inyectar propiedades adicionales que no están especificadas en los accesorios. Es específico de un constructo L2 y funciona según las propiedades de ese constructo.

  • PropertyInjectors- PropertyInjectors son un conjunto de inyectores conectados al árbol de construcción. Los inyectores se pueden unir a cualquier construcción, pero en la práctica esperamos que la mayoría de ellos estén unidos aApp, Stage o. Stack

Casos de uso comunes de Blueprints

Puede usar CDK Blueprints para estandarizar muchos aspectos de sus recursos de AWS. Estos son algunos casos de uso habituales:

Estándares de seguridad
  • Asegúrese de que todos los buckets de Amazon S3 tengan activado el cifrado del lado del servidor.

  • Configure todos los grupos de seguridad para bloquear el acceso público de forma predeterminada.

  • Aplique los permisos de AWS Identity and Access Management (IAM) con privilegios mínimos a las funciones de Lambda. AWS

  • Aplique el SSL a todas las comunicaciones de la red.

Excelencia operativa
  • Configure el registro estandarizado para todas las AWS funciones de Lambda.

  • Aplique estrategias de etiquetado coherentes en todos los recursos.

  • Configure los umbrales de supervisión y alerta predeterminados.

  • Implemente políticas de retención estándar para los registros y las copias de seguridad.

Optimización de costos
  • Configure los tamaños de instancia adecuados según el entorno.

  • Aplica políticas de autoescalado con los valores predeterminados de la organización.

  • Establezca reglas de ciclo de vida para los buckets de Amazon S3 para hacer la transición de los objetos a clases de almacenamiento más baratas.

  • Configure el rendimiento aprovisionado predeterminado para las bases de datos.

Requisitos de conformidad
  • Implemente la configuración de cifrado necesaria para los datos regulados.

  • Aplique las políticas de respaldo necesarias para cumplir con los requisitos de retención de datos.

  • Configure los ajustes predeterminados de Amazon VPC que cumplan con los requisitos de seguridad.

  • Asegúrese de que los recursos tengan las etiquetas necesarias para la asignación de costos.

Productividad de los desarrolladores
  • Proporcione valores predeterminados razonables que reduzcan la necesidad de código repetitivo.

  • Cree clases de Stack específicas para cada organización con inyectores integrados.

  • Comparta las mejores prácticas entre los equipos mediante inyectores reutilizables.

  • Simplifique la incorporación codificando los conocimientos organizativos en código.

Cómo empezar con Blueprints

Este es un ejemplo sencillo de cómo crear y usar un inyector de propiedades:

Primero, cree un inyector de propiedades para los buckets de 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, }; } }

A continuación, utilice el inyector en su aplicación 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');

Como alternativa, puede utilizar el PropertyInjectors.of() método:

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');

Prácticas recomendadas

  • Coloque las propiedades predeterminadas antes …​originalProps para permitir las anulaciones.

  • Coloque las propiedades forzadas después …​originalProps para evitar anulaciones.

  • Usa una marca de omisión al crear recursos para evitar la recursión infinita. Para ver un ejemplo, consulta ¿Qué ocurre cuando necesitas crear una accessLogBucket para un bucket? en el RFC de Property Injection.

  • Agregue el registro para la depuración.

  • Utilice el contexto CDK para activar/desactivar los inyectores para las pruebas.

Para obtener información más detallada sobre la inyección de propiedades, incluidos los detalles de implementación, consejos para la solución de problemas e información de referencia, consulte la RFC sobre la inyección de propiedades.