从Amazon S3迁移到Azure存储(Django Web应用程序)

3
我维护这个 Django 网络应用程序,用户可以在其中聚集并相互聊天。他们也可以发布图片。我会处理这些照片(即优化它们的大小),并将它们存储在 Amazon S3 存储桶中(类似于 Azure 存储中的“容器”)。为此,我在 Amazon 上设置了存储桶,并在我的 settings.py 中包含了以下配置代码:
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_S3_FORCE_HTTP_URL = True
AWS_QUERYSTRING_AUTH = False
AWS_SECRET_ACCESS_KEY = os.environ.get('awssecretkey')
AWS_ACCESS_KEY_ID = os.environ.get('awsaccesskeyid')
AWS_S3_CALLING_FORMAT='boto.s3.connection.OrdinaryCallingFormat'
AWS_STORAGE_BUCKET_NAME = 'dakadak.in'

此外,我的虚拟环境中安装了 Boto 2.38.0django-storages 1.1.8Boto 是一个提供与 Amazon Web Services 接口的 Python 包,而 django-storages 是 Django 的自定义存储后端集合。
我现在想停止使用 Amazon S3,转而迁移到 Azure Storage。也就是说,我需要将所有现有文件从 S3 迁移到 Azure 存储,并且接下来我需要配置我的 Django 应用程序以将所有新的静态资源保存在 Azure 存储上。
我找不到关于我要实现的精确文档。虽然我知道 django-storages 支持 Azure。之前有人做过这种迁移吗?能否指出我需要从哪里开始,需要遵循哪些步骤才能使一切正常运行? 注意:如果需要更多信息,请问我。
2个回答

2
根据我的经验,您可以为Django Web应用程序执行两个步骤以从Amazon S3迁移到Azure Storage。
第一步是将所有文件从S3移动到Azure Blob Storage。有两种方法可以尝试。
1.使用S3和Azure Storage工具将文件从S3移动到本地目录到Azure Blob Storage。
以下是可帮助将文件移动到本地目录的S3工具:
AWS命令行(https://aws.amazon.com/cli/): aws s3 cp s3://BUCKET/FOLDER localfolder --recursive S3cmd工具(http://s3tools.org/): s3cmd -r sync s3://BUCKET/FOLDER localfolder S3浏览器(http://s3browser.com/) :这是一个GUI客户端。
要将本地文件移动到Azure Blob Storage,您可以使用AzCopy命令行实用程序进行高性能上传、下载和复制数据到和从Microsoft Azure Blob、File和Table存储,请参阅文档https://azure.microsoft.com/en-us/documentation/articles/storage-use-azcopy/
示例:AzCopy /Source:C:\myfolder /Dest:https://myaccount.blob.core.windows.net/mycontainer 2.通过编程使用Amazon S3和Azure Blob Storage API,在您熟悉的语言中(如Python、Java等)进行迁移。请参阅它们的API使用文档https://azure.microsoft.com/en-us/documentation/articles/storage-python-how-to-use-blob-storage/http://docs.aws.amazon.com/AmazonS3/latest/API/APIRest.html
第二步是按照文档http://django-storages.readthedocs.org/en/latest/backends/azure.html重新配置Django settings.py文件。 Django-storages将允许您执行的任何上传自动存储在您的存储容器中。
DEFAULT_FILE_STORAGE='storages.backends.azure_storage.AzureStorage'
AZURE_ACCOUNT_NAME='myaccount'
AZURE_ACCOUNT_KEY='account_key'
AZURE_CONTAINER='mycontainer'

您可以像@neolursa所说的那样,在Azure门户上找到这些设置。
编辑: 在旧版Azure门户中: enter image description here 在新版Azure门户中: enter image description here

@HassanBaig 在 Azure 旧门户中,您可以通过点击 MANAGE ACCESS KEYS(位于 Storage -> <Your Storage> 底部)找到它。在 Azure 新门户中,您可以通过 <Your Storage> Storage account (classic) -> All settings -> Keys 找到它。如果您仍然找不到,请随时告诉我。我会向您展示截图。 - Peter Pan
1
@HassanBaig 我认为你所说的Azure Container指的是 Blob 存储容器。是的,你可以创建任何符合容器命名规则的 Blob 容器。请参考 https://azure.microsoft.com/zh-cn/documentation/articles/storage-python-how-to-use-blob-storage/#create-a-container 注意 IMPORTANT 通知。 - Peter Pan
@HassanBaig 据我所知,由于端点基于 HTTPS 协议,所以没有属性可以实现该功能。如果您使用的是 HTTP URL,它将被强制重写为 HTTPS URL。因此,如果您有任何疑虑,请随时告诉我。 - Peter Pan
我在internet.org的平台上有一个正在运行的应用程序。迄今为止,Facebook禁止其开发人员使用https协议,但我将再次向他们的技术支持团队提问。我希望能够使用Azure存储而不是S3来实现这个目标。让我们看看。 - Hassan Baig
关于Azure云配置有一个后续问题。我想单独在Stack Overflow上发布一个帖子:http://stackoverflow.com/questions/34266346/azure-cloud-storage-config-error-in-django-app-could-not-load-azure-bindings - Hassan Baig
@HassanBaig 好的,我会遵循新的要求。 - Peter Pan

1
您分享的链接包含了Django到Azure Blobs的配置。当我这样做时,我只需要进入Azure门户网站,在存储帐户下获取访问密钥,如下所示。然后创建一个容器,并将容器名称提供给Django配置。这应该就足够了。但是我之前做过这个。
对于第二部分,从S3存储桶迁移当前文件到BLOB,有几个工具可以使用:
如果您使用Visual Studio,则可以在输入Visual Studio中的Azure帐户凭据后,在Server Explorer下找到Blobs。
或者,您可以使用第三方工具,例如Azure Storage ExplorerCloudberry explorer
希望这能帮到您!

enter image description here


我打算试一下。你能分享一下你的settings.py中的任何片段吗?另外,这里不需要像boto这样的东西吗? - Hassan Baig
1
我来看看能否找到项目文件。与此同时,这里有两个链接。第一个链接是关于如何在Microsoft Azure文档中使用Python与Azure存储的指南。第二个链接是一个已连接到Azure存储的Django示例代码。 https://azure.microsoft.com/zh-cn/documentation/articles/storage-python-how-to-use-blob-storage/ https://pypi.python.org/pypi/django-azure-storage - neolursa
嘿neolursa:我在这方面取得了一些进展,但现在遇到了这个错误:'module'对象没有属性'WindowsAzureMissingResourceError'。详细信息请参见:https://dev59.com/s5Lea4cB1Zd3GeqPxAhd - Hassan Baig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接