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

Esta es la guía para AWS CDK desarrolladores de la versión 2. La CDK versión anterior entró en mantenimiento el 1 de junio de 2022 y finalizó el soporte 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.

Trabajando con el AWS CDK en Java

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

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 el desarrollo de AWS CDK aplicaciones. 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 utilizanMap.of(); estos ejemplos incluyen comentarios en los que se indica que requieren Java 9.

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

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

Comience con Java

Para trabajar con el AWS CDK, debe tener una AWS cuenta y credenciales y tener instalados Node.js y el AWS CDK kit de herramientas. Consulte Cómo empezar con el AWS CDK.

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

nota

Degradación de idiomas de terceros: la versión lingüística solo se admite hasta que el proveedor o la comunidad la compartan EOL (al final de su vida útil) y está sujeta a cambios con previo aviso.

Creación de un proyecto

Para crear un AWS CDK proyecto nuevo, se invoca cdk init en un directorio vacío. Utilice la --language opción y especifiquejava:

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

cdk initusa el nombre de la carpeta del proyecto para nombrar 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 de Java; por ejemplo, no debe empezar por un número ni contener espacios.

El proyecto resultante incluye una referencia al paquete software.amazon.awscdk Maven. Maven lo instala automáticamente y sus dependencias.

Si está utilizando unIDE, ahora puede abrir o importar el proyecto. En Eclipse, por ejemplo, selecciona Archivo > Importar > Maven > Proyectos Maven existentes. Asegúrese de que los ajustes del proyecto estén configurados 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 las construcciones se encuentran en el artefactoaws-cdk-lib, que se añade a los nuevos proyectos de Java de forma predeterminada. Los módulos para los servicios cuyo CDK soporte de nivel superior aún se está desarrollando se encuentran en paquetes «experimentales» separados, denominados con una versión abreviada (no AWS o con el prefijo de Amazon) del nombre de su servicio. Busca en el repositorio central de Maven los nombres de todas las bibliotecas AWS CDK y de AWS Construct Module.

nota

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

La compatibilidad con 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.route53route53-patterns,route53resolver, yroute53-targets.

El AWS CDK paquete principal se importa en código Java comosoftware.amazon.awscdk. Los módulos de los distintos servicios de la biblioteca AWS Construct se encuentran bajo el nombre de su paquete de 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 JavaIDE, probablemente tenga funciones para administrar las dependencias de Maven. Sin embargo, te recomendamos editarlo pom.xml directamente, a menos que estés absolutamente seguro de que IDE la funcionalidad coincide con la que harías a mano.

Administrar las dependencias en Java

En Java, las dependencias se especifican pom.xml e instalan mediante Maven. El <dependencies> contenedor incluye un <dependency> elemento para cada paquete. La siguiente es una sección pom.xml de una aplicación CDK Java 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

Muchas aplicaciones de 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 se puedan repetir.

Maven instala automáticamente las dependencias transitivas, pero solo puede haber una copia instalada de cada paquete. Se selecciona la versión que se especifique en la parte superior del POM árbol; las aplicaciones siempre tienen la última palabra en qué versión de los paquetes se instalan.

Maven instala o actualiza automáticamente tus dependencias cada vez que compilas (mvn compile) o empaques () tu proyectomvn package. El CDK kit de herramientas lo hace automáticamente cada vez que lo ejecutas, por lo que, por lo general, no es necesario invocar Maven manualmente.

AWS CDK modismos en Java

Utilería

Todas las clases de AWS Construct Library se instancian mediante 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 «conjunto de atributos» como argumento.

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

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

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 accesorio ofrecen un atajo. La clase tiene una propia que crea una instancia Builder de ella y de su objeto props en un solo paso. De esta forma, no necesitas crear una instancia explícita (por ejemplo) tanto como unBucket, BucketProps y no necesitas importar el tipo props.

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

Al derivar tu propia construcción a partir de una construcción existente, es posible que desees aceptar 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. Debes proporcionar tú mismo las partes móviles de las dos nuevas Builder clases. Es posible que prefiera que su construcción simplemente acepte uno o más argumentos adicionales. Debe proporcionar constructores adicionales cuando un argumento sea opcional.

Estructuras genéricas

En algunasAPIs, AWS CDK utiliza JavaScript matrices u objetos sin tipo como entrada a un método. (Consulte, por ejemplo, el método AWS CodeBuild de BuildSpec.fromObject().) En Java, estos objetos se representan comojava.util.Map<String, Object>. En los casos en que los valores son todos cadenas, puede utilizarMap<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 s. cortas.

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

Valores faltantes

En Java, los valores que faltan en AWS CDK objetos como los accesorios se representan mediantenull. Debe probar explícitamente cualquier valor que pueda existir 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 el uso ObjectUtil de defaultIfNullApache le firstNonNullresulte útil en algunas situaciones. Como alternativa, escribe tus propios métodos auxiliares estáticos para facilitar el manejo de valores potencialmente nulos y hacer que tu código sea más legible.

Cree y ejecute aplicaciones CDK

Compila AWS CDK automáticamente tu 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 ordenador IDE (por ejemplo, pulsando 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 mvn test en una línea de comandos.