2016-07-26 12 views
1

Die AWS-Bibliothek für Python (Boto) hat zwei verschiedene Arten von Schnittstellen für die Arbeit mit AWS, eine niedrige Ebene client und eine höhere Ebene mehr Python resource.boto3 Holen Sie sich eine Ressource von einem Client

Teile meines Codes verwenden eins, während andere Teile das andere verwenden.

Ein resource von einem client erhalten wird aus der Dokumentation gefunden.

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

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

Meine Fragen ist, wenn der Client-sqs, wie bekomme ich einen boto3.resource daraus?

(Ich kann nicht einfach einfach anrufen boto3.resource('sqs'), weil der Client andere Dinge, wie Anmeldeinformationen bereits daran angehängt hat, versucht die Ressource aus irgendeinem Grund die AWS-Anmeldeinformationen von einer Reihe von Orten zu holen, die ich nicht will es, würde ich mag es, was Anmeldeinformationen verwenden/Konto auf dem Client eingestellt ist)

+0

Siehe auch https://github.com/boto/boto3/issues/747, mit denen Sie es erhalten könnten, wenn es implementiert wird. – copumpkin

Antwort

2

Es gibt keine Möglichkeit, dies zu tun. Wenn Sie beide verwenden möchten, sollten Sie eine Ressource erstellen und den eingebetteten Client verwenden. Sie können eine Ressource mit genau der gleichen Konfiguration wie ein Client instanziieren. Der zugrunde liegende Client für die Ressource wird genau so erstellt. Der einzige Unterschied zwischen dem Client einer Ressource und einem Client, der mit genau denselben Parametern erstellt wurde, besteht darin, dass der Ressourcenclient dem Benutzeragenten "Ressource" hinzufügt.

1

ich glaube, Sie separat Ressource und Client wie unten schaffen sollen:

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

print dir(sqs_resource) 
print dir(sqs_client) 

Ausgang:

[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'] 

Von der obigen Ausgabe erhalten Sie immer den Client von der Ressource als sqs_resource.meta.client.

Aber umgekehrt ist nicht möglich.

Erstellen Sie stattdessen Ressource und Client und verwenden Sie, was auch immer Sie benötigen. Bitte lassen Sie mich wissen, wenn dies nützlich ist.

Verwandte Themen