部署到數千個 Amazon S3 賬戶?
我們執行一項服務,提供基於 Web (PHP) 的應用程序的“工作”,並且圖像、JS、CSS 等託管在客戶自己的 Amazon S3 帳戶上。
這樣他們就可以獲得 S3 使用的綜合賬單(該應用程序使用 S3 本身),我們不必補貼他們的頻寬(沒有月費,所以隨著它的增長,它只會花費我們更多和更多錢)。
我們現在有 1000 多個客戶,並且向他們推送更新(例如 JS 更新)需要非常長的時間,而且這個數字將在未來幾個月內呈指數增長。
我曾考慮過我們擁有的源 S3 儲存桶,然後在我們的 S3 儲存桶和他們的 S3 儲存桶之間執行 COPY 請求而不是上傳。這仍然需要時間,但比現在上傳要快得多。但是,我聽說如果不使用中間伺服器就無法在兩個完全獨立的 S3 帳戶之間進行複制(這顯然會破壞對象並且實際上會使時間加倍)。
真的嗎?誰能想到另一種方法來做到這一點?
這是一個非常好的問題。
上次我甚
COPY
至在不同地區之間檢查也沒有用。我知道Cloudberry 的 Explorer 應用程序具有在 S3 帳戶之間複製數據的功能,你能用它做一個測試嗎?我沒試過,它只是Windows。我想如果它有效,那就是嘗試 API 的問題。
您的所有客戶都在同一個地區嗎?因為如果
COPY
帳戶之間不起作用,我會啟動一個(或多個)實例以加快程序。如果每個人都在同一個區域,則不應收取頻寬費用。這並不理想,但我想通過多個實例,您可以以不到 10 美元的價格完成大量工作。並且應該也可以自動化設置。
更新
所以要詳細說明EC2。EC2 實例就像另一台伺服器。我最初建議這樣做,這樣您就可以下載文件一次並將其上傳到AWS內的其他 S3 賬戶,這樣您就可以節省頻寬費用(如果儲存桶和實例位於同一區域,則它是免費的)。
無論如何,EC2 實例就像一個伺服器,它需要一些設置來引導它。例如自定義 AMI,或任何 AMI 和一些
user-data
(傳遞給實例並在首次啟動時執行的 shell 腳本)。您可能需要安裝 PHP、Amazon SDK 等——所有這些都可以自動化。問題是,我不完全確定您的情況是否有必要。
查看以下範常式式碼: http ://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?CopyingObjectUsingPHP.html
它展示瞭如何將數據從一個儲存桶複製到另一個儲存桶。由於儲存桶名稱在所有 S3 中都是唯一的,因此這應該不是問題。我認為您需要做的就是向您自己的 AWS 賬戶上的每個人(至少是暫時的)**閱讀文件,然後遍歷並將文件複製到您客戶的 AWS 賬戶。
我認為您可以在任何地方發布該程式碼,而不必擔心頻寬費用,因為
COPY
應該都是內部的。無需下載實際文件。不確定您是否查看了文件,但似乎 AWS 需要某種原始標頭 (
x-amz-copy-source
),然後它會處理其餘部分。高溫高壓