Class CustomConfigExample

java.lang.Object
software.amazon.lambda.durable.DurableHandler<String,String>
software.amazon.lambda.durable.examples.CustomConfigExample
All Implemented Interfaces:
com.amazonaws.services.lambda.runtime.RequestStreamHandler

public class CustomConfigExample extends DurableHandler<String,String>
Example demonstrating custom configuration with both custom HTTP client and custom SerDes. Shows how to configure a custom Apache HTTP client for the Lambda client while maintaining automatic credentials detection and region fallback, plus a custom SerDes with snake_case naming.

This example demonstrates:

  • Custom Apache HTTP client configuration for improved performance
  • Automatic region detection with fallback to us-east-1 for testing environments
  • Environment variable credentials provider
  • Custom SerDes with snake_case property naming
  • Constructor Details

    • CustomConfigExample

      public CustomConfigExample()
  • Method Details

    • createConfiguration

      protected DurableConfig createConfiguration()
      Description copied from class: DurableHandler
      Template method for creating configuration. Override this method to provide custom DurableExecutionClient, SerDes, or other configuration.

      The LambdaDurableFunctionsClient is a wrapper that customers should use to inject their own configured LambdaClient. This allows full control over AWS SDK configuration including credentials, region, HTTP client, and retry policies.

      Basic example with custom region and credentials:

      
       @Override
       protected DurableConfig createConfiguration() {
           // Create custom Lambda client with specific configuration
           var lambdaClient = LambdaClient.builder()
               .region(Region.US_WEST_2)
               .credentialsProvider(ProfileCredentialsProvider.create("my-profile"))
               .build();
      
           // Wrap the Lambda client with LambdaDurableFunctionsClient
           var durableClient = new LambdaDurableFunctionsClient(lambdaClient);
      
           return DurableConfig.builder()
               .withDurableExecutionClient(durableClient)
               .build();
       }
       

      Advanced example with AWS CRT HTTP Client for high-performance scenarios:

      
       @Override
       protected DurableConfig createConfiguration() {
           // Configure AWS CRT HTTP Client for optimal performance
           var crtHttpClient = AwsCrtAsyncHttpClient.builder()
               .maxConcurrency(50)
               .connectionTimeout(Duration.ofSeconds(30))
               .connectionMaxIdleTime(Duration.ofSeconds(60))
               .build();
      
           // Create Lambda client with CRT HTTP client
           var lambdaClient = LambdaClient.builder()
               .region(Region.US_EAST_1)
               .credentialsProvider(EnvironmentVariableCredentialsProvider.create())
               .httpClient(crtHttpClient)
               .overrideConfiguration(ClientOverrideConfiguration.builder()
                   .retryPolicy(RetryPolicy.builder()
                       .numRetries(5)
                       .build())
                   .build())
               .build();
      
           // Wrap with LambdaDurableFunctionsClient
           var durableClient = new LambdaDurableFunctionsClient(lambdaClient);
      
           return DurableConfig.builder()
               .withDurableExecutionClient(durableClient)
               .withSerDes(customSerDes)  // Optional: custom SerDes for user data
               .withExecutorService(customExecutor)  // Optional: custom thread pool
               .build();
       }
       
      Overrides:
      createConfiguration in class DurableHandler<String,String>
      Returns:
      DurableConfig with desired configuration
    • handleRequest

      public String handleRequest(String input, DurableContext context)
      Description copied from class: DurableHandler
      Handle the durable execution.
      Specified by:
      handleRequest in class DurableHandler<String,String>
      Parameters:
      input - User input
      context - Durable context for operations
      Returns:
      Result