2010-03-02 4 views
4

Comment utiliser la bibliothèque Python Boto avec S3 où l'URL qu'il génère sera mon sous-domaine CNAME au serveur Amazon S3.Python Boto S3 pour travailler avec des domaines personnalisés dans Amazon S3

Par défaut, il utilise le format par défaut BUCKETNAME.s3.amazonaws.com mais S3 prend en charge aliasing de domaine personnalisé à l'aide CNAME (vous pouvez donc avoir custom.domain.com -> CNAME -> custom.domain.com.s3 .amazonaws.com où "custom.domain.com" est le seau. AWS Documentation

Je vois que la bibliothèque de Boto a boto.s3.connection.SubdomainCallingFormat et classe boto.s3.connection.VHostCallingFormat ...

Quelqu'un sait-il comment je peux configurer le boto.s3 où les URL de génération sont pour mon propre domaine personnalisé au lieu de la valeur par défaut?

Répondre

2
  1. Vos enregistrements CNAME doivent déjà pointer vers votre compartiment S3.
  2. Votre compartiment S3 doit également être nommé custom.domain.com
  3. Vérifiez que vous êtes en mesure d'accéder à vos fichiers depuis custom.domain.com dans votre navigateur.

Une fois cela fait, l'extrait suivant j'ai écrit imprimera à tous les fichiers de l'URL dans une clé:

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