В Amazon S3 взимается ли с меня плата всякий раз, когда я выполняю get_key или когда я фактически получаю его содержимое?

#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, и все три будут засчитаны.