Boto3介绍(AWS官方推出的Python SDK for AWS,用于操作AWS各种云服务)Botocore、awscli、bucket存储桶、DynamoDB
文章目录
- Python AWS SDK:Boto3 完全指南
- 什么是 Boto3?
- 为什么叫 Boto3?
- Boto3 能做什么?
- Boto3 架构
- 安装 Boto3
- AWS 凭证配置
- Boto3 两种核心接口
- client 示例
- resource 示例
- Client vs Resource
- S3 操作示例
- DynamoDB 示例
- EC2 示例
- Lambda 示例
- Session 概念
- 分页器(Paginator)
- Waiter(等待器)
- 异常处理
- IAM 权限的重要性
- 常见最佳实践
- Boto3 的底层:Botocore
- Boto3 的优势
- Boto3 的缺点
- 常见应用场景
- 与其他 AWS SDK 对比
- 学习路线推荐
- 总结
Python AWS SDK:Boto3 完全指南
在 Python 云原生开发领域,几乎绕不开一个名字:
Boto3
它是 Amazon Web Services 官方提供的 Python SDK,用于操作 AWS 的各种云服务。
无论是:
- 操作 S3 对象存储
- 启动 EC2 云服务器
- 管理 IAM 权限
- 调用 DynamoDB(亚马逊云科技(AWS)推出的一款完全托管的 NoSQL 数据库服务)
- 上传文件
- 管理 Lambda
- 自动化云资源
Boto3 都是 Python 开发者的核心工具。
什么是 Boto3?
Boto3 是 AWS 官方推出的:
Python SDK for AWS
它让 Python 程序可以直接调用 AWS API。
官方文档:
AWS 官网:
为什么叫 Boto3?
Boto 的历史:
| 名称 | 说明 |
|---|---|
| boto | 第一代 AWS Python SDK |
| boto2 | 第二代版本 |
| boto3 | 当前主流版本 |
现在 AWS 官方推荐全部使用:
- boto3
- botocore
旧版 boto 已逐渐淘汰。
Boto3 能做什么?
几乎所有 AWS 服务都能调用。
常见场景:
| AWS 服务 | 用途 |
|---|---|
| S3 | 对象存储 |
| EC2 | 云服务器 |
| Lambda | Serverless |
| DynamoDB | NoSQL 数据库 |
| IAM | 权限管理 |
| CloudWatch | 监控 |
| SNS(Simple Notification Service,简单通知服务) | 消息通知 |
| SQS | 消息队列 |
| EKS | Kubernetes |
| Secrets Manager | 密钥管理 |
Boto3 架构
Boto3 的核心结构:
Python App
↓
Boto3
↓
Botocore
↓
AWS REST API
其中:
| 组件 | 作用 |
|---|---|
| boto3 | 高级 SDK |
| botocore | 底层请求处理 |
| AWS API | 真正云服务接口 |
安装 Boto3
使用 pip:
pip install boto3
验证:
python -c "import boto3; print(boto3.__version__)"
AWS 凭证配置
Boto3 调用 AWS 必须具备认证信息。
常见配置方式:
方法一:AWS CLI 配置(推荐)
安装:
pip install awscli
配置:
aws configure
输入:
AWS Access Key ID
AWS Secret Access Key
Region
Output format
默认会生成:
~/.aws/credentials
~/.aws/config
方法二:环境变量
export AWS_ACCESS_KEY_ID=xxx
export AWS_SECRET_ACCESS_KEY=xxx
export AWS_DEFAULT_REGION=ap-southeast-1
方法三:代码中指定(不推荐)
import boto3
client = boto3.client(
"s3",
aws_access_key_id="xxx",
aws_secret_access_key="xxx"
)
生产环境通常不建议。
Boto3 两种核心接口
Boto3 有两个重要概念:
| 类型 | 特点 |
|---|---|
| client | 底层 API |
| resource | 高级对象封装 |
client 示例
创建 S3 Client
import boto3
s3 = boto3.client("s3")
上传文件:
s3.upload_file(
"demo.txt",
"my-bucket",
"demo.txt"
)
列出 Bucket:
response = s3.list_buckets()
for bucket in response["Buckets"]:
print(bucket["Name"])
注:bucket 是 Amazon S3(Simple Storage Service)中的一个“存储桶”(Bucket)对象,它是 AWS S3 中用于组织和存储对象(如文件)的逻辑容器。
resource 示例
import boto3
s3 = boto3.resource("s3")
遍历 Bucket:
for bucket in s3.buckets.all():
print(bucket.name)
Client vs Resource
| 对比 | client | resource |
|---|---|---|
| 抽象级别 | 低级 | 高级 |
| 灵活性 | 更强 | 更方便 |
| API 完整度 | 全部支持 | 部分服务支持 |
| 推荐场景 | 生产系统 | 快速开发 |
很多 AWS 新服务:
只提供 client。
因此:
实际生产里 client 更常见。
S3 操作示例
创建 Bucket
import boto3
s3 = boto3.client("s3")
s3.create_bucket(
Bucket="my-demo-bucket"
)
上传文件
s3.upload_file(
"photo.jpg",
"my-demo-bucket",
"images/photo.jpg"
)
下载文件
s3.download_file(
"my-demo-bucket",
"images/photo.jpg",
"local.jpg"
)
删除对象
s3.delete_object(
Bucket="my-demo-bucket",
Key="images/photo.jpg"
)
DynamoDB 示例
创建客户端
import boto3
dynamodb = boto3.resource("dynamodb")
获取表
table = dynamodb.Table("users")
写入数据
table.put_item(
Item={
"user_id": "1001",
"name": "Tom",
"age": 20
}
)
查询数据
response = table.get_item(
Key={
"user_id": "1001"
}
)
print(response["Item"])
EC2 示例
查看实例
import boto3
ec2 = boto3.client("ec2")
response = ec2.describe_instances()
print(response)
Lambda 示例
调用 Lambda
import boto3
import json
lambda_client = boto3.client("lambda")
response = lambda_client.invoke(
FunctionName="demo-function",
Payload=json.dumps({
"hello": "world"
})
)
print(response)
Session 概念
大型项目推荐使用 Session。
import boto3
session = boto3.Session(
profile_name="prod",
region_name="ap-southeast-1"
)
s3 = session.client("s3")
优势:
- 多账号切换
- 多 Region 管理
- 更清晰的权限隔离
分页器(Paginator)
AWS 很多 API 默认分页。
例如:
response = s3.list_objects_v2(
Bucket="demo"
)
数据可能不完整。
因此推荐:
paginator = s3.get_paginator("list_objects_v2")
pages = paginator.paginate(
Bucket="demo"
)
for page in pages:
for obj in page.get("Contents", []):
print(obj["Key"])
Waiter(等待器)
AWS 很多资源创建是异步的。
例如:
- EC2 启动
- RDS 创建
- ECS 部署
Waiter 可以等待状态完成。
waiter = ec2.get_waiter("instance_running")
waiter.wait(
InstanceIds=["i-123456"]
)
异常处理
Boto3 的异常很重要。
import botocore
try:
s3.create_bucket(Bucket="demo")
except botocore.exceptions.ClientError as e:
print(e)
IAM 权限的重要性
Boto3 的本质:
用程序调用 AWS API
因此权限控制非常关键。
推荐原则:
最小权限原则
不要直接:
AdministratorAccess
应该:
- 仅允许需要的 API
- 限制资源范围
- 限制 Region
常见最佳实践
使用 IAM Role
不要硬编码 AK/SK
AK/SK (Access Key/Secret Key) 是AWS的身份验证凭证,硬编码在代码中会带来严重的安全风险。
推荐的安全替代方案:
-
EC2 IAM Role - EC2 IAM角色:为EC2实例分配的IAM角色,允许实例上的应用程序安全地调用AWS服务,无需存储凭证
-
EKS IRSA - EKS IAM角色服务账户 (IAM Roles for Service Accounts):为Kubernetes服务账户分配IAM角色,使Pod能够获得临时安全凭证
-
ECS Task Role - ECS任务角色:为ECS任务定义的IAM角色,允许容器中的应用程序访问AWS服务
-
Lambda Execution Role - Lambda执行角色:为Lambda函数分配的IAM角色,提供函数执行时所需的权限
这些基于角色的方法使用临时安全凭证,大大提高了安全性,避免了长期凭证泄露的风险。
使用 Session
大型项目避免全局 client。
重试机制
AWS API 可能限流:
ThrottlingException
应做好:
- exponential backoff
- retry
使用连接池
高并发场景:
from botocore.config import Config
config = Config(
max_pool_connections=50
)
s3 = boto3.client(
"s3",
config=config
)
Boto3 的底层:Botocore
Boto3 实际依赖:
Botocore
Botocore 负责:
- 请求签名
- HTTP 请求
- Retry
- Endpoint
- 凭证加载
Boto3 的优势
AWS 官方支持
兼容性最好。
服务覆盖最全
AWS 新服务上线后:
Boto3 通常第一时间支持。
Python 生态集成好
适合:
- Flask
- Django
- FastAPI
- Airflow
- Celery
- 数据平台
- DevOps 自动化
Boto3 的缺点
学习曲线偏陡
AWS 服务本身复杂。
API 命名较长
例如:
describe_db_cluster_snapshots
非常 AWS 风格。
文档量巨大
AWS 文档非常庞大。
常见应用场景
DevOps 自动化
自动:
- 创建资源
- 部署系统
- 管理权限
数据平台
处理:
- S3
- Athena
- Glue
- Redshift
云原生系统
集成:
- Lambda
- EventBridge
- SQS
- SNS
AI/ML
调用:
- SageMaker
- Bedrock
- Rekognition
与其他 AWS SDK 对比
| SDK | 语言 |
|---|---|
| boto3 | Python |
| aws-sdk-js | JavaScript |
| aws-sdk-go-v2 | Go |
| aws-sdk-java-v2 | Java |
| aws-sdk-rust | Rust |
其中:
Boto3 是最流行 AWS SDK 之一。
学习路线推荐
建议顺序:
AWS 基础
↓
IAM 权限
↓
S3
↓
EC2
↓
Lambda
↓
DynamoDB
↓
自动化脚本
总结
Boto3 是 Python 世界操作 AWS 的标准方案。
它的核心价值:
- AWS 自动化
- 云资源管理
- DevOps
- Serverless
- 数据平台
- 云原生开发
可以理解为:
“Python 与 AWS 云平台之间的桥梁”
如果你正在:
- 学习 AWS
- 做云原生开发
- 构建自动化平台
- 编写运维脚本
- 开发 Serverless 系统
那么 Boto3 几乎是必学技能。
更多推荐

所有评论(0)