标签: amazon-sns

为什么亚马逊多次向 SNS 发送确认请求

从 CLI 或 AWS 控制台为 http 端点创建新的 SNS 订阅后,我收到来自 Amazon 的确认订阅请求。我的代码执行确认,然后我收到 Amazon 的响应,表明订阅已通过 SubscriptionArn 成功确认。另外,在 AWS 控制台中,我看到订阅已确认。

但几秒钟后,我又收到了来自亚马逊的确认请求。脚本尝试处理它,但 Amazon 发送了一条错误消息"Subscription already confirmed"。并且这会重复多次。

为什么亚马逊在确认后仍发送确认请求?是否可以检查订阅是否已确认且未执行confirmSubscription

PS:我使用 NodeJS SDK 来确认订阅。

谢谢

amazon-web-services node.js amazon-sns aws-sdk

1
推荐指数
1
解决办法
875
查看次数

node js无法处理sns事件消息内容

我正在尝试从节点 js lambda 项目中的 SNS 事件中的消息获取内容

这是处理消息的代码

exports.handler = (event, context, callback) => {

var message = event.Records[0].Sns.Message;
console.log('Message received from SNS:', message); 

message.Events.forEach(element => {
    console.log(element);

   });
};
Run Code Online (Sandbox Code Playgroud)

示例事件:

{ 
 "Records": 
  [ 
    { 
     "EventSource": "aws:sns",
     "EventVersion": "1.0",
     "EventSubscriptionArn": "",
     "Sns": 
       { 
         "Type": "Notification",
         "MessageId": "bc86f105-c320",
         "TopicArn": "arn:aws:sns:ewerwrewrw",
         "Subject": "dwqweq23234",
         "Message": 
           {
           "Events":
             [
               {"EventTimestamp":"2018-03-16T10:51:22Z"},
               {"EventTimestamp":"2018-03-16T10:51:22Z"}
             ],
            "EventDocVersion":"2014-08-15"
           },
          "Timestamp": "2018-03-16T10:51:22.691Z",
          "SignatureVersion": "1",
          "Signature": "",
          "SigningCertUrl": "",
          "UnsubscribeUrl": "",
          "MessageAttributes": {} 
      } 
    } 
  ]
 }
Run Code Online (Sandbox Code Playgroud)

这是我在 CloudWatch 日志中得到的信息:

从 SNS …

javascript node.js amazon-sns aws-lambda

1
推荐指数
1
解决办法
2768
查看次数

AWS - 创建一个 AmazonSNSClient

我想创建一个 AmazonSNSClient,我使用这段代码:

AmazonSNSClient snsClient = (AmazonSNSClient) AmazonSNSClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(new PropertiesCredentials(is))).build();
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

线程“main”中的异常 java.lang.UnsupportedOperationException:客户端在使用构建器创建时是不可变的。

在 com.amazonaws.AmazonWebServiceClient.checkMutability(AmazonWebServiceClient.java:937)
在 com.amazonaws.AmazonWebServiceClient.setRegion(AmazonWebServiceClient.java:422)

java amazon-web-services amazon-sns

1
推荐指数
1
解决办法
6327
查看次数

aws sns 发布压缩负载

可以发布到 AWS-SNS 的消息的最大大小有 256KB 的限制。我们可以使用 GZIP 压缩消息并发送发布压缩消息以克服大小限制吗?

compression amazon-sns

1
推荐指数
1
解决办法
1841
查看次数

SNS 消息是否分散到 SQS 队列以保持顺序?

SNS 的 AWS 常见问题说:

问:消息会按照发布的确切顺序发送给我吗?

Amazon SNS 服务将尝试按照消息发布到主题的顺序传送来自发布者的消息。但是,网络问题可能会导致订阅者端出现乱序消息。

它是否适用于 SQS 消费者,特别是 FIFO SQS?我有一个用例,其中一个消费者需要维护发送消息的顺序。如果不是这种情况,我将需要使用其他东西。

fifo amazon-sqs amazon-web-services amazon-sns

1
推荐指数
1
解决办法
2421
查看次数

为什么这个 JSON 属性被记录为未定义?

我有一个 nodejs lambda,它有一个 SQS 队列作为事件,它订阅了一个 SNS 主题。

lambda 看起来像这样:

'use strict';

import { Handler } from 'aws-lambda';

const myLambda: Handler = async (event: any = {}) => {
  let incomingMessage = JSON.stringify(event.Records[0].body);
  console.log('Received event:', incomingMessage); # log1
  console.log('parsed event',JSON.parse(incomingMessage)); # log2
  var type = JSON.parse(JSON.stringify(incomingMessage)).Type;
  console.log('Message received from SNS:', type); # log3
  return { };
};

export { myLambda }
Run Code Online (Sandbox Code Playgroud)

我已经注释了三个日志行,因为它会使讨论更容易一些。

log1:这显示了事件的纯文本。 log2:这显示了一个很好的 JSON 格式(谢谢 cloudwatch)的消息:

{
    "Type": "Notification",
    "MessageId": "9245d801-2fe5-58ed-b667-8d9b73b2ff85",
    "TopicArn": "arn:aws:sns:eu-west-1:0123456:TopicName",
    "Subject": "Amazon SES Email Receipt …
Run Code Online (Sandbox Code Playgroud)

amazon-sns typescript aws-lambda

1
推荐指数
1
解决办法
1162
查看次数

触发多个 lambda 函数

我想从单个 s3 存储桶中使用触发多个 lambda 函数,但出现重叠错误 实际上我找到了一个解决方案,我需要为此使用 SNS。架构会像 在此处输入图片说明

  • 有没有其他解决方案?
  • 如果不是如何使用 SNS 实现它?

amazon-s3 bucket amazon-web-services amazon-sns aws-lambda

1
推荐指数
1
解决办法
2195
查看次数

aws cli 命令使用过滤器订阅主题

我正在尝试编写一个跨帐户 aws cli 命令来订阅主题并同时为该订阅创建过滤器。下面是我的命令的样子。

aws sns subscribe --topic-arn arn:aws:sns:region:accountId:my_topic --protocol sqs --notification-endpoint arn:aws:sqs:region:differentAccountId:my_sqs_queue --attributes "{'RawMessageDelivery': 'true', 'FilterPolicy': '{\"filter\": [\"value1\", \"value2\"]}'}"
Run Code Online (Sandbox Code Playgroud)

运行此程序时出现以下错误。

Unknown options: --attributes, [\value1\,, \value2\]}'}, {'RawMessageDelivery': 'true', 'FilterPolicy': '{" filter\:
Run Code Online (Sandbox Code Playgroud)

我可以访问两个 aws 帐户的管理员访问权限。关于我做错了什么的任何建议?

编辑: 我在 Windows 的 VS Code powershell 终端中运行它。

powershell publish-subscribe amazon-sqs amazon-web-services amazon-sns

1
推荐指数
1
解决办法
1811
查看次数

队列重新创建后,AWS Lambda SQS 触发器未触发

我一直在使用 terraform 来定义一些 SNS 主题,然后使用 SQS 队列来订阅它们,然后这些队列具有由 SQS 触发的 lambda,并从这些队列中获取消息。

Terraform 处理 SNS 主题、SQS 队列的创建以及允许 SNS 将消息写入队列的策略。lambdas 通过无服务器 CLI 工具单独部署。

当我首先运行 terraform,然后部署 lambdas 时,所有这些似乎都可以正常工作。但是,我在 terraform 中所做的某些事情遇到了一些问题,因此我决定拆除整个基础设施并重新创建它,这似乎再次正常工作。

看看从未被删除的 lambda,它们仍然像我所期望的那样在门户中显示了指向队列的链接。如果我转到新的 SQS 队列,我可以看到它在“Lambda 触发器”选项卡中正确列出了 lambda。

但问题是没有收到任何消息,我可以看到它们都在队列中累积。我发现解决问题的唯一方法是进入每个 lambda,选择 SQS 队列并将它们全部切换为“禁用”,然后再次“启用”。此时,他们都开始处理队列中的消息。

有没有其他人经历过这种情况?是否有更好的方法让它们在重新创建队列时正确“重新关联”?

amazon-sqs amazon-web-services amazon-sns aws-lambda

1
推荐指数
1
解决办法
1271
查看次数

如何在 AWS SNS 上设置发件人编号(使用 PHP v3 SDK)

设置

我已经下载了适用于 PHP 的 AWS V3 SDKaws.zip 文件,并将其解压缩到我的项目文件夹中,并将它的自动加载器连接到我的自动加载器中。我还完成了创建 AWS 帐户的所有步骤,以及设置 SNS,包括获取要使用的电话号码。所有示例工作都显示在健全性检查中。

有一个你应该知道的黑暗角落。您需要credentials在您的~/.aws/目录中创建一个文件。如果您在 php-fpm 上下文中使用它,则该主目录可能是您的/var/www/目录,因此您应该将凭据文件放在/var/www/.aws/.

可以在此处找到有关配置文件的更多信息... AWS 命令​​行界面 - 配置和凭证文件设置

完整性检查

遵循AWS SNS 文档中的示例- 发布到文本消息(SMS 消息)

测试-AWS-SNS.php

require 'vendor/autoload.php';

use Aws\Sns\SnsClient; 
use Aws\Exception\AwsException;

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$message = 'This message is sent from a Amazon SNS code sample.';
$phone = '+1AAALLL####';

try { …
Run Code Online (Sandbox Code Playgroud)

php amazon-web-services amazon-sns

1
推荐指数
1
解决办法
348
查看次数