Gerenciando fontes de montagem em nuvem da AWS CDK Toolkit Library - AWS Kit de desenvolvimento em nuvem (AWS CDK) v2

Este é o Guia do desenvolvedor do AWS CDK v2. O CDK v1 antigo entrou em manutenção em 1º de junho de 2022 e encerrou o suporte em 1º de junho de 2023.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Gerenciando fontes de montagem em nuvem da AWS CDK Toolkit Library

Use a AWS CDK Toolkit Library para configurar fontes de montagem em nuvem e personalizar a forma como você implanta seus aplicativos CDK. Este guia mostra como configurar fontes de montagem em nuvem para atender aos requisitos de implantação e às necessidades de fluxo de trabalho.

Antes de usar o CDK Toolkit, especifique uma fonte de montagem em nuvem. Uma fonte de montagem em nuvem fornece instruções para gerar uma montagem em nuvem a partir do seu aplicativo CDK. O conjunto de nuvem resultante contém os artefatos de infraestrutura sintetizados nos quais o CDK Toolkit é implantado. AWS

A CDK Toolkit Library oferece várias abordagens para configurar fontes de montagem em nuvem, cada uma adequada para diferentes cenários e fluxos de trabalho.

Seleção de uma fonte de montagem em nuvem

Método Melhor para Consideração

fromCdkApp

Trabalhando com aplicativos CDK existentes em qualquer idioma compatível.

Requer que o tempo de execução de linguagem apropriado seja instalado.

fromAssemblyBuilder

Criação de construções de CDK em linha com controle total sobre o processo de síntese.

Fornece acesso de baixo nível à funcionalidade do CDK e pode ser usado para criar versões personalizadas de outros métodos, como o. fromCdkApp

fromAssemblyDirectory

Usando montagens de nuvem pré-sintetizadas.

Execução mais rápida à medida que a etapa de síntese é ignorada.

Fonte personalizada

Cenários extremamente especializados que exigem uma implementação personalizada completa.

Requer a implementação da ICloudAssemblySource interface do zero; carece de funcionalidades integradas, como pesquisas de contexto; raramente é necessário para a maioria dos casos de uso.

Configurando sua fonte de montagem em nuvem

De um aplicativo CDK existente

Use o fromCdkApp método para trabalhar com aplicativos CDK escritos em qualquer linguagem compatível. Essa abordagem é ideal quando você tem um aplicativo CDK existente e deseja implantá-lo programaticamente.

import { App } from 'aws-cdk-lib'; import { Toolkit } from '@aws-cdk/toolkit-lib'; // Create a toolkit instance const toolkit = new Toolkit(); // TypeScript app const cloudAssemblySource = await toolkit.fromCdkApp("ts-node app.ts"); // Deploy a specific stack from the assembly await toolkit.deploy(cloudAssemblySource, { stacks: ['MyStack'] }); // Other language examples: // JavaScript app // const cloudAssemblySource = await toolkit.fromCdkApp("node app.js"); // Python app // const cloudAssemblySource = await toolkit.fromCdkApp("python app.py"); // Java app // const cloudAssemblySource = await toolkit.fromCdkApp("mvn -e -q exec:java -Dexec.mainClass=com.mycompany.app.App");

De um construtor de montagem em linha

Crie um aplicativo CDK diretamente no seu código usando uma função de construtor de montagens. Essa abordagem é útil para implantações simples ou cenários de teste em que você deseja definir sua infraestrutura em linha.

import { App, Stack, RemovalPolicy, StackProps } from 'aws-cdk-lib'; import { Bucket } from 'aws-cdk-lib/aws-s3'; import { Toolkit } from '@aws-cdk/toolkit-lib'; import { Construct } from 'constructs'; // Create a cloud assembly source from an inline CDK app const cloudAssemblySource = await toolkit.fromAssemblyBuilder(async () => { const app = new App(); // Define a simple stack with an S3 bucket class MyStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); // Create an S3 bucket new Bucket(this, 'MyBucket', { versioned: true, removalPolicy: RemovalPolicy.DESTROY, autoDeleteObjects: true }); } } // Instantiate the stack new MyStack(app, 'MyInlineStack'); return app.synth(); }); // Deploy using the cloud assembly source await toolkit.deploy(cloudAssemblySource, { stacks: ['MyInlineStack'] });

De um diretório de montagem existente

Se você já tem uma montagem de nuvem sintetizada, pode usá-la diretamente. Isso é útil quando você já executa cdk synth ou trabalha com assemblies em nuvem gerados por pipelines de CI/CD.

import { Toolkit } from '@aws-cdk/toolkit-lib'; // Create a toolkit instance const toolkit = new Toolkit(); // Use an existing cloud assembly directory const cloudAssemblySource = await toolkit.fromAssemblyDirectory("cdk.out"); // Deploy using the cloud assembly source await toolkit.deploy(cloudAssemblySource, { stacks: ['MyStack'] });

Trabalhando com assemblies de nuvem em cache

Ao trabalhar com montagens em nuvem, você tem duas opções:

  1. Use uma fonte de montagem em nuvem diretamente (simples, mas pode ser mais lenta):

    // Each operation triggers a new synthesis await toolkit.deploy(cloudAssemblySource, { /* options */ }); await toolkit.list(cloudAssemblySource, { /* options */ });
  2. Armazene em cache o conjunto da nuvem (mais rápido para várias operações):

    // Synthesize once and reuse const cloudAssembly = await toolkit.synth(cloudAssemblySource); try { // Multiple operations use the same assembly await toolkit.deploy(cloudAssembly, { /* options */ }); await toolkit.list(cloudAssembly, { /* options */ }); } finally { // Clean up when done await cloudAssembly.dispose(); }

Use montagens em cache quando:

  • Você está executando várias operações (implantação, lista, comparação etc.).

  • Seu aplicativo CDK não muda com frequência durante as operações.

  • Você quer um desempenho mais rápido.

Use fontes de montagem em nuvem diretamente quando:

  • Você está realizando uma única operação.

  • Seu aplicativo CDK muda com frequência.

  • Você quer um código mais simples e não precisa priorizar a velocidade de operação do Toolkit.

Importante

A maioria das interações do kit de ferramentas deve usar uma montagem em cache para melhorar o desempenho. A única vez de evitar o armazenamento em cache é quando sua fonte muda com frequência e a verificação de alterações seria cara.

Como criar, armazenar em cache e reutilizar assemblies de nuvem

Depois de criar uma fonte de montagem em nuvem, você pode gerar uma montagem em nuvem sintetizando-a. Um conjunto de nuvem contém os AWS CloudFormation modelos e ativos necessários para a implantação.

Recomendamos que você gere uma montagem em nuvem uma vez e a reutilize para várias operações do Toolkit. Essa abordagem de armazenamento em cache é mais eficiente do que regenerar a montagem para cada operação. Considere regenerar a montagem somente quando sua fonte mudar com frequência.

Veja como criar um conjunto de nuvem em cache:

// Generate a cloud assembly from your source const cloudAssembly = await toolkit.synth(cloudAssemblySource);

Em seguida, você pode realizar várias ações do Toolkit no conjunto de nuvem em cache, como list()deploy(), e. diff() Ao armazenar em cache os conjuntos de nuvem, as ações subsequentes do Toolkit são executadas mais rapidamente, pois a síntese ocorre apenas uma vez. Para obter mais informações, consulte synth - Gere assemblies em nuvem.

Elimine os recursos de montagem da nuvem

Sempre descarte os conjuntos de nuvem quando terminar de usá-los para limpar recursos temporários. Recomendamos usar um bloco try/finally para garantir a limpeza adequada, especialmente ao realizar várias operações:

// Generate a cloud assembly const cloudAssembly = await toolkit.synth(cloudAssemblySource); try { // Use the cloud assembly for multiple operations await toolkit.list(cloudAssembly); await toolkit.deploy(cloudAssembly); } finally { // Always dispose when done await cloudAssembly.dispose(); }

Aqui está um exemplo que mostra como criar e descartar um conjunto de nuvem em cache:

import { Toolkit } from '@aws-cdk/toolkit-lib'; const toolkit = new Toolkit(); // Create cloud assembly source from a CDK app const cloudAssemblySource = await toolkit.fromCdkApp("ts-node app.ts"); // Create cloud assembly from source const cloudAssembly = await toolkit.synth(cloudAssemblySource); try { // List stacks in the assembly await toolkit.list(cloudAssembly); // Check for changes await toolkit.diff(cloudAssembly); // Deploy if needed await toolkit.deploy(cloudAssembly); } finally { // Always dispose when done await cloudAssembly.dispose(); }

Entendendo a vida útil da montagem em nuvem

Ao criar um conjunto de nuvem em cache usandosynth(), você obtém um tipo especial que serve tanto como legível CloudAssembly quanto como. CloudAssemblySource Todos os conjuntos de nuvem produzidos a partir desse conjunto em cache (por exemplo, a partir de operações de lista ou implantação) estão vinculados à vida útil do pai:

  • Somente a chamada dispose () do pai realmente limpa os recursos

  • Os conjuntos de nuvem das operações de lista/implantação são gerenciados por seus pais

  • Deixar de descartar um conjunto de nuvem em cache é considerado um bug

Melhores práticas para fontes de montagem em nuvem

Ao trabalhar com fontes de montagem em nuvem, considere estas melhores práticas:

  • Escolha o método de origem correto: selecione a abordagem que melhor se adapta ao seu fluxo de trabalho e aos seus requisitos.

  • Armazene conjuntos de nuvem em cache: gere um conjunto de nuvem depois de usá-lo synth() e reutilize-o para várias operações para evitar sínteses desnecessárias, especialmente para aplicativos grandes.

  • Tratamento de erros: implemente o tratamento básico de erros para capturar e exibir erros para os usuários. Mantenha o tratamento de erros simples e concentre-se em fornecer mensagens de erro claras.

  • Compatibilidade de versões: garanta que sua versão da CDK Toolkit Library seja compatível com os assemblies de nuvem com os quais você está trabalhando. Se a Construct Library usada para criar a montagem em nuvem for mais recente do que a suportada pela sua Biblioteca do Toolkit, você receberá um erro.

  • Variáveis de ambiente: esteja ciente de que determinadas variáveis de ambiente podem afetar a síntese e a implantação da montagem da nuvem. Variáveis como CDK_DEFAULT_ACCOUNTCDK_DEFAULT_REGION,CDK_OUTDIR, e CDK_CONTEXT_JSON podem substituir os comportamentos padrão. Certifique-se de que eles estejam configurados adequadamente para seu ambiente de implantação.

O exemplo a seguir demonstra como implementar o tratamento de erros e a limpeza adequada ao reutilizar uma montagem em nuvem para várias operações:

import { Toolkit } from '@aws-cdk/toolkit-lib'; // Example with error handling and proper cleanup async function deployInfrastructure(): Promise<void> { let cloudAssembly; try { // Generate a cloud assembly once cloudAssembly = await toolkit.synth(cloudAssemblySource); // Reuse the same cloud assembly for multiple operations await toolkit.list(cloudAssembly); // Uses existing assembly await toolkit.deploy(cloudAssembly); // Uses existing assembly await toolkit.diff(cloudAssembly); // Uses existing assembly } catch (error) { console.error("Failed to deploy:", error); } finally { // Always dispose when done if (cloudAssembly) { await cloudAssembly.dispose(); } } } // Call the async function deployInfrastructure().catch(error => { console.error("Deployment failed:", error); process.exit(1); });

Resolvendo possíveis problemas

Siga estas etapas para resolver possíveis problemas com fontes de montagem em nuvem:

  • Instale dependências ausentes: execute npm install para instalar as dependências necessárias para seu aplicativo CDK.

  • Corrija problemas de caminho: verifique se os caminhos para aplicativos CDK e diretórios de montagem existem e estão acessíveis.

  • Resolva incompatibilidades de versão: atualize a versão da biblioteca do CDK Toolkit para corresponder à versão do seu aplicativo CDK.

  • Corrija erros de síntese: revise o código do seu aplicativo CDK em busca de erros de sintaxe ou configurações inválidas.

Quando ocorrerem erros durante as operações do kit de ferramentas, mantenha o tratamento de erros simples e concentre-se em fornecer mensagens de erro claras aos usuários. Sempre descarte os conjuntos de nuvem quando terminar de usá-los. Aqui está um exemplo que mostra o tratamento básico de erros com a limpeza adequada:

import { Toolkit } from '@aws-cdk/toolkit-lib'; // Example with simple error handling try { // Create the cloud assembly source const cloudAssemblySource = await toolkit.fromCdkApp("ts-node app.ts"); // Synthesize the cloud assembly const cloudAssembly = await toolkit.synth(cloudAssemblySource); // Use the cloud assembly await toolkit.list(cloudAssembly); } catch (error) { // Display the error message console.error("Operation failed:", error.message); } finally { // Clean up resources await cloudAssembly.dispose(); }