我创建了一个 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
我想通过基于列表变量(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
我有一个 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) 我有一个 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) 我有一个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
我正在开发一个使用 NServicebus 将消息发布到 AWS SQS 队列的项目。
NServicebus 具有一项功能,可以在您运行应用程序时为您构建队列、主题和订阅。我的大多数队列/主题/订阅都是通过这种方式创建的。
有一个队列不是以这种方式创建的,因此我之前手动创建了它以及与之配套的主题和订阅。
我正在扩展此现有设置以接受新的消息类型。因此,NServicebus 添加了新的主题和订阅来与现有队列配合使用。
当我要添加手动主题和订阅以使用手动队列时,我按照以前的方式进行了操作。但是,现在消息没有进入队列。
我开始寻找这次我可能做错了什么/不同的地方。我发现只有一处不同。现在,当查看订阅的详细信息时,我在新的订阅中看到“订阅主体”,但在旧的订阅中却看不到。
新的:
老的:
深入研究这一点,我发现新创建的 NServicebus 订阅和手动创建的订阅主体是不同的。我猜测这是消息未到达队列的原因。
但为什么几个月前还没有发生这种情况,现在却发生了呢?SQS 是否改变了订阅的运作方式?如果是这样,有没有办法像以前一样?也许是某个地方的设置?
我正在使用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?
我绝对打破了我的脑袋.我有代码,用于发送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
我有一个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) 我只是尝试设置预算警报购买,当尝试为警报指定SNS ARN 时收到错误Invalid SNS topic ARN。
我遵循以下步骤:
这是怎么回事?我知道它是正确的ARN,因为我直接从控制台复制了它。而且,据我了解,尽管SNS主题是相关的,但预算及其警报并不局限于特定区域(该主题位于us-east-2 N. Virginia)。
如果您需要更多详细信息,请告诉我。
amazon-sns ×10
amazon-sqs ×4
python ×3
aws-lambda ×1
boto3 ×1
dead-letter ×1
debian ×1
ios ×1
java ×1
linux ×1
long-polling ×1
node.js ×1
nservicebus ×1
pandas ×1
terraform ×1