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á.
Trabalhando com o AWS CDK em Java
Java é uma linguagem de cliente totalmente compatível com o AWS CDK e é considerada estável. Você pode desenvolver AWS CDK aplicativos em Java usando ferramentas familiares, incluindo o JDK (da Oracle ou uma distribuição do OpenJDK, como o Amazon Corretto) e o Apache Maven.
O AWS CDK suporta Java 8 e versões posteriores. No entanto, recomendamos usar a versão mais recente possível, pois as versões posteriores da linguagem incluem melhorias que são particularmente convenientes para o desenvolvimento de AWS CDK aplicativos. Por exemplo, o Java 9 introduz o Map.of()
método (uma maneira conveniente de declarar hashmaps que seriam escritos como literais de objeto em). TypeScript O Java 10 introduz a inferência de tipos locais usando a var
palavra-chave.
nota
A maioria dos exemplos de código neste Guia do desenvolvedor funciona com o Java 8. Alguns exemplos usamMap.of()
; esses exemplos incluem comentários observando que eles exigem o Java 9.
Você pode usar qualquer editor de texto ou um IDE Java que possa ler projetos Maven para trabalhar em seus AWS CDK aplicativos. Fornecemos dicas sobre o Eclipse
É possível escrever AWS CDK aplicativos em linguagens hospedadas pela JVM que não sejam Java (por exemplo, Kotlin, Groovy, Clojure ou Scala), mas a experiência pode não ser particularmente idiomática e não podemos fornecer suporte para essas linguagens.
Tópicos
Conceitos básicos do Java
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.
AWS CDK Os aplicativos Java exigem o Java 8 (v1.8) ou posterior. Recomendamos o Amazon Corretto
nota
Suspensão de uso de idioma de terceiros: a versão do idioma só é suportada até seu EOL (End Of Life) compartilhado pelo fornecedor ou pela comunidade e está sujeita a alterações mediante aviso prévio.
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 especifiquejava
:
mkdir my-project cd my-project cdk init app --language java
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 identificador Java; por exemplo, ele não deve começar com um número ou conter espaços.
O projeto resultante inclui uma referência ao pacote software.amazon.awscdk
Maven. Ele e suas dependências são instalados automaticamente pelo Maven.
Se você estiver usando um IDE, agora você pode abrir ou importar o projeto. No Eclipse, por exemplo, escolha Arquivo > Importar > Maven > Projetos Maven existentes. Certifique-se de que as configurações do projeto estejam definidas para usar o Java 8 (1.8).
Gerenciando módulos da AWS Construct Libr
Use o Maven para instalar os pacotes da AWS Construct Library, que estão no gruposoftware.amazon.awscdk
. A maioria das construções está no artefatoaws-cdk-lib
, que é adicionado aos novos projetos Java por padrão. Os módulos para serviços cujo suporte de CDK de alto nível ainda está sendo desenvolvido estão em pacotes “experimentais” separados, nomeados com uma versão curta (sem ou prefixo da AWS Amazon) do nome do serviço. Pesquise no Repositório Central do Maven
nota
A edição Java da CDK API Reference também mostra os nomes dos pacotes.
O suporte da AWS Construct Library de alguns serviços está em mais de um namespace. Por exemplo, o Amazon Route 53 tem sua funcionalidade dividida em software.amazon.awscdk.route53
route53-patterns
route53resolver
,, route53-targets
e.
O AWS CDK pacote principal é importado em código Java comosoftware.amazon.awscdk
. Os módulos dos vários serviços na AWS Construct Library estão abaixo software.amazon.awscdk.services
e são nomeados de forma semelhante ao nome do pacote Maven. Por exemplo, o namespace do módulo Amazon S3 é. software.amazon.awscdk.services.s3
Recomendamos escrever uma import
instrução Java separada para cada classe da AWS Construct Library usada em cada um dos seus arquivos de origem Java e evitar importações de caracteres curinga. Você sempre pode usar o nome totalmente qualificado de um tipo (incluindo seu namespace) sem uma declaração. import
Se seu aplicativo depender de um pacote experimental, edite o do seu projeto pom.xml
e adicione um novo <dependency>
elemento no <dependencies>
contêiner. Por exemplo, o <dependency>
elemento a seguir especifica o módulo da biblioteca de construção CodeStar experimental:
<dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>codestar-alpha</artifactId> <version>2.0.0-alpha.10</version> </dependency>
dica
Se você usa um IDE Java, ele provavelmente tem recursos para gerenciar dependências do Maven. No entanto, recomendamos editar pom.xml
diretamente, a menos que você tenha certeza absoluta de que a funcionalidade do IDE corresponde ao que você faria manualmente.
Gerenciando dependências em Java
Em Java, as dependências são especificadas pom.xml
e instaladas usando o Maven. O <dependencies>
contêiner inclui um <dependency>
elemento para cada pacote. A seguir está uma seção pom.xml
de um aplicativo Java típico do CDK.
<dependencies> <dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>aws-cdk-lib</artifactId> <version>2.14.0</version> </dependency> <dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>appsync-alpha</artifactId> <version>2.10.0-alpha.0</version> </dependency> </dependencies>
dica
Muitos IDEs Java têm suporte integrado ao Maven e pom.xml
editores visuais, que podem ser convenientes para gerenciar dependências.
O Maven não oferece suporte ao bloqueio de dependências. Embora seja possível especificar intervalos de versõespom.xml
, recomendamos que você sempre use versões exatas para manter suas compilações repetíveis.
O Maven instala automaticamente dependências transitivas, mas só pode haver uma cópia instalada de cada pacote. A versão mais alta especificada na árvore POM é selecionada; os aplicativos sempre têm a última palavra em qual versão dos pacotes serão instalados.
O Maven instala ou atualiza automaticamente suas dependências sempre que você constrói (mvn compile) ou empacota (mvn package) seu projeto. O CDK Toolkit faz isso automaticamente toda vez que você o executa, então geralmente não há necessidade de invocar manualmente o Maven.
AWS CDK expressões idiomáticas em Java
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. Outras classes e métodos também usam o padrão “pacote de atributos” para argumentos.
Em Java, os adereços são expressos usando o padrão BuilderBucket
construção (que representa um bucket do Amazon S3) usa como props uma instância de. BucketProps
A BucketProps
classe (como toda classe de adereços da AWS Construct Library) tem uma classe interna chamadaBuilder
. O BucketProps.Builder
tipo oferece métodos para definir as várias propriedades de uma BucketProps
instância. Cada método retorna a Builder
instância, para que as chamadas do método possam ser encadeadas para definir várias propriedades. No final da cadeia, você liga build()
para realmente produzir o BucketProps
objeto.
Bucket bucket = new Bucket(this, "MyBucket", new BucketProps.Builder() .versioned(true) .encryption(BucketEncryption.KMS_MANAGED) .build());
Construções e outras classes que usam um objeto semelhante a adereços como argumento final oferecem um atalho. A classe tem uma Builder
própria que instancia ela e seu objeto de adereços em uma única etapa. Dessa forma, você não precisa instanciar explicitamente (por exemplo) ambos BucketProps
e a Bucket
— e não precisa de uma importação para o tipo props.
Bucket bucket = Bucket.Builder.create(this, "MyBucket") .versioned(true) .encryption(BucketEncryption.KMS_MANAGED) .build();
Ao derivar sua própria construção de uma construção existente, talvez você queira aceitar propriedades adicionais. Recomendamos que você siga esses padrões do construtor. No entanto, isso não é tão simples quanto criar uma subclasse de uma classe de construção. Você mesmo deve fornecer as partes móveis das duas novas Builder
classes. Você pode preferir simplesmente que sua construção aceite um ou mais argumentos adicionais. Você deve fornecer construtores adicionais quando um argumento for opcional.
Estruturas genéricas
Em algumas APIs, o AWS CDK usa JavaScript matrizes ou objetos não digitados como entrada para um método. (Veja, por exemplo, AWS CodeBuild o BuildSpec.fromObject()
método de.) Em Java, esses objetos são representados comojava.util.Map<String, Object>
. Nos casos em que os valores são todos cadeias de caracteres, você pode usarMap<String, String>
.
O Java não fornece uma maneira de escrever literais para esses contêineres, como fazem algumas outras linguagens. No Java 9 e versões posteriores, você pode usar java.util.Map.of()
java.util.Map.of( "base-directory", "dist", "files", "LambdaStack.template.json" )
Para criar mapas com mais de dez entradas, use java.util.Map.ofEntries()
Se você estiver usando o Java 8, poderá fornecer seus próprios métodos semelhantes a esses.
JavaScript matrizes são representadas como List<Object>
ou List<String>
em Java. O método java.util.Arrays.asList
é conveniente para definir List
s curtos.
List<String> cmds = Arrays.asList("cd lambda", "npm install", "npm install typescript")
Valores ausentes
Em Java, valores ausentes em AWS CDK objetos como adereços são representados pornull
. Você deve testar explicitamente qualquer valor que possa existir null
para garantir que ele contenha um valor antes de fazer qualquer coisa com ele. Java não tem “açúcar sintático” para ajudar a lidar com valores nulos, como algumas outras linguagens. Você pode achar o Apache ObjectUtil firstNonNull
Construindo, sintetizando e implantando
O compila AWS CDK automaticamente seu aplicativo antes de executá-lo. No entanto, pode ser útil criar seu aplicativo manualmente para verificar erros e executar testes. Você pode fazer isso em seu IDE (por exemplo, pressione Control-B no Eclipse) ou emitindo em um prompt de comando enquanto estiver mvn compile
no diretório raiz do seu projeto.
Execute todos os testes que você escreveu executando mvn test
em um prompt de comando.
As pilhas definidas em seu AWS CDK aplicativo podem ser sintetizadas e implantadas individualmente ou em conjunto usando os comandos abaixo. Geralmente, você deve estar no diretório principal do seu projeto ao emiti-los.
-
cdk synth
: sintetiza um AWS CloudFormation modelo a partir de uma ou mais pilhas do seu aplicativo. AWS CDK -
cdk deploy
: implanta os recursos definidos por uma ou mais pilhas em seu AWS CDK aplicativo para. AWS
Você pode especificar os nomes de várias pilhas a serem sintetizadas ou implantadas em um único comando. Se seu aplicativo definir apenas uma pilha, você não precisará especificá-la.
cdk synth # app defines single stack cdk deploy Happy Grumpy # app defines two or more stacks; two are deployed
Você também pode usar os curingas * (qualquer número de caracteres) e? (qualquer caractere único) para identificar pilhas por padrão. Ao usar curingas, coloque o padrão entre aspas. Caso contrário, o shell pode tentar expandi-lo para os nomes dos arquivos no diretório atual antes de serem passados para o AWS CDK Toolkit.
cdk synth "Stack?" # Stack1, StackA, etc. cdk deploy "*Stack" # PipeStack, LambdaStack, etc.
dica
Você não precisa sintetizar explicitamente as pilhas antes de implantá-las; cdk
deploy
executa essa etapa para garantir que seu código mais recente seja implantado.
Para obter a documentação completa do cdk
comando, consulteAWS CDK Kit de ferramentas (cdkcomando).