AWS 消息队列服务 SQS
AWS 消息队列服务 SQS
- 引言
- 什么是 SQS
- SQS 访问策略 Access Policy
- 示例:如何为 DataLake Subscription 配置 SQS
引言
应用系统需要处理海量数据,数据发送方和数据消费方是通过什么方式来无缝集成消费数据的,AWS 提供 SQS 消息队列服务来解决这个无缝通讯问题,使得应用之间解耦,异步,可靠,灵活和可维护性。
什么是 SQS
AWS SQS(Amazon Simple Queue Service)是一种由 Amazon Web Services 提供的完全托管的消息队列服务。它允许分布式应用程序的各个组件之间异步传输消息,而无需丢失消息或需要其他服务始终可用。以下是 AWS SQS 的主要特点和功能:
- 消息队列
发送和接收消息:SQS 允许应用程序组件之间通过消息队列进行通信。发送方将消息发送到队列中,接收方从队列中读取消息。
消息持久性:消息在队列中保存直到它们被接收并删除。即使发送方或接收方出现故障,消息仍然存在。 - 两种队列类型
标准队列:提供几乎无限的吞吐量,允许每秒处理大量消息。标准队列保证消息至少被处理一次,但可能偶尔会发生消息重复或顺序错乱。
FIFO 队列(先入先出):确保消息按照发送的顺序严格处理且每条消息仅处理一次。适用于顺序处理非常重要的场景。 - 消息延迟
SQS 支持对消息的发送进行延迟处理,允许消息在指定时间之后才变为可见。 - 自动扩展
SQS 是一个完全托管的服务,可以根据流量自动扩展,不需要用户自行管理容量。 - 与其他 AWS 服务集成
SQS 可以与许多 AWS 服务无缝集成,比如与 AWS Lambda 配合使用,实现无服务器计算;或与 Amazon S3、EC2 等结合,构建复杂的分布式系统。
分离系统组件:通过将应用程序组件解耦,你可以在系统的各个部分之间创建一个异步的、可靠的通信机制,这有助于提高系统的灵活性和可维护性 - 消息处理
SQS 提供了可调的消息保留时间(1 分钟到 14 天),以及消息可见性超时,用于控制消息在队列中的处理方式。 - 安全性
SQS 支持通过 AWS Identity and Access Management (IAM) 控制对队列的访问权限,并支持加密,确保消息的安全传输和存储。
AWS SQS 非常适用于需要解耦、扩展以及提高系统容错能力的场景,如订单处理系统、任务分配系统等。 - 成本效益:SQS 按需计费,你只需为你使用的消息量和请求付费,无需预付费用或长期承诺。
SQS 访问策略 Access Policy
在 AWS SQS 中,访问策略(Access Policy)用于控制对 SQS 队列的访问权限。访问策略可以定义谁(即哪些用户或服务)可以访问队列,以及他们能够执行的操作。访问策略是基于 JSON 格式的策略文档,通常通过 AWS Identity and Access Management (IAM) 实现。以下是有关 SQS 访问策略的主要概念和示例。
- 策略结构
SQS 访问策略通常包括以下几个部分:
- Version:指定策略语言的版本。
- Id(可选):策略的唯一标识符。
- Statement:一个或多个权限声明,定义允许或拒绝的操作。
每个 Statement 通常包含以下元素: - Effect:指定是允许(Allow)还是拒绝(Deny)访问。
- Action:指定允许或拒绝的具体操作(例如:sqs:SendMessage、sqs:ReceiveMessage)。
- Resource:指定策略应用的资源,即具体的 SQS 队列 ARN。
- Principal:指定可以执行操作的用户、角色或服务。
- Condition(可选):指定进一步限制访问权限的条件。
- 常见操作
sqs:SendMessage:允许用户发送消息到队列。
sqs:ReceiveMessage:允许用户从队列接收消息。
sqs:DeleteMessage:允许用户从队列中删除消息。
sqs:GetQueueAttributes:允许用户获取队列属性。 - 示例策略
以下是一个示例策略,允许某个特定的 AWS 账户 ID(111122223333)向特定的 SQS 队列发送消息。
{"Version": "2012-10-17","Id": "ExamplePolicy","Statement": [{"Effect": "Allow","Principal": {"AWS": "arn:aws:iam::111122223333:root"},"Action": "sqs:SendMessage","Resource": "arn:aws:sqs:us-east-1:444455556666:MyQueue"}]
}
- 条件(Conditions)
条件语句可以用来进一步限定访问权限。例如,您可以指定允许访问的时间段、来源 IP 地址,或者要求使用 HTTPS 来进行请求。
下面是一个包含条件的策略示例,它只允许从指定的 IP 地址范围内访问 SQS 队列:
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": "*","Action": "sqs:SendMessage","Resource": "arn:aws:sqs:us-east-1:444455556666:MyQueue","Condition": {"IpAddress": {"aws:SourceIp": "192.168.1.0/24"}}}]
}
- 访问控制的最佳实践
最小权限原则:只授予用户或服务所需的最低权限。
使用 IAM Roles:在可能的情况下,使用 IAM 角色代替直接的用户访问,以提高安全性。
定期审核策略:定期检查和更新策略,确保其符合当前的安全要求。
通过访问策略,您可以精细地控制谁可以访问 SQS 队列及他们能够执行的操作,从而保障消息队列的安全性。
示例:如何为 DataLake Subscription 配置 SQS
要为 DataLake Subscription 配置 Amazon SQS,您需要执行以下步骤:
- 创建 SQS 队列:首先,您需要在 AWS 管理控制台或使用 AWS SDK 创建一个 SQS 队列。
- 配置 DataLake 订阅:将 DataLake 订阅配置为将事件发送到您创建的 SQS 队列。
- 设置权限:确保 DataLake 有权限向您的 SQS 队列发送消息。
详细步骤
- 创建 一个 standard SQS 队列
使用 AWS 管理控制台利用 CloudFormation 或 AWS SDK 创建一个新的 SQS 队列。
import boto3# 创建 SQS 客户端
sqs = boto3.client('sqs')# 创建队列
response = sqs.create_queue(QueueName='MyDataLakeQueue',Attributes={'DelaySeconds': '0','MessageRetentionPeriod': '86400'}
)queue_url = response['QueueUrl']
print(f"Queue created: {queue_url}")
- 配置 DataLake 订阅
导航到 DataLake 服务并创建和配置一个订阅,将事件发送到您创建的 SQS 队列。
例如下面创建一个订阅,所有 collection “SMOKE2” 的 Create 事件都会发送到 target 为 arn:aws:sqs:us-east-1:123456789012:MyDataLakeQueue 的 SQS 队列
{"subscription-name": "my-userdoc-subscriptionsqs","filter": {"event-name": ["Object::Create"],"collection-id": ["SMOKE2"]},"targets": [{"type": "sqs","value": "arn:aws:sqs:us-east-1:123456789012:MyDataLakeQueue"}],"schema-version": ["v2"]
}
- 设置权限
确保 DataLake 有权限向您的 SQS 队列发送消息。您需要为 SQS 队列配置适当的访问策略。
例如下面配置只有来自这个 resource “arn:aws:iam::123456789012:role/release-DataLake-EventPublish” 才有权限发送到这个 SQS。
{"Id": "AllowDataLakeEventsAccess","Version": "2012-10-17","Statement": [{"Sid": "AllowDataLakeEventsAccess","Effect": "Allow","Principal": {"AWS": "*"},"Action": "sqs:SendMessage","Resource": "<EndpointARN>","Condition": {"ArnEquals": {"aws:PrincipalArn": ["arn:aws:iam::123456789012:role/release-DataLake-EventPublish"]}}}]
}
将上述策略附加到您的 SQS 队列。您可以在 AWS 管理控制台中编辑队列的访问策略,或者使用 AWS SDK 更新队列的访问策略。

完成这些步骤后,您的 DataLake 订阅将被配置为将事件发送到指定的 SQS 队列。
相关文章:
AWS 消息队列服务 SQS
AWS 消息队列服务 SQS 引言什么是 SQSSQS 访问策略 Access Policy示例:如何为 DataLake Subscription 配置 SQS 引言 应用系统需要处理海量数据,数据发送方和数据消费方是通过什么方式来无缝集成消费数据的,AWS 提供 SQS 消息队列服务来解决…...
【iOS】——响应者链和事件传递链
事件传递 事件传递流程 发生触摸事件后,系统会将该事件封装成UIEvent对象加入到一个由UIApplication管理的事件队列 UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常,先发送事件给应用程序的主窗口…...
mysql查询慢
可能是连接数,或者缓存不够,可尝试添加如下参数,重启mysql [mysqld] max_connections50000 interactive_timeout604800 lock_wait_timeout600 wait_timeout604800 net_read_timeout604800 log-error/var/lib/mysql/mysqld.log slow_qu…...
【Java-==与equals】
与equals区别: 1.是关系运算符,equals()是0bject类中定义的方法 2.基本数据类型: 使用比较值,无法使用equals() 3.引用数据类型: 使用比较内存地址; 如果没有重写equals(),仍然调用的是0bject父类的equals(()方法,则比较的是内…...
ai回答 部署前端项目时需要使用ssh吗
SSH(Secure Shell)是一种网络协议,用于在不安全的网络上安全地访问远程计算机。SSH 提供了加密的命令行登录到远程计算机的功能,以及远程命令执行和其他服务。它常用于系统管理员管理服务器、开发者进行远程开发、用户通过终端访问…...
结合ChatGPT与Discord,提高团队合作效率
本文将教你如何集成Discord Bot,助力团队在工作中实现更高效的沟通与协作。通过充分发挥ChatGPT的潜力,进一步提升工作效率和团队协作能力。无需编写任何代码即可完成本文所述的操作,进行个性化定制只需对参数进行微调即可。 方案介绍 如果在…...
VisualStudio|开发环境相关技巧及问题
哈喽,你好啊,我是雷工! 本节继续学习VisualStudio相关内容,以前学习都是以能用为主,没有系统的学习,接下来会系统的学习相关内容, 以下为学习笔记。 01 第三方dll调用 ①:如果第三…...
Redis远程字典服务器(11)—— redis客户端介绍
一,基本介绍 前面学习的主要是各种Redis的基本操作/命令,都是再Redis命令行客户端,手动执行的,但是这种方式不是我们日常开发中主要的形式更多的时候,是使用Redis的api,来实现定制化的Redis客户端程序&…...
【mysql】mysql之DDL数据定义语言
本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…...
Word文件密码忘记,该如何才能编辑Word文件呢?
Word文件打开之后,发现编辑功能都是灰色的,无法使用,无法编辑,遇到这种情况,是因为Word文件设置了限制编辑导致的。一般情况下,我们只需要输入Word密码,将限制编辑取消就可以正常编辑文件了&…...
解锁移动办公新境界,七款顶尖移动终端管控软件分享!助您轻松掌控每一台移动设备,企业必备!
移动办公,它不仅打破了时间和空间的限制,提高了工作效率,还为员工创造了更加灵活的工作环境。然而,随着移动设备的普及,如何有效管理和控制这些终端,确保信息安全、提升工作效率呢? 今天&#…...
基于微信小程序的大用户心理咨询系统设计与实现---附源码99040
目录 1 绪论 1.1 研究背景 1.2研究现状 1.3论文结构与章节安排 2 基于微信小程序的大用户心理咨询系统设计与实现分析 2.1 可行性分析 2.2 系统功能分析 2.3 系统用例分析 2.4 系统流程分析 2.5本章小结 3 基于微信小程序的大用户心理咨询系统设计与实现总体设计 3.…...
Bigtop 从0开始(上)
本文作者:蔡佳良 原文阅读:【巨人肩膀社区博客分享】Bigtop 从0开始 BigTop的应用场景: 1. BigTop通过提供预配置的Docker镜像,极大简化了在不同操作系统上编译大数据组件的rpm或deb包的过程,使之变得快捷且高效。 …...
算法基础及例题
1、双指针 维护区间信息、子序列匹配、利用序列有序性、单项链表找环双指针 - OI Wiki (oi-wiki.org) 盛最多水的容器https://leetcode.cn/problems/container-with-most-water/ public class Solution {public int maxArea(int[] height) {int l 0, r height.length - 1;int…...
机器学习-KNN 算法
一.K-近邻(KNN) K-近邻(K-Nearest Neighbors, 简称 KNN)是一种基于实例的学习算法,主要用于分类和回归问题。KNN 的工作原理直观且简单,它基于相似性进行预测,也就是说给定一个新的数据点,KNN 算法会查找距…...
【Linux】如何快速查看 linux 服务器有几个cpu
如何快速查看 linux 服务器有几个cpu author: jayzhen date: 2024.08.22 文章目录 如何快速查看 linux 服务器有几个cpu1. 使用lscpu命令2. 使用nproc命令3. 使用/proc/cpuinfo文件4. 使用top或htop命令结论 在Linux服务器上,你可以通过多种方式快速查看系统中有几个…...
[数据集][目标检测]电力场景轭式悬架锈蚀分类数据集6351张2类别
数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):6351 分类类别数:2 类别名称[corrosion,good] 每个类别图片数: corrosion 图片数:310 good 图片数:6041 …...
【嵌入式linux开发】智能家居入门5:老版ONENET,多协议接入(QT、微信小程序、HTTP协议、ONENET云平台、旭日x3派)
智能家居入门5(QT、微信小程序、HTTP协议、ONENET云平台、旭日x3派) 前言一、QT界面设计二、云平台产品创建与连接三、下位机端QT代码总览:四、微信小程序端代码总览五、板端测试 前言 前四篇智能家居相关文章都是使用STM32作为主控…...
软考-软件设计师(程序设计语言习题)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...
「C++系列」vector 容器
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能教程 文章目录 一、vector 容器1. 基本特性2. 基本操作3. 注意事项 二、应用场景1. 应用场景2. 案例案例一࿱…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
