2016-11-11 48 views
0

這裏是我能想到的,但不知道這是最好的方式不同的方式把它們以EC2 Linux實例:檢索文件和使用Java

  1. 建立在Java中使用GetObject一個控制檯應用程序在AWS Java SDK提供。使用s3 sync
  2. 使用SNS> Lambda。使用REST API
  3. 使用SNS> HTTPS (Java Servlet)

性能很重要,因爲我可能需要將許多變量大小的文件拉到linux實例。

我在選項1中看到的問題是我需要進行某種輪詢行爲。

使用選項2我不知道(a)是否需要定期運行此命令,或者它是否一直運行同步文件(b)如果它只運行一次,如何將它包裝在java程序中?我也是Java和Linux的新手。如果這是.Net和Windows,我會創建一個Windows服務,但不知道什麼是Java/Linux的等價物。

選項3不在桌面上,因爲Lambda被排除(長篇故事)。

那麼就性能,可維護性和可擴展性而言,哪種方法可以做到這一點呢?我需要監視的S3存儲桶的數量會隨着文件的頻率/大小而變化(增加)。

感謝

+1

*我選擇1所看到的問題是,我需要有一個適當某種輪詢行爲* - 爲什麼這是一個問題? cron的?或一個Java解決方案? –

+2

你能否更清楚地描述你的要求?例如,您是否說您需要立即將數據從S3複製到EC2,或者是常規批次可接受?哦,'aws s3 sync'是一次性的,不是連續的 - 你必須定期運行它來複制新文件。 –

+0

@Scary Wombat:這不是問題,而只是我必須處理的事情。我在想,我將不得不跟蹤已處理的文件,但我也可以在將它們複製到linux實例後將它們移動到已處理的存儲桶中。如果這是您的選擇,那麼您有什麼建議可以避免,或者是否有任何投票的示例代碼?不太熟悉Java和Linux,所以不勝感激。 – Pete

回答

1

只是好奇 - 你說你不熟悉Java和/或Linux,但你需要解決的問題。將使用Python而不是Java是一個選項?根據我的經驗,使用外部程序包依賴關係的python項目比java更簡單快捷。

你可以使用你和別人上面列出的解決方案的混合: 調用一個python腳本 2. Python腳本1. cron作業使用「S3同步」數據同步下來 3.無論是另一個S3調用將sync'd文件移動到另一個存儲桶(或文件夾)或重命名這些文件以將它們標記爲'已處理'

這是一個很好的開始,可以隨時用更多的邏輯「加固」,以使萬無一失。我會建議嘗試像我上面列出的(使用Python),並使用一個或兩個測試桶來創建你的想法。如果您堅持快速的「輪詢」時間表,您可以在幾小時內得到答案。 HTH

+0

謝謝。我只是看着http://stackoverflow.com/questions/24102666/local-access-to-amazon-s3-bucket-from-ec2-instance?rq=1,我看到s3fs-fuse和boto是選項好。我們是.net開發人員要求使用java,所以雖然我知道python,但我不認爲這將是一個可行的選擇,因爲團隊中沒有其他人能夠支持它。 – Pete

1

使用Lambda函數通過SSH將文件從S3 Bucket複製到EC2。 觸發:S3對象創建

檢查此鏈接:https://privatedock.wordpress.com/2017/08/21/s3-bucket-ec2-directory-sync-using-lambda/

+0

鼓勵與外部資源的鏈接,但請在鏈接上添加上下文,以便您的同行用戶瞭解它是什麼以及它爲什麼在那裏。如果目標網站無法訪問或永久離線,請始終引用重要鏈接中最相關的部分。請參閱[如何回答](https://stackoverflow.com/help/how-to-answer) – SilverNak