Implantação de aplicações do AWS CDK - Kit de desenvolvimento em nuvem da AWS (CDK da AWS) 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.

Implantação de aplicações do AWS CDK

Uma implantação do kit de desenvolvimento em nuvem da AWS (CDK da AWS) é o processo de provisionamento de sua infraestrutura na AWS.

Como funcionam as implantações do AWS CDK

O AWS CDK utiliza o serviço do AWS CloudFormation para realizar implantações. Antes de implantar, você sintetiza suas pilhas do CDK. Isso cria um modelo do CloudFormation e artefatos de implantação para cada pilha do CDK em sua aplicação. As implantações são iniciadas a partir de uma máquina de desenvolvimento local ou a partir de um ambiente de integração e entrega contínuas (CI/CD). Durante a implantação, os ativos são enviados para os recursos que receberam o bootstrapping e o modelo do CloudFormation é enviado ao CloudFormation para provisionar seus recursos da AWS.

Para que uma implantação seja bem-sucedida, é necessário o seguinte:

  • A interface de linha de comandos do AWS CDK (CLI do AWS CDK) deve ser fornecida com permissões válidas.

  • O ambiente da AWS deve ser receber o bootstrapping.

  • O AWS CDK deve conhecer os recursos que receberam o bootstrapping para os quais o caregamento de ativos é feito.

Pré-requisitos para implantações do CDK

Antes de implantar uma aplicação do AWS CDK, é necessário concluir as etapas a seguir:

  • Configure as credenciais de segurança para a CLI do CDK.

  • Faça o bootstrapping em seu ambiente da AWS.

  • Configure um ambiente da AWS para cada uma das suas pilhas do CDK.

  • Desenvolva sua aplicação do CDK.

Configurar credenciais de segurança

Para usar a CLI do CDK para interagir com a AWS, é necessário configurar as credenciais de segurança em seu computador local. Para obter instruções, consulte Configuração de credenciais de segurança para a CLI do AWS CDK.

Faça o bootstrapping do seu ambiente da AWS

Uma implantação está sempre associada a um ou mais ambientes da AWS. Antes de implantar, o ambiente deve primeiro receber o bootstrapping. O bootstrapping provisiona recursos em seu ambiente que o CDK usa para realizar e gerenciar implantações. Esses recursos incluem um bucket do Amazon Simple Storage Service (Amazon S3) e um repositório do Amazon Elastic Container Registry (Amazon ECR) para armazenar e gerenciar ativos. Esses recursos também incluem perfils do AWS AWS Identity and Access Management (IAM) que são usados para fornecer permissões durante o desenvolvimento e a implantação.

Recomendamos que você use o comando cdk bootstrap da interface de linha de comandos do AWS CDK (CLI do AWS CDK) para fazer bootstrapping em seu ambiente. É possível personalizar o bootstrapping ou criar manualmente esses recursos em seu ambiente, se necessário. Para obter instruções, consulte Bootstrapping do seu ambiente para uso com o AWS CDK.

Configuração dos ambientes da AWS

Cada pilha do CDK deve estar associada a um ambiente para determinar onde a pilha é implantada. Para obter instruções, consulte Configuração de ambientes para uso com o AWS CDK.

Desenvolver sua aplicação do CDK

Em um projeto do CDK, você cria e desenvolve sua aplicação do CDK. Na sua aplicação, você cria uma ou mais pilhas do CDK. Em suas pilhas, você importa e usa constructos da Biblioteca de Constructos da AWS para definir sua infraestrutura. Antes que você possa implantar, sua aplicação CDK deve conter pelo menos uma pilha.

Síntese da aplicação CDK

Para realizar a síntese, recomendamos que você use o comando cdk synth da CLI do CDK. O comando cdk deploy também realizará a síntese antes de iniciar a implantação. No entanto, ao usar o cdk synth, você pode validar sua aplicação do CDK e detectar erros antes de iniciar a implantação.

O comportamento da síntese é determinado pelo sintetizador de pilha que você configura para sua pilha do CDK. Se você não configurar um sintetizador, DefaultStackSynthesizer será usado. Você também pode configurar e personalizar a síntese para atender às suas necessidades. Para obter instruções, consulte Configuração e realização da síntese de pilhas do CDK.

Para que seu modelo sintetizado do CloudFormation seja implantado em seu ambiente com êxito, ele deve ser compatível com a forma como seu ambiente recebeu o bootstrapping. Por exemplo, seu modelo do CloudFormation deve especificar o bucket correto do Amazon S3 no qual implantar ativos. Se você usar o método padrão de inicializar seu ambiente, o sintetizador de pilha padrão funcionará. Se você personalizar o comportamento do CDK, como personalizar o bootstrapping ou a síntese, o comportamento de implantação do CDK poderá variar.

O ciclo de vida da aplicação

Quando você realiza a síntese, sua aplicação do CDK passa pelas seguintes fases, conhecidas como ciclo de vida da aplicação:

Construção (ou inicialização)

Seu código instancia todos os constructos definidos e, em seguida, vincula-os. Nesse estágio, todos os constructos (aplicação, pilhas e seus constructos secundários) são instanciados e a cadeia de construtores é executada. A maior parte do código da sua aplicação é executada nesse estágio.

Preparação

Todos os constructos que implementaram o método prepare participam de uma rodada final de modificações, para configurar seu estado final. A fase de preparação acontece automaticamente. Como usuário, você não vê nenhum feedback dessa fase. É raro precisar usar o hook de “preparação”, e geralmente não é recomendado. Tenha muito cuidado ao alterar a árvore de constructos durante essa fase, pois a ordem das operações pode afetar o comportamento.

Durante essa fase, depois que a árvore de constructos for construída, todos os aspectos que você configurou também serão aplicados.

Validação

Todos os constructos que implementaram o método validate podem validar a si mesmos para garantir que estejam em um estado que será implantado corretamente. Você será notificado sobre quaisquer falhas de validação que ocorram durante essa fase. Geralmente, recomendamos a realização da validação o mais rápido possível (geralmente assim que você receber alguma informação) e o lançamento de exceções o mais rápido possível. A validação antecipada melhora a confiabilidade, pois os rastreamentos de pilha serão mais precisos e garantirão que seu código possa continuar sendo executado com segurança.

Síntese

Esse é o estágio final da execução da sua aplicação do CDK. É acionado por uma chamada para app.synth(), percorre a árvore de constructos e invoca o método synthesize em todos os constructos. Os constructos que implementam synthesize podem participar da síntese e produzir artefatos de implantação no conjunto de nuvem resultante. Esses artefatos incluem modelos do CloudFormation, pacotes de aplicações do AWS Lambda, ativos de arquivos e imagens do Docker e outros artefatos de implantação. Na maioria dos casos, não é preciso implementar o método synthesize.

Executar sua aplicação

A CLI do CDK precisa saber como executar sua aplicação do CDK. Se você criou o projeto a partir de um modelo usando o comando cdk init, o arquivo cdk.json da sua aplicação inclui uma chave app. Essa chave especifica o comando necessário para a linguagem em que a aplicação está escrita. Se sua linguagem exigir compilação, a linha de comando executará essa etapa antes de executar a aplicação automaticamente.

TypeScript
{ "app": "npx ts-node --prefer-ts-exts bin/my-app.ts" }
JavaScript
{ "app": "node bin/my-app.js" }
Python
{ "app": "python app.py" }
Java
{ "app": "mvn -e -q compile exec:java" }
C#
{ "app": "dotnet run -p src/MyApp/MyApp.csproj" }
Go
{ "app": "go mod download && go run my-app.go" }

Se você não criou seu projeto usando a CLI do CDK, ou se quiser substituir a linha de comando fornecida em cdk.json, é possível inserir a opção --app ao executar o comando cdk.

$ cdk --app '<executable>' <cdk-command> ...

A parte <executable> do comando indica o comando que deve ser emitido para executar sua aplicação do CDK. Use aspas conforme mostrado, pois esses comandos contêm espaços. O <cdk-command> é um subcomando, como synth ou deploy, que informa à CLI do CDK o que você quer fazer com sua aplicação. Siga isso com todas as opções adicionais necessárias para esse subcomando.

A CLI do CDK também pode interagir diretamente com um conjunto de nuvem já sintetizado. Para fazer isso, passe o diretório no qual o conjunto de nuvem está armazenado em --app. O exemplo a seguir lista as pilhas definidas no conjunto de nuvem armazenado em ./my-cloud-assembly.

$ cdk --app <./my-cloud-assembly> ls
Conjuntos de nuvem

A chamada para app.synth() é o que diz ao AWS CDK para sintetizar um conjunto de nuvem a partir de uma aplicação. Normalmente, você não interage diretamente com os conjuntos de nuvem. São arquivos que incluem tudo o que é necessário para implantar sua aplicação em um ambiente de nuvem. Por exemplo, ele inclui um modelo do AWS CloudFormation para cada pilha em sua aplicação. Também inclui uma cópia de todos os ativos de arquivo ou imagens do Docker que você referenciar na sua aplicação.

Consulte a especificação de conjunto de nuvem para detalhes sobre como os conjuntos de nuvem são formatados.

Para interagir com o conjunto de nuvem que sua aplicação do AWS CDK cria, você normalmente usa a CLI do AWS CDK. No entanto, qualquer ferramenta que possa ler o formato de conjunto de nuvem pode ser usada para implantar sua aplicação.

Implantar a aplicação

Para implantar sua aplicação, recomendamos que você use o comando cdk deploy da CLI do CDK para iniciar implantações ou configurar implantações automatizadas.

Quando você executa cdk deploy, a CLI do CDK inicia o cdk synth para se preparar para a implantação. O diagrama a seguir ilustra o ciclo de vida da aplicação no contexto de uma implantação:

Fluxograma do ciclo de vida da aplicação do <shared id="AWS"/> CDK.

Durante a implantação, a CLI do CDK pega o conjunto de nuvem produzido pela síntese e o implanta em um ambiente da AWS. Os ativos são enviados para o Amazon S3 e o Amazon ECR, e o modelo do CloudFormation é enviado ao AWS CloudFormation para implantação.

Quando a fase de implantação do AWS CloudFormation começa, sua aplicação do CDK já terminou de ser executada e foi encerrada. Isso ocasiona o seguinte:

  • A aplicação do CDK não pode responder a eventos que aconteçam durante a implantação, como a criação de um recurso ou o término de toda a implantação. Para executar o código durante a fase de implantação, é necessário injetá-lo no modelo do AWS CloudFormation como um recurso personalizado. Para obter mais informações sobre como adicionar um recurso personalizado à sua aplicação, consulte o Módulo do AWS CloudFormation ou o exemplo de recurso personalizado. Você também pode configurar o módulo Acionadores para executar código durante as implantações.

  • Talvez a aplicação do CDK precise funcionar com valores que não possam ser conhecidos no momento em que é executada. Por exemplo, se a aplicação do AWS CDK define um bucket do Amazon S3 com um nome gerado automaticamente e você recupera o atributo bucket.bucketName (Python: bucket_name), esse valor não é o nome do bucket implantado. Em vez disso, você obtém um valor de Token. Para determinar se um valor específico está disponível, chame cdk.isUnresolved(value) (Python: is_unresolved). Consulte Tokens e o AWS CDK para obter detalhes.

Permissões de implantação

Antes da execução da implantação, as permissões devem ser estabelecidas. O diagrama a seguir ilustra as permissões que são usadas durante uma implantação padrão, ao usar o processo de bootstrapping padrão e o sintetizador de pilha:

Fluxograma do processo padrão de implantação do <shared id="AWS"/> CDK.
O ator inicia a implantação

As implantações são iniciadas por um ator, usando a CLI do CDK. Um ator pode ser uma pessoa ou um serviço como o AWS CodePipeline.

Se necessário, a CLI do CDK executa cdk synth quando você executar cdk deploy. Durante a síntese, a identidade da AWS pressupõe que LookupRole realiza pesquisas de contexto no ambiente da AWS.

As permissões são estabelecidas

Primeiro, as credenciais de segurança do ator são usadas para se autenticar na AWS e obter a primeira identidade do IAM no processo. Para atores humanos, a forma como as credenciais de segurança são configuradas e obtidas depende de como você ou sua organização gerencia os usuários. Para obter mais informações, consulte Configuração de credenciais de segurança para a CLI do AWS CDK. Para agentes de serviços, como o CodePipeline, um perfil de execução do IAM é assumido e usado.

Em seguida, os perfis do IAM criados em seu ambiente da AWS durante o bootstrapping são usadas para estabelecer permissões para realizar as ações necessárias para a implantação. Para obter mais informações sobre esses perfis e para que eles concedem permissões, consulte Perfis do IAM criados durante o bootstrapping. Esse processo inclui o seguinte:

  • A identidade da AWS assume o perfil DeploymentActionRole e o passa o perfil CloudFormationExecutionRole para o CloudFormation, garantindo que o CloudFormation assuma o perfil ao realizar qualquer ação em seu ambiente da AWS. O DeploymentActionRole concede permissão para realizar implantações em seu ambiente e CloudFormationExecutionRole determina quais ações o CloudFormation pode realizar.

  • A identidade da AWS assume o FilePublishingRole, que determina as ações que podem ser executadas no bucket do Amazon S3 criado durante o bootstrapping.

  • A identidade da AWS assume o ImagePublishingRole, que determina as ações que podem ser executadas no repositório do Amazon ECR criado durante o bootstrapping.

  • Se necessário, a identidade da AWS pressupõe que LookupRole realiza pesquisas de contexto no ambiente da AWS. Essa ação também pode ser executada durante a síntese do modelo.

A implantação é executada

Durante a implantação, a CLI do CDK lê o parâmetro da versão do bootstrapping para confirmar o número da versão do bootstrapping. AWS O CloudFormation também lê esse parâmetro no momento da implantação para confirmar. Se as permissões em todo o fluxo de trabalho de implantação forem válidas, a implantação será executada. Os ativos são carregados nos recursos que receberam o bootstrapping e o modelo do CloudFormation produzido na síntese é implantado usando o serviço como uma pilha do CloudFormation para provisionar seus recursos.