boto3使い方

インストール

boto3インストールピップ
ピップはawscliインストール
AWSのconfigure

プロンプトが表示されたら、入力しaccess_key_idsecret_access_keyそしてregionデフォルトの場所は~/.aws/credentials次のとおりです

[default]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY

領域の保存場所~/.aws/config

[default]
region=us-east-1

クイックスタート

import boto3

# Let's use Amazon S3
s3 = boto3.resource('s3')
# Print out bucket names
for bucket in s3.buckets.all():
    print(bucket.name)
# Upload a new file
data = open('test.jpg', 'rb')
s3.Bucket('my-bucket').put_object(Key='test.jpg', Body=data)

バケツを使って

バケットを作成します。

import logging
import boto3
from botocore.exceptions import ClientError

def create_bucket(bucket_name):
""" Create an Amazon S3 bucket

:param bucket_name: Unique string name
:return: True if bucket is created, else False
"""

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

バケットリスト

# Retrieve the list of existing buckets
s3 = boto3.client('s3')
response = s3.list_buckets()

# Output the bucket names
print('Existing buckets:')
for bucket in response['Buckets']:
    print(f'  {bucket["Name"]}')

ファイルをアップロード

基本的な使い方

upload_file()とupload_file_obj():S3は2つのファイルをアップロードする方法を提供しています。決定されたファイルのアップロードのために適切である()速い伝送速度、upload_fileようupload_file()は、平行アップロードチャンクの数に大きなファイルを分割します。upload_file_obj()は、シングルスレッドバイナリストリームをアップロードするために使用することができます。
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_file_obj()例:

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

upload_file_objファイルパラメータRBモードのみ開いているファイル。

クライアントは、バケットは、オブジェクトの3種類upload_file()とupload_file_obj()の二つの機能、各タイプの機能を提供しています提供同じ機能は、良いか悪いか何もありませんが、同等である3つのオブジェクトを自由に呼び出すことができますファイルアップロード機能。

ExtraArgs

ExtraArgsは、これらのパラメータは、ファイル、メタ情報をアップロードするために、読み取りと書き込みのアクセス権を制御するために使用することができ、ファイルをアップロードするために、他のパラメータを提供します。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"',
    }
)

アップロードプロセスのコールバック関数

アップロードの進行状況は、印刷中にコールバックコールバックのアップロードを実装することによって達成することができますが。

s3.upload_file(
    'FILE_NAME', 'BUCKET_NAME', 'OBJECT_NAME',
    Callback=ProgressPercentage('FILE_NAME')
)

ProgressPercentage

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()

ファイルのダウンロード

ファイルをダウンロードし、ファイルをアップロードすることはほぼ完全に対称である、クライアント、バケツ、Objectオブジェクトが提供する3 DOWNLOAD_FILE()、download_file_obj()。DOWNLOAD_FILE()が平行である、download_file_obj()は、シリアル、二つの関数であり、またExtraArgsコールバックパラメータを提供します。boto3.s3.transfer.S3Transfer.ALLOWED_DOWNLOAD_ARGS ExtraArgsは、ダウンロードプロセスの使用可能なパラメータを示します。

import boto3

s3 = boto3.client('s3')
s3.download_file('BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME')

with open('FILE_NAME', 'wb') as f:
    s3.download_fileobj('BUCKET_NAME', 'OBJECT_NAME', f)

送信構成

ファイルのコピー処理、ファイルのダウンロード、ファイルのアップロード、AWS SDKは、自動的に管理し、他のネットワーク構成を再試行します。ほとんどの状況に適用されるデフォルトのネットワーク構成は、唯一のトランスポート構成を変更する特殊な状況下で要求されます。
主題、upload_file()関数などの中にカプセル化Boto3.s3.transfer.TransferConfig送信構成は、構成パラメータが1つのTransferConfigオブジェクトを受け取り有します。

multiparしきい値を変更します。

import boto3
from boto3.s3.transfer import TransferConfig

# Set the desired multipart threshold value (5GB)
GB = 1024 ** 3
config = TransferConfig(multipart_threshold=5*GB)

# Perform the transfer
s3 = boto3.client('s3')
s3.upload_file('FILE_NAME', 'BUCKET_NAME', 'OBJECT_NAME', Config=config)

同時の数を設定します。

upload_file()とDOWNLOAD_FILE()帯域幅を減らすか、帯域幅を増加させるために、デフォルトのマルチスレッドのダウンロードで有効になっているためには、トランスポート構成によって制御することができます。

# To consume less downstream bandwidth, decrease the maximum concurrency
config = TransferConfig(max_concurrency=5)

# Download an S3 object
s3 = boto3.client('s3')
s3.download_file('BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME', Config=config)

設定し、同時実装

boto3では、同時実行は、マルチスレッドによって達成されます。あなたは、スレッドが並列性を達成することはできません使用していない場合は、最大同時実行性パラメータは無視されます。

# Disable thread use/transfer concurrency
config = TransferConfig(use_threads=False)

s3 = boto3.client('s3')
s3.download_file('BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME', Config=config)

静的なサービスとしてバケツ

静的なサービス構成のバケツを取得します。

import boto3

# Retrieve the website configuration
s3 = boto3.client('s3')
result = s3.get_bucket_website('BUCKET_NAME')

静的なサービス構成のバケツを設定します

# Define the website configuration
website_configuration = {
    'ErrorDocument': {'Key': 'error.html'},
    'IndexDocument': {'Suffix': 'index.html'},
}

# Set the website configuration
s3 = boto3.client('s3')
s3.put_bucket_website('BUCKET_NAME', website_configuration)

Webサイト構成バレルを削除するには

# Delete the website configuration
s3 = boto3.client('s3')
s3.delete_bucket_website('BUCKET_NAME')

バケットは、権限の一覧を取得します

import boto3

# Retrieve a bucket's ACL
s3 = boto3.client('s3')
result = s3.get_bucket_acl(Bucket='my-bucket')
print(result)

presigned URL

オブジェクトを共有

import logging
import boto3
from botocore.exceptions import ClientError


def create_presigned_url(bucket_name, object_name, expiration=3600):
    """Generate a presigned URL to share an S3 object

    :param bucket_name: string
    :param object_name: string
    :param expiration: Time in seconds for the presigned URL to remain valid
    :return: Presigned URL as string. If error, returns None.
    """

    # Generate a presigned URL for the S3 object
    s3_client = boto3.client('s3')
    try:
        response = s3_client.generate_presigned_url('get_object',
                                                    Params={'Bucket': bucket_name,
                                                            'Key': object_name},
                                                    ExpiresIn=expiration)
    except ClientError as e:
        logging.error(e)
        return None

    # The response contains the presigned URL
    return response

直接GETリクエストにこのURLを使用しました:

import requests    # To install: pip install requests

url = create_presigned_url('BUCKET_NAME', 'OBJECT_NAME')
if url is not None:
    response = requests.get(url)

その他のヒント

  • URLを生成し、URLは自動的にバケツ以下のディレクトリ動的ビューを実現することができ、機能を実行することができます
  • あなたがファイルをアップロードできるURLを生成します

戦略バレル

デザイン

  1. リソース・レベル・インターフェース、クライアント・インターフェースの低レベルの高レベル:boto3は、AWSのサービスにアクセスするためのインタフェースは、2つのレベルを提供します。
    戻り値は、リソースの情報であれば、情報リソース、リソース・レベル・インターフェースクライアントインターフェースレベルのオブジェクト指向パッケージ、インタフェース、戻り値は、ほとんどリソースオブジェクト(辞書を返すためのクエリを表現するために、クライアント・レベル・インターフェースそれから)、我々は、(例えば)など、変更、削除などの再手術の対象に戻すことができます。

  2. セッション
    セッションは、すべてのAPIが、同じセッションを共有してコンフィギュレーションのセットを呼び出して、コンフィギュレーションのセットの抽象表現である。セッションもすべてのAPIへの入り口にアクセスします。
    これは、一般的に入手し、オブジェクトレベルのAPIコードによって、リソースレベルのクライアントAPIオブジェクトさ:
    RES = boto3.resource(「名前-サービス」)
    クライアントboto3.client =(「名前-サービス」)
  3. リソースは、
    このリソースサービスリソースと個々のリソース分割、内部のリソース・レベル・インターフェースの概念である。サービス・リソースがサービスを表し、個々のリソースは、リソース内のサービスを表し

リソース識別子は3.1
リソース固有の識別子は、一般的にIDまたはURLです。それが(:「EC2」など)の名前を識別することですので、明らかにサービスリソースは、識別子を必要としません。

3.2属性は、
実際には、リソースのプロパティであります

3.3アクションは、
操作リソースをサポートすることです

サブリソース3.4
リソースのリソースの子、リソースオブジェクトを識別することによって得ることができます

3.5コレクション
コレクションを照会することができます子供のリソースリソースの収集、スクリーニング(AWSネットワークのが唯一の操作を実行するために作成し、コレクションに発行されます(トラバース、リストにバッチ処理を変換)する際の要求)

  1. 一般的な使用

4.1リソースレベル

var serviceRes = boto3.resource('ec2') //得到Service Resource
var instance = serviceRes.create_instances(**kwargs) //执行Service Resource级别的操作
var instance = serviceRes.Instance(id) // 通过identifier得到Sub Resource(Individual Resource)

var instances = serviceRes.instances.filter(filter) // 通过filter得到一个Sub Resource的collection

instance.start() //执行Sub Resource上的操作

4.2クライアントレベル

var ec2Client = boto3.client('ec2') //得到对应服务的client
ec2Client.run_instances(**kwargs) //执行操作

クラスboto3.session.Session
(aws_access_key_id =なし、aws_secret_access_key =なし、aws_session_token =無し、のregion_name =なし、botocore_session =なし、PROFILE_NAME =なし)

ssessionストレージ構成の状態、あなたはクライアントサービスとリソースを作成することを可能にする
パラメータを:

aws_access_key_id×(文字列) - AWSアクセスキーID
キーアクセスAWS秘密- aws_secret_access_key×(文字列)
aws_session_token(文字列)× - AWSの一時的なトークンのセッション
のregion_name×(文字列) -新しい接続を作成しますデフォルトロケール
botocore_session(botocore.session_Session)× -代わりdafault一つの新しい新しい作成のこのBotocoreセッションを使用
×PROFILE_NAME(文字列) -設定ファイルの名前を使用すること、与えられていない、デフォルトのプロファイルを使用する場合

接続を作成します。

boto3

輸入boto3
S3 = boto3.resource( 'S3')

バケットを作成し
boto3で、すべてのアクションは、キーワードパラメータを渡す必要があり、バケット構成を手動で設定する必要があります

3票

s3.create_bucket(バケット= 'mybucket')
s3.create_bucket(バケット= 'mybucket'、CreateBucketConfiguration = { 'LocationConstraint': 'US-西-1'})

バケツにアクセス
バケツを取りに行くリソースBoto3では、非常に便利ですが、それは自動的にバケツが本当に存在して検証しません

3票

輸入botocore
バケット= s3.Bucket( 'mybucket')
= Trueの存在
試し:
s3.meta.client.head_bucket(バケット= 'mybucket')
eとbotocore.exceptions.ClientError除いた:
クライアントエラーがスローされた場合#、その後、確認してくださいそれは404エラーだったこと。
それは404エラーだった場合には、バケットが#存在しません。
ERROR_CODE = INT(e.response [ 'エラー'] [ 'コード'])
ERROR_CODEの== 404は、場合:
= Falseの存在

available_profiles
プロファイルセッション証明書が利用できる
クライアント(SERVICE_NAME、REGION_NAME =なし、 api_version =なし、USE_SSL = Trueの場合、=なし、エンドポイント=なし、aws_acess_key_id =なし、aws_secret_key =なし、aws_session_token =なし設定=なしを確認してください)
名前で作成しますクライアントサービスの低レベル
パラメータ

SERVICE_NAME(文字列) -サーバーの名前は、たとえば、「S3」や「EC2」のため、()サーバのシリーズはget_available_servicesによる効果的な取得することができる
のregion_name(文字列) -クライアント、クライアントに関連付けられている地域の名前シングルエリアに関連付けられているエンド
api_version(文字列) - 。新しいクライアントを作成するときに使用するAPIのバージョン、デフォルト、botocoreは、クライアントの以前のバージョンを使用したい場合は、あなたがこれだけを指定する必要があり、最新のAPIバージョンのAPIを使用します。パラメータ。
USE_SSL(ブール値) -注意、デフォルトではSSLを使用することで、SSLを使用するかどうか:接続すべてのサービスが無SSLをサポートしていませ
(文字列やブール値)を確認- SSL証明書を認証するかどうか、デフォルトのSSL証明書の認証が必要とされ、あなたができます偽次の値- SSL証明書の有効性を認証しないように、SSLをまだ使用されていますが、SSL証明書のパス/に/ CERT / bundle.pem認定されることはありません- CA証明書パッケージファイル名に使用する
endpoint_urlを-建物のために使用するクライアントの完全なURLは、通常の状況下では、botocoreは、自動的に適切なURLを構築し、Exchangeサーバーにアクセスしてください。あなたは、この値が提供されている場合、USE_SSL無視されます、この動作をオーバーライドする(HTTP / HTTPSモデルを含む)完全なURLを指定するために行くことができる
完全にオプション、提供されていない場合、使用されます- aws_access_key_id(文字列)セッション構成、
aws_secret_access_key(文字列) -上記のパラメータと同様に、セッションを自動的に提供することができる
(文字列)aws_session_token -上記と同様
設定(boto.client.Config)アドバンストクライアントの設定オプション

戻り値
サービス・クライアント・インスタンスの
イベント
セッションのイベント・エミッター

get_available_partitions()
利用可能なパーティションを示していますが
戻り値の型:リスト
戻り値:パーティションの名前を含むリストを返します。

__get_available_regions(SERVICE_NAME、PARTITION_NAME =「AWS 」、= Falseのallow_non_regional)は
、特定の地域やエンドパーティションの名前一覧表示されます
戻り値:たとえば、名前の包括的なリストを、[「米国-東1」]
get_available_resources()
使用可能なを取得しますこれはSession.resources()、クライアントにサービスを提供するためのリソースのリストをロードすることができる
タイプを返します。リストが
返されます:
サービス名リスト
()get_available_services
低レベルのクライアントサービスとしてロードされているパスSession.clientを(取得する)
戻り値の型:リスト
リターン値:サービス名リスト
のリソース(SERVICE_NAME、REGION_NAME =なし、 api_verson =なし、USE_SSL = Trueの場合、=なし=なし、endpoint_url =なし、aws_access_key_id =なし、aws_secret_access_key =なし、aws_session_token =なし、設定を確認してください)
作成の名前でリソースサービスクライアントの
戻り値:
ServiceResourceサブクラス

ヒント

ランダムリードコンテンツ範囲、FSEEKに対応
https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.16

参考資料

https://boto3.amazonaws.com/v1/documentation/api/latest/index.html

おすすめ

転載: www.cnblogs.com/weiyinfu/p/10993205.html