Class SnsIO


  • @Experimental(SOURCE_SINK)
    public final class SnsIO
    extends java.lang.Object
    IO to send notifications via SNS.

    Writing to SNS

    Example usage:

    
     PCollection<String> data = ...;
     data.apply(SnsIO.<String>write()
         .withTopicArn("topicArn")
         .withPublishRequestBuilder(msg -> PublishRequest.builder().message(msg)));
     

    At a minimum you have to provide:

    • SNS topic ARN you're going to publish to (optional, but required for most use cases)
    • Request builder function to create SNS publish requests from your input

    By default, the output PublishResponse contains only the SNS messageId, all other fields are null. If you need to include the full SdkHttpResponse and AwsResponseMetadata, you can call SnsIO.Write.withFullPublishResponse(). If you need the HTTP status code only but no headers, you can use SnsIO.Write.withFullPublishResponseWithoutHeaders().

    Configuration of AWS clients

    AWS clients for all AWS IOs can be configured using AwsOptions, e.g. --awsRegion=us-west-1. AwsOptions contain reasonable defaults based on default providers for Region and AwsCredentialsProvider.

    If you require more advanced configuration, you may change the ClientBuilderFactory using AwsOptions.setClientBuilderFactory(Class).

    Configuration for a specific IO can be overwritten using withClientConfiguration(), which also allows to configure the retry behavior for the respective IO.

    Retries

    Retries for failed requests can be configured using ClientConfiguration.Builder.retry(Consumer) and are handled by the AWS SDK unless there's a partial success (batch requests). The SDK uses a backoff strategy with equal jitter for computing the delay before the next retry.

    Note: Once retries are exhausted the error is surfaced to the runner which may then opt to retry the current partition in entirety or abort if the max number of retries of the runner is reached.