glacier2_Amazon Glacier的Scala客户端
glacier2
Amazon Glacier是一項安全,耐用且成本極低的云存儲服務,用于數據歸檔和長期備份。 Glacier提供了一種冷藏數據存檔解決方案,這意味著已存儲的數據不可立即檢索。 您首先需要請求數據檢索,訪問時間可能從幾分鐘到幾小時不等,具體取決于您選擇的服務級別。
冷藏庫乍一看可能很麻煩,但它也有其優點。 沒有人能夠不小心修改重要的存檔文件。 如果需要,也可以完全防止刪除。
Glacier設計用于不經常且異常的檢索的用例,并且數據將被長時間存儲。
概念
如果您以前從未使用過AWS服務或Glacier,則首先學習一些概念會有所幫助:
AWS區域 –同一地理區域中的一組命名的AWS資源。 區域完全相互隔離,因此,當您查看資源時,只會看到與指定區域相關聯的資源。 用Glacier術語來說,存儲的數據綁定到特定區域。 冰川存儲價格因地區而異。
保管庫 –用于以存檔形式存儲數據的容器。 保管庫中可以存儲無限數量的檔案。 保管庫及其內容僅在創建它們的區域中可用。 訪問權限,通知和合規性控件在Vault級別上配置。
存檔 –存檔可以是任何數據,例如照片,視頻或文檔,并且是Amazon Glacier中存儲的基本單位。 每個檔案都有唯一的ID和可選的描述。 您可以上傳單個文件作為存檔,但是如果您匯總數據,則費用會更低。 存儲在Amazon Glacier中的檔案是不可變的,即可以上傳,下載和刪除檔案,但不能像Dropbox這樣的服務進行編輯或覆蓋。
(庫)清單 – AWS控制臺將顯示一個庫清單,但不顯示庫內容或清單清單。 需要單獨請求庫存以進行檢索,而完成該請求可能需要幾個小時。
Job –檢索檔案或保管庫存(檔案列表)是Amazon Glacier中的異步操作。 您首先啟動任務,然后在Amazon Glacier完成任務后下載任務輸出。 使用Amazon Glacier,您的數據檢索請求將排隊,并且作業將需要數小時才能完成。
通知配置 –由于作業需要時間才能完成,因此Amazon Glacier支持通知機制,以在作業完成時通知您。 您可以配置保管庫,以在作業完成時將通知發送到Amazon Simple Notification Service(Amazon SNS)主題。 您可以在通知配置中為每個保管庫指定一個SNS主題。
可以在以下位置找到有關這些概念的更多信息: Amazon Glacier數據模型
冰川客戶
Amazon Glacier可以與Amazon AWS CLI一起使用,但是使用起來非常笨拙,尤其是對于檔案上傳。 一些備份工具支持基于Glacier的存儲,但是我遇到的那些備份工具似乎不適合服務器端備份或編程用途。 Amazon AWS Console允許您例如創建和配置保管庫,但不支持存檔操作。
Glacier客戶端是我創建的用于與Amazon Glacier一起使用的簡單工具。 它旨在支持交互式使用(與Scala REPL一起使用)以及與Scala或Java一起以編程方式使用。 非常適合服務器端使用。 Glacier客戶端基于適用于Java的Amazon AWS開發工具包構建。
該代碼可以在GitHub上找到: https : //github.com/marko-asplund/glacier-client
設置冰川
AWS配置
要使用Glacier,您需要首先在AWS Console中設置一個AWS用戶帳戶和權限,如下所示:
- 在AWS IAM中創建用戶賬戶(身份和訪問管理)
- 授予用戶以下權限:AmazonGlacierFullAccess,授予AmazonSQSFullAccess,AmazonSNSFullAccess
- 創建訪問密鑰
某些操作(例如創建文件庫清單或準備要下載的存檔)是異步執行的。 設置通知將對這些操作有所幫助。 您需要在Vault上啟用通知并在AWS Console中配置相應的SNS主題。
Glacier客戶端設置
設置AWS憑證
設置Glacier客戶端授權的最簡單方法是配置“默認憑證配置文件”,如使用AWS憑證中所述 。
個人檔案文件是一種具有簡單文件格式的文本文件,因此您可以按照上述頁面上的說明,僅使用文本編輯器進行設置。
您還可以通過使用AWS CLI調用“ aws configure”命令來設置默認憑證文件來設置文件,如AWS CLI configure options中所述 。
獲取冰川客戶
要運行glacier-client,您需要安裝Git,sbt和Java JRE。
git clone https://github.com/marko-asplund/glacier-client.git cd glacier-client基本操作
使用sbt啟動Scala REPL
~/glacier-backup-cli (master ?) ? sbt console[info] Loading settings from plugins.sbt ... [info] Loading project definition from /Users/marko/glacier-backup-cli/project [info] Loading settings from build.sbt ... [info] Set current project to glacier-backup-cli (in build file:/Users/marko/glacier-backup-cli/) [info] Starting scala interpreter... Welcome to Scala 2.11.11 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_151). Type in expressions for evaluation. Or try :help.列出可用的AWS區域的名稱
scala> fi.markoa.glacier.GlacierClient.regions res0: Array[String] = Array(us-gov-west-1, us-east-1, us-east-2, us-west-1, us-west-2, eu-west-1, eu-west-2, eu-central-1, ap-south-1, ap-southeast-1, ap-southeast-2, ap-northeast-1, ap-northeast-2, sa-east-1, cn-north-1, ca-central-1)創建連接到us-west-2區域的Glacier客戶
scala> val c = fi.markoa.glacier.GlacierClient("us-west-2") c: fi.markoa.glacier.GlacierClient = fi.markoa.glacier.GlacierClient@11b6e34a創建新的保管庫。 返回新創建的保管庫的ID(或ARN)。
scala> c.createVault("test-vault-1") res1: String = /429963740182/vaults/test-vault-1列出該地區的所有保管庫。 返回一個保管庫對象序列,在這種情況下,它僅包含我們上面創建的保管庫。 請注意,使用Vault操作時,結果將立即可見。
scala> c.listVaults res2: Seq[fi.markoa.glacier.Vault] = ArrayBuffer(Vault(arn:aws:glacier:us-west-2:429963740182:vaults/test-vault-1,test-vault-1,2017-11-19T08:18:38.990Z,None,0,0))現在,我們準備將檔案上傳到Vault中:
scala> c.uploadArchive("test-vault-1", "my backup archive", "my-backup.zip") TransferStarted: transfer started TransferProgress: transfer progress: 5% (bytes: 516096) TransferProgress: transfer progress: 10% (bytes: 1024000) TransferProgress: transfer progress: 15% (bytes: 1540096) TransferProgress: transfer progress: 20% (bytes: 2048000) TransferProgress: transfer progress: 25% (bytes: 2564096) TransferProgress: transfer progress: 30% (bytes: 3072000) ... TransferProgress: transfer progress: 90% (bytes: 9216000) TransferProgress: transfer progress: 95% (bytes: 9732096) TransferProgress: transfer progress: 100% (bytes: 10240000) TransferCompleted: transfer completed res3: fi.markoa.glacier.Archive = Archive(WREjqj2BItYhI5BGV7mdJGsDl3oztPvpvVh_hngm5SWqJkOd5jnLipLyYy2KkM74-3mkt85nUjI4a_hcQZhtLnQF03K0sv2Bc97BYEwYQ7M4O_lmtgrCTuGCyAEEiuQmCFfRSnBkTw,Some(my-backup.zip),0c5dc86251d157e29cfadb04ac615426600a4e1177a8ac2c1134d895378b3acd,10240000,Some(my backup archive))請注意,Glacier不會維護最新的列表保管庫內容-需要明確請求內容列表,并且準備過程可能會花費很長時間。 因此,Glacier客戶端會為每個保管庫存儲本地檔案目錄。 保管庫內容可以列出如下:
scala> c.catListArchives("test-vault-1") res4: Seq[fi.markoa.glacier.Archive] = ArraySeq(Archive(WREjqj2BItYhI5BGV7mdJGsDl3oztPvpvVh_hngm5SWqJkOd5jnLipLyYy2KkM74-3mkt85nUjI4a_hcQZhtLnQF03K0sv2Bc97BYEwYQ7M4O_lmtgrCTuGCyAEEiuQmCFfRSnBkTw,Some(my-backup.zip),0c5dc86251d157e29cfadb04ac615426600a4e1177a8ac2c1134d895378b3acd,10240000,Some(my backup archive)))在提取檔案之前需要準備檔案,準備工作可能需要幾個小時。 因此,異步檢索它們通常更方便:1)請求歸檔檢索,而Glacier完成歸檔準備后,您可以2)下載。
scala> c.prepareArchiveRetrieval("test-vault-1", "WREjqj2BItYhI5BGV7mdJGsDl3oztPvpvVh_hngm5SWqJkOd5jnLipLyYy2KkM74-3mkt85nUjI4a_hcQZhtLnQF03K0sv2Bc97BYEwYQ7M4O_lmtgrCTuGCyAEEiuQmCFfRSnBkTw") res1: Option[String] = Some(h479o4kxdawFsho0POzQAznw6e6beampFAIBYuI7s41O_HmzqqWsg2qk2vL2Lw_4MOsI1VFarvokz7NXczBq0CrwPKzv)歸檔檢索已添加到Vault的作業列表中。 您可以列出未完成的作業,如下所示:
scala> c.listJobs("test-vault-1") res4: Seq[fi.markoa.glacier.Job] = ArrayBuffer(Job(h479o4kxdawFsho0POzQAznw6e6beampFAIBYuI7s41O_HmzqqWsg2qk2vL2Lw_4MOsI1VFarvokz7NXczBq0CrwPKzv,arn:aws:glacier:us-west-2:429963740182:vaults/test-vault-1,ArchiveRetrieval,null,2017-11-19T09:00:34.339Z,InProgress,null,None,Some(WREjqj2BItYhI5BGV7mdJGsDl3oztPvpvVh_hngm5SWqJkOd5jnLipLyYy2KkM74-3mkt85nUjI4a_hcQZhtLnQF03K0sv2Bc97BYEwYQ7M4O_lmtgrCTuGCyAEEiuQmCFfRSnBkTw)))注意正在進行的狀態。 存檔準備工作完成后,作業列表將如下所示:
scala> c.listJobs("test-vault-1") res8: Seq[fi.markoa.glacier.Job] = ArrayBuffer(Job(h479o4kxdawFsho0POzQAznw6e6beampFAIBYuI7s41O_HmzqqWsg2qk2vL2Lw_4MOsI1VFarvokz7NXczBq0CrwPKzv,arn:aws:glacier:us-west-2:429963740182:vaults/test-vault-1,ArchiveRetrieval,null,2017-11-19T09:00:34.339Z,Succeeded,Succeeded,Some(2017-11-19T12:52:38.363Z),Some(WREjqj2BItYhI5BGV7mdJGsDl3oztPvpvVh_hngm5SWqJkOd5jnLipLyYy2KkM74-3mkt85nUjI4a_hcQZhtLnQF03K0sv2Bc97BYEwYQ7M4O_lmtgrCTuGCyAEEiuQmCFfRSnBkTw)))設置通知使您不必定期輪詢作業完成狀態,而不必接收通知。 可以通過AWS控制臺設置通知。
然后可以使用檢索作業ID從Glacier下載準備好的檔案:
scala> c.downloadPreparedArchive("test-vault-1", "h479o4kxdawFsho0POzQAznw6e6beampFAIBYuI7s41O_HmzqqWsg2qk2vL2Lw_4MOsI1VFarvokz7NXczBq0CrwPKzv", "my-backup-restored.zip") TransferStarted: transfer started TransferProgress: transfer progress: 5% (bytes: 520869) TransferProgress: transfer progress: 10% (bytes: 1025701) TransferProgress: transfer progress: 15% (bytes: 1547941) TransferProgress: transfer progress: 20% (bytes: 2052773) TransferProgress: transfer progress: 25% (bytes: 2575013) TransferProgress: transfer progress: 30% (bytes: 3079845) ... TransferProgress: transfer progress: 90% (bytes: 9228965) TransferProgress: transfer progress: 95% (bytes: 9736869) TransferProgress: transfer progress: 100% (bytes: 10240000) TransferCompleted: transfer completed基本操作就是這樣!
Glacier客戶端讓您執行的其他一些任務包括刪除保管庫,請求保管庫清單(保管庫包含的檔案列表),下載清單和刪除檔案。
翻譯自: https://www.javacodegeeks.com/2017/11/scala-client-amazon-glacier.html
glacier2
總結
以上是生活随笔為你收集整理的glacier2_Amazon Glacier的Scala客户端的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python异常值如何处理_如何处理异常
- 下一篇: 电脑主板没供电是什么原因(主板不供电是什