Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions java/custom-resource/lambda/CustomResourceHandlerPT.java
Original file line number Diff line number Diff line change
@@ -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<String, Object> 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);
}
}
Original file line number Diff line number Diff line change
@@ -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<String, Object>, Map<String, Object>> {

@Override
public Map<String, Object> handleRequest(Map<String, Object> 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<String, Object> onCreate(Map<String, Object> event) {
@SuppressWarnings("unchecked")
Map<String, Object> props = (Map<String, Object>) event.get("ResourceProperties");
System.out.println("Create new resource with props " + props);

String message = (String) props.get("Message");

Map<String, Object> attributes = new HashMap<>();
attributes.put("Response", String.format("Resource message \"%s\"", message));

Map<String, Object> response = new HashMap<>();
response.put("Data", attributes);
return response;
}

private Map<String, Object> onUpdate(Map<String, Object> event) {
String physicalId = (String) event.get("PhysicalResourceId");
@SuppressWarnings("unchecked")
Map<String, Object> props = (Map<String, Object>) event.get("ResourceProperties");
System.out.println("Update resource " + physicalId + " with props " + props);
// Add your update logic here...

Map<String, Object> response = new HashMap<>();
response.put("PhysicalResourceId", physicalId);
return response;
}

private Map<String, Object> onDelete(Map<String, Object> event) {
String physicalId = (String) event.get("PhysicalResourceId");
System.out.println("Delete resource " + physicalId);
// Add your delete logic here...

Map<String, Object> response = new HashMap<>();
response.put("PhysicalResourceId", physicalId);
return response;
}
}

// Separate class for isComplete handler
public class CustomResourceIsCompleteHandler implements RequestHandler<Map<String, Object>, Map<String, Object>> {

@Override
public Map<String, Object> handleRequest(Map<String, Object> 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<String, Object> response = new HashMap<>();
response.put("IsComplete", true);
return response;
}
}
Loading