Python Boto S3 для работы с пользовательскими доменами в Amazon S3 - PullRequest
4 голосов
/ 02 марта 2010

Как использовать библиотеку Python Boto с S3, где сгенерированный ею URL будет моим поддоменом CNAME для сервера Amazon S3.

По умолчанию используется формат по умолчанию BUCKETNAME.s3.amazonaws.com , но S3 поддерживает создание псевдонимов пользовательских доменов с использованием CNAME (поэтому вы можете использовать custom.domain.com -> CNAME -> custom.domain. com.s3.amazonaws.com, где "custom.domain.com" - это сегмент. Документация AWS

Я вижу, что в библиотеке boto есть boto.s3.connection.SubdomainCallingFormat и класс boto.s3.connection.VHostCallingFormat ...

Кто-нибудь знает, как я могу настроить boto.s3, где сгенерированные URL-адреса предназначены для моего собственного настраиваемого домена вместо значения по умолчанию?

1 Ответ

2 голосов
/ 19 октября 2010
  1. Ваши записи CNAME уже должны указывать на вашу корзину S3.
  2. Ваша корзина S3 также должна называться custom.domain.com
  3. Убедитесь, что вы можете получить доступ к своим файлам с custom.domain.com в своем браузере.

Как только это будет сделано, следующий фрагмент, который я написал, напечатает URL-адреса всех файлов в ключе:

import sys
import boto.s3
from boto.s3.connection import VHostCallingFormat
from boto.s3.connection import S3Connection

def main():
    access_key = "<AWS_ACCESS_KEY>"
    secret_key = "<AWS_SECRET_KEY>"
    bucket = "custom.domain.com"

    # assuming you have your files organized with keys
    key_prefix = "css"
    key_prefix = key_prefix + "/"

    conn = S3Connection(access_key, secret_key, calling_format=VHostCallingFormat())
    bucket = conn.get_bucket(bucket)

    # get all the keys with the prefix 'css/' inside said bucket
    keys = bucket.get_all_keys(prefix=key_prefix)

    for k in keys:
        print k.generate_url(3600, query_auth=False, force_http=True)

    # output:
    # http://custom.domain.com/css/ie.css
    # http://custom.domain.com/css/print.css
    # http://custom.domain.com/css/screen.css
    # http://custom.domain.com/css/style.min.css

if __name__ == '__main__':
    main()
...