【AWS系列】boto3入门-上篇

这篇具有很好参考价值的文章主要介绍了【AWS系列】boto3入门-上篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、概念介绍

2、安装&关键字介绍

boto3 session

ssession

参数说明:

available_profiles

参数说明:

3、使用介绍

3.1 Service Amazon S3

创建一个连接

 创建一个Bucket

访问一个bucket

3.2 上传文件

upload_file()示例:

upload_fileobj()示例:

ExtraArgs

上传回调函数


aws是Amazon Web Service的简写,它包括众多服务,其中最有名的两个是EC2和S3。
S3是Simple Storage Service的简写,它是一种对象存储的实现。

官方文档:

​​​​​​​​​​​​​​Boto3 documentation

1、概念介绍

官方介绍:
Boto is the Amazon Web Services (AWS) SDK for Python, which allows Python developers to write software that makes use of Amazon services like S3 and EC2. Boto provides an easy to use, object-oriented API as well as low-level direct service access.

官方文档


Boto 是AWS的基于python的SDK(当然还支持其他语言的SDK,例如Ruby, Java等),

Boto允许开发人员编写软件时使用亚马逊等服务像S3和EC2等,Boto提供了简单,面向对象的API,也提供了低等级的服务接入。

这里需要区分,Boto有两个版本,其中旧的版本boto2已经不推荐使用了,在一些亚马逊新建的region已经不支持旧的Boto2了(貌似中国就是这样的),

所以如果开发Python代码的话建议使用Boto3。

为什么不推荐Boto2?因为Boto2大概是2006年开发的,设计时没有考虑后续的很多新增多服务,所以aws重新开发了Boto3.
 

2、安装&关键字介绍

1,安装boto3和awscli:

note: 先安装boto3,再安装awscli

pip install boto3 awscli


2,配置aws:

aws configure

【AWS系列】boto3入门-上篇

根据提示输入:

  • access_key_id
  • secret_access_key
  •  region

其中access_key_idsecret_access_key的默认存储位置为:~/.aws/credentials​​​​​​​

根据提示输入access_key_id, secret_access_key,and region name
除了在终端输入aws configure也可以在~/.aws/下的config 和Credentials 进行配置

boto3 session

class boto3.session.Session
(aws_access_key_id=None, aws_secret_access_key=None, aws_session_token=None,region_name=None,botocore_session=None,     profile_name=None)

ssession

存储配置状态并允许你创建服务客户端和资源 

参数说明:

  • aws_access_key_id(字符串) -- AWS access key ID
  • aws_secret_access_key(字符串) -- AWS secret access key
  • aws_session_token(字符串) -- AWS 临时session token
  • region_name(字符串) -- 当创建新的连接时的默认区域
  • botocore_session(botocore.session_Session) -- 使用这个Botocore session 而不是创建一个 new dafault one
  • profile_name(字符串) -- 配置文件的名字去使用,如果没有给出,就用默认的profile

available_profiles


session 证书可用的配置文件
client(

service_name,

region_name=None,

api_version=None,

use_ssl=True,

verify=None,

endpoint=None,

aws_acess_key_id=None,

aws_secret_key=None,

aws_session_token=None config=None

)
通过名字去创建一个低等级的服务客户端。

参数说明:

  • service_name(字符串) -- 服务器的名字,例如 's3' 或者 'ec2',可以通过get_available_services() 去获得有效的一串服务器
  • region_name(字符串) -- 与客户端相关联的区域名字,一个客户端关联单个区域
  • api_version(字符串) -- 要用的API版本,默认的,当创建一个新的client,botocore将使用最新的API version.如果想用客户端的之前的API 版本,你只需要指明这个参数。
  • use_ssl(boolean) -- 是否使用SSL,默认是使用SSL,注意:不是所有的服务支持no-ssl 连接
  • verify(字符串或者布尔值) -- 是否去认证ssl证书,默认SSL证书需要认证,你可以提供以下的值 False -不去认证SSL证书的有效性,SSL仍然被使用,但是SSL 证书不会被认证 path/to/cert/bundle.pem -要使用的CA证书包的文件名
  • endpoint_url -为构建的client去用的全的url,正常情况下,botocore会自动构建一个适合的URL去用来和服务器交流。你可以去指定一个全的URL,(including http/https 模型)去重写这个行为,如果这个value提供了,那use_ssl将被忽略
  • aws_access_key_id(字符串) - 完全的可选项,如果不提供, 将用session的配置,
  • aws_secret_access_key(字符串) - 与上面参数类似,可由session自动提供
  • aws_session_token(字符串) - 与上面类似
  • config(boto.client.Config) 高级的客户端配置选项

3、使用介绍

3.1 Service Amazon S3

创建一个连接

#boto3
import boto3
s3 = boto3.resource('s3')

 创建一个Bucket

在boto3,所有的行为必须通过关键字参数传递进去,并且,一个bucket的配置必须手动配置

import logging
import boto3
from botocore.exceptions import ClientError
 
def create_bucket(bucket_name):
  s3 = boto3.client('s3')
  try
      s3.create_bucket(Bucket=bucket_name)
  except ClientError as e:
      logging.error(e)
      return False
  return True

访问一个bucket

用Boto3的resource 去获得一个bucket是非常方便的,但不会自动验证bucket是否真的存在

# Boto 3
import botocore
bucket = s3.Bucket('mybucket')
exists = True
try:
    s3.meta.client.head_bucket(Bucket='mybucket')
except botocore.exceptions.ClientError as e:
    # If a client error is thrown, then check that  it was a 404 error.
    # If it was a 404 error, then the bucket does   not exist.
    error_code = int(e.response['Error']['Code'])
    if error_code == 404:
        exists = False

列出所有的bucket

s3 = boto3.client('s3')
response = s3.list_buckets()
print('Existing buckets:')
for bucket in response['Buckets']:
    print(f'{bucket["Name"]}')

3.2 上传文件

s3提供了两种文件上传方式:

  • upload_file()
  • upload_fileobj()

upload_file()会把一个大文件拆分成若干个chunk并行上传,因此upload_file()传输速率较快,它适用于上传内容已经确定的文件。

upload_fileobj()可用于单线程上传一个二进制流。

upload_file()示例:

import logging
import boto3
from botocore.exceptions import ClientError
 
def upload_file(file_name, bucket, object_name=None):
    """Upload a file to an S3 bucket
    :param file_name: File to upload
    :param bucket: Bucket to upload to
    :param object_name: S3 object name. If not specified then file_name is used
    :return: True if file was uploaded, else False
    """
 
    # If S3 object_name was not specified, use file_name
    if object_name is None:
        object_name = file_name
 
    # Upload the file
    s3_client = boto3.client('s3')
    try:
        response = s3_client.upload_file(file_name, bucket, object_name)
    except ClientError as e:
        logging.error(e)
        return False
    return True

upload_fileobj()示例:

s3 = boto3.client('s3')
with open("FILE_NAME", "rb") as f:
    s3.upload_fileobj(f, "BUCKET_NAME", "OBJECT_NAME")

upload_fileobj()的文件参数只能是rb模式打开的文件。

Client、Bucket、Object三个类型都提供了upload_file()upload_fileobj()两个函数

每个类型提供的同一函数功能都是等价的,并无优劣之分,可以随意调用三个对象的上传文件函数。

ExtraArgs

ExtraArgs提供了上传文件的其它参数,这些参数可用于控制上传文件的读写权限、meta信息等。S3Transfer是一个非常重要的对象,它定义了传输过程中的许多参数,在
boto3.s3.transfer.S3Transfer.ALLOWED_UPLOAD_ARGS中,定义了ExtraArgs可用的参数列表。

示例:

s3.upload_file(
    'FILE_NAME', 'BUCKET_NAME', 'OBJECT_NAME',
    ExtraArgs={'Metadata': {'mykey': 'myvalue'}}
)
s3.upload_file(
    'FILE_NAME', 'BUCKET_NAME', 'OBJECT_NAME',
    ExtraArgs={'ACL': 'public-read'}
)
s3.upload_file(
    'FILE_NAME', 'BUCKET_NAME', 'OBJECT_NAME',
    ExtraArgs={
        'GrantRead': 'uri="http://acs.amazonaws.com/groups/global/AllUsers"',
        'GrantFullControl': 'id="01234567890abcdefg"',
    }
)

上传回调函数

一边上传一边打印上传进度可以通过实现Callback回调来实现。文章来源地址https://www.toymoban.com/news/detail-422311.html

s3.upload_file(
    'FILE_NAME', 'BUCKET_NAME', 'OBJECT_NAME',
    Callback=ProgressPercentage('FILE_NAME')
)
import os
import sys
import threading
 
class ProgressPercentage(object):
 
    def __init__(self, filename):
        self._filename = filename
        self._size = float(os.path.getsize(filename))
        self._seen_so_far = 0
        self._lock = threading.Lock()
 
    def __call__(self, bytes_amount):
        # To simplify, assume this is hooked up to a single filename
        with self._lock:
            self._seen_so_far += bytes_amount
            percentage = (self._seen_so_far / self._size) * 100
            sys.stdout.write(
                "\r%s  %s / %s  (%.2f%%)" % (
                    self._filename, self._seen_so_far, self._size,
                    percentage))
            sys.stdout.flush()

到了这里,关于【AWS系列】boto3入门-上篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】进程概念,轻松入门【上篇】

    目录 一, 冯* 诺依曼体系结构 1,存储结构 ​编辑 二, 操作系统  1,概念 2,设计OS的目的 3,定位 4,如何理解 \\\"管理\\\" 5, 总结  三,进程 1. 概念  那么如何区分进程  程序? 2. PCB —— 描述进程 3. 组织进程 补充: cwd  4.  task_struct ——PCB  (1) PID——标识符 5.父子进程

    2024年02月13日
    浏览(39)
  • 数字孪生基本概念与入门-上篇

    大家好,这一期我们来聊一聊“数字孪生”的基本概念,大家这两年听到一个很火的词“元宇宙(Meteverse)”,数字孪生也伴随元宇宙走入大众视野,从技术名词的角度上来讲,元宇宙是包含数字孪生的,这个也是历史发展的必然,整个世界是数字化的程度到了一定的爆发点,

    2024年01月17日
    浏览(28)
  • JavaScript系列从入门到精通系列第二十篇:使用工厂方法创建JavaScript对象,JavaScript构造函数详解,JavaScript类概念的介绍

    文章目录 一:使用工厂方法创建对象 1:原始写法 2:工厂方式 3:结果验证  二:构造函数 1:什么是构造函数 2:构造函数和普通函数的区别 3:构造函数的执行流程 三:类 1:什么是类 2:如何检查一个对象是否是个类的实例 3:Object的地位 四:构造函数修改 1:重大问题

    2024年02月08日
    浏览(28)
  • AWS CloudFormation 系列--(1)快速入门

    B站视频链接 :https://www.bilibili.com/video/BV1Wd4y1i7PE/?spm_id_from=333.999.0.0 微信公众号 : 自刘地 最近打算系统性的整理和分享AWS相关知识,而AWS CloudFormation这服务非常能提高你学习AWS的效率。所以先从这个服务开始介绍,后续我也会经常用到这个服务。 首先提醒一下,AWS CloudFor

    2024年02月02日
    浏览(29)
  • AWS 中文入门开发教学 1- 课程介绍

    本系列文章用于记录小马技术的AWS学习笔记,视频简单易懂,也可以跟原视频学习,但需要科学上网和支付每月的会员费用(https://github.com/komavideo/LearnAWS)~ Amazon Web Services(2006年3月) Microsoft Azure(2010年2月1日) Google Cloud Platform(2008年4月7日) https://aws.amazon.com/cn/ https://aws.amazon.co

    2024年01月16日
    浏览(38)
  • Jmeter系列-环境部署、详细介绍、安装目录介绍(1)

    http://jmeter.apache.org/下载最新版本的 JMeter,解压文件到任意目录 1、下载(注意选择操作系统对应的位数32/64) 官网 :http://www.oracle.com 2、安装(一键式) ,所有步骤选择项默认选择项。 3、配置环境变量 JAVA_HOME=JDK完整安装路径 环境变量Path添加:%JAVA_HOME%bin;%JAVA_HOME%jrebin;

    2024年02月09日
    浏览(30)
  • 【AI绘图 丨 Stable_diffusion 系列教程一】— Window 环境 | Stable Diffusion入门教程 及安装(上篇)

    不过确实,Midjourney生成的图片很难精准的控制,随机性很高,需要大量的跑图(为此我也回复了很多很多信息就是让小伙伴们多跑图...),不过没关系,受到社群小伙伴们的强烈建议(也包括我可以少回复点消息),我在这篇文章中为大家分享SD的教程。 这时候肯定有朋友心

    2024年02月09日
    浏览(31)
  • PowerShell系列(九)PowerShell Cmdlet概念介绍

    往期回顾 PowerShell系列(一):PowerShell介绍和cmd命令行的区别 PowerShell系列(二):PowerShell和Python之间的差异介绍 PowerShell系列(三):PowerShell发展历程梳理 PowerShell系列(四):PowerShell进入交互环境的三种方式 PowerShell系列(五):PowerShell通过脚本方式运行笔记 PowerShell系

    2024年02月12日
    浏览(28)
  • 【云原生系列】云计算概念与架构设计介绍

    云计算是一种基于互联网的计算模式,在这个模式下,各种计算资源(例如计算机、存储设备、网络设备、应用程序等)可以通过互联网实现共享和交付。云计算架构设计的主要目标是实现高效、可扩展、可靠、安全和经济的计算资源共享。 在云计算架构中,通常会采用分层

    2024年02月11日
    浏览(32)
  • 《JavaCV从入门到实战教程合集》介绍和目录

    《JavaCV音视频合集》是《JavaCV入门指南》、《JavaCV开发详解》、《JavaCV进阶之FFmpeg》和2022年《JavaCV音视频开发宝典》四合一汇总合集,完整包含《JavaCV入门指南》、《JavaCV开发详解》、《JavaCV进阶之FFmpeg》和《JavaCV音视频开发宝典》系列所有付费内容。 《JavaCV入门指南》 《

    2023年04月11日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包