Setting SNS String Array Message Attributes with the AWS Javascript SDK
AWS Simple Notification Service is a great tool for broadcasting messages to a topic. Subscribers receive all messages by default, or can use a filter on the messagee's attributes to receive only a subset of the messages sent to the topic.
Message attributes have a few possible data types. Unfortunately the documentation for the Javascript SDK is pretty bad at the time of writing. It's fairly obvious how to set an attribute of type String
but it says nothing about how to set an attribute of type String.Array
. Fortunately, I guessed correctly when I gave it a try.
const AWS = require('aws-sdk')
const config = require('./config')
AWS.config.region = 'eu-west-1' // or your region
const sns = new aws.SNS()
const notificationGroups = [
'GroupA',
'GroupB'
]
async function sendMessage(message, errorCode) {
const params = {
Message: message,
Subject: 'Something happened',
TopicArn: config.sns.arn,
MessageAttributes: {
errorCode: {
DataType: 'String',
StringValue: `${errorCode}`
},
group: {
DataType: 'String.Array',
StringValue: JSON.stringify(notificationGroups)
}
}
}
await sns.publish(params).promise()
}
The trick is to call JSON.stringify(someArray)
and stuff it into the StringValue
key in the MessageAttribute
object.