2016-07-26 207 views
1

用於python的AWS庫(boto)具有兩種不同類型的AWS工作接口,低級別client和更高級別pythonic resourceboto3從客戶端獲取資源

我的代碼部分使用一個,而其他部分使用另一個。

從文檔中找到從client獲得resource

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

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

我的問題是,如果有客戶sqs,我怎麼得到這個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從資源獲取客戶端。

但反之亦然是不可能的。

相反,創建資源和客戶端,並使用你需要的任何東西。 請讓我知道這是否有用。

相關問題