标签: amazon-sns

当我尝试从两个不同的终端选项卡轮询相同的 Amazon SQS 时,我在两个选项卡中都没有收到相同的消息

我创建了一个 Amazon SNS 主题。我有一个订阅该主题的 Amazon SQS 队列。

我创建了一个默认的 SQS 队列(不是 FIFO 队列)。

我正在使用sqs-consumerAPI 来长轮询队列SQS

const app = Consumer.create({
    queueUrl: 'https://sqs.us-east-2.amazonaws.com/xxxxxxxxxxxx/xxxxxxxxxxx',
    handleMessage: async (message) => {

        console.log(message);
    },
    sqs: sqs//new AWS.SQS({apiVersion: '2012-11-05'})
});

app.on('error', (err) => {
    console.error(err.message);
});

app.on('processing_error', (err) => {
    console.error(err.message);
});

app.on('timeout_error', (err) => {
    console.error(err.message);
});

app.start();
Run Code Online (Sandbox Code Playgroud)

当我js通过执行以下操作从单个终端运行这段文件时node sqs_client.js,一切都工作得很好,消息也按正确的顺序发送。

但是,如果打开另一个终端窗口并运行node sqs_client.js,则传入消息的顺序变得非常随机。较新的消息可能以任何顺序进入第一终端窗口或第二终端窗口。

为什么会这样呢?有什么方法可以防止这种情况,以便我可以同时在两个终端窗口中收到相同的消息。

message-queue amazon-sqs amazon-web-services long-polling amazon-sns

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

如何使用 terraform 循环创建模板

我想通过基于列表变量(email_addresses)的 loping 使用 terraform template_file 创建 CFT。以下是我尝试生成的变量和模板。

variables:-

emails_addresses = ["sample-1@gmail.com", "sample-2@gmail.com"]
sns_arn = "arn:aws:sns:us-east-1:xxxxxx:xxxx"
protocol = "email"
Run Code Online (Sandbox Code Playgroud)

期待模板:

{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Resources": {
        "sample-1": {
            "Type": "AWS::SNS::Subscription",
            "Properties": {
                "Endpoint": "sample-1@gmail.com",
                "Protocol": "email",
                "TopicArn": "arn:aws:sns:us-east-1:xxxx:xxxxx"
            }
        },
        "sample-2": {
            "Type": "AWS::SNS::Subscription",
            "Properties": {
                "Endpoint": "sample-2@gmil.com",
                "Protocol": "email",
                "TopicArn": "arn:aws:sns:us-east-1:xxx:xxxx"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

CFT 中的资源名称可以是一些随机字符串,但在多个计划/应用的情况下,每个邮件应该相同。

amazon-web-services amazon-sns terraform terraform-provider-aws

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

AWS SNS 主题子:死信队列(重新驱动策略)权限被拒绝

我有一个 SNS 主题和订阅(实际上超过 1 个)设置来使用 SQS DLQ。然而,每个人都告诉我,我有一个政策错误。

在此输入图像描述

我的 SNS 订阅设置了 DLQ:

在此输入图像描述

我的队列存在:

在此输入图像描述

我在 SQS 队列上设置了以下访问策略:

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__owner_statement",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::1234:root"
      },
      "Action": "SQS:*",
      "Resource": "arn:aws:sqs:eu-west-2:1234:AggregateMonitoringDeadLetterQueue"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "sns.amazonaws.com"
      },
      "Action": "SQS:SendMessage",
      "Resource": "arn:aws:sqs:eu-west-2:1234:AggregateMonitoringDeadLetterQueue",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": [
            "arn:aws:sns:eu-west-2:1234:aggregator-state",
            "arn:aws:sns:eu-west-2:1234:rank-state-publication",
            "arn:aws:sns:eu-west-2:1234:rank-state-categorisation"
          ]
        }
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我还尝试在队列上采用真正通用的访问策略:

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__owner_statement",
      "Effect": "Allow",
      "Principal": {
        "AWS": …
Run Code Online (Sandbox Code Playgroud)

amazon-sqs amazon-web-services dead-letter amazon-sns

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

Pandas:显示整行而不截断

我有一个 python 脚本,可以在使用 AWS SNS 失败时发送电子邮件。我遇到数据帧被截断的问题,并且我不确定如何显示整个线程。我尝试过使用 pandasset_option但似乎没有任何效果。

有没有办法打印出整个数据框并显示整行?

这是代码的一小段:

import pandas as pd
import boto3
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)

session = boto3.Session()
sns = session.client('sns', region_name='us-east-1')

d = {'failed_runs':['296e62fb-1bc2-4e27-8d69-4a2267237698 - FAILED-GSN-INTO', '92b15078-1fcc-41f0-bc20-d933becf23bf - FAILED-ESP2-INTO', 'b04460ef-32a7-403a-8fbe-468effed7f2b - FAILED-HLN-INTO']}

df = pd.DataFrame(d)

response = sns.publish(TopicArn="arn:aws:sns:xxxxxxxxx",
                       Message="""
        Daily Digest for Failed Runs
        ------------------------------------------------------------------------------------

        {}

        ------------------------------------------------------------------------------------


        """.format(df))
Run Code Online (Sandbox Code Playgroud)

这给了我一封类似的电子邮件:

       Daily Digest for Failed Runs
       ------------------------------------------------------------------------------------

                                                  failed_runs
0   296e62fb-1bc2-4e27-8d69-4a2267237698 - FAILED-...
1   92b15078-1fcc-41f0-bc20-d933becf23bf - FAILED-...
2   b04460ef-32a7-403a-8fbe-468effed7f2b - FAILED-...
Run Code Online (Sandbox Code Playgroud)

python amazon-sns pandas

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

AWS SQS 和 SNS 中的消息结构

我有一个t1订阅到 SQS 队列的SNS 主题q1。我有一个p1发布到 的NodeJS 进程,从 订阅的t1进程。我还有一个直接写入的进程。p2q1p3q1

假设从队列读取data时填充。p2然后,当以下代码片段p1作为队列的编写器使用时,我收到一个 JSON 解析器错误p3

for (var i = 0; i < data.Messages.length; i++) {
 var message = data.Messages[i];
 let messageBody = JSON.parse(message.Body)
 let payload = JSON.parse(messageBody.Message)
Run Code Online (Sandbox Code Playgroud)

我处理p3工作数据的唯一方法就是直接JSON.parse(messageBody.Message)处理messageBody。因此,如果写入者是 SNS 主题订阅或 SQS 写入者,则队列中接收到的消息结构似乎会有所不同。

您能告诉我是否可以有一个 NodeJS 应用程序可以处理来自 SQS 的数据,无论该队列中写入了什么内容?

publish-subscribe amazon-sqs amazon-web-services node.js amazon-sns

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

新的 SQS 订阅具有导致问题的“订阅主体”

我正在开发一个使用 NServicebus 将消息发布到 AWS SQS 队列的项目。

NServicebus 具有一项功能,可以在您运行应用程序时为您构建队列、主题和订阅。我的大多数队列/主题/订阅都是通过这种方式创建的。

有一个队列不是以这种方式创建的,因此我之前手动创建了它以及与之配套的主题和订阅。

我正在扩展此现有设置以接受新的消息类型。因此,NServicebus 添加了新的主题和订阅来与现有队列配合使用。

当我要添加手动主题和订阅以使用手动队列时,我按照以前的方式进行了操作。但是,现在消息没有进入队列。

我开始寻找这次我可能做错了什么/不同的地方。我发现只有一处不同。现在,当查看订阅的详细信息时,我在新的订阅中看到“订阅主体”,但在旧的订阅中却看不到。

新的:

新订阅详情

老的:

旧订阅详细信息

深入研究这一点,我发现新创建的 NServicebus 订阅和手动创建的订阅主体是不同的。我猜测这是消息未到达队列的原因。

但为什么几个月前还没有发生这种情况,现在却发生了呢?SQS 是否改变了订阅的运作方式?如果是这样,有没有办法像以前一样?也许是某个地方的设置?

nservicebus amazon-sqs amazon-sns

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

Amazon SNS Python Boto - 如何创建要发送的消息

我正在使用SNS将消息从一个服务器发送到另一个服务器.我想创建一个消息,使用Python和Boto发送到其他服务器,所以我想知道是否有人可以查看此代码旨在发送消息"刮":

import boto
sns = boto.connect_sns()

# Create Topic
t = sns.create_topic("scraped")
t
{u'CreateTopicResponse': {u'ResponseMetadata': {u'RequestId': u''}, u'CreateTopicResult': {u'TopicArn': u'arn:aws:sns:us-east-1:your-account-id:Test'}}}
Run Code Online (Sandbox Code Playgroud)

然后另一方面,我想要一些代码在第二台服务器上检查此消息,所以我有这样的事情:

import boto
sns = boto.connect_sns()

# Read Topics
sns.get_all_topics()
{u'ListTopicsResponse': {u'ResponseMetadata': {u'RequestId': u''}, u'ListTopicsResult': {u'Topics': [{u'TopicArn': u'arn:aws:sns:us-east-1:your-account-id:Test'}], u'NextToken': None}}}
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是,我有没有正确的结束?这对我来说是一个全新的概念,我很难理解它.

我的第二个问题是为了检查我是否每隔5分左右在python检查脚本上运行一个cronjob?

python linux debian amazon-web-services amazon-sns

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

通过AWS Java SDK发送带有声音的iOS的SNS(AWS)消息应该是什么Json字符串?

我绝对打破了我的脑袋.我有代码,用于发送iOS的SNS(AWS):

PublishRequest publishRequest = new PublishRequest("arn:aws:sns:us-east-1:my:topic", messageBody);
Run Code Online (Sandbox Code Playgroud)

当我像这样经过Json时,它工作正常:

{"message": "ldjldkjlk"}
Run Code Online (Sandbox Code Playgroud)

但我当然需要声音通知我,没有什么对我有用.我尝试使用Json,当我将它传递给SNS GUI时,它就是这样的:

{"message": { 
    "default": "HERE IS AN ALERT, BADGE, and SOUND",
    "APNS_SANDBOX": "{\"aps\": {\"alert\":\"HERE IS AN ALERT, BADGE, and SOUND!\",\"badge\": 1,\"sound\":\"bingbong.aiff\"}}"
}}
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

{"timestamp":1435334944602,"status":400,"error":"Bad Request","exception":"org.springframework.http.converter.HttpMessageNotReadableException","message":"Could not read JSON: Can not deserialize instance of java.lang.String out of START_OBJECT token\n at [Source: java.io.PushbackInputStream@2db14d22; line: 1, column: 15]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token\n at [Source: java.io.PushbackInputStream@2db14d22; line: 1, column: 15]","path":"/sns/send"}
Run Code Online (Sandbox Code Playgroud)

他们用PublishRequest做了什么?我应该通过什么?如果有人帮助我会很棒!

java amazon-web-services apple-push-notifications amazon-sns ios

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

授予AWS Lambda列出所有SNS主题的权限

我有一个cloudformation模板来创建lambda函数和SNS主题。lambda函数执行一些处理,然后将结果发布到SNS主题。

要获取SNS主题的ARN,我正在使用该boto3.client('sns').list_topics()函数,然后搜索在模板中设置的SNS主题名称。

但是调用list_topics()API会给我以下错误:

An error occurred (AuthorizationError) when calling the ListTopics operation: User: arn:aws:sts::136732452473:assumed-role/test/severless-btc-update-PriceUpdateFunction-B38KNZMCBGB is not authorized to perform: SNS:ListTopics on resource: arn:aws:sns:eu-west-1:136732452473:*

如何在Cloudformation模板YAML文件中向我的lambda资源添加ListTopics权限?

这是我的cloudformation.yaml文件:

AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Description: Bitcoin daily update


Parameters:
  PhoneNumber:
    Type: String
    Description: The phone number recipient of the update, in E.164 (e.g. +919876123456) format.
  UTCHour:
    Type: String
    Default: 3
    Description: The hour at which to send the update, in the UTC time zone.

Resources:
  PriceUpdateFunction:
    Type: AWS::Serverless::Function
    Properties: …
Run Code Online (Sandbox Code Playgroud)

python amazon-web-services amazon-sns boto3 aws-lambda

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

为什么在创建预算警报时收到无效的SNS主题ARN

我只是尝试设置预算警报购买,当尝试为警报指定SNS ARN 时收到错误Invalid SNS topic ARN

我遵循以下步骤:

  1. 使用SMS作为协议创建了一个新的SNS主题。
  2. 创建了对该主题的订阅(美国电话号码)。
  3. 通过发送文本测试订阅(此方法有效)。
  4. 在AWS SNS的“主题”部分的“ ARN”列下复制了ARN
  5. 选中通过Amazon Simple Notification Service(SNS)主题进行通知,并从#4输入ARN。
  6. ARN复制并粘贴到该字段后,立即在SNS主题ARN字段旁边收到错误Invalid SNS主题ARN

这是怎么回事?我知道它是正确的ARN,因为我直接从控制台复制了它。而且,据我了解,尽管SNS主题是相关的,但预算及其警报并不局限于特定区域(该主题位于us-east-2 N. Virginia)。

如果您需要更多详细信息,请告诉我。

amazon-web-services amazon-sns

2
推荐指数
2
解决办法
2108
查看次数