Boto3 のリソース、クライアント、セッションの違いは何ですか? 質問する

Boto3 のリソース、クライアント、セッションの違いは何ですか? 質問する

私は次のリソースから AWS SDK for Python (Boto3) の使用方法を学習しています。
https://boto3.readthedocs.io/en/latest/guide/quickstart.html#using-boto-3

resource疑問なのは、、、clientまたはをいつ使用するかsession、またそれぞれの機能についてです。


Ubuntu 16.04 LTS で Python 2.7.12 を使用しています。

ベストアンサー1

クライアントリソースは、AWS サービスリクエストを行うための boto3 SDK 内の 2 つの異なる抽象化です。boto3 を使用して AWS サービスへの API 呼び出しを行う場合は、クライアントまたはリソースを介して呼び出します。

通常は、クライアント抽象化またはリソース抽象化のいずれかを選択しますが、必要に応じて両方を使用することもできます。読者がどちらを使用するかを決めるのに役立つように、以下に違いを概説しました。

セッションは、クライアントとリソースの概念とほぼ直交しています (ただし、両方で使用されます)。

より詳しい情報については、クライアントリソース、 そしてセッションすべてについてです。


クライアント

  • これはオリジナルのboto3 API抽象化です
  • 低レベルのAWSサービスアクセスを提供する
  • すべてのAWSサービスオペレーションはクライアントによってサポートされています
  • botocoreクライアントを開発者に公開します
  • 通常、AWSサービスAPIと1:1でマッピングされます。
  • スネークケースのメソッド名を公開します(例:リストバケットAPI =>リスト_バケット方法)
  • 通常、プリミティブで非整列化されたデータを生成します (例: DynamoDB 属性はプリミティブな DynamoDB 値を表す辞書です)
  • 結果のページ区切りをコーディングする必要がある
  • AWSサービスの説明から生成されます

S3 バケットのオブジェクトへのクライアントレベルのアクセスの例を次に示します。

import boto3

client = boto3.client('s3')

response = client.list_objects_v2(Bucket='mybucket')

for content in response['Contents']:
    obj_dict = client.get_object(Bucket='mybucket', Key=content['Key'])
    print(content['Key'], obj_dict['LastModified'])

注意:このクライアントレベルのコードでは、最大1000個のオブジェクトしかリストできません。ページネーターcalling list_objects_v2()または、オブジェクトが 1000 個を超える場合は継続マーカーを使用して独自のループを繰り返し実装します。

さて、これが低レベルのクライアント インターフェイスです。次は、高レベル (より抽象的) のリソース インターフェイスについて説明します。


リソース

  • これは新しいboto3 API抽象化です
  • 高レベルのオブジェクト指向APIを提供します
  • AWSサービスのAPIカバレッジを100%提供しているわけではない
  • 識別子と属性を使用する
  • アクション(リソースに対する操作)がある
  • AWSリソースのサブリソースとコレクションを公開します
  • 通常、プリミティブな AWS データではなく、マーシャリングされたデータを生成します (例: DynamoDB 属性は、プリミティブな DynamoDB 値を表すネイティブ Python 値です)
  • 結果のページネーションを行います
  • AWSリソース記述から生成される

以下は、S3 バケットのオブジェクトへのリソース レベルのアクセスを使用した同等の例です。

import boto3

s3 = boto3.resource('s3')

bucket = s3.Bucket('mybucket')

for obj in bucket.objects.all():
    print(obj.key, obj.last_modified)

注: この場合、オブジェクトを取得するために 2 回目の API 呼び出しを行う必要はありません。オブジェクトはバケット上のコレクションとして利用できます。これらのサブリソースのコレクションは遅延ロードされます。

コードのバージョンResourceははるかにシンプルで、コンパクトで、機能も豊富です (たとえば、ページ区切りが行われ、生の辞書ではなくプロパティが公開されます)。Clientページ区切りを含める場合、コードのバージョンは実際には上記よりも複雑になります。

最後に、クライアントとリソースの両方の基本となるセッションと、両方が AWS 認証情報にアクセスする方法などについて説明します。


セッション

  • 構成情報(主に資格情報と選択した地域)を保存します
  • サービスクライアントとリソースを作成できます
  • boto3は必要に応じてデフォルトのセッションを作成します

boto3のコンセプトについてさらに学ぶための便利なリソースは、re:Invent 紹介ビデオ


2023年1月更新

によるとリソースboto3 ドキュメントのページ:

AWS Python SDK チームは、boto3 のリソース インターフェイスに新しい機能を追加する予定はありません。既存のインターフェイスは、boto3 のライフサイクル中は引き続き動作します。お客様は、クライアント インターフェイスを通じて新しいサービス機能にアクセスできます。

リソースの廃止計画の詳細については、以下をご覧ください。boto3/ディスカッション/3563

おすすめ記事