AWS CDK projetos - AWS Cloud Development Kit (AWS CDK) v2

Este é o Guia do Desenvolvedor 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á.

AWS CDK projetos

Um AWS Cloud Development Kit (AWS CDK) projeto representa os arquivos e pastas que contêm seu código CDK. O conteúdo variará de acordo com sua linguagem de programação.

Você pode criar seu AWS CDK projeto manualmente ou com o AWS CDK comando Command Line Interface (AWS CDK CLI)cdk init. Neste tópico, vamos nos referir à estrutura do projeto e às convenções de nomenclatura de arquivos e pastas criados pela CLI do AWS CDK. Você pode personalizar e organizar seus projetos de CDK para atender às suas necessidades.

nota

A estrutura do projeto criada pelo AWS CDK CLI pode variar entre as versões ao longo do tempo.

Arquivos e pastas universais

.git

Se você tiver git instalado, o AWS CDK CLI inicializará automaticamente um Git repositório para seu projeto. O .git diretório contém informações sobre o repositório.

.gitignore

Arquivo de texto usado por Git para especificar arquivos e pastas a serem ignorados.

README.md

Arquivo de texto que fornece orientações básicas e informações importantes para gerenciar seu AWS CDK projeto. Modifique esse arquivo conforme necessário para documentar informações importantes sobre seu projeto CDK.

cdk.json

Arquivo de configuração para AWS CDK o. Esse arquivo fornece instruções AWS CDK CLI sobre como executar seu aplicativo.

Arquivos e pastas específicos do idioma

Os arquivos e pastas a seguir são exclusivos para cada linguagem de programação compatível.

TypeScript

Veja a seguir um exemplo de projeto criado no my-cdk-ts-project diretório usando o cdk init --language typescript comando:

my-cdk-ts-project ├── .git ├── .gitignore ├── .npmignore ├── README.md ├── bin │ └── my-cdk-ts-project.ts ├── cdk.json ├── jest.config.js ├── lib │ └── my-cdk-ts-project-stack.ts ├── node_modules ├── package-lock.json ├── package.json ├── test │ └── my-cdk-ts-project.test.ts └── tsconfig.json
.npm ignore

Arquivo que especifica quais arquivos e pastas devem ser ignorados ao publicar um pacote no npm registro. Esse arquivo é semelhante.gitignore, mas é específico para npm pacotes.

bin/.ts my-cdk-ts-project

O arquivo do aplicativo define seu aplicativo CDK. Os projetos CDK podem conter um ou mais arquivos de aplicativos. Os arquivos do aplicativo são armazenados na bin pasta.

Veja a seguir um exemplo de um arquivo de aplicativo básico que define um aplicativo CDK:

#!/usr/bin/env node import 'source-map-support/register'; import * as cdk from 'aws-cdk-lib'; import { MyCdkTsProjectStack } from '../lib/my-cdk-ts-project-stack'; const app = new cdk.App(); new MyCdkTsProjectStack(app, 'MyCdkTsProjectStack');
jest.config.js

Arquivo de configuração paraJest. Jesté uma estrutura JavaScript de teste popular.

lib/ my-cdk-ts-project -stack.ts

O arquivo de pilha define sua pilha de CDK. Na sua pilha, você define AWS recursos e propriedades usando construções.

Veja a seguir um exemplo de um arquivo de pilha básico que define uma pilha CDK:

import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; export class MyCdkTsProjectStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // code that defines your resources and properties go here } }
módulos_nódulos

Pasta comum em Node.js projetos que contêm dependências para seu projeto.

package-lock.json

Arquivo de metadados que funciona com o package.json arquivo para gerenciar versões de dependências.

pacote.json

Arquivo de metadados que é comumente usado em Node.js projetos. Esse arquivo contém informações sobre seu projeto CDK, como nome do projeto, definições de script, dependências e outras informações de importação em nível de projeto.

teste/ .test.ts my-cdk-ts-project

Uma pasta de teste é criada para organizar os testes do seu projeto CDK. Um arquivo de teste de amostra também é criado.

Você pode escrever testes TypeScript e usá-los Jest para compilar seu TypeScript código antes de executá-los.

tsconfig.json

Arquivo de configuração usado em TypeScript projetos que especifica as opções do compilador e as configurações do projeto.

JavaScript

Veja a seguir um exemplo de projeto criado no my-cdk-js-project diretório usando o cdk init --language javascript comando:

my-cdk-js-project ├── .git ├── .gitignore ├── .npmignore ├── README.md ├── bin │ └── my-cdk-js-project.js ├── cdk.json ├── jest.config.js ├── lib │ └── my-cdk-js-project-stack.js ├── node_modules ├── package-lock.json ├── package.json └── test └── my-cdk-js-project.test.js
.npm ignore

Arquivo que especifica quais arquivos e pastas devem ser ignorados ao publicar um pacote no npm registro. Esse arquivo é semelhante.gitignore, mas é específico para npm pacotes.

bin/.js my-cdk-js-project

O arquivo do aplicativo define seu aplicativo CDK. Os projetos CDK podem conter um ou mais arquivos de aplicativos. Os arquivos do aplicativo são armazenados na bin pasta.

Veja a seguir um exemplo de um arquivo de aplicativo básico que define um aplicativo CDK:

#!/usr/bin/env node const cdk = require('aws-cdk-lib'); const { MyCdkJsProjectStack } = require('../lib/my-cdk-js-project-stack'); const app = new cdk.App(); new MyCdkJsProjectStack(app, 'MyCdkJsProjectStack');
jest.config.js

Arquivo de configuração paraJest. Jesté uma estrutura JavaScript de teste popular.

lib/ -stack.js my-cdk-js-project

O arquivo de pilha define sua pilha de CDK. Na sua pilha, você define AWS recursos e propriedades usando construções.

Veja a seguir um exemplo de um arquivo de pilha básico que define uma pilha CDK:

const { Stack, Duration } = require('aws-cdk-lib'); class MyCdkJsProjectStack extends Stack { constructor(scope, id, props) { super(scope, id, props); // code that defines your resources and properties go here } } module.exports = { MyCdkJsProjectStack }
módulos_nódulos

Pasta comum em Node.js projetos que contêm dependências para seu projeto.

package-lock.json

Arquivo de metadados que funciona com o package.json arquivo para gerenciar versões de dependências.

pacote.json

Arquivo de metadados que é comumente usado em Node.js projetos. Esse arquivo contém informações sobre seu projeto CDK, como nome do projeto, definições de script, dependências e outras informações de importação em nível de projeto.

teste/ .test.js my-cdk-js-project

Uma pasta de teste é criada para organizar os testes do seu projeto CDK. Um arquivo de teste de amostra também é criado.

Você pode escrever testes JavaScript e usá-los Jest para compilar seu JavaScript código antes de executá-los.

Python

Veja a seguir um exemplo de projeto criado no my-cdk-py-project diretório usando o cdk init --language python comando:

my-cdk-py-project ├── .git ├── .gitignore ├── .venv ├── README.md ├── app.py ├── cdk.json ├── my_cdk_py_project │ ├── __init__.py │ └── my_cdk_py_project_stack.py ├── requirements-dev.txt ├── requirements.txt ├── source.bat └── tests ├── __init__.py └── unit
.venv

O CDK cria CLI automaticamente um ambiente virtual para seu projeto. O .venv diretório se refere a esse ambiente virtual.

app.py

O arquivo do aplicativo define seu aplicativo CDK. Os projetos CDK podem conter um ou mais arquivos de aplicativos.

Veja a seguir um exemplo de um arquivo de aplicativo básico que define um aplicativo CDK:

#!/usr/bin/env python3 import os import aws_cdk as cdk from my_cdk_py_project.my_cdk_py_project_stack import MyCdkPyProjectStack app = cdk.App() MyCdkPyProjectStack(app, "MyCdkPyProjectStack") app.synth()
my_cdk_py_project

Diretório que contém seus arquivos de pilha. O CDK CLI cria o seguinte aqui:

  • __init__.py — Um arquivo de definição de Python pacote vazio.

  • my_cdk_py_project— Arquivo que define sua pilha de CDK. Em seguida, você define AWS recursos e propriedades dentro da pilha usando construções.

Veja a seguir um exemplo de um arquivo de pilha:

from aws_cdk import Stack from constructs import Construct class MyCdkPyProjectStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) # code that defines your resources and properties go here
requirements-dev.txt

Arquivo semelhanterequirements.txt, mas usado para gerenciar dependências especificamente para fins de desenvolvimento em vez de produção.

requirements.txt

Arquivo comum usado em Python projetos para especificar e gerenciar dependências do projeto.

source.bat

O arquivo Batch para Windows isso é usado para configurar o ambiente Python virtual.

testes

Diretório que contém testes para seu projeto CDK.

Veja a seguir um exemplo de um teste unitário:

import aws_cdk as core import aws_cdk.assertions as assertions from my_cdk_py_project.my_cdk_py_project_stack import MyCdkPyProjectStack def test_sqs_queue_created(): app = core.App() stack = MyCdkPyProjectStack(app, "my-cdk-py-project") template = assertions.Template.from_stack(stack) template.has_resource_properties("AWS::SQS::Queue", { "VisibilityTimeout": 300 })
Java

Veja a seguir um exemplo de projeto criado no my-cdk-java-project diretório usando o cdk init --language java comando:

my-cdk-java-project ├── .git ├── .gitignore ├── README.md ├── cdk.json ├── pom.xml └── src ├── main └── test
pom.xml

Arquivo que contém informações de configuração e metadados sobre seu projeto CDK. Este arquivo faz parte doMaven.

src/main

Diretório contendo seu aplicativo e arquivos de pilha.

Veja a seguir um exemplo de arquivo de aplicativo:

package com.myorg; import software.amazon.awscdk.App; import software.amazon.awscdk.Environment; import software.amazon.awscdk.StackProps; import java.util.Arrays; public class MyCdkJavaProjectApp { public static void main(final String[] args) { App app = new App(); new MyCdkJavaProjectStack(app, "MyCdkJavaProjectStack", StackProps.builder() .build()); app.synth(); } }

Veja a seguir um exemplo de arquivo de pilha:

package com.myorg; import software.constructs.Construct; import software.amazon.awscdk.Stack; import software.amazon.awscdk.StackProps; public class MyCdkJavaProjectStack extends Stack { public MyCdkJavaProjectStack(final Construct scope, final String id) { this(scope, id, null); } public MyCdkJavaProjectStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); // code that defines your resources and properties go here } }
src/test

Diretório contendo seus arquivos de teste. Veja um exemplo a seguir:

package com.myorg; import software.amazon.awscdk.App; import software.amazon.awscdk.assertions.Template; import java.io.IOException; import java.util.HashMap; import org.junit.jupiter.api.Test; public class MyCdkJavaProjectTest { @Test public void testStack() throws IOException { App app = new App(); MyCdkJavaProjectStack stack = new MyCdkJavaProjectStack(app, "test"); Template template = Template.fromStack(stack); template.hasResourceProperties("AWS::SQS::Queue", new HashMap<String, Number>() {{ put("VisibilityTimeout", 300); }}); } }
C#

Veja a seguir um exemplo de projeto criado no my-cdk-csharp-project diretório usando o cdk init --language csharp comando:

my-cdk-csharp-project ├── .git ├── .gitignore ├── README.md ├── cdk.json └── src ├── MyCdkCsharpProject └── MyCdkCsharpProject.sln
src/ MyCdkCsharpProject

Diretório contendo seu aplicativo e arquivos de pilha.

Veja a seguir um exemplo de arquivo de aplicativo:

using Amazon.CDK; using System; using System.Collections.Generic; using System.Linq; namespace MyCdkCsharpProject { sealed class Program { public static void Main(string[] args) { var app = new App(); new MyCdkCsharpProjectStack(app, "MyCdkCsharpProjectStack", new StackProps{}); app.Synth(); } } }

Veja a seguir um exemplo de arquivo de pilha:

using Amazon.CDK; using Constructs; namespace MyCdkCsharpProject { public class MyCdkCsharpProjectStack : Stack { internal MyCdkCsharpProjectStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { // code that defines your resources and properties go here } } }

Esse diretório também contém o seguinte:

  • GlobalSuppressions.cs— Arquivo usado para suprimir avisos ou erros específicos do compilador em seu projeto.

  • .csproj— Arquivo baseado em XML usado para definir configurações de projeto, dependências e configurações de compilação.

src/.sln MyCdkCsharpProject

Microsoft Visual Studio Solution Fileusado para organizar e gerenciar projetos relacionados.

Go

Veja a seguir um exemplo de projeto criado no my-cdk-go-project diretório usando o cdk init --language go comando:

my-cdk-go-project ├── .git ├── .gitignore ├── README.md ├── cdk.json ├── go.mod ├── my-cdk-go-project.go └── my-cdk-go-project_test.go
go.mod

Arquivo que contém informações do módulo e é usado para gerenciar dependências e controle de versão do seu projeto. Go

my-cdk-go-project.go

Arquivo que define seu aplicativo e suas pilhas de CDK.

Veja um exemplo a seguir:

package main import ( "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/constructs-go/constructs/v10" "github.com/aws/jsii-runtime-go" ) type MyCdkGoProjectStackProps struct { awscdk.StackProps } func NewMyCdkGoProjectStack(scope constructs.Construct, id string, props *MyCdkGoProjectStackProps) awscdk.Stack { var sprops awscdk.StackProps if props != nil { sprops = props.StackProps } stack := awscdk.NewStack(scope, &id, &sprops) // The code that defines your resources and properties go here return stack } func main() { defer jsii.Close() app := awscdk.NewApp(nil) NewMyCdkGoProjectStack(app, "MyCdkGoProjectStack", &MyCdkGoProjectStackProps{ awscdk.StackProps{ Env: env(), }, }) app.Synth(nil) } func env() *awscdk.Environment { return nil }
my-cdk-go-project_teste.go

Arquivo que define um teste de amostra.

Veja um exemplo a seguir:

package main import ( "testing" "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/aws-cdk-go/awscdk/v2/assertions" "github.com/aws/jsii-runtime-go" ) func TestMyCdkGoProjectStack(t *testing.T) { // GIVEN app := awscdk.NewApp(nil) // WHEN stack := NewMyCdkGoProjectStack(app, "MyStack", nil) // THEN template := assertions.Template_FromStack(stack, nil) template.HasResourceProperties(jsii.String("AWS::SQS::Queue"), map[string]interface{}{ "VisibilityTimeout": 300, }) }