/ / Python Boto S3 для роботи з користувацькими доменами в Amazon S3 - python, субдомен, cname, boto, amazon-s3

Python Boto S3 для роботи з користувацькими доменами в Amazon S3 - python, subdomain, cname, boto, amazon-s3

Як використовувати бібліотеку Python Boto з S3, де URL-адреса, яку він створює, буде моїм субдоменом CNAME d на сервері 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, для мого власного домену замість типового?

Відповіді:

2 для відповіді № 1
  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()