インストール
boto3インストールピップ
ピップはawscliインストール
AWSのconfigure
プロンプトが表示されたら、入力しaccess_key_id
、secret_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を生成します
戦略バレル
デザイン
リソース・レベル・インターフェース、クライアント・インターフェースの低レベルの高レベル:boto3は、AWSのサービスにアクセスするためのインタフェースは、2つのレベルを提供します。
戻り値は、リソースの情報であれば、情報リソース、リソース・レベル・インターフェースクライアントインターフェースレベルのオブジェクト指向パッケージ、インタフェース、戻り値は、ほとんどリソースオブジェクト(辞書を返すためのクエリを表現するために、クライアント・レベル・インターフェースそれから)、我々は、(例えば)など、変更、削除などの再手術の対象に戻すことができます。- セッション
セッションは、すべてのAPIが、同じセッションを共有してコンフィギュレーションのセットを呼び出して、コンフィギュレーションのセットの抽象表現である。セッションもすべてのAPIへの入り口にアクセスします。
これは、一般的に入手し、オブジェクトレベルのAPIコードによって、リソースレベルのクライアントAPIオブジェクトさ:
RES = boto3.resource(「名前-サービス」)
クライアントboto3.client =(「名前-サービス」) リソースは、
このリソースサービスリソースと個々のリソース分割、内部のリソース・レベル・インターフェースの概念である。サービス・リソースがサービスを表し、個々のリソースは、リソース内のサービスを表し
リソース識別子は3.1
リソース固有の識別子は、一般的にIDまたはURLです。それが(:「EC2」など)の名前を識別することですので、明らかにサービスリソースは、識別子を必要としません。
3.2属性は、
実際には、リソースのプロパティであります
3.3アクションは、
操作リソースをサポートすることです
サブリソース3.4
リソースのリソースの子、リソースオブジェクトを識別することによって得ることができます
3.5コレクション
コレクションを照会することができます子供のリソースリソースの収集、スクリーニング(AWSネットワークのが唯一の操作を実行するために作成し、コレクションに発行されます(トラバース、リストにバッチ処理を変換)する際の要求)
- 一般的な使用
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