[解決済み】boto3でのリソース、クライアント、セッションの違い?
質問
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入門ビデオ .
関連
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] 0から9までのランダムな整数を生成する
-
[解決済み] リストにおけるdel、remove、popの違いについて
-
[解決済み] リストとタプルの違いは何ですか?
-
[解決済み] 2つのリストの差を取得する
-
[解決済み] pipとcondaの違いは何ですか?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み】venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenvなどの違いは何ですか?
-
[解決済み】Djangoでnull=Trueとblank=Trueの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python call matlab メソッドの詳細
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み】Python: OverflowError: 数学の範囲エラー