我想在AWS S3存储桶中设置以下事件/通知配置:收到文件(s3:ObjectCreated:*)后,将触发两个目标:
当我尝试通过AWS控制台设置配置时,我收到以下错误消息:
Configurations overlap. Configurations on the same bucket cannot share a common event type. : s3:ObjectCreated:*, s3:ObjectCreated:*
Run Code Online (Sandbox Code Playgroud)
我尝试按照用户指南的建议通过AWS SDK(Java)设置配置,但结果类似:
Caught an AmazonServiceException, which means your request made it to Amazon S3, but was rejected with an error response for some reason.
Error Message: Configurations overlap. Configurations on the same bucket cannot share a common event type. (Service: Amazon S3; Status Code: 400; Error Code: InvalidArgument; Request ID: A0E8738522EA218F)
HTTP Status Code: 400
AWS Error Code: InvalidArgument …Run Code Online (Sandbox Code Playgroud) 我正在寻求有关我正在使用产品做出的架构设计决策的帮助。
我们有多个生产者(由 API 网关调用 Lambda 启动)将消息放在 SQS 队列(请求队列)上。可以有多个同时调用,因此会有多个并行运行的 Lambda 实例。
然后我们有消费者(假设有 20 个 EC2 实例)在 SQS 上进行长轮询以获取消息以处理它们。它们每个需要大约 30-45 秒来处理一条消息。
理想情况下,我希望将响应发送回发出请求的生产者 - 这是我在 SQS 方面遇到的问题。理论上,我会有一个单独的响应队列,最初的 Lambda 生产者将使用它,但似乎没有办法挑选特定的相关响应。也就是说,每个 Lambda 函数可能会获取另一个函数的响应。我正在寻找类似于这种设计模式的东西:http : //soapatterns.org/design_patterns/asynchronous_queuing
我能看到的唯一选择是为每个 Lambda API 调用创建一个新的 SQS 响应队列,在消息中传递其 ARN 供消费者放置响应,但我无法想象这是非常有效的 - 特别是当有一分钟可能有数百条消息?我错过了一些明显的东西吗?
我想唯一的其他选择是设置更大的消息代理(例如 RabbitMQ/ApacheMQ)环境,但如果可能的话,我想避免这种情况。
谢谢!
AWS 文档一致指出,不应根据名称或 URL 以编程方式构建 ARN,因为不能保证这些字符串的构建方式在时间上保持不变。
我的问题是,在 SQS 上,GetQueueAttributes返回的 RedrivePolicy 属性仅引用 ARN 的死信队列。
我目前正在编写一个服务来创建队列并设置它们,或者验证它们的设置是否正确(如果它们已经存在)。但是我看不到验证死信队列 ARN 是否与现有队列匹配的方法,除非我确实解析它以获取名称。有没有办法解决这个问题?
(实际上,公平地说,有一种方法可以遵守“不以编程方式解析 ARN”规则,即调用ListQueues然后循环遍历结果 URL,在每个URL 上调用GetQueueAttributes,但这听起来很愚蠢,并且如果帐户上的队列超过 1000 个,则可能会失败,所以我不这样做)。
目前正在寻找 C# 中的解决方案,但该问题与语言无关。
我想将所有 SNS 消息保存到 S3,以便我可以保留完整的历史记录。目的是有能力在诊断和发布时回头看,稍后索引并使用它来审计,重放,重建数据等。现在,我只想将它们转储到S3(便宜),稍后我会在需要时深入研究它。
我可以使用 AWS 提供的集成来实现这一点,还是需要编写自己的 HTTP 服务或 Lambda?
如果可以避免,我宁愿不必编写和维护 lambda 或服务。
到目前为止,我所看到的是,我可以将HTTP 端点设置为 SNS 订阅者,但它的消息格式与S3 http api 不同,因此需要 lambda 来转换它。也是初始订户确认消息。这是不可能的,我应该开始使用我自己的服务/lambda 吗?
在flask应用程序中使用带有SQS的芹菜,
但芹菜同时接收相同的任务两次,任务ID相同,
像这样运行工人,
celery worker -A app.jobs.run -l info --pidfile=/var/run/celery/celery.pid --logfile=/var/log/celery/celery.log --time-limit=7200 --concurrency=8
这是芹菜的日志
[2019-11-29 08:07:35,464: INFO/MainProcess] Received task: app.jobs.booking.bookFlightTask[657985d5-c3a3-438d-a524-dbb129529443]
[2019-11-29 08:07:35,465: INFO/MainProcess] Received task: app.jobs.booking.bookFlightTask[657985d5-c3a3-438d-a524-dbb129529443]
[2019-11-29 08:07:35,471: WARNING/ForkPoolWorker-4] in booking funtion1
[2019-11-29 08:07:35,473: WARNING/ForkPoolWorker-3] in booking funtion1
[2019-11-29 08:07:35,537: WARNING/ForkPoolWorker-3] book_request_pp
[2019-11-29 08:07:35,543: WARNING/ForkPoolWorker-4] book_request_pp
Run Code Online (Sandbox Code Playgroud)
收到两次相同的任务,并且两者同时运行,
在 pyhton 烧瓶中使用 celery==4.4.0rc4、boto3==1.9.232、kombu==4.6.6 和 SQS。
在 SQS 中,默认可见性超时为 30 分钟,我的任务没有 ETA 也没有确认
我的任务.py
from app import app as flask_app
from app.jobs.run import capp
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy(flask_app) …Run Code Online (Sandbox Code Playgroud) 我正在使用 Amazon SQS 中的死信队列。我希望每当队列收到新消息时,它都应该引发 CloudWatch 警报。问题是我number_of_messages_sent在队列的指标上配置了一个警报:但是在Amazon SQS 死信队列 - Amazon Simple Queue Service文档中提到的死信队列的情况下,该指标无法按预期工作。
现在使用了一些关于此的建议,number_of_messages_visible但我不确定如何在警报中配置它。因此,如果我设置了 this 的值,metric>0那么这与在队列中获取新消息不同。如果存在旧消息,则度量值将始终为>0。我可以做某种数学表达式来在某个定义的时间段(假设一分钟)内获得此指标中的增量,但我正在寻找一些更好的解决方案。
我正在构建一个无服务器应用程序,它在资源中定义了一个 SQS 队列,如下所示:
resources:
Resources:
TheQueue:
Type: "AWS:SQS:Queue"
Properties:
QueueName: "TheQueue"
Run Code Online (Sandbox Code Playgroud)
我想从其中一个函数中向这个队列发送消息。如何从函数内部访问 URL?我想把它放在这里:
const params = {
MessageBody: 'message body here',
QueueUrl: 'WHATS_THE_URL_HERE',
DelaySeconds: 5
};
Run Code Online (Sandbox Code Playgroud) 假设:
当 Lambda 返回带有失败消息 ID 的部分批处理响应时,例如:
{
"batchItemFailures": [
{
"itemIdentifier": "d4c7c57f-c12c-4639-abe3-3a0d37690790"
}
]
}
Run Code Online (Sandbox Code Playgroud)
成功处理的消息将从队列中删除。但是,批次中失败的消息仍在等待可见性超时,而不是立即对消费者可见。失败消息的行为是否正确?或者让它们立即可见的唯一方法是调用 SQS API 并将可见性超时更改为 0?
batch-processing amazon-sqs amazon-web-services aws-lambda aws-sqs-fifo
我将制作集成亚马逊云服务的rails应用程序.
我想知道可行的方法是什么.
我正在尝试将AWS SQS FIFO服务与ElasticBeanstalk工作人员环境一起使用。
假设我使用发送了一条消息MessageDeduplicationId test,如果我在接下来的5分钟内继续发送此确切消息,该消息将被忽略,对吗?
如果我使用发送消息MessageDeduplicationId test,使用者处理该消息并将其删除,然后在大约1分钟内再次发送完全相同的消息,该怎么办。此消息会被忽略吗?
我的问题是,只要MessageDeduplicationId 队列/运行中仍存在重复数据删除,是否会发生重复数据删除?还是ID横幅永远存在,无法发送其他任何具有相同ID的消息。
谢谢。
amazon-sqs ×10
aws-lambda ×3
amazon-s3 ×2
amazon-sns ×2
aws-sqs-fifo ×1
c# ×1
celery ×1
celery-task ×1
duplicates ×1
flask ×1
java ×1
serverless ×1