I'm trying to publish some data to SNS from a Lambda function call, but it doesn't seem to be working. My function code is -
public class Handler implements RequestHandler<DynamodbEvent, Void> {
    private static final String SNS_TOPIC_ARN = "arn:aws:sns:us-west-2:account_number:function_name";
    @Override
    public Void handleRequest(DynamodbEvent dynamodbEvent, Context context) {
        LambdaLogger logger = context.getLogger();
        AmazonSNSClient snsClient = new AmazonSNSClient(new DefaultAWSCredentialsProviderChain());
        snsClient.setRegion(Region.getRegion(Regions.US_WEST_2));
        for (DynamodbStreamRecord record : dynamodbEvent.getRecords()) {
            Map<String, AttributeValue> newImage = record.getDynamodb().getNewImage();
            if (newImage == null) {
                continue;
            }
            String sensorId = newImage.get("sensorID").getS();
            long timestamp = Long.parseLong(newImage.get("timestamp").getS());
            double temperature = Double.parseDouble(newImage.get("payload").getM().get("temp").getN());
            String data = sensorId + " " + timestamp + " " + temperature;
            logger.log(data);
            PublishRequest publishRequest = new PublishRequest(SNS_TOPIC_ARN, data);
            PublishResult publishResult = snsClient.publish(publishRequest);
            logger.log("Publish Successful " + publishResult.getMessageId());
        }
        snsClient.shutdown();
        return null;
    }
}
This call results in a timeout (10 seconds) and the lambda invocation fails. If I comment out the SNS publishing part, i.e., if I just log the data received from DynamoDB, it works just fine. As soon as the SNS publishing code is added, it times out.
The timeout message logged in CloudWatch is -
START RequestId: 8db74187-459b-42c5-8a06-b3a74873b236 Version: $LATEST
END RequestId: 8db74187-459b-42c5-8a06-b3a74873b236
REPORT RequestId: 8db74187-459b-42c5-8a06-b3a74873b236  Duration: 10001.66 ms   Billed Duration: 10000 ms   Memory Size: 128 MB Max Memory Used: 37 MB
Task timed out after 10.00 seconds
I have all the proper permissions in place, and I'm able to publish to SNS using just the following code running on my PC -
PublishRequest publishRequest = new PublishRequest(SNS_TOPIC_ARN, data);
PublishResult publishResult = snsClient.publish(publishRequest);
System.out.println("Publish Successful " + publishResult.getMessageId());
I have also tried using AmazonSNSAsyncClient instead of AmazonSNSClient, it gives the same result.
What am I missing here ?
 
     
    