Trabalhando com o AWS CDK em Java - 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á.

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 neste guia, mas o IntelliJ IDEA e outros IDEs podem importar projetos Maven e podem ser usados para desenvolver aplicativos em Java. NetBeans AWS CDK

É 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.

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, mas você pode usar qualquer distribuição do OpenJDK ou o JDK da Oracle. Você também precisará do Apache Maven 3.5 ou posterior. Você também pode usar ferramentas como o Gradle, mas os esqueletos de aplicativos gerados pelo AWS CDK Toolkit são projetos Maven.

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 initusa 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 para encontrar os nomes de todas as bibliotecas AWS CDK e do AWS Construct Module.

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-patternsroute53resolver,, 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 Builder. Cada tipo de construção tem um tipo de props correspondente; por exemplo, a Bucket 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()para definir convenientemente mapas de até dez entradas em linha com uma dessas chamadas.

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útil em algumas situações. defaultIfNull Como alternativa, escreva seus próprios métodos auxiliares estáticos para facilitar o tratamento de valores potencialmente nulos e tornar seu código mais legível.

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).