1. ホーム
  2. パイソン

[解決済み】boto3でのリソース、クライアント、セッションの違い?

2022-03-26 11:17:27

質問

Ubuntu 16.04 LTSでPython 2.7.12を使用しています。以下のリンクからboto3の使い方を勉強しています。 https://boto3.readthedocs.io/en/latest/guide/quickstart.html#using-boto-3 . 私の疑問は、リソース、クライアント、セッションをいつ使うか、そしてそれぞれの機能です。

どのように解決するのですか?

クライアント リソース は、AWSサービスのリクエストを行うためのboto3 SDK内の2つの異なる抽象化されたものです。もし、boto3でAWSサービスにAPIコールを行いたい場合は、ClientかResourceを経由して行うことになります。

通常、Client抽象とResource抽象のどちらかを選択しますが、アプリケーションは必要に応じて両方を使用することができます。ClientとResourceの違いを以下にまとめましたので、読者がどちらを使うか決める際の参考にしてください。

セッション は、ClientとResourceの概念にほぼ直交しています(ただし、両者で使用されています)。

以下は、より詳細な情報です。 クライアント , リソース そして セッション がすべてです。

クライアント

  • これは、オリジナルのboto3 APIを抽象化したものです。
  • 低レベルのAWSサービスアクセスを提供する
  • AWSサービスの全ての操作をクライアントでサポート
  • botocoreクライアントを開発者に公開する。
  • AWSのサービスAPIと1:1にマッピングされます。
  • スネークケースのメソッド名 (例. リストバケット API => リスト_バケツ メソッド)
  • から生成され、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個のオブジェクトをリストアップするように制限されています。を使用する必要があります。 ページャ あるいは、独自のループを実装し、list_objects_v2() を繰り返し呼び出し、1000個以上のオブジェクトがある場合は継続マーカーを付けます。

さて、これが低レベルのクライアント・インターフェイスです。次は、より抽象度の高いResourceインターフェイスです。

リソースです。

  • これは、より新しいboto3 API抽象化です。
  • 高レベルのオブジェクト指向APIを提供します。
  • AWSのサービスを100%カバーするAPIは提供されていない
  • 識別子と属性を使用する
  • アクション(リソースに対する操作)を持っている
  • サブリソースとAWSリソースのコレクションを公開する。
  • は、AWSの リソース 記述

以下は、S3バケットのオブジェクト(all)にリソースレベルでアクセスする等価な例です。

import boto3

s3 = boto3.resource('s3')
bucket = s3.Bucket('mybucket')
for obj in bucket.objects.all():
    print(obj.key, obj.last_modified)

注意: この場合、オブジェクトを取得するために再度 API を呼び出す必要はありません。Bucket 上のコレクションとして利用することができます。これらのサブリソースのコレクションは、レイジーローディングされます。

を見ると Resource バージョンのコードは、よりシンプルでコンパクト、そしてより多くの機能を備えています (たとえば、ページネーションができますし、生の辞書ではなくプロパティが公開されます)。この Client のバージョンでは、ページングを含めると、実際には上記よりも複雑なコードになります。

最後に、セッションについてですが、これはClientとResourceの両方にとって基本的なもので、例えば両者がAWSのクレデンシャルにアクセスする方法を示しています。

セッションです。

  • は設定情報 (主にクレデンシャルと選択されたリージョン) を保存します。
  • サービスクライアントとリソースを作成することができます
  • boto3は必要に応じてデフォルトのセッションを作成します。

これらのboto3のコンセプトについてより詳しく知るための有用なリソースが re:Invent入門ビデオ .