diff --git a/example/HelloWorldFunction/build.gradle b/example/HelloWorldFunction/build.gradle index b1a266606..18166b5f3 100644 --- a/example/HelloWorldFunction/build.gradle +++ b/example/HelloWorldFunction/build.gradle @@ -9,16 +9,9 @@ repositories { } dependencies { - aspect 'software.amazon.lambda:powertools-logging:1.11.0' - aspect 'software.amazon.lambda:powertools-tracing:1.11.0' - aspect 'software.amazon.lambda:powertools-metrics:1.11.0' - aspect 'software.amazon.lambda:powertools-sqs:1.11.0' aspect 'software.amazon.lambda:powertools-parameters:1.11.0' aspect 'software.amazon.lambda:powertools-validation:1.11.0' - implementation 'software.amazon.lambda:powertools-idempotency:1.11.0' - aspectpath 'software.amazon.lambda:powertools-idempotency:1.11.0' - implementation 'com.amazonaws:aws-lambda-java-core:1.2.1' implementation 'com.amazonaws:aws-lambda-java-events:3.11.0' diff --git a/example/HelloWorldFunction/pom.xml b/example/HelloWorldFunction/pom.xml index 1d5b826a3..51a6a765d 100644 --- a/example/HelloWorldFunction/pom.xml +++ b/example/HelloWorldFunction/pom.xml @@ -13,21 +13,6 @@ - - software.amazon.lambda - powertools-tracing - 1.11.0 - - - software.amazon.lambda - powertools-logging - 1.11.0 - - - software.amazon.lambda - powertools-metrics - 1.11.0 - software.amazon.lambda powertools-parameters @@ -38,16 +23,6 @@ powertools-validation 1.11.0 - - software.amazon.lambda - powertools-sqs - 1.11.0 - - - software.amazon.lambda - powertools-idempotency - 1.11.0 - com.amazonaws aws-lambda-java-core @@ -93,22 +68,6 @@ ${maven.compiler.target} ${maven.compiler.target} - - software.amazon.lambda - powertools-tracing - - - software.amazon.lambda - powertools-logging - - - software.amazon.lambda - powertools-metrics - - - software.amazon.lambda - powertools-sqs - software.amazon.lambda powertools-validation diff --git a/example/HelloWorldFunction/src/main/java/helloworld/AppIdempotency.java b/example/HelloWorldFunction/src/main/java/helloworld/AppIdempotency.java deleted file mode 100644 index 64b5d79a5..000000000 --- a/example/HelloWorldFunction/src/main/java/helloworld/AppIdempotency.java +++ /dev/null @@ -1,84 +0,0 @@ -package helloworld; - -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.RequestHandler; -import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; -import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import software.amazon.lambda.powertools.idempotency.Idempotency; -import software.amazon.lambda.powertools.idempotency.IdempotencyConfig; -import software.amazon.lambda.powertools.idempotency.Idempotent; -import software.amazon.lambda.powertools.idempotency.persistence.DynamoDBPersistenceStore; -import software.amazon.lambda.powertools.utilities.JsonConfig; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.URL; -import java.util.HashMap; -import java.util.Map; -import java.util.stream.Collectors; - -public class AppIdempotency implements RequestHandler { - private final static Logger LOG = LogManager.getLogger(); - - public AppIdempotency() { - // we need to initialize idempotency configuration before the handleRequest method is called - Idempotency.config().withConfig( - IdempotencyConfig.builder() - .withEventKeyJMESPath("powertools_json(body).address") - .build()) - .withPersistenceStore( - DynamoDBPersistenceStore.builder() - .withTableName("idempotency_table") - .build() - ).configure(); - } - - - /** - * Try with: - *
-     *     curl -X POST https://[REST-API-ID].execute-api.[REGION].amazonaws.com/Prod/helloidem/ -H "Content-Type: application/json" -d '{"address": "https://checkip.amazonaws.com"}'
-     * 
- * @param input - * @param context - * @return - */ - @Idempotent - public APIGatewayProxyResponseEvent handleRequest(final APIGatewayProxyRequestEvent input, final Context context) { - Map headers = new HashMap<>(); - - headers.put("Content-Type", "application/json"); - headers.put("Access-Control-Allow-Origin", "*"); - headers.put("Access-Control-Allow-Methods", "GET, OPTIONS"); - headers.put("Access-Control-Allow-Headers", "*"); - - APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent() - .withHeaders(headers); - try { - String address = JsonConfig.get().getObjectMapper().readTree(input.getBody()).get("address").asText(); - final String pageContents = this.getPageContents(address); - String output = String.format("{ \"message\": \"hello world\", \"location\": \"%s\" }", pageContents); - - LOG.debug("ip is {}", pageContents); - return response - .withStatusCode(200) - .withBody(output); - - } catch (IOException e) { - return response - .withBody("{}") - .withStatusCode(500); - } - } - - // we could actually also put the @Idempotent annotation here - private String getPageContents(String address) throws IOException { - URL url = new URL(address); - try (BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()))) { - return br.lines().collect(Collectors.joining(System.lineSeparator())); - } - } -} diff --git a/example/HelloWorldFunction/src/main/java/helloworld/AppSqsEvent.java b/example/HelloWorldFunction/src/main/java/helloworld/AppSqsEvent.java deleted file mode 100644 index 31ba1f760..000000000 --- a/example/HelloWorldFunction/src/main/java/helloworld/AppSqsEvent.java +++ /dev/null @@ -1,35 +0,0 @@ -package helloworld; - -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.RequestHandler; -import com.amazonaws.services.lambda.runtime.events.SQSEvent; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import software.amazon.lambda.powertools.logging.Logging; -import software.amazon.lambda.powertools.sqs.SqsBatch; -import software.amazon.lambda.powertools.sqs.SqsMessageHandler; - -import static com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage; - -public class AppSqsEvent implements RequestHandler { - private static final Logger log = LogManager.getLogger(AppSqsEvent.class); - - @SqsBatch(SampleMessageHandler.class) - @Logging(logEvent = true) - @Override - public String handleRequest(SQSEvent input, Context context) { - return "{\"statusCode\": 200}"; - } - - public static class SampleMessageHandler implements SqsMessageHandler { - - @Override - public String process(SQSMessage message) { - if("19dd0b57-b21e-4ac1-bd88-01bbb068cb99".equals(message.getMessageId())) { - throw new RuntimeException(message.getMessageId()); - } - log.info("Processing message with details {}", message); - return message.getMessageId(); - } - } -} diff --git a/example/HelloWorldFunction/src/main/java/helloworld/AppSqsEventUtil.java b/example/HelloWorldFunction/src/main/java/helloworld/AppSqsEventUtil.java deleted file mode 100644 index 3ececdfe1..000000000 --- a/example/HelloWorldFunction/src/main/java/helloworld/AppSqsEventUtil.java +++ /dev/null @@ -1,39 +0,0 @@ -package helloworld; - -import java.util.List; - -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.RequestHandler; -import com.amazonaws.services.lambda.runtime.events.SQSEvent; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import software.amazon.lambda.powertools.sqs.SqsUtils; -import software.amazon.lambda.powertools.sqs.SQSBatchProcessingException; - -import static java.util.Collections.emptyList; - -public class AppSqsEventUtil implements RequestHandler> { - private static final Logger log = LogManager.getLogger(AppSqsEventUtil.class); - - @Override - public List handleRequest(SQSEvent input, Context context) { - try { - - return SqsUtils.batchProcessor(input, (message) -> { - if ("19dd0b57-b21e-4ac1-bd88-01bbb068cb99".equals(message.getMessageId())) { - throw new RuntimeException(message.getMessageId()); - } - - log.info("Processing message with details {}", message); - return message.getMessageId(); - }); - - } catch (SQSBatchProcessingException e) { - log.info("Exception details {}", e.getMessage(), e); - log.info("Success message Returns{}", e.successMessageReturnValues()); - log.info("Failed messages {}", e.getFailures()); - log.info("Failed messages Reasons {}", e.getExceptions()); - return emptyList(); - } - } -} diff --git a/example/template.yaml b/example/template.yaml index 901d8306d..907ae13b1 100644 --- a/example/template.yaml +++ b/example/template.yaml @@ -61,27 +61,6 @@ Resources: Name: id Type: String - HelloWorldIdempotentFunction: - Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction - Properties: - CodeUri: HelloWorldFunction - Handler: helloworld.AppIdempotency::handleRequest - MemorySize: 512 - Environment: # More info about Env Vars: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#environment-object - Variables: - POWERTOOLS_LOG_LEVEL: INFO - AWS_ENDPOINT_DISCOVERY_ENABLED: false - Tracing: Active - Policies: - - DynamoDBCrudPolicy: - TableName: !Ref IdempotencyTable - Events: - HelloWorld: - Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api - Properties: - Path: /helloidem - Method: post - UserPwd: Type: AWS::SecretsManager::Secret Properties: @@ -131,55 +110,6 @@ Resources: Value: aGVsbG8gd29ybGQ= Description: Base64 SSM Parameter for lambda-powertools-java powertools-parameters module - TestSqsQueue: - Type: AWS::SQS::Queue - - HelloWorldSqsEventFunction: - Type: AWS::Serverless::Function - Properties: - CodeUri: HelloWorldFunction - Handler: helloworld.AppSqsEvent::handleRequest - MemorySize: 512 - Tracing: Active - Policies: - - Statement: - - Sid: AdditionalPermisssionForPowertoolsSQSUtils - Effect: Allow - Action: - - sqs:GetQueueUrl - - sqs:DeleteMessageBatch - Resource: !GetAtt TestSqsQueue.Arn - Events: - TestSQSEvent: - Type: SQS - Properties: - Queue: !GetAtt TestSqsQueue.Arn - BatchSize: 10 - - TestAnotherSqsQueue: - Type: AWS::SQS::Queue - - HelloWorldSqsEventUtilFunction: - Type: AWS::Serverless::Function - Properties: - CodeUri: HelloWorldFunction - Handler: helloworld.AppSqsEventUtil::handleRequest - MemorySize: 512 - Tracing: Active - Policies: - - Statement: - - Sid: AdditionalPermisssionForPowertoolsSQSUtils - Effect: Allow - Action: - - sqs:GetQueueUrl - - sqs:DeleteMessageBatch - Resource: !GetAtt TestAnotherSqsQueue.Arn - Events: - TestSQSEvent: - Type: SQS - Properties: - Queue: !GetAtt TestAnotherSqsQueue.Arn - BatchSize: 10 Outputs: # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function @@ -198,11 +128,4 @@ Outputs: Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/helloparams/" HelloWorldParamsFunction: Description: "Hello World Params Lambda Function ARN" - Value: !GetAtt HelloWorldParamsFunction.Arn - - HelloWorldIdempotencyApi: - Description: "API Gateway endpoint URL for Prod stage for Hello World idempotency function" - Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/helloidem/" - HelloWorldIdempotencyFunction: - Description: "Hello World Idempotency Lambda Function ARN" - Value: !GetAtt HelloWorldIdempotentFunction.Arn + Value: !GetAtt HelloWorldParamsFunction.Arn \ No newline at end of file