- Filtro: Chile + Santiago + Java = 1
- Filtro: Chile + Java = 6
llegar al 1 en Chile será un poco dificil...
Blog dedicado principalmente a Java, mi intención es escribir información útil, compartir conocimiento, continuar difundiendo y apoyando a Java en todos lados
public class LambdaHandler implements RequestStreamHandler {
static {
// acá
}
@Override
public void handleRequest(InputStream is, OutputStream os, Context ctx) throws IOException {
}
}
Hay que hacer esto porque cuando se instancia la clase hay más poder de computo que el configurado como límite para la lambda, si hay conexiones a DynamoDB hay que instanciar la conexión y hacer una Query (cualquiera) lo importante es que se instancien todas las dependencias. Lo mismo ocurre para conexiones con RDS o cualquier otro recurso.<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/classes/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-log4j2</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.12.1</version>
</dependency>
</dependencies>
<?xml version="1.0" encoding="UTF-8"?>
<Configuration packages="com.amazonaws.services.lambda.runtime.log4j2">
<Appenders>
<Lambda name="Lambda">
<PatternLayout>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1}:%L - %m%n</pattern>
</PatternLayout>
</Lambda>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Lambda" />
</Root>
</Loggers>
</Configuration>
private static final Logger LOGGER = LogManager.getLogger(LambdaHandler.class);
sam local invoke NombreFuncion -t src/main/aws/template.yml
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers</artifactId>
<version>${test.containers}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>localstack</artifactId>
<version>${test.containers}</version>
<scope>test</scope>
</dependency>
public class PreTokenGenerationLambdaTrigger implements RequestStreamHandler {
private static final ObjectMapper OM;
static {
OM = new ObjectMapper();
OM.enable(SerializationFeature.INDENT_OUTPUT);
ServiceLoader.load(LambdaServicio.class).forEach(LambdaServicio::cargar);
}
@Override
public void handleRequest(InputStream is, OutputStream os, Context ctx) throws IOException {
final var request = OM.readTree(is);
final var response = (ObjectNode) request;
OM.writeValue(os, response);
}
}
El problema se solucionó con lo siguiente:
OM.enable(SerializationFeature.INDENT_OUTPUT);
Cognito reclamaba que no entendía la salida generada desde el Lambda, y con esa opción de Jackson se corrige. Ahora se pueden agregar atributos personalizados antes de generar el Token 😏