boto3从客户端获取资源

时间:2016-07-26 05:12:31

标签: python amazon-web-services boto3

AWS库for python(boto)有两种不同类型的界面用于处理AWS,低级别client和更高级别的pythonic resource

我的部分代码使用一部分,而其他部分则使用另一部分。

从文档中找到client的{​​{1}}。

resource

我的问题是,如果有客户# Create the resource sqs_resource = boto3.resource('sqs') # Get the client from the resource sqs = sqs_resource.meta.client ,我如何从中获得sqs

(我不能简单地只调用boto3.resource,因为客户端还有其他内容,例如已经附加到其上的凭据,出于某些设计原因的资源会尝试从一堆地方获取AWS凭据我不想要它,我希望它使用客户端设置的任何凭据/帐户)

2 个答案:

答案 0 :(得分:3)

没有办法做到这一点。如果要同时使用两者,则应创建资源并使用嵌入式客户端。您可以使用与客户端完全相同的配置来实例化资源。资源的基础客户端以完全相同的方式创建。资源客户端和使用完全相同参数创建的客户端之间的唯一区别是资源客户端添加了资源'到用户代理。

答案 1 :(得分: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。

反之亦然。

相反,创建资源和客户端并使用您需要的任何内容。 如果有用,请告诉我。