Pular para o conteúdo principal

Crie sua primeira pilha AWS CDK: Um tutorial para iniciantes

Saiba como criar e implementar sua primeira pilha AWS CDK usando Python. Este guia amigável para iniciantes aborda a configuração, os construtos, a implantação, os testes e a CI/CD.
Atualizado 22 de mai. de 2025  · 15 min lido

Gerenciar a infraestrutura em nuvem com modelos JSON ou YAML brutos pode ser entediante e propenso a erros. O AWS Cloud Development Kit (CDK) muda isso, permitindo que você defina recursos de nuvem usando linguagens de programação modernas, como Python, TypeScript, Java e C#.

Com o CDK, a infraestrutura se torna um código reutilizável, testável e com controle de versão. Ele permite que você pense como um desenvolvedor, mesmo ao provisionar sistemas de nuvem complexos.

Neste tutorial, você aprenderá a configurar um projeto AWS CDK usando Python. Vamos percorrer o processo de escrever sua primeira pilha, adicionar um recurso essencial do AWS e implementá-la em sua conta do AWS. Ao final, você entenderá claramente como o CDK funciona e como usá-lo para gerenciar a infraestrutura de uma forma amigável ao desenvolvedor, com código.

Para entender melhor as práticas por trás de ferramentas como o AWS CDK, explore os princípios básicos em nosso curso Conceitos de DevOps.

Pré-requisitos

Antes de começarmos a escrever código com o AWS CDK, certifique-se de que seu ambiente esteja configurado corretamente. Aqui está o que você precisará:

Conta AWS para experimentação

Você precisa ter acesso a uma conta do AWS para implantar o aplicativo que criaremos. Se o seu sistema já estiver configurado com credenciais para um usuário de nível de administrador, fique à vontade para pular essa etapa.

Se vocêainda não tiver uma conta do AWS, crie uma aqui.

Para que você tenha um caminho de aprendizagem estruturado que abranja os fundamentos da AWS, o programa AWS Cloud Practitioner é um excelente ponto de partida.

Usuário administrador

Você precisará de um usuário com acesso programático e permissões completas para acompanhar o processo.

  1. Faça login na sua conta do AWS.
  2. Abra o console do IAM.
  3. Crie um novo usuário - você pode nomeá-lo como "datacamp-cdk"
  4. Selecione Acesso programático.
  5. Clique em Next: Permissões.
  6. Escolha Anexar políticas existentes diretamente e marque Acesso do administrador.
  7. Clique em Next: Tags,Próximo: Consulte e, em seguida, Create User (Criar usuário).

Na tela final, anote o ID da chave de acesso e a chave de acesso secreta. Você precisará deles na próxima etapa.

Configure suas credenciais do AWS

Abra um terminal e execute:

aws configure

Você será solicitado a inserir as credenciais do console IAM:

AWS Access Key ID [None]: <your access key ID>
AWS Secret Access Key [None]: <your secret access key>
Default region name [None]: us-east-1
Default output format [None]: 

Escolha um IDE para desenvolvimento

O AWS CDK permite que os desenvolvedores trabalhem em um ambiente de programação completo, em vez de modelos YAML ou JSON. Esse ambiente repleto de recursos permite que você use seu IDE preferido e, ao mesmo tempo, se beneficie dos recursos de autocompletar código, linting em tempo real e ferramentas de refatoração para um gerenciamento eficiente do código da infraestrutura.

Para que você tenha a melhor experiência de desenvolvimento com o Python CDK, sugiro que use um IDE que ofereça suporte ao seguinte:

  • Destaque de sintaxe
  • Conclusão do código
  • Navegação e sugestões inteligentes
  • Suporte a ambientes virtuais

Instale o Python e o pip

Para usar o AWS CDK com Python, você precisará ter a versão 3.8 ou superior do Python instalada no seu sistema. Se você ainda não o tiver, poderá fazer o download da versão mais recente no site oficial do Python.

Se você estiver no Windows, verifique se o Python foi adicionado à variável de ambiente PATH do seu sistema. Para verificar, abra um terminal ou prompt de comando e execute:

python --version

Se você vir um erro do tipo "command not found" (comando não encontrado) ou semelhante, é provável que o Python não esteja no seu site PATH. A solução mais fácil é que você marque a caixa "Add Python 3.x to PATH" durante a instalação.

Você também precisará do pip, o instalador de pacotes Python, para instalar as dependências do AWS CDK posteriormente. A maioria das distribuições modernas do Python vem com o pip pré-instalado.

pip --version

Se ele não estiver instalado, siga o guia oficial de instalação do pip.

Primeiros passos com o AWS CDK

Antes de escrevermos qualquer código, é essencial que você entenda o que é o AWS CDK, por que ele existe e como ele se encaixa no mundo mais amplo da infraestrutura como código (IaC). Esta seção apresentará a você os principais conceitos por trás do CDK e mostrará como ele se compara a outras ferramentas populares de IaC.

O que é o AWS CDK e por que ele é usado?

O AWS Cloud Development Kit (CDK) é uma estrutura de código aberto que permite aos usuários criar uma infraestrutura de nuvem por meio de linguagens de programação conhecidas, incluindo Python, TypeScript, Java e C#. 

O CDK permite que os usuários gerem modelos do CloudFormation de forma programática por meio de código real, em vez de exigir a gravação manual de modelos JSON ou YAML.

Isso significa que você pode:

  • Reutilize a lógica usando loops e funções.
  • Organize sua infraestrutura usando módulos e classes.
  • Seu IDE oferece ferramentas para conclusão de código, verificação de erros e recursos de refatoração.

Em sua essência, o CDK gira em torno de três conceitos principais:

  • App - O ponto de entrada do seu projeto CDK. Ele pode conter uma ou mais pilhas.
  • Pilha - Uma unidade de implementação que mapeia para uma pilha do CloudFormation. Cada pilha define um conjunto de recursos a serem criados.
  • Construto - O bloco de construção da CDK. Os construtos representam componentes da nuvem, como buckets S3, funções Lambda, VPCs e padrões complexos que combinam vários recursos.

Diagrama que ilustra a estrutura do AWS CDK: um aplicativo contém uma pilha (por exemplo, MyStack), que inclui três construções - S3 Bucket, Lambda Function e VPC - conectadas em uma hierarquia de cima para baixo.

Hierarquia visual de um aplicativo AWS CDK

CDK vs Terraform vs CloudFormation

A tabela a seguir descreve as diferenças entre as ferramentas disponíveis na AWS para que você gerencie a infraestrutura.

Recurso

AWS CDK

Terraform

AWS CloudFormation

Suporte a idiomas

Python, TypeScript, Java, C#

HCL (declarativo)

YAML / JSON

Nível de abstração

Alta (OOP + bibliotecas)

Médio

Baixa

Modularidade

Forte (construções, classes)

Forte (módulos)

Fraco (pilhas aninhadas)

Gerenciamento do estado

Tratados pelo CloudFormation

Manipulado pelo Terraform (tfstate)

Tratados pelo CloudFormation

Multi-cloud

Somente AWS

Sim

Somente AWS

Idiomas suportados e pré-requisitos

O AWS CDK oferece suporte a várias linguagens de programação, permitindo que os desenvolvedores escolham aquela com a qual se sentem mais confortáveis:

  • TypeScript
  • Python
  • Java
  • C#/.NET
  • Ir

Neste tutorial, vamos nos concentrar em Python, mas os conceitos principais se aplicam a todas as linguagens suportadas.

Instalação e configuração

Agora que seu ambiente está pronto, é hora de usar o Python para estruturar seu primeiro aplicativo AWS CDK. O comando CDK init configura toda a estrutura do projeto, incluindo arquivos, diretórios e um ambiente virtual, para ajudar você a começar rapidamente.

Criar um diretório de projeto

Abra o terminal e execute o seguinte comando para criar um novo diretório e navegar até ele:

mkdir cdk_datacamp && cd cdk_datacamp

Inicializar o aplicativo CDK

cdk init sample-app --language python

Isso cria um projeto inicial pré-configurado com um exemplo básico que inclui:

  • Uma pilha de amostra (cdk_datacamp_stack)
  • Uma fila SQS inscrita em um tópico SNS
  • Um arquivo cdk.json que configura como seu aplicativo CDK é executado
  • Um ambiente virtual (em .venv) para as dependências do Python

Quando o comando for concluído, você verá uma saída semelhante a esta:

Saída do terminal do AWS CDK para inicialização de um projeto Python, incluindo etapas para criar e ativar manualmente um ambiente virtual, instalar requisitos e executar o cdk synth.

Estrutura de projeto CDK Python 

Configuração do ambiente virtual

Se o processo cdk init não criar automaticamente um ambiente virtual, você poderá fazê-lo manualmente:

python3 -m venv .venv
source .venv/bin/activate

Depois de ativado, instale as dependências necessárias:

pip install -r requirements.txt

Compreensão dos conceitos de CDK

Antes de nos aprofundarmos no código, vamos explorar como os principais componentes do AWS CDK - aplicativos, pilhas e construções - funcionam juntos na prática. Agora que você está familiarizado com o que cada um representa, é essencial ver como eles interagem para formar uma infraestrutura modular e dimensionável. 

Também detalharemos os diferentes níveis de construções (L1, L2, L3) e examinaremos as bibliotecas de CDK que tornam isso possível.

Aplicativos, pilhas e construções

Agora que você sabe o que são App, Stack e Construct das seções anteriores, vamos entender como eles funcionam juntos em um aplicativo CDK.

Pense nisso como se você estivesse construindo uma casa:

  • O aplicativo é o projeto geral de construção.
  • Cada pilha é como um edifício ou uma estrutura separada nesse projeto.
  • Cada Construct é um componente, como paredes, portas ou encanamento, que vai para uma pilha.

No código, o relacionamento tem a seguinte aparência:

# app.py

from aws_cdk import App
from my_project.my_stack import MyStack

# Initialize the CDK application
app = App()

# Instantiate the stack and add it to the app
MyStack(app, "MyFirstStack")

# Synthesize the CloudFormation template
app.synth()
# my_stack.py

from aws_cdk import Stack
from aws_cdk import aws_s3 as s3
from constructs import Construct

class MyStack(Stack):
    def __init__(self, scope: Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

        # Define an Amazon S3 bucket with default settings
        s3.Bucket(self, "MyBucket")

Aqui, o aplicativo instancia uma pilha, que inclui construtos como um bucket S3.

Compreensão dos níveis de construção: L1, L2 e L3

No AWS CDK, os construtores vêm em três níveis de abstração, oferecendo flexibilidade com base no nível de controle ou simplicidade que você precisa.

Nível 1 (L1) - Construções do CloudFormation

Esses são os blocos de construção brutos gerados diretamente da especificação do AWS CloudFormation. Cada recurso do AWS no CloudFormation tem uma construção L1 equivalente no CDK; seus nomes sempre começam com "Cfn".

Os construtores L1 expõem todas as opções de configuração possíveis, mas não oferecem abstrações ou padrões. Eles são ideais quando você precisa de controle total ou usa recursos mais recentes da AWS que ainda não foram incluídos em construções de nível superior.

  • Exemplo: s3.CfnBucket

Nível 2 (L2) - Construções nativas do AWS CDK

Os construtos L2 oferecem uma abstração de nível mais alto e de fácil desenvolvimento em relação aos construtos L1. São componentes opinativos com padrões sensatos e métodos incorporados que simplificam as tarefas cotidianas. Eles foram projetados para o uso diário e ajudam a reduzir a padronização e, ao mesmo tempo, oferecem um bom nível de personalização.

  • Exemplo: s3.Bucket - Você pode criar um bucket com controle de versão com apenas uma linha de código.

Nível 3 (L3) - Construções de padrões

As construções L3 são abstrações que agrupam vários recursos da AWS em padrões arquitetônicos comuns. Eles podem ser fornecidos pela AWS ou criados como componentes reutilizáveis pela comunidade ou por você. Use construções L3 para encapsular a complexidade e reutilizar padrões de infraestrutura em projetos ou equipes.

  • Exemplo: aws_s3_deployment.BucketDeployment - Combina um bucket S3 e uma estratégia de implantação para automatizar os uploads de ativos.

A maioria dos desenvolvedores começa com construções L2 e introduz a L1 somente quando necessário. O L3 se torna útil à medida que seu projeto cresce e você deseja abstrair padrões repetidos em componentes reutilizáveis.

Bibliotecas e módulos CDK

Você não interage diretamente com o CloudFormation bruto ao criar com o AWS CDK. Em vez disso, você usa as bibliotecas modulares do CDK, que fornecem construções para serviços da AWS como S3, Lambda, IAM e outros. Todos os módulos de serviço do AWS são agrupados no pacote principal chamado aws-cdk-lib, e são organizados por serviço.

Bibliotecas comumente usadas em Python

A seguir, você encontrará algumas das bibliotecas (ou módulos) mais usadas em aws-cdk-lib em projetos Python:

  • aws_cdk.aws_s3 - Para criar buckets S3
  • aws_cdk.aws_lambda - Para definir funções Lambda
  • aws_cdk.aws_iam - Para gerenciar funções e permissões
  • aws_cdk.aws_dynamodb - Para que você trabalhe com tabelas do DynamoDB
  • aws_cdk.aws_ec2 - Para componentes de rede, como VPCs e grupos de segurança
  • aws_cdk.aws_sns / aws_cdk.aws_sns_subscriptions - Para tópicos do SNS e seus assinantes

Esses módulos são importados somente quando necessário, mantendo seu projeto leve e modular.

Como importar e usar um módulo CDK

Para usar um serviço específico da AWS, você importa seu módulo e chama suas classes de construção. Por exemplo, para criar um bucket S3:

from aws_cdk import aws_s3 as s3

# Inside your stack
bucket = s3.Bucket(self, "MyBucket")

Este exemplo usa a construção L2 s3.Bucket, que inclui padrões integrados, como opções de criptografia e controle de versão.

Se você precisar usar outro serviço, basta importar seu módulo da mesma forma:

from aws_cdk import aws_lambda as lambda_
from aws_cdk import aws_iam as iam

Observação: Em seu requirements.txt, você normalmente só precisa:

aws-cdk-lib==2.179.0
constructs>=10.0.0,<11.0.0

Esses dois pacotes dão a você acesso a todas as construções do AWS CDK e à funcionalidade central da estrutura.

Criando sua primeira pilha CDK

Depois de aprender sobre as operações internas do AWS CDK, você pode implementar esse conhecimento. A seção a seguir orienta você na criação de uma pilha CDK operacional usando Python. Antes de implantá-los na sua conta do AWS, você criará uma estrutura de projeto por meio de código e implementará recursos reais do AWS, como buckets S3 e funções Lambda.

Andaimes de um novo projeto

Quando você executa o comando cdk init com o sinalizador --language python, ele configura uma estrutura de projeto completa que se parece com esta:

Você pode ver a visualização de um diretório de projeto do AWS CDK com arquivos importantes como app.py, cdk.json, requirements.txt e pastas para o código-fonte cdk_datacamp e tests/unit/test_cdk_datacamp_stack.py.

Estrutura de pastas de um projeto Python do AWS CDK

O arquivo app.py é onde o aplicativo é definido, e o arquivo cdk_datacamp_stack.py é onde você escreve o código da pilha e dos construtos.

Dica: Você pode renomear o arquivo de pilha ou a classe para que corresponda à finalidade do seu aplicativo, como storage_stack.py ou monitoring_stack.py.

Adicionando recursos do AWS

Agora, vamos adicionar alguns recursos do AWS à sua pilha CDK. Você escreverá isso dentro do método __init__() da sua classe Stack no arquivo cdk_datacamp_stack.py.

Balde S3

from aws_cdk import aws_s3 as s3

# Create an S3 bucket with versioning and managed encryption
bucket = s3.Bucket(
    self,
    "MyBucket",
    versioned=True,
    encryption=s3.BucketEncryption.S3_MANAGED
)

Função lambda

from aws_cdk import aws_lambda as lambda_

# Define a Lambda function using Python 3.9 runtime
lambda_function = lambda_.Function(
    self,
    "MyFunction",
    runtime=lambda_.Runtime.PYTHON_3_9,
    handler="index.handler",
    code=lambda_.Code.from_asset("lambda")  # Load code from local folder named 'lambda'
)

Implementação da pilha

Depois que você adicionar seus recursos, é hora de implantá-los no AWS.

Em seu terminal, ative o ambiente virtual e execute:

cdk deploy

Isso irá:

  1. Sintetize sua pilha em um modelo do CloudFormation
  2. Carregue esse modelo no AWS
  3. Provisione os recursos em sua conta

Você será solicitado a aprovar as alterações se for a primeira vez que estiver implementando a pilha.

Após a implantação, você pode:

  1. Abra o console do AWS
  2. Navegue até o respectivo serviço (por exemplo, S3, Lambda)
  3. Veja os recursos que o CDK acabou de criar

Trabalhando com construções de CDK

Os aplicativos AWS CDK dependem de construções como seus elementos estruturais essenciais. O código da sua infraestrutura se tornará mais modular, passível de manutenção e legível quando você dominar as construções, quer você use construções de serviço incorporadas ou crie padrões reutilizáveis.

Esta seção ensina você a usar construções L2 (alto nível) e a desenvolver construções personalizadas que reduzem padrões repetitivos.

Uso de construções L2

As construções L2 são abstrações nativas do CDK que são mais fáceis de usar do que o CloudFormation bruto (L1). Eles têm padrões sensatos e segurança de tipo, geralmente exigindo menos linhas de código para configurar um recurso do AWS.

Por que usar construções L2?

  • Menos boilerplate - menos campos obrigatórios em comparação com L1
  • Código Python mais legível e idiomático
  • Inclui métodos utilitários como .add_to_role_policy() ou .add_event_notification()
  • Gerencia automaticamente as dependências entre os recursos

Exemplo: Criando um bucket S3 usando L2

from aws_cdk import aws_s3 as s3
# Create a versioned and encrypted S3 bucket
bucket = s3.Bucket(
    self,
    "MyBucket",
    versioned=True,
    encryption=s3.BucketEncryption.S3_MANAGED
)

A construção equivalente em L1, s3.CfnBucket, precisaria que todas as propriedades fossem definidas manualmente e que a configuração fosse definida como ditados brutos, o que é muito menos intuitivo.

Outros construtos comuns de L2 incluem:

  • lambda_.Function() para o AWS Lambda
  • dynamodb.Table() for DynamoDB
  • sqs.Queue() para SQS
  • sns.Topic() para SNS

Criando construções personalizadas

Sua infraestrutura se expandirá com padrões recorrentes, como a criação de funções Lambda com permissões específicas e buckets S3. Os construtores personalizados são a solução ideal para esse cenário específico.

As construções personalizadas permitem que você combine recursos relacionados em uma única unidade lógica, que pode ser reutilizada em pilhas ou projetos.

Quando você deve criar uma construção personalizada:

  • Quando você tem mais de 3 recursos que são sempre provisionados juntos
  • Quando você quiser encapsular a lógica reutilizável
  • Quando você quiser reduzir a duplicação de código entre pilhas

Exemplo: Um padrão reutilizável de S3 + Lambda

from constructs import Construct
from aws_cdk import aws_s3 as s3, aws_lambda as lambda_
class StorageWithLambda(Construct):
    def __init__(self, scope: Construct, id: str) -> None:
        super().__init__(scope, id)
        # S3 bucket
        self.bucket = s3.Bucket(self, "MyBucket")

        # Lambda function
        self.function = lambda_.Function(
            self,
            "MyFunction",
            runtime=lambda_.Runtime.PYTHON_3_9,
            handler="index.handler",
            code=lambda_.Code.from_asset("lambda")
        )
        # Grant Lambda access to the S3 bucket
        self.bucket.grant_read_write(self.function)

Agora você pode usar essa construção dentro de qualquer pilha como esta:

from my_project.storage_with_lambda import StorageWithLambda
storage = StorageWithLambda(self, "ReusableComponent")

Antes de executar o procedimento acima, crie uma pasta chamada lambda na raiz do projeto e crie um arquivo index.py com o seguinte conteúdo:

def handler(event, context):
    return {
        "statusCode": 200,
        "body": "Hello from Lambda!"
    }

Dicas de reutilização

  • Prefixe os arquivos com construct_ ou coloque-os em uma pasta constructs/
  • Exponha saídas como self.bucket ou self.function para maior flexibilidade
  • Mantenha cada construção focada em uma responsabilidade

Teste e síntese de aplicativos CDK

Depois de escrever o código da infraestrutura, é essencial verificar o que o CDK implantará e, de preferência, testar se as pilhas se comportam conforme o esperado. O AWS CDK fornece ferramentas para sintetizar modelos do CloudFormation e escrever testes automatizados para detectar configurações incorretas antes da implementação.

Sintetizando modelos

O comando cdk synth gera o modelo do CloudFormation a partir do seu código CDK.

cdk synth

Quando você executa isso, o CDK:

  • Carrega seu aplicativo (via app.py)
  • Resolve todas as construções e pilhas
  • Emite modelos YAML/JSON brutos do CloudFormation

sintetizou o modelo AWS CloudFormation com recursos que incluem uma fila SQS, uma política de fila que permite que o SNS envie mensagens e um recurso de assinatura SNS que faz referência à fila.

Modelo de CloudFormation sintetizado 

Por padrão, a saída vai para o terminal, mas você também pode enviar a saída para um arquivo, se necessário:

cdk synth > template.yaml

Isso é útil quando você:

  • Você deseja inspecionar o modelo real antes da implantação
  • Você está depurando a estrutura de uma pilha
  • Você está compartilhando o modelo com equipes que não estão usando o CDK

Infraestrutura de testes

Embora testar a infraestrutura como código possa parecer incomum, é vantajoso, especialmente quando suas pilhas ficam grandes ou incluem lógica condicional, loops ou construções reutilizáveis.

O AWS CDK oferece o módulo de asserções para testar pilhas sintetizadas.

Escrevendo um teste simples com pytest

Aqui está um exemplo de teste que verifica se um recurso específico (como um bucket S3) está incluído na pilha:

# test/test_cdk_datacamp_stack.py
import aws_cdk as cdk
from aws_cdk.assertions import Template
from cdk_datacamp.cdk_datacamp_stack import CdkDatacampStack
def test_s3_bucket_created():
    app = cdk.App()
    stack = CdkDatacampStack(app, "TestStack")
    template = Template.from_stack(stack)
    # Assert that an S3 bucket exists
    template.resource_count_is("AWS::S3::Bucket", 1)

Para executar os testes, verifique se o site pytest está instalado:

pip install -U pytest

Então, corra:

pytest

Se tudo for aprovado, você verá uma marca de verificação verde. Caso contrário, o resultado do teste informará a você o que está faltando.

Saída do pytest em um ambiente Linux usando Python 3.11.11 e pytest 8.3.5, mostrando que todos os três casos de teste foram aprovados com indicadores verdes e tempo de execução de 2,89 segundos.      

Saída do Pytest mostrando a execução bem-sucedida de todos os casos de teste para a pilha do AWS CDK

Você também pode incluir a validação em sua pilha CDK. Os testes de validação são verificações de tempo de execução dentro do código de construção ou de pilha que validam as entradas antes da implantação. Eles ajudam a detectar configurações incorretas ou a impor restrições no início do ciclo de vida do desenvolvimento.

Digamos que você queira passar o bucket_name como uma variável de contexto, mas queremos validar isso:

  • O nome do intervalo não está vazio
  • Ele atende às regras de nomenclatura do S3 (por exemplo, somente letras minúsculas)

Crie um arquivo chamado test/test_storage_with_lambda.py e adicione o seguinte:

import pytest
from aws_cdk import App, Stack
from cdk_datacamp.storage_with_lambda import StorageWithLambda

def test_missing_bucket_name():
    app = App()
    stack = Stack(app, "TestStack")

    with pytest.raises(ValueError, match="bucket_name is required"):
        StorageWithLambda(stack, "FailingConstruct", bucket_name=None)

def test_bucket_name_uppercase():
    app = App()
    stack = Stack(app, "TestStack")

    with pytest.raises(ValueError, match="must be lowercase"):
        StorageWithLambda(stack, "FailingConstruct", bucket_name="InvalidName")

 Para testar a validação, execute o comando abaixo:

test/test_storage_with_lambda.py

Saída do pytest em um ambiente Linux usando Python 3.11.11 e pytest 8.3.5, mostrando que todos os três casos de teste foram aprovados com indicadores verdes.        

Saída do Pytest mostrando a execução bem-sucedida de todos os casos de teste para a pilha do AWS CDK

Quando você deve usar o teste:

  • Você está criando construções ou padrões reutilizáveis.
  • A implementação de testes serve para estabelecer requisitos técnicos padrão entre os membros da equipe.
  • Você deseja detectar regressões ou alterações não intencionais durante a CI/CD.

Você quer reforçar seus conhecimentos sobre o CDK em uma entrevista? As principais perguntas da entrevista de DevOps da AWS podem ajudar você a se preparar.

Práticas recomendadas e dicas para trabalhar com o AWS CDK

Depois de dominar a criação e a implantação da pilha CDK, você deve seguir as práticas recomendadas para manter o código da infraestrutura limpo, seguro e dimensionável. Esta seção discutirá como estruturar grandes projetos, lidar corretamente com a segurança e integrar o CDK aos pipelines de CI/CD.

Organização de grandes projetos

À medida que seu aplicativo CDK cresce, organizar o código em unidades gerenciáveis torna-se essencial.

Use várias pilhas

Divida sua infraestrutura por área de interesse. Por exemplo:

  • NetworkingStack: VPCs, sub-redes, grupos de segurança
  • ComputeStack: EC2, Lambda
  • StorageStack: S3, DynamoDB

Isso permite que você implemente, teste ou destrua partes da sua infraestrutura de forma independente. Veja como ele pode ser incluído em app.py:

network_stack = NetworkingStack(app, "NetworkingStack")
compute_stack = ComputeStack(app, "ComputeStack")

Você também pode passar recursos entre pilhas usando saídas ou referências.

Criar construções aninhadas reutilizáveis

Encapsule recursos relacionados (como um Lambda e suas permissões) em uma construção personalizada, como você fez com StorageWithLambda. Isso melhora a legibilidade e a reutilização em pilhas ou aplicativos.

Use a configuração específica do ambiente

Ofereça suporte a vários ambientes (desenvolvimento, preparação, produção) usando:

  • cdk.json com valores de contexto
  • Substituições da CLI: cdk deploy -c env=prod
  • Lógica condicional em suas pilhas
env = app.node.try_get_context("env")
if env == "prod":
    bucket_name = "mycompany-prod-logs"

Segurança e permissões

Qualquer projeto de infraestrutura deve priorizar a segurança durante os processos de implementação automatizada do AWS CDK. A seção a seguir demonstra o gerenciamento seguro de recursos do IAM por meio de princípios de privilégio mínimo.

Definir funções de IAM em vez de usar os padrões

Os construtores CDK, que incluem tarefas Lambda ou ECS, criarão automaticamente funções de IAM. Embora seja conveniente, isso pode limitar o seu controle sobre permissões e nomes.

Em vez disso, defina as funções explicitamente:

from aws_cdk import aws_iam as iam

execution_role = iam.Role(
    self,
    "LambdaExecutionRole",
    assumed_by=iam.ServicePrincipal("lambda.amazonaws.com"),
    description="Custom role for Lambda with least privilege",
    managed_policies=[
        iam.ManagedPolicy.from_aws_managed_policy_name("service-role/AWSLambdaBasicExecutionRole")
    ]
)

Por padrão, essa função permite apenas o registro em log e nada mais.

Aplicar o princípio do menor privilégio

Evite usar "*" em actions ou resources, a menos que seja absolutamente necessário.

Exemplo:

lambda_fn.add_to_role_policy(
    iam.PolicyStatement(
        actions=["*"],
        resources=["*"]
    )
)

Você também pode usar subsídios específicos para recursos, quando disponíveis:

bucket.grant_read(lambda_fn)

Isso gera automaticamente a política necessária com acesso com escopo ao bucket do S3.

Use políticas gerenciadas quando possível

As políticas gerenciadas pelo AWS simplificam a manutenção e reduzem a chance de erros.

iam.ManagedPolicy.from_aws_managed_policy_name("AmazonSQSReadOnlyAccess")

Você pode anexá-las a funções personalizadas para serviços como ECS, Batch ou Step Functions.

Integração de CI/CD

O AWS CDK oferece um poder excepcional por meio de sua capacidade de integração com pipelines de CI/CD contemporâneos. O CDK oferece suporte à entrega de infraestrutura automatizada por meio da implantação de código com controle de versão, que funciona com o GitHub, o GitLab e os serviços nativos da AWS, incluindo o CodePipeline. O sistema reduz os erros humanos, encurta os ciclos de feedback e permite a implementação em vários ambientes.

Ações do GitHub: Automatizando implantações de CDK

Você pode usar o GitHub Actions para sintetizar, diferenciar, testar e implantar pilhas de CDK em cada push ou pull request.

Dê uma olhada no site .github/workflows/deploy.yml:

name: Deploy CDK App

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - uses: actions/setup-python@v4
        with:
          python-version: 3.11

      - name: Install dependencies
        run: |
          pip install -r requirements.txt
          npm install -g aws-cdk

      - name: Run unit tests
        run: pytest

      - name: CDK Synth
        run: cdk synth -c environment=prod

      - name: Deploy to AWS
        run: cdk deploy --require-approval never
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

Use cdk diff em PRs para visualizar as alterações infra antes de mesclá-las.

CDK pipelines: CI/CD de CDK nativo com o CodePipeline

Para implantações totalmente gerenciadas no AWS, o CDK fornece um módulo chamado aws_cdk.pipelines, que permite que você defina todo o seu pipeline de CI/CD como código, assim como a infraestrutura.

Aqui está um exemplo simplificado:

from aws_cdk import pipelines, SecretValue, Stack
from constructs import Construct
from my_app_stage import MyAppStage  # replace with your actual stage import

class PipelineStack(Stack):
    def __init__(
        self,
        scope: Construct,
        construct_id: str,
        **kwargs
    ) -> None:
        super().__init__(scope, construct_id, **kwargs)

        # Define the source of the pipeline from a GitHub repository
        source = pipelines.CodePipelineSource.git_hub(
            repo_string="your-org/your-repo",  # GitHub org/repo
            branch="main",
            authentication=SecretValue.secrets_manager("GITHUB_TOKEN")
        )

        # Define the CodePipeline and its synthesis step
        pipeline = pipelines.CodePipeline(
            self,
            "MyAppPipeline",
            synth=pipelines.ShellStep(
                "Synth",
                input=source,
                commands=[
                    "pip install -r requirements.txt",
                    "npm install -g aws-cdk",
                    "cdk synth"
                ]
            )
        )

        # Add an application stage (e.g., production deployment)
        pipeline.add_stage(
            MyAppStage(self, "ProdStage")
        )

No código acima:

  • SecretValue.secrets_manager("GITHUB_TOKEN") extrai com segurança seu token do GitHub do Secrets Manager.
  • MyAppStage deve ser uma classe que estenda Stage e envolva suas pilhas CDK reais.

Se você estiver implantando sistemas de machine learning, a integração do CDK com práticas de implantação contínua é abordada em nosso curso CI/CD para machine learning.

Conclusão

Este tutorial mostrou a você como construir e implantar a infraestrutura de nuvem em Python por meio das operações do AWS Cloud Development Kit (CDK). Você aprendeu como fazer:

  • Crie sua primeira pilha CDK.
  • Defina e valide os buckets S3 e as funções Lambda como recursos.
  • Organize um projeto por meio de construções personalizadas e padrões de várias pilhas.
  • Aplique as práticas recomendadas de segurança por meio do princípio do menor privilégio.
  • Automatize as implementações combinando o GitHub Actions com o CDK Pipelines.
  • Escreva testes para validar a lógica de sua infraestrutura.

Agora que você implantou seu primeiro aplicativo CDK, aqui estão algumas maneiras de subir de nível:

  • Use ambientes parametrizados para desenvolvimento/estágio/produção
  • Adicionar alarmes do CloudWatch, API Gateway ou Step Functions
  • Explore as construções de CDK como aws_s3_deployment, aws_ecs_patterns e cdk.pipelines
  • Converta suas construções em uma biblioteca interna do Python para reutilização

Para que você continue aprendendo e construindo, confira o curso Introdução ao AWS Boto em Python.você pode conferir o curso Introdução ao AWS Boto em Python!

Perguntas frequentes

O que é o AWS CDK e qual é a diferença entre ele e o CloudFormation ou o Terraform?

O AWS CDK permite que você defina a infraestrutura de nuvem usando linguagens de programação como Python, enquanto o CloudFormation e o Terraform dependem de JSON/YAML ou HCL. O CDK oferece maior abstração e reutilização por meio de construções.

Você precisa conhecer o CloudFormation para usar o AWS CDK?

Não, o CDK abstrai a maior parte da complexidade do CloudFormation. No entanto, entender o CloudFormation ajuda você a usar construções de nível inferior ou a solucionar problemas de implementação.

Posso implantar vários ambientes (por exemplo, desenvolvimento, produção) com o AWS CDK?

Sim! O CDK oferece suporte à configuração específica do ambiente usando valores de contexto e sinalizadores da CLI, como cdk deploy -c env=prod.

Como faço para testar meu código de infraestrutura CDK?

Você pode usar o pytest junto com as asserções do CDK e o módulo de modelo para escrever testes de unidade que verificam os recursos e as configurações da sua pilha antes da implantação.

O que acontece nos bastidores quando executo o cdk deploy?

cdk deploy sintetiza seu código Python em um modelo CloudFormation, carrega-o no AWS e provisiona os recursos definidos em sua conta.


Rahul Sharma's photo
Author
Rahul Sharma
LinkedIn
Twitter

Rahul Sharma é embaixador da AWS, arquiteto de DevOps e blogueiro técnico especializado em computação em nuvem, práticas de DevOps e tecnologias de código aberto. Com experiência em AWS, Kubernetes e Terraform, ele simplifica conceitos complexos para alunos e profissionais por meio de artigos e tutoriais envolventes. Rahul é apaixonado por resolver desafios de DevOps e compartilhar insights para capacitar a comunidade de tecnologia.

Tópicos

Saiba mais sobre a AWS com estes cursos!

Curso

AWS Concepts

2 h
28.8K
Discover the world of Amazon Web Services (AWS) and understand why it's at the forefront of cloud computing.
Ver detalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

blog

AWS Certified Cloud Practitioner: um guia completo

Saiba mais sobre a certificação e o exame AWS Certified Cloud Practitioner com nosso guia completo. Descubra dicas, recursos e estratégias para garantir que você tenha sucesso.
Srujana Maddula's photo

Srujana Maddula

13 min

Tutorial

Primeiros passos com o AWS Athena: Um guia prático para iniciantes

Este guia prático ajudará você a começar a usar o AWS Athena. Explore sua arquitetura e seus recursos e saiba como consultar dados no Amazon S3 usando SQL.
Tim Lu's photo

Tim Lu

15 min

Tutorial

Desenvolvimento de back-end em Python: Um guia completo para iniciantes

Este guia completo ensina a você os fundamentos do desenvolvimento de back-end em Python. Aprenda conceitos básicos, estruturas e práticas recomendadas para você começar a criar aplicativos da Web.
Oluseye Jeremiah's photo

Oluseye Jeremiah

15 min

Tutorial

Tutorial do Python pandas: O guia definitivo para iniciantes

Você está pronto para começar sua jornada com os pandas? Aqui está um guia passo a passo sobre como você pode começar.
Vidhi Chugh's photo

Vidhi Chugh

15 min

Tutorial

O guia completo para machine learning na AWS com o Amazon SageMaker

Este tutorial abrangente ensina você a usar o AWS SageMaker para criar, treinar e implantar modelos de machine learning. Nós guiamos você por todo o fluxo de trabalho, desde a configuração do seu ambiente AWS e a criação de uma instância de notebook do SageMaker até a preparação de dados, modelos de treinamento e sua implementação como endpoints.
Bex Tuychiev's photo

Bex Tuychiev

15 min

Tutorial

Tutorial de como executar scripts Python

Saiba como executar um script Python a partir da linha de comando e também como fornecer argumentos de linha de comando ao seu script.
Aditya Sharma's photo

Aditya Sharma

10 min

Ver maisVer mais