2016-07-26 9 views
1

AWSを使用するためのAWSライブラリには、AWSを使用するための2種類のインタフェースがあり、低レベルのclientとより高いレベルのPythonic resourceがあります。boto3クライアントからリソースを取得

私のコードの部分は1つを使用し、他の部分は他の部分を使用します。

resourceclientから取得することは、ドキュメントから見つかりました。クライアントsqsを持っている場合

# Create the resource 
sqs_resource = boto3.resource('sqs') 

# Get the client from the resource 
sqs = sqs_resource.meta.client 

は私の質問はどのように私はこれからboto3.resourceを得るのですか、ですか?

(クライアントに資格情報が既に添付されているなどの理由でクライアントに他のものがあるため、私は単にboto3.resource('sqs')を呼び出すことはできません。いくつかの設計理由のためのリソースは、必要のない場所からAWS資格情報を取得しようとしますこれに、私はそれが資格証明書/アカウントがクライアントに設定されているものを使用したいのですが)

+0

https://github.com/boto/boto3/issues/747も参照してください。実装されている場合は、入手することができます。 – copumpkin

答えて

2

これを行う方法はありません。両方を使用する場合は、リソースを作成し、組み込みクライアントを使用する必要があります。クライアントとまったく同じ構成でリソースをインスタンス化できます。リソースの基礎となるクライアントはまったく同じ方法で作成されます。リソースのクライアントとまったく同じパラメータで作成されたクライアントの唯一の違いは、リソースクライアントが「リソース」をユーザーエージェントに追加することです。

1

私はあなたが個別に以下のようにリソースとクライアントを作成すべきだと思う:

import boto3 
sqs_resource = boto3.resource("sqs") 
sqs_client = boto3.client("sqs") 

print dir(sqs_resource) 
print dir(sqs_client) 

出力:

[u'Message', u'Queue', '__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', u'create_queue', 'get_available_subresources', u'get_queue_by_name', 'meta', u'queues'] 
['_PY_TO_OP_NAME', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_cache', '_client_config', '_convert_to_request_dict', '_endpoint', '_force_path_style_s3_addressing', '_force_virtual_style_s3_addressing', '_get_waiter_config', '_loader', '_make_api_call', '_register_handlers', '_register_s3_specific_handlers', '_request_signer', '_response_parser', '_serializer', '_service_model', u'add_permission', 'can_paginate', u'change_message_visibility', u'change_message_visibility_batch', u'create_queue', u'delete_message', u'delete_message_batch', u'delete_queue', 'generate_presigned_url', 'get_paginator', u'get_queue_attributes', u'get_queue_url', 'get_waiter', u'list_dead_letter_source_queues', u'list_queues', 'meta', u'purge_queue', u'receive_message', u'remove_permission', u'send_message', u'send_message_batch', u'set_queue_attributes', 'waiter_names'] 

上記の出力から、常にリソースからsqs_resource.meta.clientというクライアントを取得します。

しかし、その逆もできません。

代わりに、リソースとクライアントの両方を作成し、必要なものを使用してください。 これが役に立つかどうかお知らせください。

関連する問題