2016-07-26 2 views
1

Библиотека AWS для python (boto) имеет два разных типа интерфейсов для работы с AWS, низкий уровень client и более высокий уровень более pythonic resource.boto3 Получить ресурс от клиента

Части моего кода используют один, а другие части используют другой.

Получение resource из client содержится в документах.

# 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

Невозможно сделать это. Если вы хотите использовать оба варианта, вы должны создать ресурс и использовать встроенный клиент. Вы можете создать экземпляр ресурса с той же конфигурацией, что и клиент. Основной клиент для ресурса создается точно так же. Единственное различие между клиентом ресурса и клиентом, созданным с такими же параметрами, заключается в том, что клиент ресурсов добавляет «Resource» к пользовательскому агенту.

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.

Но наоборот.

Вместо этого создайте ресурс и клиент и одновременно используйте все, что вам нужно. Пожалуйста, дайте мне знать, если это полезно.

Смежные вопросы