Este é o Guia do Desenvolvedor AWS CDK v2. A versão CDK 1 mais antiga 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á.
Trabalhando com a AWS CDK pessoa JavaScript
JavaScripté uma linguagem de cliente totalmente compatível com o AWS CDK e é considerada estável. Trabalhar com o AWS Cloud Development Kit (AWS CDK) in JavaScript usa ferramentas familiares, incluindo o Node.jsnpm
). Você também pode usar o Yarn
Você pode usar qualquer editor ouIDE. Muitos AWS CDK desenvolvedores usam o Visual Studio Code
Tópicos
Conceitos básicos do JavaScript
Para trabalhar com o AWS CDK, você deve ter uma AWS conta e credenciais e ter instalado o Node.js e o AWS CDK Toolkit. Consulte Começando com o AWS CDK.
JavaScript AWS CDK os aplicativos não exigem pré-requisitos adicionais além desses.
nota
Suspensão de uso de idioma de terceiros: a versão do idioma só é suportada até o fim da vida útil compartilhada pelo fornecedor ou pela comunidade e está sujeita a alterações mediante aviso prévio. EOL
Criação de um projeto
Você cria um novo AWS CDK projeto invocando cdk init
em um diretório vazio. Use a --language
opção e especifiquejavascript
:
mkdir my-project cd my-project cdk init app --language javascript
A criação de um projeto também instala o aws-cdk-lib
módulo e suas dependências.
cdk init
usa o nome da pasta do projeto para nomear vários elementos do projeto, incluindo classes, subpastas e arquivos. Os hífens no nome da pasta são convertidos em sublinhados. No entanto, caso contrário, o nome deve seguir a forma de um JavaScript identificador; por exemplo, ele não deve começar com um número ou conter espaços.
Usando o local cdk
Na maioria das vezes, este guia pressupõe que você instale o CDK Toolkit globalmente (npm install -g aws-cdk
), e os exemplos de comandos fornecidos (comocdk synth
) seguem essa suposição. Essa abordagem facilita a atualização do CDK kit de ferramentas e, como ele CDK adota uma abordagem rígida de compatibilidade com versões anteriores, geralmente há pouco risco em sempre usar a versão mais recente.
Algumas equipes preferem especificar todas as dependências em cada projeto, incluindo ferramentas como o CDK Toolkit. Essa prática permite que você fixe esses componentes em versões específicas e garanta que todos os desenvolvedores da sua equipe (e do seu ambiente de CI/CD) usem exatamente essas versões. Isso elimina uma possível fonte de mudança, ajudando a tornar as compilações e implantações mais consistentes e reproduzíveis.
CDKIsso inclui uma dependência do CDK kit de ferramentas no modelo do JavaScript projeto. Portantopackage.json
, se você quiser usar essa abordagem, não precisará fazer nenhuma alteração em seu projeto. Tudo o que você precisa fazer é usar comandos ligeiramente diferentes para criar seu aplicativo e emitir cdk
comandos.
Operation | Use o CDK kit de ferramentas global | Use o kit de CDK ferramentas local |
---|---|---|
Inicializar projeto | cdk init --language javascript |
npx aws-cdk init --language javascript |
Execute o comando CDK Toolkit | cdk ... |
npm run cdk ... ou npx aws-cdk ... |
npx aws-cdk
executa a versão do CDK Toolkit instalada localmente no projeto atual, se houver, retornando à instalação global, se houver. Se não existir uma instalação global, npx
baixa uma cópia temporária do CDK kit de ferramentas e a executa. Você pode especificar uma versão arbitrária do CDK Toolkit usando a @
sintaxe: prints. npx aws-cdk@1.120 --version
1.120.0
dica
Configure um alias para que você possa usar o cdk
comando com uma instalação local do CDK Toolkit.
Gerenciando módulos da AWS Construct Libr
Use o Node Package Manager (npm
) para instalar e atualizar os módulos da AWS Construct Library para uso por seus aplicativos, bem como por outros pacotes necessários. (Você pode usar yarn
em vez de, npm
se preferir.) npm
também instala as dependências desses módulos automaticamente.
A maioria das AWS CDK construções está no CDK pacote principal, chamadoaws-cdk-lib
, que é uma dependência padrão em novos projetos criados por. cdk init Os módulos “experimentais” da AWS Construct Library, nos quais construções de nível superior ainda estão em desenvolvimento, são nomeados como. aws-cdk-lib/
O nome do serviço tem um prefixo aws-. Se você não tiver certeza do nome de um módulo, procure-o em NPMSERVICE-NAME
-alpha
nota
A CDKAPIReferência também mostra os nomes dos pacotes.
Por exemplo, o comando abaixo instala o módulo experimental para AWS CodeStar.
npm install @aws-cdk/aws-codestar-alpha
O suporte da Construct Library de alguns serviços está em mais de um namespace. Por exemplo, além dissoaws-route53
, há três namespaces adicionais do Amazon Route 53,, aws-route53-targets
aws-route53-patterns
, e. aws-route53resolver
As dependências do seu projeto são mantidas empackage.json
. Você pode editar esse arquivo para bloquear algumas ou todas as suas dependências em uma versão específica ou para permitir que elas sejam atualizadas para versões mais recentes sob determinados critérios. Para atualizar NPM as dependências do seu projeto para a versão mais recente permitida de acordo com as regras especificadas em: package.json
npm update
Em JavaScript, você importa módulos para o seu código com o mesmo nome que você usa para instalá-los usandoNPM. Recomendamos as seguintes práticas ao importar AWS CDK classes e módulos da AWS Construct Library em seus aplicativos. Seguir essas diretrizes ajudará a tornar seu código consistente com outros AWS CDK aplicativos, além de ser mais fácil de entender.
-
Use
require()
, nãoimport
diretivas ES6 de estilo. As versões mais antigas do Node.js não oferecem suporte a ES6 importações, portanto, o uso da sintaxe mais antiga é mais amplamente compatível. (Se você realmente quiser usar ES6 importações, use o esmpara garantir que seu projeto seja compatível com todas as versões suportadas do Node.js.) -
Geralmente, importe classes individuais de
aws-cdk-lib
.const { App, Stack } = require('aws-cdk-lib');
-
Se você precisar de muitas classes de
aws-cdk-lib
, você pode usar um alias de namespace decdk
em vez de importar as classes individuais. Evite fazer as duas coisas.const cdk = require('aws-cdk-lib');
-
Geralmente, importe Bibliotecas do AWS Construct usando aliases curtos de namespace.
const { s3 } = require('aws-cdk-lib/aws-s3');
Gerenciando dependências em JavaScript
Nos JavaScript CDK projetos, as dependências são especificadas no package.json
arquivo no diretório principal do projeto. Os AWS CDK módulos principais estão em um único NPM pacote chamadoaws-cdk-lib
.
Quando você instala um pacote usandonpm install, NPM grava o pacote package.json
para você.
Se preferir, você pode usar Yarn no lugar deNPM. No entanto, o CDK não suporta o plug-and-play modo Yarn, que é o modo padrão no Yarn 2. Adicione o seguinte ao .yarnrc.yml
arquivo do seu projeto para desativar esse recurso.
nodeLinker: node-modules
CDKaplicações
Veja a seguir um exemplo de package.json
arquivo gerado pelo cdk init --language
typescript
comando. O arquivo gerado para JavaScript é semelhante, só que sem as entradas TypeScript relacionadas.
{ "name": "my-package", "version": "0.1.0", "bin": { "my-package": "bin/my-package.js" }, "scripts": { "build": "tsc", "watch": "tsc -w", "test": "jest", "cdk": "cdk" }, "devDependencies": { "@types/jest": "^26.0.10", "@types/node": "10.17.27", "jest": "^26.4.2", "ts-jest": "^26.2.0", "aws-cdk": "2.16.0", "ts-node": "^9.0.0", "typescript": "~3.9.7" }, "dependencies": { "aws-cdk-lib": "2.16.0", "constructs": "^10.0.0", "source-map-support": "^0.5.16" } }
Para CDK aplicativos implantáveis, aws-cdk-lib
deve ser especificado na dependencies
seção depackage.json
. Você pode usar um especificador de número de versão com acento circunflexo (^) para indicar que aceitará versões posteriores à especificada, desde que estejam na mesma versão principal.
Para construções experimentais, especifique as versões exatas dos módulos da biblioteca de construções alfa, APIs que podem mudar. Não use ^ ou ~, pois versões posteriores desses módulos podem trazer API alterações que podem prejudicar seu aplicativo.
Especifique as versões das bibliotecas e ferramentas necessárias para testar seu aplicativo (por exemplo, a estrutura de jest
teste) na devDependencies
seção depackage.json
. Opcionalmente, use ^ para especificar que versões compatíveis posteriores sejam aceitáveis.
Bibliotecas de construção de terceiros
Se você estiver desenvolvendo uma biblioteca de construção, especifique suas dependências usando uma combinação das devDependencies
seções peerDependencies
e, conforme mostrado no package.json
arquivo de exemplo a seguir.
{ "name": "my-package", "version": "0.0.1", "peerDependencies": { "aws-cdk-lib": "^2.14.0", "@aws-cdk/aws-appsync-alpha": "2.10.0-alpha", "constructs": "^10.0.0" }, "devDependencies": { "aws-cdk-lib": "2.14.0", "@aws-cdk/aws-appsync-alpha": "2.10.0-alpha", "constructs": "10.0.0", "jsii": "^1.50.0", "aws-cdk": "^2.14.0" } }
EmpeerDependencies
, use um acento circunflexo (^) para especificar a versão mais baixa com aws-cdk-lib
a qual sua biblioteca trabalha. Isso maximiza a compatibilidade da sua biblioteca com uma variedade de CDK versões. Especifique as versões exatas dos módulos da biblioteca de construção alfa, APIs que podem mudar. peerDependencies
O uso garante que haja apenas uma cópia de todas as CDK bibliotecas na node_modules
árvore.
EmdevDependencies
, especifique as ferramentas e bibliotecas que você precisa para testar, opcionalmente com ^ para indicar que versões compatíveis posteriores são aceitáveis. Especifique exatamente (sem ^ ou ~) as versões mais baixas aws-cdk-lib
e outros CDK pacotes com os quais você anuncia a compatibilidade da sua biblioteca. Essa prática garante que seus testes sejam executados nessas versões. Dessa forma, se você usar inadvertidamente um recurso encontrado apenas em versões mais recentes, seus testes poderão detectá-lo.
Atenção
peerDependencies
são instalados automaticamente somente até NPM 7 e versões posteriores. Se você estiver usando o NPM 6 ou anterior, ou se estiver usando o Yarn, deverá incluir as dependências de suas dependências em. devDependencies
Caso contrário, eles não serão instalados e você receberá um aviso sobre dependências de pares não resolvidas.
Instalando e atualizando dependências
Execute o comando a seguir para instalar as dependências do seu projeto.
Para atualizar os módulos instalados, os comandos anteriores npm install e yarn upgrade os comandos podem ser usados. Qualquer um dos comandos atualiza os pacotes node_modules
para as versões mais recentes que atendem às regras dopackage.json
. No entanto, eles não package.json
se atualizam sozinhos, o que talvez você queira fazer para definir uma nova versão mínima. Se você hospedar seu pacote em GitHub, você pode configurar as atualizações de versão do Dependabot para serem atualizadaspackage.json
Como alternativa, use npm-check-updates
Importante
Por padrão, quando você instala ou atualiza dependências, NPM o Yarn escolhe a versão mais recente de cada pacote que atenda aos requisitos especificados em. package.json
Sempre existe o risco de que essas versões sejam quebradas (acidentalmente ou intencionalmente). Teste minuciosamente depois de atualizar as dependências do seu projeto.
AWS CDK expressões idiomáticas em JavaScript
Adereços
Todas as classes da AWS Construct Library são instanciadas usando três argumentos: o escopo no qual a construção está sendo definida (seu pai na árvore de construção), um id e props, um pacote de pares de chave/valor que a construção usa para configurar os recursos que cria. AWS Outras classes e métodos também usam o padrão “pacote de atributos” para argumentos.
Usar um editor IDE or que tenha um bom JavaScript preenchimento automático ajudará a evitar erros ortográficos nos nomes das propriedades. Se uma construção está esperando uma encryptionKeys
propriedade e você a digitaencryptionkeys
, ao instanciar a construção, você não passou o valor pretendido. Isso pode causar um erro no momento da síntese, se a propriedade for necessária, ou fazer com que a propriedade seja ignorada silenciosamente se for opcional. No último caso, você pode obter um comportamento padrão que pretendia substituir. Tome cuidado especial aqui.
Ao criar uma subclasse de uma classe da AWS Construct Library (ou substituir um método que usa um argumento semelhante a adereços), talvez você queira aceitar propriedades adicionais para seu próprio uso. Esses valores serão ignorados pela classe principal ou pelo método substituído, porque eles nunca são acessados nesse código, então você geralmente pode transmitir todas as props recebidas.
Uma versão futura do AWS CDK poderia coincidentemente adicionar uma nova propriedade com um nome que você usou para sua própria propriedade. Passar o valor que você recebe para a cadeia de herança pode causar um comportamento inesperado. É mais seguro passar uma cópia rasa dos adereços que você recebeu com sua propriedade removida ou configurada para. undefined
Por exemplo:
super(scope, name, {...props, encryptionKeys: undefined});
Como alternativa, nomeie suas propriedades para que fique claro que elas pertencem à sua construção. Dessa forma, é improvável que eles colidam com propriedades em AWS CDK versões futuras. Se houver muitos deles, use um único objeto com nome apropriado para mantê-los.
Valores ausentes
Valores ausentes em um objeto (comoprops
) têm o valor undefined
em JavaScript. As técnicas usuais se aplicam para lidar com elas. Por exemplo, um idioma comum para acessar uma propriedade de um valor que pode ser indefinido é o seguinte:
// a may be undefined, but if it is not, it may have an attribute b // c is undefined if a is undefined, OR if a doesn't have an attribute b let c = a && a.b;
No entanto, se a
pudesse ter algum outro valor “falso”undefined
, é melhor tornar o teste mais explícito. Aqui, aproveitaremos o fato de que null
e undefined
somos iguais para testar os dois ao mesmo tempo:
let c = a == null ? a : a.b;
dica
O Node.js 14.0 e versões posteriores oferecem suporte a novos operadores que podem simplificar o tratamento de valores indefinidos. Para obter mais informações, consulte as propostas opcionais de encadeamento e coalescência
Usando TypeScript exemplos com JavaScript
TypeScript
TypeScript os trechos geralmente usam o novo ECMAScript import
e as export
palavras-chave para importar objetos de outros módulos e declarar que os objetos serão disponibilizados fora do módulo atual. O Node.js acaba de começar a oferecer suporte a essas palavras-chave em suas versões mais recentes. Dependendo da versão do Node.js que você está usando (ou deseja oferecer suporte), você pode reescrever as importações e exportações para usar a sintaxe mais antiga.
As importações podem ser substituídas por chamadas para a require()
função.
As exportações podem ser atribuídas ao module.exports
objeto.
nota
Uma alternativa para usar as importações e exportações de estilo antigo é usar o esm
Depois de classificar as importações e exportações, você pode se aprofundar no código real. Você pode se deparar com esses recursos comumente usados TypeScript :
-
Anotações de tipo
-
Definições de interface
-
Conversões de tipo/transmissões
-
Modificadores de acesso
As anotações de tipo podem ser fornecidas para variáveis, membros da classe, parâmetros da função e tipos de retorno da função. Para variáveis, parâmetros e membros, os tipos são especificados seguindo o identificador com dois pontos e o tipo. Os valores de retorno da função seguem a assinatura da função e consistem em dois pontos e no tipo.
Para converter o código com anotação de tipo em JavaScript, remova os dois pontos e o tipo. Os membros da classe devem ter algum valor em JavaScript; defina-os como undefined
se eles tiverem apenas uma anotação de tipo em. TypeScript
Em TypeScript, as interfaces são usadas para dar um nome aos pacotes de propriedades obrigatórias e opcionais e seus tipos. Em seguida, você pode usar o nome da interface como uma anotação de tipo. TypeScript garantirá que o objeto que você usa como, por exemplo, argumento para uma função tenha as propriedades necessárias dos tipos certos.
interface myFuncProps { code: lambda.Code, handler?: string }
JavaScript não tem um recurso de interface, portanto, depois de remover as anotações de tipo, exclua totalmente as declarações da interface.
Quando uma função ou método retorna um tipo de uso geral (comoobject
), mas você deseja tratar esse valor como um tipo filho mais específico para acessar propriedades ou métodos que não fazem parte da interface do tipo mais geral, TypeScript você pode converter o valor usando as
seguido por um nome de tipo ou interface. JavaScript não suporta (ou precisa) isso, então simplesmente remova as
o identificador a seguir. Uma sintaxe de conversão menos comum é usar um nome de tipo entre colchetes<LikeThis>
; essas conversões também devem ser removidas.
Finalmente, TypeScript suporta os modificadores de acesso public
protected
, e private
para membros de classes. Todos os alunos da turma JavaScript são públicos. Basta remover esses modificadores onde quer que você os veja.
Saber como identificar e remover esses TypeScript recursos ajuda muito a adaptar pequenos TypeScript trechos a. JavaScript Mas pode ser impraticável converter TypeScript exemplos mais longos dessa forma, pois é mais provável que eles usem outros TypeScript recursos. Para essas situações, recomendamos o Sucrasetsc
Se for sintaticamente válido, com poucas exceções, o Sucrase pode traduzi-lo para. JavaScript Isso o torna particularmente valioso para converter trechos que podem não ser executáveis sozinhos.
Migrando para TypeScript
Muitos JavaScript desenvolvedores migram à TypeScript
TypeScriptAs interfaces “baseadas em formas” da, que definem pacotes de propriedades obrigatórias e opcionais (e seus tipos) em um objeto, permitem que erros comuns sejam detectados enquanto você escreve o código e facilitam o fornecimento de preenchimento automático robusto e outros IDE conselhos de codificação em tempo real.
A codificação TypeScript envolve uma etapa adicional: compilar seu aplicativo com o TypeScript compilador,. tsc
Para AWS CDK aplicativos típicos, a compilação requer alguns segundos no máximo.
A maneira mais fácil de migrar um JavaScript AWS CDK aplicativo existente para o novo projeto TypeScript é criar um novo TypeScript projeto usando ecdk init app --language typescript
, em seguida, copiar seus arquivos de origem (e quaisquer outros arquivos necessários, como ativos como o código-fonte da AWS Lambda função) para o novo projeto. Renomeie seus JavaScript arquivos para finalizar .ts
e começar a desenvolver em TypeScript.