Trabajar con el AWS CDK en Java - AWS Kit Cloud Development Kit (AWS CDK) v2

Esta es la guía para desarrolladores de AWS CDK v2. La primera versión del CDK pasó a la etapa de mantenimiento el 1.° de junio de 2022 y no cuenta con soporte desde el 1.° de junio de 2023.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Trabajar con el AWS CDK en Java

Java es un lenguaje de cliente totalmente compatible con el AWS CDK y se considera estable. Puede desarrollar aplicaciones de AWS CDK en Java con herramientas conocidas, como el JDK (de Oracle o una distribución de OpenJDK como Amazon Corretto) y Apache Maven.

El AWS CDK es compatible con Java 8 y versiones posteriores. Sin embargo, le recomendamos que utilice la versión más reciente posible, ya que las versiones posteriores del lenguaje incluyen mejoras que son especialmente prácticas para desarrollar aplicaciones de AWS CDK. Por ejemplo, Java 9 introduce el Map.of() método (una forma práctica de declarar mapas hash que se escribirían como objetos literales). TypeScript Java 10 introduce la inferencia de tipos locales mediante la palabra clave var.

nota

La mayoría de los ejemplos de código de esta Guía para desarrolladores funcionan con Java 8. Algunos ejemplos utilizan Map.of(); estos ejemplos incluyen comentarios en los que se indica que requieren Java 9.

Puedes usar cualquier editor de texto o un IDE de Java que pueda leer proyectos de Maven para trabajar en tus AWS aplicaciones de CDK. En esta guía proporcionamos sugerencias sobre Eclipse, pero IntelliJ NetBeans, IDEA y IDEs otros pueden importar proyectos de Maven y pueden usarse para AWS desarrollar aplicaciones de CDK en Java.

Es posible escribir aplicaciones de AWS CDK en lenguajes alojados en JVM distintos de Java (por ejemplo, Kotlin, Groovy, Clojure o Scala), pero es posible que la experiencia no sea especialmente idiomática y no podamos ofrecer soporte para estos lenguajes.

Comience a usar Java

Para trabajar con el AWS CDK, debe tener una AWS cuenta y credenciales, y tener instalados Node.js y el kit de herramientas del AWS CDK. Consulte Primeros pasos con el CDK. AWS

Las aplicaciones del AWS CDK de Java requieren Java 8 (v1.8) o una versión posterior. Recomendamos Amazon Corretto, pero puede usar cualquier distribución de OpenJDK o el JDK de Oracle. También necesitará Apache Maven 3.5 o una versión posterior. También puedes usar herramientas como Gradle, pero los esqueletos de aplicaciones generados por el CDK Toolkit son proyectos de Maven. AWS

nota

Obsolescencia del lenguaje de terceros: la versión en otros idiomas solo se admite hasta que el proveedor o la comunidad compartan su fecha de caducidad (EOL) y está sujeta a cambios con previo aviso.

Creación de un proyecto

Para crear un nuevo proyecto de AWS CDK, debe invocarlo en un directorio vacío. cdk init Utilice la opción --language y especifique java:

$ mkdir my-project $ cd my-project $ cdk init app --language java

cdk init utiliza el nombre de la carpeta del proyecto para asignar un nombre a varios elementos del proyecto, incluidas las clases, las subcarpetas y los archivos. Los guiones del nombre de la carpeta se convierten en guiones bajos. Sin embargo, de lo contrario, el nombre debe seguir la forma de un identificador Java; por ejemplo, no debe comenzar por un número ni contener espacios.

El proyecto resultante incluye una referencia al paquete Maven de software.amazon.awscdk. Maven lo instala automáticamente, así como a sus dependencias.

Si utiliza un IDE, ahora puede abrir o importar el proyecto. Por ejemplo, en Eclipse, elija Archivo > Importar > Maven > Proyectos de Maven existentes. Asegúrese de que la configuración del proyecto esté configurada para utilizar Java 8 (1.8).

Gestión de los módulos de AWS Construct Library

Use Maven para instalar los paquetes de AWS Construct Library, que están en el gruposoftware.amazon.awscdk. La mayoría de los constructos se encuentran en el artefacto aws-cdk-lib, que se agrega a los nuevos proyectos de Java de forma predeterminada. Los módulos para los servicios cuyo soporte de CDK de nivel superior aún se está desarrollando se encuentran en paquetes «experimentales» separados, denominados con una versión abreviada (no o con el prefijo de AWS Amazon) del nombre de su servicio. Busque en el repositorio central de Maven los nombres de todas las bibliotecas de AWS CDK y Construct Module. AWS

nota

La edición Java de la referencia de la API del CDK también muestra los nombres de los paquetes.

El soporte de AWS Construct Library de algunos servicios está en más de un espacio de nombres. Por ejemplo, Amazon Route 53 tiene su funcionalidad dividida en software.amazon.awscdk.route53, route53-patterns, route53resolver yroute53-targets.

El paquete AWS CDK principal se importa en código Java como. software.amazon.awscdk Los módulos de los distintos servicios de la biblioteca AWS Construct se encuentran bajo el nombre de su paquete Maven software.amazon.awscdk.services y reciben un nombre similar al de su paquete. Por ejemplo, el espacio de nombres del módulo Amazon S3 es. software.amazon.awscdk.services.s3

Le recomendamos escribir una import sentencia Java independiente para cada clase de AWS Construct Library que utilice en cada uno de sus archivos fuente de Java y evitar la importación de caracteres comodín. Siempre puedes usar el nombre completo de un tipo (incluido su espacio de nombres) sin ninguna instrucción. import

Si tu aplicación depende de un paquete experimental, edita la de tu proyecto pom.xml y añade un nuevo <dependency> elemento al contenedor. <dependencies> Por ejemplo, el siguiente <dependency> elemento especifica el módulo de biblioteca de construcciones CodeStar experimentales:

<dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>codestar-alpha</artifactId> <version>2.0.0-alpha.10</version> </dependency>
sugerencia

Si usa un IDE de Java, probablemente tenga características para administrar las dependencias de Maven. Sin embargo, recomendamos editarlo pom.xml directamente, a menos que esté absolutamente seguro de que la funcionalidad del IDE coincide con lo que haría a mano.

Administrar las dependencias en Java

En Java, las dependencias se especifican en pom.xml y se instalan mediante Maven. El contenedor <dependencies> incluye un elemento <dependency> para cada paquete. La siguiente es una sección de pom.xml de una aplicación Java de CDK típica.

<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>
sugerencia

Muchos Java IDEs tienen el soporte de Maven integrado y pom.xml editores visuales, lo que puede resultarle práctico para gestionar las dependencias.

Maven no admite el bloqueo de dependencias. Aunque es posible especificar rangos de versionespom.xml, te recomendamos que utilices siempre versiones exactas para que tus compilaciones sean repetibles.

Maven instala de forma automática las dependencias transitivas, pero solo puede haber una copia instalada de cada paquete. Se selecciona la versión que se especifique más arriba en el árbol POM; las aplicaciones siempre tienen la última palabra en cuanto a la versión de los paquetes que se instalan.

Maven instala o actualiza de forma automática las dependencias cada vez que compila (mvn compile) o empaquetas (mvn package) su proyecto. El kit de herramientas de CDK lo hace de forma automática cada vez que lo ejecuta, por lo que, por lo general, no es necesario invocar Maven de forma manual.

AWS Modismos de CDK en Java

Props

Todas las clases de AWS Construct Library se instancian con tres argumentos: el ámbito en el que se define la construcción (su elemento principal en el árbol de construcciones), un identificador y props, un conjunto de pares clave/valor que la construcción utiliza para configurar los recursos que crea. Otras clases y métodos también utilizan el patrón de "agrupación de atributos" como argumento.

En Java, los props se expresan mediante el patrón Constructor. Cada tipo de constructo tiene un tipo de props correspondiente; por ejemplo, el constructo Bucket (que representa un bucket de Amazon S3) toma como props una instancia de BucketProps.

La BucketProps clase (como todas las clases de props de AWS Construct Library) tiene una clase interna llamada. Builder El tipo BucketProps.Builder ofrece métodos para configurar las distintas propiedades de una instancia BucketProps. Cada método devuelve la instancia Builder, por lo que las llamadas a los métodos se pueden encadenar para establecer varias propiedades. Al final de la cadena, se llama a build() para producir de forma efectiva el objeto BucketProps.

Bucket bucket = new Bucket(this, "amzn-s3-demo-bucket", new BucketProps.Builder() .versioned(true) .encryption(BucketEncryption.KMS_MANAGED) .build());

Los constructos y otras clases que utilizan como argumento final un objeto similar a un props ofrecen un atajo. La clase tiene un Builder propio que crea una instancia de ella y de su objeto props en un solo paso. De esta forma, no es necesario crear instancias explícitas (por ejemplo) tanto como unBucket... BucketProps y tampoco es necesario importar el tipo props.

Bucket bucket = Bucket.Builder.create(this, "amzn-s3-demo-bucket") .versioned(true) .encryption(BucketEncryption.KMS_MANAGED) .build();

Al derivar su propio constructo a partir de uno existente, es posible que desee aceptar las propiedades adicionales. Le recomendamos que siga estos patrones de construcción. Sin embargo, esto no es tan simple como subclasificar una clase de construcción. Debe proporcionar usted mismo las partes móviles de las dos nuevas clases de Builder. Es posible que prefiera que su constructo solo acepte uno o más argumentos adicionales. Debe proporcionar constructores adicionales cuando un argumento sea opcional.

Estructuras genéricas

En algunos casos APIs, el AWS CDK usa JavaScript matrices u objetos sin tipo como entrada a un método. (Consulte, por ejemplo, el método de.) AWS CodeBuild BuildSpec.fromObject() En Java, estos objetos se representan como java.util.Map<String, Object>. En los casos en que todos los valores son cadenas, puede utilizar Map<String, String>.

Java no proporciona una forma de escribir literales para dichos contenedores como lo hacen otros lenguajes. En Java 9 y versiones posteriores, se pueden utilizar java.util.Map.of() para definir cómodamente mapas de hasta diez entradas en línea con una de estas llamadas.

java.util.Map.of( "base-directory", "dist", "files", "LambdaStack.template.json" )

Para crear mapas con más de diez entradas, utilice java.util.Map.ofEntries().

Si utiliza Java 8, puede proporcionar sus propios métodos similares a estos.

JavaScript las matrices se representan como List<Object> o List<String> en Java. El método java.util.Arrays.asList es conveniente para definir List cortas.

List<String> cmds = Arrays.asList("cd lambda", "npm install", "npm install typescript")

Valores faltantes

En Java, los valores que faltan en los objetos AWS CDK, como los accesorios, se representan mediante. null Debe probar explícitamente cualquier valor que pueda ser null para asegurarse de que contiene un valor antes de hacer cualquier cosa con él. Java no tiene un “azúcar sintáctico” que ayude a gestionar los valores nulos, como ocurre en otros lenguajes. Puede que los de Apache le ObjectUtil resulten defaultIfNullfirstNonNullútiles en algunas situaciones. Como alternativa, escriba sus propios métodos auxiliares estáticos para facilitar el manejo de valores potencialmente nulos y hacer que el código sea más legible.

Creación y ejecución de aplicaciones del CDK

El AWS CDK compila automáticamente la aplicación antes de ejecutarla. Sin embargo, puede resultar útil compilar la aplicación manualmente para comprobar si hay errores y realizar pruebas. Puedes hacerlo en tu IDE (por ejemplo, presionando Control-B en Eclipse) o ejecutándolo mvn compile en una línea de comandos desde el directorio raíz de tu proyecto.

Ejecuta cualquier prueba que hayas escrito desde una línea mvn test de comandos.