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.
Tutorial: criação da sua primeira aplicação do AWS CDK
Comece a usar o kit de desenvolvimento em nuvem da AWS (CDK da AWS) a partir da interface de linha de comandos do CDK AWS (CLI do CDK da AWS) para desenvolver sua primeira aplicação do CDK, fazer o bootstrapping do seu ambiente da AWS e implantar sua aplicação no AWS.
Pré-requisitos
Antes de iniciar este tutorial, conclua todas as etapas de configuração em Conceitos básicos do AWS CDK.
Sobre este tutorial
Neste tutorial, você criará e implantará uma aplicação simples no AWS usando o AWS CDK. A aplicação consiste em uma função do AWS Lambda que retorna uma mensagem Hello World! quando invocada. A função será invocada por meio de um URL de função do Lambda que serve como um endpoint HTTP(S) dedicado para sua função do Lambda.
Usando este tutorial, você fará o seguinte:
-
Crie seu projeto: crie um projeto do CDK usando o comando
cdk initda CLI do CDK. -
Configure seu ambiente AWS – Configure o ambiente AWS no qual você implantará sua aplicação.
-
Inicialize seu ambiente da AWS: prepare seu ambiente da AWS para implantação fazendo o bootstrapping com o comando
cdk bootstrapda CLI do CDK. -
Desenvolva sua aplicação – Use constructos da Biblioteca de Constructos da AWS para definir sua função do Lambda e os recursos de URL da função do Lambda.
-
Prepare sua aplicação para implantação: use a CLI do CDK para criar sua aplicação e sintetizar um modelo do AWS CloudFormation.
-
Implante sua aplicação: use o comando
cdk deployda CLI do CDK para implantar sua aplicação e provisionar seus recursos da AWS. -
Interaja com sua aplicação — Interaja com sua função do Lambda implantada no AWS invocando-a e recebendo uma resposta.
-
Modifique sua aplicação — Modifique sua função do Lambda e implante para implementar suas alterações.
-
Exclua sua aplicação: exclua todos os recursos que você criou usando o comando
cdk destroyda CLI do CDK.
Etapa 1: criar seu projeto do CDK
Nesta etapa, você cria um novo projeto do CDK. Um projeto do CDK deve estar em seu próprio diretório, com suas próprias dependências de módulos locais.
- Para criar um projeto do CDK
-
-
Em um diretório inicial de sua escolha, crie e navegue até um diretório chamado
hello-cdk:$ mkdir hello-cdk && cd hello-cdkImportante
Certifique-se de nomear o diretório do seu projeto
hello-cdk, exatamente como mostrado aqui. A CLI do CDK usa esse nome de diretório para nomear coisas dentro do seu código do CDK. Se você escolher outro nome de diretório, você terá problemas durante este tutorial. -
A partir do diretório
hello-cdk, inicialize um novo projeto do CDK usando o comandocdk initda CLI do CDK. Especifique o modeloappe sua linguagem de programação preferida com a opção--language:
-
O comando cdk init cria uma estrutura de arquivos e pastas dentro do diretório hello-cdk para ajudar a organizar o código-fonte da sua aplicação CDK. Essa estrutura de arquivos e pastas é chamada de projeto do CDK. Reserve um momento para explorar seu projeto do CDK.
Se você instalou o Git, cada projeto que você cria usando também cdk init é inicializado como um repositório Git.
Durante a inicialização do projeto, a CLI do CDK cria uma aplicação do CDK contendo uma única pilha do CDK. A instância da aplicação do CDK é criada usando o constructo App. A seguir está uma parte desse código do seu arquivo de aplicação CDK:
A pilha do CDK é criada usando o constructo Stack. A seguir está uma parte desse código do seu arquivo de pilha CDK:
Etapa 2: configurar seu ambiente AWS
Nesta etapa, você configura o ambiente AWS para sua pilha do CDK. Ao fazer isso, você especifica em qual ambiente sua pilha do CDK será implantada.
Primeiro, determine o ambiente AWS que você deseja usar. Um ambiente da AWS consiste em uma conta da AWS e uma região da AWS.
Ao usar a AWS CLI para configurar as credenciais de segurança em sua máquina local, é possível então usar a AWS CLI para obter informações de ambiente da AWS para um perfil específico.
- Para usar a AWS CLI para obter seu ID de conta da AWS
-
-
Execute o comando da AWS CLI a seguir para obter o ID da conta da AWS para seu perfil
default:$ aws sts get-caller-identity --query "Account" --output text -
Se você preferir usar um perfil nomeado, forneça o nome do seu perfil usando a opção
--profile:$ aws sts get-caller-identity --profile your-profile-name --query "Account" --output text
-
- Para usar a AWS CLI para obter sua região da AWS
-
-
Execute o comando da AWS CLI a seguir para obter a região que você configurou para seu perfil
default:$ aws configure get region -
Se você preferir usar um perfil nomeado, forneça o nome do seu perfil usando a opção
--profile:$ aws configure get region --profile your-profile-name
-
Em seguida, você configurará o ambiente AWS para sua pilha do CDK modificando a instância HelloCdkStack no arquivo da aplicação. Neste tutorial, você codificará as informações do seu ambiente AWS. Isso é recomendado para ambientes de produção. Para obter informações sobre outras formas de configurar ambientes, consulte Configuração de ambientes para uso com o AWS CDK.
- Configurar o ambiente para sua pilha do CDK
-
-
No seu arquivo da aplicação, use a propriedade
envdo constructoStackpara configurar seu ambiente. Veja um exemplo a seguir:
-
Etapa 3: inicialize seu ambiente AWS
Nesta etapa, você inicializa o ambiente AWS que configurou na etapa anterior. Isso prepara seu ambiente para implantações do CDK.
Para inicializar seu ambiente, execute o seguinte a partir da raiz do seu projeto do CDK:
$ cdk bootstrap
Ao fazer o bootstrapping a partir da raiz do seu projeto do CDK, você não precisa fornecer nenhuma informação adicional. A CLI do CDK obtém informações sobre o ambiente do seu projeto. Ao fazer o bootstrapping fora de um projeto do CDK, é necessário fornecer informações do ambiente com o comando cdk bootstrap. Para obter mais informações, consulte Bootstrapping do seu ambiente para uso com o AWS CDK.
Etapa 4: compilar sua aplicação do CDK
Na maioria dos ambientes de programação, você cria ou compila o código depois de fazer alterações. Isso não é necessário com o AWS CDK, pois a CLI do CDK executará essa etapa automaticamente. No entanto, você ainda pode criar manualmente quando quiser detectar erros de sintaxe e tipo. Veja um exemplo a seguir:
Etapa 5: listar as pilhas do CDK em sua aplicação
Neste momento, é preciso ter uma aplicação CDK contendo uma única pilha do CDK. Para verificar, use o comando cdk list da CLI do CDK para exibir suas pilhas. A saída deve exibir uma única pilha chamada HelloCdkStack:
$ cdk list HelloCdkStack
Se não vir essa saída, verifique se você está no diretório de trabalho correto do projeto e tente novamente. Se você ainda não vir sua pilha, repita a Etapa 1: criação do seu projeto do CDK e tente novamente.
Etapa 6: definir sua função do Lambda
Nesta etapa, você importa o módulo aws_lambda da Biblioteca de Constructos da AWS e usa o constructo L2 Function.
Modifique seu arquivo de pilha CDK da seguinte forma:
Vamos analisar o constructo Function mais de perto. Como todos os constructos, a classe Function usa três parâmetros:
-
escopo — Define sua instância
Stackcomo pai do constructoFunction. Todos os constructos que definem recursos AWS são criados dentro do escopo de uma pilha. É possível definir constructos dentro de constructos, criando uma hierarquia (árvore). Aqui, e na maioria dos casos, o escopo éthis(selfem Python). -
Id: o ID de constructo da
Functiondentro da sua aplicação do AWS. Esse ID, mais um hash baseado na localização da função na pilha, identifica exclusivamente a função durante a implantação. O AWS CDK também faz referência a esse ID quando você atualiza o constructo em sua aplicação e reimplanta para atualizar o recurso implantado. Aqui, seu ID de constructo éHelloWorldFunction. As funções também podem ter um nome, especificado com a propriedadefunctionName. Isto é diferente do ID do constructo. -
props — Um pacote de valores que define as propriedades da função. Aqui você define as propriedades
runtime,handlerecode.Os props são representados de forma diferente nas linguagens com suporte no AWS CDK.
-
No TypeScript e no JavaScript,
propsé um único argumento e você passa um objeto contendo as propriedades desejadas. -
No Python, os props são passados como argumentos de palavras-chave.
-
No Java, um Construtor é fornecido para passar os props. Existem dois: um para o
FunctionPropse um segundo para oFunctionpara permitir que você construa o constructo e seu objeto de props em uma única etapa. Esse código usa o último. -
Em C#, você instancia um objeto
FunctionPropsusando um inicializador de objetos e o passa como terceiro parâmetro.Se os props de um constructo forem opcionais, será possível omitir totalmente o parâmetro
props.
-
Todos os constructos usam esses mesmos três argumentos, então é fácil se manter orientado à medida que você aprende sobre argumentos novos. E, como era de se esperar, você pode subclassificar qualquer constructo para estendê-lo de acordo com suas necessidades ou se quiser alterar seus padrões.
Etapa 7: Definir seu URL da função do Lambda
Nesta etapa, você usa o método auxiliar addFunctionUrl do constructo Function para definir o URL de uma função do Lambda. Para gerar o valor desse URL na implantação, você criará uma saída de AWS CloudFormation usando o constructo CfnOutput.
Adicione o seguinte ao seu arquivo de pilha CDK:
Atenção
Para manter esse tutorial simples, o URL da função do Lambda é definido sem autenticação. Quando implantado, isso cria um endpoint acessível ao público que pode ser usado para invocar sua função. Ao concluir este tutorial, siga a Etapa 12: exclusão da sua aplicação para excluir esses recursos.
Etapa 8: Sintetizar um modelo do CloudFormation
Nesta etapa, você se prepara para a implantação sintetizando um modelo do CloudFormation com o comando cdk synth da CLI do CDK. Esse comando executa a validação básica do seu código do CDK, executa sua aplicação do CDK e gera um modelo do CloudFormation a partir de sua pilha do CDK.
Se sua aplicação contiver mais de uma pilha, você deverá especificar quais pilhas sintetizar. Como sua aplicação contém uma única pilha, a CLI do CDK detecta automaticamente a pilha a sintetizar.
Se você não sintetizar um modelo, a CLI do CDK executará automaticamente essa etapa quando você implantar. No entanto, recomendamos executar essa etapa antes de cada implantação para verificar se há erros de síntese.
Antes de sintetizar um modelo, você pode, opcionalmente, criar sua aplicação para capturar erros de sintaxe e de tipo. Para obter instruções, consulte Etapa 4: compilação da sua aplicação do CDK.
Para sintetizar um modelo do CloudFormation, execute o seguinte a partir da raiz do seu projeto:
$ cdk synth
nota
Se você receber um erro como o seguinte, verifique se você está no diretório hello-cdk e tente novamente:
--app is required either in command-line, in cdk.json or in ~/.cdk.json
Se tiver êxito, a CLI do CDK exibirá um modelo do CloudFormation formatado em YAML para stdout e salvará um modelo formatado em JSON no diretório cdk.out do seu projeto.
Veja a seguir um exemplo de saída do modelo do CloudFormation:
Resources: HelloWorldFunctionServiceRole<unique-identifier>: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Action: sts:AssumeRole Effect: Allow Principal: Service: lambda.amazonaws.com Version: "2012-10-17" ManagedPolicyArns: - Fn::Join: - "" - - "arn:" - Ref: AWS::Partition - :iam::aws:policy/service-role/AWSLambdaBasicExecutionRole Metadata: aws:cdk:path: HelloCdkStack/HelloWorldFunction/ServiceRole/Resource HelloWorldFunction<unique-identifier>: Type: AWS::Lambda::Function Properties: Code: ZipFile: " \ exports.handler = async function(event) { \ return { \ statusCode: 200, \ body: JSON.stringify('Hello World!'), \ }; \ }; \ " Handler: index.handler Role: Fn::GetAtt: - HelloWorldFunctionServiceRole<unique-identifier> - Arn Runtime: nodejs20.x DependsOn: - HelloWorldFunctionServiceRole<unique-identifier> Metadata: aws:cdk:path: HelloCdkStack/HelloWorldFunction/Resource HelloWorldFunctionFunctionUrl<unique-identifier>: Type: AWS::Lambda::Url Properties: AuthType: NONE TargetFunctionArn: Fn::GetAtt: - HelloWorldFunction<unique-identifier> - Arn Metadata: aws:cdk:path: HelloCdkStack/HelloWorldFunction/FunctionUrl/Resource HelloWorldFunctioninvokefunctionurl<unique-identifier>: Type: AWS::Lambda::Permission Properties: Action: lambda:InvokeFunctionUrl FunctionName: Fn::GetAtt: - HelloWorldFunction<unique-identifier> - Arn FunctionUrlAuthType: NONE Principal: "*" Metadata: aws:cdk:path: HelloCdkStack/HelloWorldFunction/invoke-function-url CDKMetadata: Type: AWS::CDK::Metadata Properties: Analytics: v2:deflate64:<unique-identifier> Metadata: aws:cdk:path: HelloCdkStack/CDKMetadata/Default Condition: CDKMetadataAvailable Outputs: myFunctionUrlOutput: Value: Fn::GetAtt: - HelloWorldFunctionFunctionUrl<unique-identifier> - FunctionUrl Parameters: BootstrapVersion: Type: AWS::SSM::Parameter::Value<String> Default: /cdk-bootstrap/<unique-identifier>/version Description: Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip] Rules: CheckBootstrapVersion: Assertions: - Assert: Fn::Not: - Fn::Contains: - - "1" - "2" - "3" - "4" - "5" - Ref: BootstrapVersion AssertDescription: CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.
nota
Cada modelo gerado contém um recurso
AWS::CDK::Metadata por padrão. A equipe do AWS CDK usa esses metadados para obter informações sobre o uso do AWS CDK e para encontrar maneiras de melhorá-lo. Para obter detalhes, incluindo como optar por não receber relatórios de versão, consulte Relatórios de versão.
Ao definir um único constructo L2, o CDK da AWS cria um modelo abrangente do CloudFormation contendo seus recursos do Lambda, junto com as permissões e a lógica de colagem necessárias para que seus recursos interajam com sua aplicação.
Etapa 9: Implantar sua pilha do CDK
Nesta etapa, você usa o comando cdk deploy da CLI do CDK para implantar sua pilha do CDK. Esse comando recupera seu modelo gerado do CloudFormation e o implanta por meio do AWS, CloudFormation, que provisiona seus recursos como parte de uma pilha do CloudFormation.
Da raiz do seu projeto, execute o seguinte. Confirme as alterações, se solicitado:
$ cdk deploy ✨ Synthesis time: 2.69s HelloCdkStack: start: Building <unique-identifier>:current_account-current_region HelloCdkStack: success: Built <unique-identifier>:current_account-current_region HelloCdkStack: start: Publishing <unique-identifier>:current_account-current_region HelloCdkStack: success: Published <unique-identifier>:current_account-current_region This deployment will make potentially sensitive changes according to your current security approval level (--require-approval broadening). Please confirm you intend to make the following modifications: IAM Statement Changes ┌───┬───────────────────────────────────────┬────────┬──────────────────────────┬──────────────────────────────┬───────────┐ │ │ Resource │ Effect │ Action │ Principal │ Condition │ ├───┼───────────────────────────────────────┼────────┼──────────────────────────┼──────────────────────────────┼───────────┤ │ + │ ${HelloWorldFunction.Arn} │ Allow │ lambda:InvokeFunctionUrl │ * │ │ ├───┼───────────────────────────────────────┼────────┼──────────────────────────┼──────────────────────────────┼───────────┤ │ + │ ${HelloWorldFunction/ServiceRole.Arn} │ Allow │ sts:AssumeRole │ Service:lambda.amazonaws.com │ │ └───┴───────────────────────────────────────┴────────┴──────────────────────────┴──────────────────────────────┴───────────┘ IAM Policy Changes ┌───┬───────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────┐ │ │ Resource │ Managed Policy ARN │ ├───┼───────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────┤ │ + │ ${HelloWorldFunction/ServiceRole} │ arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole │ └───┴───────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────┘ (NOTE: There may be security-related changes not in this list. See https://github.com/aws/aws-cdk/issues/1299) Do you wish to deploy these changes (y/n)? y
Da mesma forma que com cdk synth, você não precisa especificar a pilha do AWS CDK, pois a aplicação contém uma única pilha.
Durante a implantação, a CLI do CDK exibirá informações de andamento à medida que sua pilha é implantada. Quando terminar, será possível acessar o console do AWS CloudFormationHelloCdkStack. Você também pode acessar o console Lambda para ver seu recurso HelloWorldFunction.
Quando a implantação for concluída, a CLI do CDK exibirá o URL do seu endpoint. Copie esse URL para a próxima etapa. Veja um exemplo a seguir:
... HelloCdkStack: deploying... [1/1] HelloCdkStack: creating CloudFormation changeset... ✅ HelloCdkStack ✨ Deployment time: 41.65s Outputs: HelloCdkStack.myFunctionUrlOutput = https://<api-id>.lambda-url.<Region>.on.aws/ Stack ARN: arn:aws:cloudformation:<Region:account-id>:stack/HelloCdkStack/<unique-identifier> ✨ Total time: 44.34s
Etapa 10: Interaja com sua aplicação no AWS
Nesta etapa, você interage com sua aplicação no AWS invocanda sua função do Lambda por meio do URL da função. Quando você acessa o URL, sua função do Lambda retorna a mensagem Hello World!.
Para invocar sua função, acesse o URL da função pelo navegador ou pela linha de comando. Veja um exemplo a seguir:
$ curl https://<api-id>.lambda-url.<Region>.on.aws/ "Hello World!"%
Etapa 11: Modificar sua aplicação
Nesta etapa, você modifica a mensagem que a função do Lambda retorna quando invocada. Você executa uma comparação usando o comando cdk diff da CLI do CDK para visualizar suas alterações e implantar para atualizar sua aplicação. Em seguida, você interage com sua aplicação no AWS para ver sua nova mensagem.
Modifique a instância myFunction em seu arquivo de pilha CDK da seguinte forma:
Atualmente, suas alterações de código não fizeram nenhuma atualização direta em seu recurso Lambda implantado. Seu código define o estado desejado do seu recurso. Para modificar seu recurso implantado, você usará a CLI do CDK para sintetizar o estado desejado em um novo modelo do AWS CloudFormation. Em seguida, você implantará seu novo modelo do CloudFormation como um conjunto de alterações. Os conjuntos de alterações fazem somente as alterações necessárias para alcançar o novo estado desejado.
Para visualizar suas alterações, execute o comando cdk diff. Veja um exemplo a seguir:
$ cdk diff Stack HelloCdkStack Hold on while we create a read-only change set to get a diff with accurate replacement information (use --no-change-set to use a less accurate but faster template-only diff) Resources [~] AWS::Lambda::Function HelloWorldFunction HelloWorldFunction<unique-identifier> └─ [~] Code └─ [~] .ZipFile: ├─ [-] exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; └─ [+] exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello CDK!'), }; }; ✨ Number of stacks with differences: 1
Para criar essa diferença, o a CLI do CDK consulta sua conta da AWS para obter o modelo do AWS CloudFormation mais recente para a pilha HelloCdkStack. Em seguida, ele compara o modelo mais recente com o modelo que acabou de sintetizar da sua aplicação.
Para implementar suas alterações, execute o comando cdk deploy. Veja um exemplo a seguir:
$ cdk deploy ✨ Synthesis time: 2.12s HelloCdkStack: start: Building <unique-identifier>:current_account-current_region HelloCdkStack: success: Built <unique-identifier>:current_account-current_region HelloCdkStack: start: Publishing <unique-identifier>:current_account-current_region HelloCdkStack: success: Published <unique-identifier>:current_account-current_region HelloCdkStack: deploying... [1/1] HelloCdkStack: creating CloudFormation changeset... ✅ HelloCdkStack ✨ Deployment time: 26.96s Outputs: HelloCdkStack.myFunctionUrlOutput = https://<unique-identifier>.lambda-url.<Region>.on.aws/ Stack ARN: arn:aws:cloudformation:<Region:account-id>:stack/HelloCdkStack/<unique-identifier> ✨ Total time: 29.07s
Para interagir com sua aplicação, repita a Etapa 10: interação com sua aplicação na AWS. Veja um exemplo a seguir:
$ curl https://<api-id>.lambda-url.<Region>.on.aws/ "Hello CDK!"%
Etapa 12: Excluir sua aplicação
Nesta etapa, você usa o comando cdk destroy da CLI do CDK para excluir sua aplicação. Esse comando exclui a pilha do CloudFormation associada à sua pilha CDK, que inclui os recursos que você criou.
Para excluir sua aplicação, execute o comando cdk destroy e confirme sua solicitação para excluir a aplicação. Veja um exemplo a seguir:
$ cdk destroy Are you sure you want to delete: HelloCdkStack (y/n)? y HelloCdkStack: destroying... [1/1] ✅ HelloCdkStack: destroyed
Próximas etapas
Parabéns! Você concluiu este tutorial e usou o AWS CDK com sucesso para criar, modificar e excluir recursos na Nuvem AWS. Agora está tudo pronto para começar a usar o AWS CDK.
Para saber mais sobre como usar o AWS CDK em sua linguagem de programação preferida, consulte Trabalho dom a Biblioteca do AWS CDK.
Para recursos adicionais, consulte o seguinte:
-
Experimente o CDK Workshop
para um tour mais aprofundado envolvendo um projeto mais complexo. -
Consulte a referência de API para começar a explorar os constructos do CDK disponíveis para seus serviços da AWS favoritos.
-
Visite o Hub de Constructos
para descobrir constructos criados pelo AWS e outros. -
Explore exemplos
de uso do AWS CDK.
O AWS CDK é um projeto de código-fonte aberto. Para contribuir, consulte Contribuição ao kit de desenvolvimento em nuvem da AWS (CDK da AWS)