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.
Utilización del AWS CDK en Java
Java es un lenguaje de cliente totalmente compatible con AWS CDK y se lo considera estable. Puede desarrollar aplicaciones 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 última versión posible, ya que las versiones posteriores del lenguaje incluyen mejoras que son especialmente prácticas para el desarrollo de aplicaciones AWS CDK. Por ejemplo, Java 9 introduce el método Map.of()
(una forma práctica de declarar hashmaps que se escribirían como objetos literales en 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.
Puede utilizar cualquier editor de texto o un IDE de Java que pueda leer proyectos de Maven para trabajar en las aplicaciones AWS CDK. Proporcionamos sugerencias sobre Eclipse
Es posible escribir aplicaciones 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 particularmente idiomática y no podamos ofrecer ningún soporte para estos lenguajes.
Temas
Introducción a Java
Para trabajar con AWS CDK, debe tener una cuenta de AWS y credenciales, y tener instalados Node.js y el kit de herramientas de AWS CDK. Consulte Introducción al AWS CDK.
Las aplicaciones AWS CDK de Java requieren Java 8 (v1.8) o versiones posteriores. Recomendamos Amazon Corretto
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
Cree un nuevo proyecto AWS CDK, mediante la invocación de cdk init
en un directorio vacío. 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).
Administración de los módulos de la Biblioteca de constructos de AWS
Utilice Maven para instalar los paquetes de la Biblioteca de constructos de AWS, que están en el grupo software.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 está en desarrollo se encuentran en paquetes “experimentales” separados, denominados con una versión abreviada (no AWS ni con el prefijo de Amazon) del nombre del servicio. Busque en el repositorio central de Maven
nota
La edición Java de la referencia de la API del CDK también muestra los nombres de los paquetes.
La compatibilidad con la Biblioteca de constructos de AWS 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 de AWS CDK principal se importa en código Java como software.amazon.awscdk
. Los módulos de los distintos servicios de la Biblioteca de constructos de AWS se encuentran en software.amazon.awscdk.services
reciben un nombre similar al de su paquete de Maven. Por ejemplo, el espacio de nombres del módulo Amazon S3 es software.amazon.awscdk.services.s3
.
Le recomendamos escribir una instrucción import
de Java independiente para cada clase de Biblioteca de constructos de AWS que utilice en cada uno de sus archivos fuente de Java y evitar la importación de caracteres comodín. Siempre puede utilizar el nombre completo de un tipo (incluido su espacio de nombres) sin una instrucción import
.
Si la aplicación depende de un paquete experimental, edite el pom.xml
del proyecto y agregue un nuevo elemento <dependency>
al contenedor <dependencies>
. Por ejemplo, el siguiente elemento <dependency>
especifica el módulo de Biblioteca de constructos experimental de CodeStar:
<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 editar el pom.xml
de forma directa, a menos que esté absolutamente seguro de que la funcionalidad del IDE coincide con lo que haría a mano.
Administración de 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 IDE de Java cuentan con soporte para Maven y editores visuales de pom.xml
integrados, lo que puede resultar práctico para administrar las dependencias.
Maven no admite el bloqueo de dependencias. Aunque es posible especificar rangos de versiones en pom.xml
, recomendamos que utilice siempre versiones exactas para que las compilaciones se puedan repetir.
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.
Lenguajes de AWS CDK en Java
Props
Se crean las instancias de todas las clases de la Biblioteca de constructos de AWS con tres argumentos: el ámbito en el que se define el constructo (su elemento principal en el árbol de constructos), un id y props, un conjunto de pares clave/valor que el constructo 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 ConstructorBucket
(que representa un bucket de Amazon S3) toma como props una instancia de BucketProps
.
La clase BucketProps
(como todas las clases de props de la Biblioteca de constructos de AWS 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 necesita crear instancias explícitas (por ejemplo) tanto BucketProps
como Bucket
y no necesita 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 constructo. 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 algunas API, AWS CDK utiliza matrices de JavaScript 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 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()
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.
Las matrices de JavaScript 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 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 encuentre útiles defaultIfNull
Creación y ejecución de aplicaciones del CDK
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. Puede hacerlo en su IDE (por ejemplo, si presiona Control-B en Eclipse) o mediante la ejecución de mvn compile
en una petición de comando desde el directorio raíz del proyecto.
Ejecute cualquier prueba que haya escrito mediante la ejecución de mvn test
en una petición de comando.