我正在使用 python for amazon SNS 来发布推送通知。
data = { "GCM" : {"data": {"message": "dummy" }}}
jsonData = json.dumps(data)
self.client.publish( TargetArn=targetArn,
Message= jsonData,
MessageStructure='json')
Run Code Online (Sandbox Code Playgroud)
出现以下错误。
参数无效:JSON 必须包含“default”或“GCM”条目。
尝试将其作为字符串和各种格式发送。但这并不奏效。发布有什么问题吗?
我尝试使用 Django 中的“signal”在 AWS 中发送 SNS 电子邮件,我的代码是:
import boto3
from properties.models import PropertyList
from django.db.models.signals import post_save, post_delete
from django.dispatch import receiver
@receiver(post_save, sender=PropertyList)
def send_property_details(sender, instance, created, **kwargs):
if created:
sns = boto3.client('sns')
response = sns.publish(
TopicArn='',# I write value of TopicArn
Message={
"name": instance.title,
"description": instance.description
},
MessageStructure='json',
Subject='New Property Created',
MessageAttributes={
'default':{
'DataType':'String',
'StringValue':instance.title
}
},
)
print(response['MessageId'])
Run Code Online (Sandbox Code Playgroud)
我收到错误如下:
参数验证失败:参数消息类型无效,值:{'name': 'aws', 'description': 'test'},类型: ,有效类型:
在AWS文档中说,如果我想为每个传输协议发送不同的消息,请将参数的值设置MessageStructure为JSON并使用JSON对象作为消息参数。我的代码有什么问题?
注意:我想发送的不仅仅是值,所以我需要发送 JSON
我有一个要求,我需要通过将其发布到 SNS 来从 api A 发送一些入站 http 查询参数,而其他 api B 订阅 sns,它应该在其中获取查询参数。
我有什么办法可以实现它吗?
注意:当我发布到 SNS 时,我有一个固定的消息结构,我无法更改它,因为我有其他端点已经订阅了 SNS,依赖于它。
正如 Michael 提到的,我们可以使用 lambda。但我不想使用aws提供的其他服务。我想仅使用 SNS 来实现相同的目标。我听说过 SNS 消息属性,但不确定我们是否可以使用它来实现相同的目的。
谢谢。
我在使用 AWS Go SDK 向 SNS 发送消息时遇到问题。发布功能的文档有点晦涩难懂。
我的一段代码是:
package main
import (
"encoding/json"
"github.com/aws/aws-sdk-go-v2/aws/external"
"github.com/aws/aws-sdk-go-v2/service/sns"
"github.com/aws/aws-sdk-go/aws"
"log"
)
type Person struct {
Name string `json:"name"`
}
func main() {
cfg, _ := external.LoadDefaultAWSConfig()
snsClient := sns.New(cfg)
person := Person{
Name:"ok",
}
jsonStr, _ := json.Marshal(person)
req := snsClient.PublishRequest(&sns.PublishInput{
TopicArn: aws.String("arn:aws:sns:us-east-1:*****:ok"),
Message: aws.String(string(jsonStr)),
MessageStructure: aws.String("json"),
MessageAttributes: map[string]sns.MessageAttributeValue{
"default": {
DataType: aws.String("String"),
StringValue: aws.String(string(jsonStr)),
},
},
})
res, err := req.Send()
if err != nil {
log.Fatal(err)
}
log.Print(res)
}
Run Code Online (Sandbox Code Playgroud)
当我启动此代码时,我收到以下消息:
2019/01/24 …Run Code Online (Sandbox Code Playgroud) 我在 CloudWatch 警报状态更改上触发 Cloudwatch 规则时遇到问题。这是规则的事件模式。它不会向 SNS 发送状态更改消息。
{
"detail-type": [
"CloudWatch Alarm State Change"
],
"resources": [
!Sub "arn:aws:cloudwatch:${AWS:Region}:${AWS:AccountId}:alarm:Admin dead"
],
"source": [
"aws.cloudwatch"
],
"detail": {
"state": [
"ALARM"
]
}
}
Run Code Online (Sandbox Code Playgroud)
警报本身正常工作并并行向 SNS 发送消息。另外,如果我删除这部分:
"detail": {
"state": [
"ALARM"
]
}
Run Code Online (Sandbox Code Playgroud)
那么该规则对于每个状态变化都可以正常工作。但我只需要将其更改为“警报中”(如用户界面中显示的那样)。
感谢您的任何建议
rules amazon-web-services amazon-sns amazon-cloudwatch cloudwatch-alarms
我正在尝试使用 AWS SNS 和 FCM 向我的 Android 应用程序发送推送通知。
AWS文档说:
但在我的 Amazon SNS 页面上,我在左侧导航窗格中看不到“移动”。
我错过了什么吗?
我在某处读到英国不支持 Amazon SNS 到手机。这是真的吗?
android amazon-web-services amazon-sns firebase-cloud-messaging
我正在使用 FCM 和 SNS 测试推送通知。(SNS -> FCM (ios/android)。Android 工作没有问题。我可以触发从 SNS 到 FCM 的通知到我的 Android 设备。
\n然后,我测试了将 iOS 版本连接到 firebase 并添加了证书等,并且可以毫无问题地从 firebase 测试页面内触发推送通知到 iOS 设备。
\n问题是我可以\xe2\x80\x99t 使用 iOS 版本触发从 AWS SNS 到 FCM 的通知(Android 版本没有问题)。我希望它能像安卓一样工作。当触发来自 SNS 的通知时,是否需要将任何自定义参数添加到有效负载中才能使 iOS 版本正常工作,这些参数与 Android 版本不同?
\n这是我从 SNS 发送到 FCM 进行测试的自定义负载:
\n{\n"GCM": "{ "data": { "message": "Android 端点的示例消息" }, "content_available": true, "mutable_content": true} , "notification": {"body": "输入您的消息", "声音": "默认"}"\n}
\n{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "SNS:Subscribe",
"Resource": "arn:aws:sns:*:*:test-pipeline"
},
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "SNS:Publish",
"Resource": "arn:aws:sns:*:*:test-pipeline"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么我收到错误
Error code: InvalidParameter - Error message: An error occurred while setting the attribute access policy. Invalid parameter: Every policy statement must have a unique ID
Run Code Online (Sandbox Code Playgroud)
ID不是强制性的,当我在数组中只有一个块时,它就可以工作
Python
运行查询的方法
def function(run_query)
//topic = arn return from topic name
topic.publish(message)
pass
Run Code Online (Sandbox Code Playgroud)
我正在使用 boto3 资源方法。有很多使用 boto3.client 的示例,但使用 boto3 资源方法实现 sns 方法的示例有限。
假设我有两个单独的服务,A和B,SQS队列都订阅了SNS主题"topic-foo".然后我将消息m1发布到SNS主题"topic-foo".
如果服务A(sqs-A)拥有的SQS队列看到消息m1并对其进行处理(即将其弹出队列并处理消息以使其不再在sqs-A上),我是否仍然可以保证单独的SQS服务B拥有的队列(sqs-B)将始终能够查看和处理消息m1?(换句话说,AWS SNS发布是否保证多次传递到SQS队列并隔离单独的SQS队列处理?)
amazon-sns ×10
python ×2
amazon-sqs ×1
android ×1
aws-cli ×1
boto3 ×1
django ×1
firebase ×1
go ×1
http ×1
ios ×1
python-3.x ×1
rules ×1