2010-03-02 3 views
4

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

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

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

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

ответ

2
  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()