亚马逊网络服务(AWS)提供的S3是一种对象存储服务,它允许用户快速、安全地从任何地方存储和检索文件。用户可以将S3与其他服务结合,构建多种可扩展的应用。Boto是AWS的Python软件开发工具包(SDK),包括Boto2、Boto3和Botocore等不同版本。Boto3是SDK的最新版本,它是Boto的全面重写。通过boto3 Python库,用户可以连接到Amazon服务(包括S3),并在AWS内部使用资源。它帮助开发者创建、配置和管理AWS服务,使其易于与Python应用程序、库或脚本集成。本文将介绍boto3的工作原理以及它如何帮助与S3进行交互,例如创建、列出和删除存储桶和对象。
Boto3是一个Python SDK或库,可以通过Python脚本管理并访问AWS的多种服务,如Amazon S3、EC2、DynamoDB、SQS、Cloudwatch等。Boto3采用数据驱动的方法,从JSON描述文件中在运行时生成类,这些文件在SDK之间共享。由于Boto3是从这些共享的JSON文件生成的,用户可以快速获得最新服务的更新,并在服务之间获得一致的API。它提供了面向对象且易于使用的API以及低级别的直接服务访问。
Boto3建立在botocore之上,botocore是一个用于向AWS发送API请求并接收服务响应的Python库。它原生支持Python 2.7+和3.4+。Boto3提供了会话和每个会话的凭证与配置,以及认证、参数和响应处理等基本组件。它具有一致且最新的界面。
使用Boto3库或SDK与Amazon S3一起工作,允许用户从Python程序或脚本中更快地创建、删除和更新S3存储桶、对象、S3存储桶策略等。Boto3有两种抽象,即客户端和资源。如果用户想要处理单个S3文件,可以选择客户端抽象;如果他们想要处理多个S3存储桶,则可以选择资源抽象。客户端提供了AWS服务的低级别接口,而资源则是比客户端更高级别的抽象。
在终端中使用以下代码安装Boto3到应用程序:
pip list
上述代码将列出已安装的包。如果Boto3未安装,请使用以下代码安装:
pip install boto3
构建一个S3客户端以访问服务方法:
import boto3
S3 = boto3.client(
's3',
aws_access_key_id = '输入aws_access_key_id',
aws_secret_access_key = '输入aws_secret_access_key',
region_name = '输入aws_region_name'
)
创建一个S3客户端,帮助访问存储在S3环境中的对象,并设置凭证,包括aws_access_key_id和aws_secret_access_key。要访问S3存储桶并运行以下代码,必须拥有凭证,如访问密钥和密钥。
创建存储桶:使用create_bucket()方法创建S3存储桶,带有Bucket和ACL参数。ACL代表访问控制列表,它管理对S3存储桶和对象的访问。需要注意的是,存储桶名称应该在整个AWS平台上是唯一的。
my_bucket = "输入要创建的s3存储桶名称"
bucket = s3.create_bucket(
ACL='private',
Bucket= my_bucket
)
列出存储桶:使用list_buckets()方法列出所有可用的存储桶。
bucket_response = s3.list_buckets()
print('现有存储桶:')
for bucket in bucket_response ['Buckets']:
print(f' {bucket["Name"]}')
删除存储桶:使用delete_bucket()方法删除S3存储桶。存储桶必须是空的,即不包含任何对象才能执行删除。
my_bucket = "输入要删除的s3存储桶名称"
response = s3.delete_bucket(Bucket= my_bucket)
print("存储桶已成功删除!")
列出存储桶中的文件:使用list_objects()方法或list_objects_v2()方法列出S3存储桶中的文件或对象。
my_bucket = "输入要从中列出对象或文件的s3存储桶名称"
response = s3.list_objects(Bucket= my_bucket,
MaxKeys=10,
Prefix="仅列出以该字符串开头的文件")
MaxKeys参数代表要列出的最大对象数量。Prefix参数列出键(名称)仅以特定前缀开头的对象。
另一种列出对象的方法:
s3 = boto3.client("s3")
my_bucket = "输入要从中列出对象或文件的s3存储桶名称"
response = s3.list_objects_v2(Bucket=my_bucket)
files = response.get("Contents")
for file in files:
print(f"file_name: {file['Key']}, size: {file['Size']}")
上传文件:使用upload_file()方法上传文件到s3存储桶,参数包括:
my_bucket = "输入要上传文件的存储桶名称"
file_name = "输入要上传的文件路径名称"
key_name = "输入唯一标识符"
s3.upload_file(Filename= file_name, Bucket= my_bucket, Key= key_name)
下载文件:使用download_file()方法从存储桶下载文件或对象到本地,参数包括Key、Bucket和Filename。
my_bucket = "输入要从中下载对象或文件的s3存储桶名称"
file_name = "输入要下载的文件"
key_name = "输入唯一标识符"
s3.download_file(Filename= file_name, Bucket= my_bucket, Key= key_name)
删除文件:使用delete_object()方法从存储桶删除文件或对象,参数包括Key和Bucket。
my_bucket = "输入要从中删除对象或文件的s3存储桶名称"
key_name = "输入唯一标识符"
s3.delete_object(Bucket= my_bucket, Key= key_name)
my_bucket = "输入要从中获取对象或文件元数据的s3存储桶名称"
key_name = "输入唯一标识符"
response = s3.head_object(Bucket= my_bucket, Key= key_name)