#python #amazon-web-services #amazon-s3 #amazon
#python #amazon-web-services #amazon-s3 #amazon
Вопрос:
т. Е. Приведет ли этот код к тому, что он будет отображаться как 2 запроса GET в моем счете или только 1?
key = bucket.get_key('some_invalid_key')
key = bucket.get_key('some_valid_key')
string = key.get_contents_to_string()
Ответ №1:
По умолчанию get_key
проверяется наличие ключа в корзине с помощью запроса HEAD (который довольно маленький, но запрос учитывает количество выполняемых вами запросов).
Если вы не хотите выполнять эту проверку, set validate=False
и boto не будут отправлять запрос.
Строка документа для get_key
:
Type: instancemethod
String form: <bound method Bucket.get_key of <Bucket: tmpdistributionplatform>>
File: /home/javl/Envs/so/local/lib/python2.7/site-packages/boto/s3/bucket.py
Definition: bucket.get_key(self, key_name, headers=None, version_id=None, response_headers=None, validate=True)
Docstring:
Check to see if a particular key exists within the bucket. This
method uses a HEAD request to check for the existance of the key.
Returns: An instance of a Key object or None
:param key_name: The name of the key to retrieve
:type key_name: string
:param headers: The headers to send when retrieving the key
:type headers: dict
:param version_id:
:type version_id: string
:param response_headers: A dictionary containing HTTP
headers/values that will override any headers associated
with the stored object in the response. See
http://goo.gl/EWOPb for details.
:type response_headers: dict
:param validate: Verifies whether the key exists. If ``False``, this
will not hit the service, constructing an in-memory object.
Default is ``True``.
:type validate: bool
:rtype: :class:`boto.s3.key.Key`
:returns: A Key object from this bucket.
Выводы
- По умолчанию
get_key
генерируется один запрос HEAD, и с вас взимается плата за это. - Вам разрешено запретить этот запрос, установив
validate=False
- Объем передаваемых данных в любом случае очень мал, поскольку HEAD проверяет только базовые метаданные и не пытается загрузить все содержимое.
- Запрос HEAD попадает в категорию GET и все остальные и стоит 0,004 доллара за 10 000 запросов (на данный момент для стандартной зоны США), поэтому, как правило, он незначителен, если вы не выполняете много таких запросов.
- на ваш вопрос: ваш код сгенерирует 2 запроса HEAD и один GET, и все три будут засчитаны.