我在CDK中遇到这个问题。我有一个由 SNS 主题触发的 lambda(从 S3 存储桶接收事件),但现在它在传递到 SNS 主题的每条消息上执行。我希望 Lambda 仅对特定存储桶名称、文件结尾和 PutObject 操作执行。
我知道如何将 SNS 连接到我的 lambda,只是不使用过滤器:
const myTopic = new sns.Topic(this, "Topic", {});
myTopic.addToResourcePolicy(new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: ["sns:Publish"],
resources: [myTopic.topicArn],
principals: [new iam.AccountPrincipal('XXXXXXXXX')]
}))
const snsEventSource = new lambdaEventSources.SnsEventSource(myTopic);
myLambda.addEventSource(snsEventSource)
Run Code Online (Sandbox Code Playgroud)
我不知道如何添加过滤器,我尝试过使用 sns.SubscriptionFilter 但没有任何运气
我正在尝试使用 Amazon 的 SNS 服务发送一些短信,我正在按照https://docs.aws.amazon.com/sns/latest/dg/sms_publish-to-topic.html上提供的教程进行操作,但是 AWS不会让我选择 SMS 作为有效协议,它只显示 SQS 选择:
我已经将我的电话号码设置到短信沙箱,并且能够按照教程直接发布短信: https: //docs.aws.amazon.com/sns/latest/dg/sms_publish-to-phone。 html#sms_publish_console
有人知道为什么这个 SMS 协议在 AWS SNS 服务上不可用吗?
我找不到任何关于消息的方法或格式的文档.
我偶然发现了一个相当奇怪的,据我所知,亚马逊SNS的无证行为.我正在寻找解决方案或设置来解决它.
摘要
我有一个SNS主题,其HTTPS订阅指向一个Amazon API Gateway REST端点,支持Node.js Lambda函数以执行请求.
现在,如果我在主题上使用SNS和发布,整个API网关映射模板将被忽略/短路.Lambda函数最终仅接收原始SNS JSON对象.
但是,如果我使用Web浏览器(或curl)访问端点,则会调用API网关映射转换,并将正确的JSON数据传递给Lambda函数.
API网关端点
API网关(以下称为TheApi)是使用sms"路径参数"下的资源创建的{phone}.因此,您可以https://TheApi/sms/111-222-3333使用a POST或GET方法进行查询.
这两种方法都有一个通用的映射模板,它可以获取所有路径参数,所有头参数,所有查询参数和整个请求体,并将其转换为一个LARGE请求体JSON对象.这是模板的样子:
{
"resource-path" : "$context.resourcePath",
"http-method" : "$context.httpMethod",
"headers": {
#foreach($param in $input.params().header.keySet())
"$param": "$util.escapeJavaScript($input.params().header.get($param))" #if($foreach.hasNext),#end
#end
},
"query": {
#foreach($param in $input.params().querystring.keySet())
"$param": "$util.escapeJavaScript($input.params().querystring.get($param))" #if($foreach.hasNext),#end
#end
},
"paths": {
#foreach($param in $input.params().path.keySet())
"$param": "$util.escapeJavaScript($input.params().path.get($param))" #if($foreach.hasNext),#end
#end
},
"body" : $input.json('$')
}
Run Code Online (Sandbox Code Playgroud)
然后将得到的对象作为eventlambda函数运行的Lambda函数提供给Lambda函数.这是一个简单的API网关"测试"的结果:
Tue Feb 09 00:54:13 UTC …Run Code Online (Sandbox Code Playgroud) 我已按照此指南将Android应用程序连接到Google Firebase云消息服务(FCM),
我可以成功接收从FCM控制台发送的消息,而不是从AWS SNS控制台发送的消息。
在AWS上登录的消息传递状态对我发送的每条消息均显示SUCCESS,而在设备上未显示任何通知。
有没有办法检查发生了什么?
我已经设置了我的Android和iOS应用程序,以便能够通过SNS接收通知.设置工作正常,设备确实收到通知.但是后来,通知开始失败.
我已经为成功和失败场景启用了日志记录.根据日志,我不断收到表单错误:"端点被禁用:arn:aws:sns:myRegion:myAccount:endpoint/GCM/myApp/myDeviceEndpointHash"
我知道错误意味着端点被禁用.此外,我知道通过控制台和API重新启用端点的方法.
我的问题是为什么这种情况不断发生.我正在推送通知的99%的设备正在发生这种情况.提前致谢.
我对RabbitMQ和AMQP协议很有经验,并且构建了一个包含命令,请求和事件模式的系统.
现在我将构建一个在AWS Lambda上运行的系统,因此使用SNS,SQS等.我想了解这些事情之间的"映射".
什么相当于AMQP的交易所?什么是路由密钥?
如何在SNS和SQS中为扇出,直接和主题交换(或类似)设置队列绑定?
别人怎么处理这个?对我来说,RabbitMQ看起来像是一个工具,可以满足消息总线的常规需求,AWS提供了块,你必须自己设置/构建功能.我对吗?
自从过去两个月以来,我正在使用aws sns将短信发送到印度的电话号码.我正在使用PHP SDK进行api呼叫.
我已经发送了7000多条成功的消息,其中包含与我们公司名称相关的自定义senderid.但是自从过去4-5天以来,相同的客户/电话号码正在接收带有aws默认发送者"通知"的消息.
我正在发布消息到一个主题发送短信.现在在过去的几个推送消息中,所有客户端都获得了默认的senderid,而在少数推送消息中,只有少数客户端获得了默认ID,而其
那么,问题出在哪里?
我可以使用CLI找到这种格式
aws sns publish --topic-arn arn:aws:sns:us-west-2:111111111111:test
--message "Testing the CLI"
--subject "From the CLI" --message-attributes "{\"somename\":
{\"DataType\":\"String\",\"StringValue\":\"somevalue\"}}"
Run Code Online (Sandbox Code Playgroud)
但我无法找到(或弄清楚)的是如何从API网关上的集成请求中执行此操作.
我认为它需要作为集成请求的查询参数来完成,但语法与为SQS添加消息属性不同.我通过使用此示例的参数命名符号来测试它:
MessageBody=This+is+a+test+message
MessageAttribute.1.Name=test_attribute_name_1
MessageAttribute.1.Value.StringValue=test_attribute_value_1
MessageAttribute.1.Value.DataType=String
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
MessageAttributes '{"store":{"DataType":"String","StringValue":"example_corp"}}'
Run Code Online (Sandbox Code Playgroud)
到目前为止无法让它工作,任何帮助都非常感激.
amazon-sns ×10
amazon-ec2 ×1
amazon-sqs ×1
amqp ×1
android ×1
aws-cdk ×1
aws-lambda ×1
ios ×1
migration ×1
rabbitmq ×1
sender-id ×1
sms ×1