AWS SQS, Boto3 and Python:带示例的完整指南

boto3Python连接S3对象存储并进行文件操作(上传、下载、删除) 在日常进行数据高可用时,会将数据存入对象存储中。在一般的企业中,对象存储资源池只有管理员拥有Web界面管理,普通账号需要对数据进行管理时,有如下方法:,如对于S3对象存储有可以进行使用,其优点是操作简单,界面可视化;缺点是每次需要手动操作。,其优点是适合无法使用可视化界面的IT环境和可自动完成,缺点是需要自己编辑。 阅读详情

AWS Boto3 是 AWS 的 Python SDK。Boto3 可以直接在 Python 脚本中与 AWS 资源进行交互。在本教程中,我们将了解如何使用 Boto3 操作 AWS SQS。

先决条件

  • Python3
  • Boto3: Boto3 可以通过 pip 进行安装:pip install boto3
  • AWS Credentials: 如果你没有 AWS credentials,这些资源可以帮助到你。

如何使用 Boto3 创建一个 SQS 队列?

我们将使用 Boto3 中的 create_queue 方法创建一个新的 SQS 队列。此方法中有一些重要参数:

  • QueueName:将要创建的队列的名字
  • Attributes:指定队列的属性值。一些常用属性包括:
    • DelaySeconds:消息在消费之前的延迟时间。
    • RedrivePolicy:指定死信队列功能。
    • VisibilityTimeout:队列的可见性时间(秒)。指特定消息对单个消费者的可见时间段。

在接下来的实例中,我们将要创建一个名为 my-new-queue 的队列,其 DelaySeconds 设置为 0, VisibilityTimeout 设置为 60 秒。

def create_queue():
    sqs_client = boto3.client("sqs", region_name="us-west-2")
    response = sqs_client.create_queue(
        QueueName="my-new-queue",
        Attributes={
            "DelaySeconds": "0",
            "VisibilityTimeout": "60",  # 60 seconds
        }
    )
    print(response)

输出:

{'QueueUrl': 'https://us-west-2.queue.amazonaws.com/xxxx/my-new-queue', 'ResponseMetadata': {'RequestId': '91187b97-a624-5f94-988e-23c25057248f', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '91187b97-a624-5f94-988e-23c25057248f', 'date': 'Fri, 18 Dec 2020 00:13:39 GMT', 'content-type': 'text/xml', 'content-length': '334'}, 'RetryAttempts': 0}}

如何得到 SQS 队列的 URL?

大多数 SQS API 都需要 QueueUrl,因此我们可以使用 get_queue_url 方法通过 QueueName 来检索队列的 url。

def get_queue_url():
    sqs_client = boto3.client("sqs", region_name="us-west-2")
    response = sqs_client.get_queue_url(
        QueueName="my-new-queue",
    )
    return response["QueueUrl"]

输出:

https://us-west-2.queue.amazonaws.com/xxxx/my-new-queue

如何向 SQS 队列发送消息?

我们可以使用 Boto3 的 send_message 方法向 SQS 队列发送消息。使用此方法时需要记住的一些重要参数:

  • QueueUrl:目标队列的 URL
  • MessageBody:我们要发送的消息。消息需要序列化为 String。
def send_message():
    sqs_client = boto3.client("sqs", region_name="us-west-2")

    message = {"key": "value"}
    response = sqs_client.send_message(
        QueueUrl="https://us-west-2.queue.amazonaws.com/xxx/my-new-queue",
        MessageBody=json.dumps(message)
    )
    print(response)

输出:

{'MD5OfMessageBody': '88bac95f31528d13a072c05f2a1cf371', 'MessageId': '2ce1541b-0472-4715-8375-f8a8587c16e9', 'ResponseMetadata': {'RequestId': '02a7b659-c044-5357-885e-ee0c398e24b0', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '02a7b659-c044-5357-885e-ee0c398e24b0', 'date': 'Fri, 18 Dec 2020 00:27:54 GMT', 'content-type': 'text/xml', 'content-length': '378'}, 'RetryAttempts': 0}}

如何从 SQS 队列接收消息?

我们可以使用 Boto3 的 receive_message 方法丛 SQS 队列接收消息。使用此方法时需要记住的一些重要参数:

  • QueueUrl:目标队列的 URL
  • MaxNumberOfMessages:一次接收消息的最大数量。
  • WaitTimeSeconds:等待消息到达队列的时间。用于消息的长轮询。
def receive_message():
    sqs_client = boto3.client("sqs", region_name="us-west-2")
    response = sqs_client.receive_message(
        QueueUrl="https://us-west-2.queue.amazonaws.com/xxx/my-new-queue",
        MaxNumberOfMessages=1,
        WaitTimeSeconds=10,
    )

    print(f"Number of messages received: {len(response.get('Messages', []))}")

    for message in response.get("Messages", []):
        message_body = message["Body"]
        print(f"Message body: {json.loads(message_body)}")
        print(f"Receipt Handle: {message['ReceiptHandle']}")

输出:

Number of messages received: 1
Message body: {'key': 'value'}

如何从 SQS 队列删除消息?

重要的是,从 SQS 队列接收消息后,SQS 不会自动删除它。一旦 VisibilityTimeout 期限到期,任何其他消费者也可以检索相同的消息。为了确保没有其他使用者检索到相同的消息,需要在 VisibilityTimeout 时间段内将其删除。

我们可以使用 delete_message 从 SQS 队列中删除消息。

  • 我们需要提供 ReceiptHandle 作为 delete_message 方法的参数。
def delete_message(receipt_handle):
    sqs_client = boto3.client("sqs", region_name="us-west-2")
    response = sqs_client.delete_message(
        QueueUrl="https://us-west-2.queue.amazonaws.com/xxx/my-new-queue",
        ReceiptHandle=receipt_handle,
    )
    print(response)

输出:

{'ResponseMetadata': {'RequestId': 'd9a860cb-45ff-58ec-8232-389eb8d7c2c6', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'd9a860cb-45ff-58ec-8232-389eb8d7c2c6', 'date': 'Fri, 18 Dec 2020 00:42:16 GMT', 'content-type': 'text/xml', 'content-length': '215'}, 'RetryAttempts': 0}}

如何改变 SQS 队列的配置?

通常需要在创建队列后更改 SQS 属性,如 VisiblityTimeoutDelaySeconds。我们可以使用 set_queue_attributes 方法来更改属性。

def change_queue_attributes():
    sqs_client = boto3.client("sqs", region_name="us-west-2")
    response = sqs_client.set_queue_attributes(
        QueueUrl="https://us-west-2.queue.amazonaws.com/734066626836/my-new-queue",
        Attributes={
            "DelaySeconds": "10",
            "VisibilityTimeout": "300",
        }
    )
    print(response)

输出:

{'ResponseMetadata': {'RequestId': '89461462-8566-5a06-b9e8-4c377b18016f', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '89461462-8566-5a06-b9e8-4c377b18016f', 'date': 'Fri, 18 Dec 2020 00:47:59 GMT', 'content-type': 'text/xml', 'content-length': '225'}, 'RetryAttempts': 0}}

如何将 SQS 队列中的消息全部删除?

Boto3 提供了 purge_queue 方法从队列中删除所有的消息。

def purge_queue():
    sqs_client = boto3.client("sqs", region_name="us-west-2")
    response = sqs_client.purge_queue(
        QueueUrl="https://us-west-2.queue.amazonaws.com/xxx/my-new-queue",
    )
    print(response)
python boto3 的常用操作 安装 pip install boto3 配置 windows 在 C:\Users\%UserName%\ 文件夹下创建 .aws 文件夹 创建名为 credentials 的文件,内容为: [default] aws_access_key_id = YOUR ACCESSKEYID aws_secret_access_key = YOUR ACCESSKEY 创建名为 config 的文件,内容为: [default] region = YOUR REGION linux mkdir ~/.aw 阅读详情

相关推荐

Python Amazon Web Services编程库之boto3使用详解

Python boto3库是与AWS服务交互的强大工具,提供了全面且易于使用的API,涵盖了从基础设施管理到数据存储再到消息处理的各种AWS服务。通过其客户端和资源抽象,boto3使开发者能够以直观的方式访问AWS的丰富功能,简化了云应用程序的开发过程。无论是构建简单的脚本自动化日常任务,还是开发复杂的云原生应用,boto3都提供了必要的工具和灵活性。随着企业继续向云迁移,掌握boto3将成为Python开发人员的重要技能,能够充分利用AWS提供的强大云服务。

Rocky006的博客 1291

TradingAgents-CN完整教程:如何用AI智能体打造你的量化交易系统

你是否想将AI大模型技术应用到金融交易中,却苦于缺乏系统化的学习路径?TradingAgents-CN正是为你量身打造的解决方案。这个基于多智能体LLM的中文金融交易框架,将复杂的量化交易概念转化为可操作的学习工具,帮助你从零开始构建自己的智能交易系统。 ## 为什么选择TradingAgents-CN? 在金融科技快速发展的今天,传统交易策略面临巨大挑战。TradingAgents-CN通过

gitblog_00025的博客 601

Python抓取亚马逊云(AWS)的日志(CloudTrail)数据

如今是云的时代,许多公司都把自己的IT架构部署在基础架构云(IaaS)上。著名的IaaS提供商有亚马逊,微软(Azure),IBM等,国内也有诸如阿里云等。这里亚马逊毫无疑问是该市场的领军者。 AWS提供了非常多的服务,领先了竞争对手一大截。并且AWS提供非常丰富的API,其API基于Rest,所以很容易被不同的语言的平台来调用。 在如今的大数据时代,利用数据在做决策是大数据的核心价值,AWS

刚是程序员的博客 2569

老卫你学---python boto3操作S3保姆指南

在使用pythonboto3库进行s3的操作时,发现官方文档介绍的并不好用,并且搜了很多文章也不好用,那记录一下自己的经验,以备需要。

老卫带你学 807

boto3用法

aws是Amazon Web Service的简写,它包括众多服务,其中最有名的两个是EC2和S3。 S3是Simple Storage Service的简写,它是一种对象存储的实现。 安装和配置 安装boto3awscli:pip install boto3 awscli 配置awsaws configure 根据提示输入access_key_id, secret_access_k...

1万+

如何快速安装和配置botoAWS Python SDK完全指南

botoPython开发者与Amazon Web Services (AWS)交互的核心工具包,提供了简洁高效的API接口来管理和操作AWS云服务资源。本文将为你提供从安装到配置的完整流程,帮助你快速上手这个强大的AWS Python SDK。 ## 📦 两种简单安装方式 ### 1. 使用pip一键安装(推荐) 最快捷的安装方式是通过Python包管理工具pip: ```bash pip

gitblog_00166的博客 1128

python boto AWS SQS connection

AWS控制台与SQS通信很容易,要想在EC2上与SQS通信,要用到python的工具包boto,网上的很多教程我使用都多多少少有些错误,现将过程记录如下: 一.安装boto 首先确认安装了python $git clone git://github.com/boto/boto.git $cd boto $python setup.py install 如果提示没有安装git,$apt

酌希的专栏 3067

Boto3全面教程:常用 API 串联与实战指南

本文介绍了如何使用Boto3管理AWS服务。主要内容包括:1)环境准备,包括安装Boto3和配置AWS凭证;2)Boto3核心概念,区分Client和Resource两种操作方式;3)实战演示S3服务的基本操作,如桶管理、文件上传下载等。通过Python代码示例,帮助开发者快速掌握AWS资源的编程管理方法。

jobleap.cn求职助手首页 1407

boto3 - sqs - 发送/清除/接收/删除消息

import json import boto3 # 数据库连接/云服务 ============================================ AP_S3_AKI = 'xxx' AP_S3_SAK = 'xxx' AP_REGION_NAME = 'xxx' # 队列URL TEST_QUEUE_URL = 'https://sqs.xxx' sqs = boto3.client('sqs', region_name=AP_REGION_NAME, aws_access_ke.

SAGGITARXM 1053

aws python sdk send sns_AWS:boto3订阅SNS时的空SQS队列

通过boto3订阅SNS主题时,我的SQS队列中没有收到任何消息。在这是我使用的代码或API凭据的问题吗?与此帐户关联的IAM策略具有AWS PowerUser特权,这意味着它可以不受限制地访问SNS主题和SQS队列。在当我通过AWS控制台(createtopic,createqueue,subscribe queue to topic)创建等效结构并使用boto3awscli或AWS控制台发送...

weixin_29044713的博客 394

Boto3Python 操作 AWS 的官方 SDK

Boto3AWS官方维护的Python SDK,提供了访问AWS各项服务的原生接口。它简化了开发者对AWS服务(如S3、EC2、DynamoDB等)的操作,避免了直接使用REST API的复杂性。通过统一的接口风格,Boto3降低了学习成本,适用于文件存储、服务器管理、数据库操作等多种场景。安装简单,只需pip install boto3并配置凭证即可使用。Boto3自2015年发布以来一直由AWS官方维护,文档和社区支持成熟。开发者需注意Python版本的兼容性,推荐保持更新以获取最新特性和安全修复。

kernelcraft的博客 285

AWS SDK for Python (Boto3) 代码示例详解与使用指南

AWS SDK for Python (Boto3) 代码示例详解与使用指南 【免费下载链接】aws-doc-sdk-examples Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AW...

gitblog_00473的博客 640

一条命令生成全部类型存根:mypy_boto3_builder CLI 完全指南

在使用 boto3 开发 AWS 应用时,你是否遇到过 IDE 无法补全、mypy 报出大段 "Any" 警告的烦恼?mypy_boto3_builder 是一个自动生成 boto3 类型存根(Type Stubs)的开源工具,它通过 CLI 一条命令就能为全部 AWS 服务生成类型注解,兼容 VSCode、PyCharm、Emacs、Sublime Text、pyright 和 mypy,让你的

gitblog_01191的博客 1052

boto3 SQS消息处理:长轮询与死信队列配置

你是否还在为SQS消息处理延迟和失败消息堆积而烦恼?本文将详细介绍如何使用boto3配置SQS长轮询与死信队列,提升消息处理效率与可靠性。读完本文,你将掌握:长轮询三种配置方法、死信队列完整设置流程、消息处理最佳实践。 ## SQS消息处理痛点与解决方案 SQS(Simple Queue Service)作为AWS的托管消息队列服务,广泛用于分布式系统解耦。但默认配置下可能面临两大问题:频繁空...

gitblog_00695的博客 458

boto插件系统:扩展自定义AWS服务的完整指南

想要快速扩展AWS服务功能?boto插件系统是你的终极解决方案!作为Python连接亚马逊云服务的权威库,boto提供了强大的插件机制,让你能够轻松定制和扩展AWS服务能力。😊 ## 什么是boto插件系统? boto插件系统是一个基于Python的扩展框架,允许开发者创建自定义插件来增强AWS服务功能。通过简单的类继承机制,你可以为特定的AWS服务添加新功能或修改现有行为。 插件系统的核

gitblog_00226的博客 673

boto3

Role='arn:aws:iam::123456789012:role/lambda-role', # 替换为你的 IAM 角色 ARN。print(f"创建RDS实例: {response['DBInstance']['DBInstanceIdentifier']}")实例ID:", response['Instances'][0]['InstanceId'])print("EC2 实例创建成功,实例 ID:", response['Instances'][0]['InstanceId'])

shanlianbushiwod的博客 829
上一篇: 在 AWS lambda 上部署 docker 应用
下一篇: Docker - 发送 Container 日志到 AWS CloudWatch
Cao Lilu
博客等级 码龄14年 101粉丝 · 98原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值