Saltearse al contenido

Infraestructura CDK

AWS CDK es un framework para definir infraestructura cloud en código y provisionarla mediante AWS CloudFormation.

El generador de infraestructura TypeScript crea una aplicación de infraestructura AWS CDK escrita en TypeScript. La aplicación generada incluye mejores prácticas de seguridad mediante verificaciones con CFN Guard.

Puedes generar un nuevo proyecto de infraestructura de dos formas:

  1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
  2. Abra la consola Nx en VSCode
  3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
  4. Busque @aws/nx-plugin - ts#infra
  5. Complete los parámetros requeridos
    • Haga clic en Generate
    Parámetro Tipo Predeterminado Descripción
    name Requerido string - The name of the application.
    ruleSet string aws_prototyping Rule set to validate your AWS resources with.
    directory string packages The directory of the new application.

    El generador creará la siguiente estructura de proyecto en el directorio <directory>/<name>:

    • Directorysrc
      • main.ts Punto de entrada de la aplicación que instancia los stacks CDK a desplegar
      • Directorystacks Definiciones de stacks CDK
        • application-stack.ts Stack principal de la aplicación
    • cdk.json Configuración de CDK
    • project.json Configuración del proyecto y targets de build

    Puedes comenzar a escribir tu infraestructura CDK en src/stacks/application-stack.ts, por ejemplo:

    src/stacks/application-stack.ts
    import * as cdk from 'aws-cdk-lib';
    import { Bucket } from 'aws-cdk-lib/aws-s3'
    import { Construct } from 'constructs';
    export class ApplicationStack extends cdk.Stack {
    constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    // Declara tu infraestructura aquí
    new Bucket(this, 'MyBucket');
    }
    }

    Si has usado los generadores tRPC API o FastAPI para crear APIs, notarás que ya tienes algunos constructs disponibles en packages/common/constructs para desplegarlos.

    Si, por ejemplo, creaste una API tRPC llamada my-api, simplemente puedes importar e instanciar el construct para añadir toda la infraestructura necesaria:

    src/stacks/application-stack.ts
    import * as cdk from 'aws-cdk-lib';
    import { Construct } from 'constructs';
    import { MyApi } from ':my-scope/common-constructs';
    export class ApplicationStack extends cdk.Stack {
    constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    // Añade infraestructura para tu API
    new MyApi(this, 'MyApi');
    }
    }

    Si has usado el generador sitio web CloudScape, notarás que ya tienes un construct en packages/common/constructs para desplegarlo. Por ejemplo:

    src/stacks/application-stack.ts
    import * as cdk from 'aws-cdk-lib';
    import { Construct } from 'constructs';
    import { MyWebsite } from ':my-scope/common-constructs';
    export class ApplicationStack extends cdk.Stack {
    constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    // Añade infraestructura para tu sitio web
    new MyWebsite(this, 'MyWebsite');
    }
    }

    Es importante asegurarse de que el sitio web se declare después de cualquier construct de API para que la Configuración en Tiempo de Ejecución del sitio web incluya toda la configuración de las APIs.

    Como parte de tu target build, además de ejecutar los targets predeterminados de compilación, lint y tests, tu proyecto de infraestructura se sintetiza a CloudFormation. Esto también puede ejecutarse de forma independiente mediante el target synth:

    Terminal window
    pnpm nx run <my-infra>:synth

    Encontrarás tu cloud assembly sintetizado en la carpeta dist raíz, bajo dist/packages/<my-infra-project>/cdk.out.

    Si estás desplegando una aplicación CDK en una cuenta AWS por primera vez, necesitarás hacer bootstrap primero.

    Primero, asegúrate de haber configurado credenciales para tu cuenta AWS.

    Luego, puedes usar el comando cdk bootstrap:

    Ventana de terminal
    npx cdk bootstrap aws://<account-id>/<region>

    Para más detalles, consulta la documentación de CDK.

    Después de un build, puedes desplegar tu infraestructura en AWS usando el target deploy.

    Primero, asegúrate de haber configurado credenciales para tu cuenta AWS.

    Luego, ejecuta el target deploy:

    Terminal window
    pnpm nx run <my-infra>:deploy --all

    Usa el target deploy-ci si estás desplegando en AWS como parte de un pipeline CI/CD.

    Terminal window
    pnpm nx run <my-infra>:deploy-ci my-stack

    Este target difiere ligeramente del target deploy regular en que asegura que se despliegue una cloud-assembly pre-sintetizada, en lugar de sintetizar sobre la marcha. Esto ayuda a evitar problemas potenciales de no-determinismo debido a cambios en versiones de paquetes, asegurando que cada etapa del pipeline despliegue usando la misma cloud-assembly.

    Para más información sobre CDK, consulta la Guía para desarrolladores de CDK y Referencia de API.