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. 案例案例一࿱…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
