以下是一个使用AWS API Gateway与SNS集成的工作示例,包括使用MessageAttributes发送消息的代码示例:
创建一个SNS主题
首先,您需要在AWS控制台上创建一个SNS主题。假设您已经创建了名为MyTopic的主题。
创建一个API Gateway 接下来,您需要创建一个API Gateway来作为SNS主题的触发器。
添加API资源 在API Gateway中创建一个资源,并将其配置为与SNS集成。您可以使用AWS控制台或AWS CLI来完成此操作。
添加POST方法 为资源添加一个POST方法,并将其集成到SNS主题上。确保在集成设置中选择对应的SNS主题。
添加请求模板 在POST方法的集成请求设置中,您需要添加一个请求模板来定义要发送到SNS主题的消息。以下是一个示例请求模板:
{
"Message": "$util.escapeJavaScript($input.body)",
"MessageAttributes": {
"attribute1": {
"DataType": "String",
"StringValue": "$input.params('attribute1')"
},
"attribute2": {
"DataType": "String",
"StringValue": "$input.params('attribute2')"
}
}
}
在这个示例中,我们假设您的API Gateway路径参数中有attribute1和attribute2,它们将作为SNS消息的属性发送。
部署API 在API Gateway控制台中部署您的API。
发送请求
使用HTTP客户端发送一个POST请求到您的API Gateway资源的URL,并在请求正文中包含消息内容。确保在请求中包含attribute1和attribute2的路径参数。
以下是一个使用cURL发送请求的示例:
curl -X POST \
-H "Content-Type: application/json" \
-d '{"message": "Hello World"}' \
'https://api-gateway-url/resource-path?attribute1=value1&attribute2=value2'
这将发送一个包含message正文和attribute1和attribute2属性的消息到SNS主题。
请注意,您需要将api-gateway-url替换为您的API Gateway URL,resource-path替换为您的资源路径,以及value1和value2替换为您的路径参数值。
这是一个使用AWS SDK for JavaScript(Node.js)发送请求的示例:
const AWS = require('aws-sdk');
const sns = new AWS.SNS();
const params = {
Message: 'Hello World',
MessageAttributes: {
attribute1: {
DataType: 'String',
StringValue: 'value1'
},
attribute2: {
DataType: 'String',
StringValue: 'value2'
}
},
TopicArn: 'arn:aws:sns:us-west-2:123456789012:MyTopic'
};
sns.publish(params, (err, data) => {
if (err) {
console.log(err);
} else {
console.log(data);
}
});
这将使用AWS SDK for JavaScript(Node.js)发送一个具有Hello World消息和attribute1和attribute2属性的消息到SNS主题。
请注意,您需要将arn:aws:sns:us-west-2:123456789012:MyTopic替换为您创建的SNS主题的ARN。
这就是一个使用AWS API Gateway与SNS集成的工作示例,包括MessageAttributes的代码示例。