AWS 消息队列服务 SQS

news2024/12/26 23:27:54

AWS 消息队列服务 SQS

  • 引言
  • 什么是 SQS
  • SQS 访问策略 Access Policy
  • 示例:如何为 DataLake Subscription 配置 SQS

引言

应用系统需要处理海量数据,数据发送方和数据消费方是通过什么方式来无缝集成消费数据的,AWS 提供 SQS 消息队列服务来解决这个无缝通讯问题,使得应用之间解耦,异步,可靠,灵活和可维护性。

什么是 SQS

AWS SQS(Amazon Simple Queue Service)是一种由 Amazon Web Services 提供的完全托管的消息队列服务。它允许分布式应用程序的各个组件之间异步传输消息,而无需丢失消息或需要其他服务始终可用。以下是 AWS SQS 的主要特点和功能:

  1. 消息队列
    发送和接收消息:SQS 允许应用程序组件之间通过消息队列进行通信。发送方将消息发送到队列中,接收方从队列中读取消息。
    消息持久性:消息在队列中保存直到它们被接收并删除。即使发送方或接收方出现故障,消息仍然存在。
  2. 两种队列类型
    标准队列:提供几乎无限的吞吐量,允许每秒处理大量消息。标准队列保证消息至少被处理一次,但可能偶尔会发生消息重复或顺序错乱。
    FIFO 队列(先入先出):确保消息按照发送的顺序严格处理且每条消息仅处理一次。适用于顺序处理非常重要的场景。
  3. 消息延迟
    SQS 支持对消息的发送进行延迟处理,允许消息在指定时间之后才变为可见。
  4. 自动扩展
    SQS 是一个完全托管的服务,可以根据流量自动扩展,不需要用户自行管理容量。
  5. 与其他 AWS 服务集成
    SQS 可以与许多 AWS 服务无缝集成,比如与 AWS Lambda 配合使用,实现无服务器计算;或与 Amazon S3、EC2 等结合,构建复杂的分布式系统。
    分离系统组件:通过将应用程序组件解耦,你可以在系统的各个部分之间创建一个异步的、可靠的通信机制,这有助于提高系统的灵活性和可维护性
  6. 消息处理
    SQS 提供了可调的消息保留时间(1 分钟到 14 天),以及消息可见性超时,用于控制消息在队列中的处理方式。
  7. 安全性
    SQS 支持通过 AWS Identity and Access Management (IAM) 控制对队列的访问权限,并支持加密,确保消息的安全传输和存储。
    AWS SQS 非常适用于需要解耦、扩展以及提高系统容错能力的场景,如订单处理系统、任务分配系统等。
  8. 成本效益:SQS 按需计费,你只需为你使用的消息量和请求付费,无需预付费用或长期承诺。

SQS 访问策略 Access Policy

在 AWS SQS 中,访问策略(Access Policy)用于控制对 SQS 队列的访问权限。访问策略可以定义谁(即哪些用户或服务)可以访问队列,以及他们能够执行的操作。访问策略是基于 JSON 格式的策略文档,通常通过 AWS Identity and Access Management (IAM) 实现。以下是有关 SQS 访问策略的主要概念和示例。

  1. 策略结构
    SQS 访问策略通常包括以下几个部分:
  • Version:指定策略语言的版本。
  • Id(可选):策略的唯一标识符。
  • Statement:一个或多个权限声明,定义允许或拒绝的操作。
    每个 Statement 通常包含以下元素:
  • Effect:指定是允许(Allow)还是拒绝(Deny)访问。
  • Action:指定允许或拒绝的具体操作(例如:sqs:SendMessage、sqs:ReceiveMessage)。
  • Resource:指定策略应用的资源,即具体的 SQS 队列 ARN。
  • Principal:指定可以执行操作的用户、角色或服务。
  • Condition(可选):指定进一步限制访问权限的条件。
  1. 常见操作
    sqs:SendMessage:允许用户发送消息到队列。
    sqs:ReceiveMessage:允许用户从队列接收消息。
    sqs:DeleteMessage:允许用户从队列中删除消息。
    sqs:GetQueueAttributes:允许用户获取队列属性。
  2. 示例策略
    以下是一个示例策略,允许某个特定的 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"
    }
  ]
}
  1. 条件(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"
        }
      }
    }
  ]
}
  1. 访问控制的最佳实践
    最小权限原则:只授予用户或服务所需的最低权限。
    使用 IAM Roles:在可能的情况下,使用 IAM 角色代替直接的用户访问,以提高安全性。
    定期审核策略:定期检查和更新策略,确保其符合当前的安全要求。
    通过访问策略,您可以精细地控制谁可以访问 SQS 队列及他们能够执行的操作,从而保障消息队列的安全性。

示例:如何为 DataLake Subscription 配置 SQS

要为 DataLake Subscription 配置 Amazon SQS,您需要执行以下步骤:

  • 创建 SQS 队列:首先,您需要在 AWS 管理控制台或使用 AWS SDK 创建一个 SQS 队列。
  • 配置 DataLake 订阅:将 DataLake 订阅配置为将事件发送到您创建的 SQS 队列。
  • 设置权限:确保 DataLake 有权限向您的 SQS 队列发送消息。

详细步骤

  1. 创建 一个 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}")
  1. 配置 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"
    ]
}
  1. 设置权限
    确保 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 队列。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2054804.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

42000 Star图标工具Mermaid!

Mermaid&#xff1a;用文本构建图表世界 - 精选真开源&#xff0c;释放新价值。 概览 Mermaid.js 是一个创新的开源工具&#xff0c;专为简化图表创建流程而设计。它通过一种简洁的文本描述语言&#xff0c;使得用户能够快速地生成流程图、序列图、甘特图等图表&#xff0c;而…

【威锋网-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

JavaEE过滤器的创建与使用过滤器的使用场景

过滤器 Filter也称之为过滤器&#xff0c;过滤器是javaEE规范肿定义的一种技术,可以让请求到达目标servlet之前,先进入到过滤器中,在过滤器中统一进行一些拦截处理,当处理完成后,可以继续向后执行,到达目标servlet,如果配置了多个过滤器,也可以进入下一个过滤器 创建过滤器 创…

一键更换Linux优质的软件源和docker源 —— 筑梦之路

一个非常牛逼的开源项目&#xff1a;https://github.com/SuperManito/LinuxMirrors.git LinuxMirrors 使换源更简单 - LinuxMirrors 支持的操作系统 系统名称适配版本Debian8.0 ~ 13Ubuntu14.04 ~ 24Kali Linux2.0 ~ 2024Linux Mint19.0 ~ 21 / LMDE 6DeepinallArmbianallP…

Redis7基础篇(一)

redis十大数据类型 目录 redis十大数据类型 redis键key 数据类型命令 redis字符串string 分布式锁 ​编辑 ​编辑​编辑应用场景 ​编辑​编辑 reids列表list 应用场景 redis哈希hash 应用场景 redis集合set 应用场景 redis有序集合zset&#xff08;sorted set集…

【设计模式】观察者模式和订阅发布模式

观察者模式 观察者模式包含观察目标和观察者两类对象。一个目标可以有任意数目的与之相依赖的观察者。一旦观察目标的状态发生改变&#xff0c;所有的观察者都将得到通知。 当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新&#xff0c;解决…

《机器学习》逻辑回归 梯度下降、混淆矩阵、随机种子、正则化惩罚 No.6

一、混淆矩阵 1、什么是混淆矩阵&#xff1f; 混淆矩阵是用于评估分类模型在不同类别上的预测准确性的工具。它提供了模型预测结果与真实结果之间的对应关系&#xff0c;帮助我们分析和理解模型的分类性能。 假设&#xff0c;要对15个人预测是否患病&#xff0c;使用1表示患病…

生产环境中MapReduce的最佳实践

目录 MapReduce跑的慢的原因 MapReduce常用调优参数 1. MapTask相关参数 2. ReduceTask相关参数 3. 总体调优参数 4. 其他重要参数 调优策略 MapReduce数据倾斜问题 1. 数据预处理 2. 自定义Partitioner 3. 调整Reduce任务数 4. 小文件问题处理 5. 二次排序 6. 使用…

【python与java的区别-03(集合、字典)】

一、Set python: 集合&#xff08;set&#xff09;是一个无序的不重复元素序列。 集合中的元素不会重复&#xff0c;并且可以进行交集、并集、差集等常见的集合操作。 可以使用大括号 { } 创建集合&#xff0c;元素之间用逗号 , 分隔&#xff0c; 或者也可以使用 set() 函数…

【解释器模式】设计模式系列:构建动态语言解释器与复杂表达式处理(深入理解并实现)

文章目录 深入理解并实现解释器模式1. 引言1.1 解释器模式的定义1.2 模式的主要优点和缺点1.3 适用场景1.4 实际应用案例简介 2. 解释器模式的基本概念2.1 模式的核心思想2.2 模式的角色2.3 模式的动态行为分析 3. 解释器模式的工作原理3.1 如何构建表达式树3.2 如何通过递归遍…

可达鸭举牌网页版本在线生成源码html5

源码介绍 可达鸭举牌网页版本&#xff0c;在线生成源码&#xff0c;点击分享即可制作DIY自己的举牌文字网页&#xff0c;需要GIF动图的自行用GIF图片录制工具录制下来。 PS:上传到服务器运行或者本地nginx运行&#xff0c;不要双击index.html&#xff0c;如果本地双击HTML&…

【3】AT32F437 OpenHarmony轻量系统第一个程序:点灯

在搭建好AT32F437 OpenHarmony 轻量系统之后&#xff0c;当然要尝试点一下灯了。 编写点灯程序 笔者在适配OpenHarmony轻量系统的时候&#xff0c;只对源码的device和vendor目录进行了修改&#xff0c;AT32的app目录笔者放置在了vendor/tree/master/artery/AT-START-F437/app…

什么是网络安全?网络安全防范技术包括哪些?

一、引言 在当今数字化的时代&#xff0c;网络已经成为人们生活和工作中不可或缺的一部分。然而&#xff0c;随着网络的普及和应用的广泛&#xff0c;网络安全问题也日益凸显。从个人隐私泄露到企业关键信息被盗&#xff0c;从网络欺诈到大规模的网络攻击&#xff0c;网络安全…

在国产芯片上实现YOLOv5/v8图像AI识别-【2.5】yolov8使用C++部署在RK3588更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案&#xff0c;专栏中实现了YOLOv5/v8在国产化芯片上的使用部署&#xff0c;并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频&#xff1a;https://www.bilibili.com/video/BV1or421T74f 背景…

ubuntu 安装两个nginx实例时的坑,非默认nginx实例配置修改总也不生效的问题

一、问题 由于工作需求xx云服务器上安装了两个nginx实例&#xff0c;突然有一天需要在非默认nginx上增加一个子站点&#xff0c;根据网上教程和原来的记录修改vi nginx.conf 后保存载总也不生效&#xff1f; 怎么破&#xff1f; 二、过程记录 假如&#xff1a;非默认nginx安装在…

HanLP分词的使用与注意事项

1 概述 HanLP是一个自然语言处理工具包&#xff0c;它提供的主要功能如下&#xff1a; 分词转化为拼音繁转简、简转繁提取关键词提取短语提取词语自动摘要依存文法分析 下面将介绍其分词功能的使用。 2 依赖 下面是依赖的jar包。 <dependency><groupId>com.ha…

使用SSH协议远程连接Ubuntu

1.切换到root用户 sudo -i 2.安装openssh-server apt update apt install openssh-server 3.启动ssh服务 service ssh start 4.查看ssh状态 &#xff08;q键: 退出&#xff09; service ssh status 5.检查ssh服务是否启动成功 ps -e | grep ssh 6.开机自启动 systemctl enable …

基于STM32F103的FreeRTOS系列(九)·任务创建函数的使用·静态方法和动态方法

目录 1. 前期准备 1.1 中断文件修改 1.2 SysTick文件修改 1.3 任务创建函数API 2. 任务创建&#xff08;静态方法&#xff09; 2.1 创建两个任务函数 2.2 静态创建开始任务函数 2.3 创建开始任务的任务函数 2.4 补充 2.5 代码 3. 任务创建&#xff08;动…

【python基础】—利用pandas读取或写入mysql表数据

文章目录 一、read_sql()二、to_sql()三、连接数据库方式—MySQL1、用sqlalchemy包构建数据库链接2、用DBAPI构建数据库链接 四、容易遇到的问题 一、read_sql() 功能 将 SQL 查询/数据库表读入 DataFrame。 语法 读取数据库&#xff08;通过SQL语句或表名&#xff09; pand…

【书生大模型实战营(暑假场)闯关材料】基础岛:第4关 InternLM + LlamaIndex RAG 实践

基础任务 (完成此任务即完成闯关) 任务要求&#xff1a; 基于 LlamaIndex 构建自己的 RAG 知识库&#xff0c;寻找一个问题 A 在使用 LlamaIndex之前InternLM2-Chat-1.8B模型不会回答&#xff0c;借助 LlamaIndex 后 InternLM2-Chat-1.8B模型具备回答 A 的能力&#xff0c;截图…