diff --git a/java/custom-resource/lambda/CustomResourceHandlerPT.java b/java/custom-resource/lambda/CustomResourceHandlerPT.java new file mode 100644 index 0000000000..e5cdb7cf46 --- /dev/null +++ b/java/custom-resource/lambda/CustomResourceHandlerPT.java @@ -0,0 +1,43 @@ +import software.amazon.lambda.powertools.logging.Logging; +import software.amazon.lambda.powertools.logging.LoggingUtils; +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.events.CloudFormationCustomResourceEvent; +import software.amazon.lambda.powertools.cloudformation.AbstractCustomResourceHandler; +import software.amazon.lambda.powertools.cloudformation.Response; + + +public class CustomResourceHandlerPT extends AbstractCustomResourceHandler { + + @Logging(logEvent = true) + @Override + protected Response create(CloudFormationCustomResourceEvent createEvent, Context context) { + LoggingUtils.appendKey("operation", "create"); + LoggingUtils.appendKey("resourceProperties", resourceProperties); + + String message = (String) resourceProperties.get("Message"); + Map attributes = new HashMap<>(); + attributes.put("Response", String.format("Resource message \"%s\"", message)); + + return Response.success(attributes).withData(attributes); + } + + @Logging(logEvent = true) + @Override + protected Response update(CloudFormationCustomResourceEvent updateEvent, Context context) { + + LoggingUtils.appendKey("operation", "update"); + LoggingUtils.appendKey("physicalResourceId", physicalResourceId); + + return Response.success(physicalResourceId); + } + + @Logging(logEvent = true) + @Override + protected Response delete(CloudFormationCustomResourceEvent deleteEvent, Context context) { + + LoggingUtils.appendKey("operation", "delete"); + LoggingUtils.appendKey("physicalResourceId", physicalResourceId); + + return Response.success(physicalResourceId); + } +} diff --git a/java/custom-resource/lambda/CustomResourceIsCompleteHandlerSimple.java b/java/custom-resource/lambda/CustomResourceIsCompleteHandlerSimple.java new file mode 100644 index 0000000000..0fb502cbd0 --- /dev/null +++ b/java/custom-resource/lambda/CustomResourceIsCompleteHandlerSimple.java @@ -0,0 +1,80 @@ +package com.myapp; + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; +import java.util.HashMap; +import java.util.Map; + +public class CustomResourceHandlerSimple implements RequestHandler, Map> { + + @Override + public Map handleRequest(Map event, Context context) { + System.out.println(event); + String requestType = (String) event.get("RequestType"); + + switch (requestType) { + case "Create": + return onCreate(event); + case "Update": + return onUpdate(event); + case "Delete": + return onDelete(event); + default: + throw new RuntimeException("Invalid request type: " + requestType); + } + } + + private Map onCreate(Map event) { + @SuppressWarnings("unchecked") + Map props = (Map) event.get("ResourceProperties"); + System.out.println("Create new resource with props " + props); + + String message = (String) props.get("Message"); + + Map attributes = new HashMap<>(); + attributes.put("Response", String.format("Resource message \"%s\"", message)); + + Map response = new HashMap<>(); + response.put("Data", attributes); + return response; + } + + private Map onUpdate(Map event) { + String physicalId = (String) event.get("PhysicalResourceId"); + @SuppressWarnings("unchecked") + Map props = (Map) event.get("ResourceProperties"); + System.out.println("Update resource " + physicalId + " with props " + props); + // Add your update logic here... + + Map response = new HashMap<>(); + response.put("PhysicalResourceId", physicalId); + return response; + } + + private Map onDelete(Map event) { + String physicalId = (String) event.get("PhysicalResourceId"); + System.out.println("Delete resource " + physicalId); + // Add your delete logic here... + + Map response = new HashMap<>(); + response.put("PhysicalResourceId", physicalId); + return response; + } +} + +// Separate class for isComplete handler +public class CustomResourceIsCompleteHandler implements RequestHandler, Map> { + + @Override + public Map handleRequest(Map event, Context context) { + String physicalId = (String) event.get("PhysicalResourceId"); + String requestType = (String) event.get("RequestType"); + + // Add your stabilization logic here based on requestType + // boolean isReady = ... + + Map response = new HashMap<>(); + response.put("IsComplete", true); + return response; + } +}