Amazon Glacier的Scala客户端

Amazon Glacier是一项安全,耐用且成本极低的云存储服务,用于数据归档和长期备份。 Glacier提供了一种冷藏数据存档解决方案,这意味着已存储的数据不可立即检索。 您首先需要请求检索数据,访问时间可能从几分钟到几小时不等,具体取决于您选择的服务级别。

冷藏库乍一看可能很麻烦,但它也有其优点。 没有人能够不小心修改重要的存档文件。 如果需要,也可以完全防止删除。

Glacier设计用于不经常且异常的检索的用例,并且数据将被长时间存储。

概念

如果您以前从未使用过AWS服务或Glacier,则首先学习一些概念会有所帮助:

AWS区域 –同一地理区域中的一组命名的AWS资源。 区域彼此完全隔离,因此当您查看资源时,只会看到与指定区域相关联的资源。 用Glacier术语来说,存储的数据绑定到特定区域。 冰川存储价格因地区而异。

保管库 –用于以存档形式存储数据的容器。 保管库中可以存储无限数量的档案。 保管库及其内容仅在创建它们的区域中可用。 访问权限,通知和合规性控件在Vault级别上配置。

存档 –存档可以是任何数据,例如照片,视频或文档,并且是Amazon Glacier中存储的基本单位。 每个档案都有唯一的ID和可选的描述。 您可以上传一个文件作为存档,但是如果您汇总数据,则费用会更低。 存储在Amazon Glacier中的档案是不可变的,即可以上传,下载和删除档案,但不能像Dropbox这样的服务进行编辑或覆盖。

(库)清单 – AWS控制台将显示一个库清单,但不显示库内容或清单清单。 需要单独请求库存以进行检索,而完成该请求可能需要几个小时。

作业 –检索档案或保管库存(档案列表)是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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348770.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Drawable Resources

https://developer.android.com/guide/topics/resources/drawable-resource.html#Transition

SwipeRefreshLayout官方推荐下拉刷新

SwipeRefreshLayoutpublic class SwipeRefreshLayout extends ViewGroup implements NestedScrollingParent, NestedScrollingChildjava.lang.Object↳android.view.View↳android.view.ViewGroup↳ android.support.v4.widget.SwipeRefreshLayout API doc:http://…

jboss加载组件_直接从JBoss AS 7组件使用JGroups

jboss加载组件JGroups是Bela Ban的用于可靠消息交换的软件,该软件高度可配置,可以使用TCP或UDP作为传输协议。 基本上,您在多个客户端上运行JGroup,它们构成一个集群,它们可以在集群内发送和接收消息。 JGroups由JBos…

开源PagerSlidingTabStrip的使用Tab与ViewPager的完美结合

链接地址&#xff1a;https://github.com/astuetz/PagerSlidingTabStrip 下载PagerSlidingTabStrip-master 将com.astuetz包&#xff0c;res下的下的资源复制进工程 布局文件&#xff1a;activity_main.xml <RelativeLayout xmlns:android"http://schemas.android.co…

如何处理异常

最近&#xff0c;我与一个朋友进行了讨论&#xff0c;他是一个相对初级但很聪明的软件开发人员。 她问我有关异常处理的问题。 这些问题指出了一种技巧和窍门&#xff0c;肯定有它们的清单。 但是我坚信我们编写软件的方式背后的背景和动机&#xff0c;因此我决定从这种角度写关…

android动画详解

转自&#xff1a;工匠若水 http://blog.csdn.net/yanbober 1 背景 不能只分析源码呀&#xff0c;分析的同时也要整理归纳基础知识&#xff0c;刚好有人微博私信让全面说说Android的动画&#xff0c;所以今天来一发Android应用的各种Animation大集合。英文厉害的请直接移步参考…

凹数科技笔试

一、Java 1、成员变量作用域public/protected/defaultprivate/区别&#xff1f; public&#xff1a;该成员变量或其方法对当前类、同一包、子类、其他包都可见&#xff0c;所有类和对象都可以直接访问。 protected&#xff1a;该成员变量或其方法对当前类、同一包、子类都可…

jsr250-api_JSON处理的Java API(JSR-353)–流API

jsr250-apiJava很快将具有一组标准的API&#xff0c;作为Java EE 7的一部分处理JSON。该标准定义为JSR 353 – JSON处理的Java API &#xff08;JSON-P&#xff09;&#xff0c;目前正在最终批准投票中。 JSON-P提供面向对象和基于流的方法&#xff0c;在本文中&#xff0c;我将…

上传至GitHub

在工作目录下&#xff1a; git init git status git add . git commit -m"IndoorLocation" git status git remote add origin githttps://github.com/HiSunny/HelloInLoc.git git pull https://github.com/HiSunny/HelloInLoc.git master git push https://…

弹簧和线程:事务

为了能够在我们的线程中使用事务&#xff0c;我们需要了解事务如何在spring中工作。 spring中的事务信息存储在ThreadLocal变量中。 因此&#xff0c;这些变量特定于单个线程上正在进行的事务。 当涉及由单个线程运行的动作时&#xff0c;事务将在分层调用的Spring组件之间传播…

eclipse误删文件

右键工程--->restore from local history

Activity的LaunchMode和taskAffinity

Thanks to:http://www.cnblogs.com/SteveMing/archive/2012/04/24/2459575.html 【原】Activity的LaunchMode和taskAffinity 做项目到现在都一直没有理解LaunchMode有什么用&#xff0c;或许根本就没真正花心思去看&#xff0c;所以今天把这部分整理下。 设置Activity的Launc…

RelativeLayout重要属性

RelativeLayout用到的一些重要的属性&#xff1a;第一类:属性值为true或falseAndroid:layout_centerHrizontal 水平居中android:layout_centerVertical 垂直居中android:layout_centerI…

gradle spring_使用Gradle的简单Spring MVC Web应用程序

gradle spring除了我们现在将使用Spring MVC而不是原始servlet之外&#xff0c;该文章将与我们之前的文章Simple Gradle Web Application相似。 使用Gradle运行基本的Spring MVC应用程序确实很容易。 您可以在Github上下载本教程的源代码。 先决条件 安装Gradle 我们的基本项…

绘制Nine-Patch图片

Android sdk----->tools----->draw9patch.bat 打开draw9patch.bat文件 File--》open 0-patch将要绘制的.png图片加载进来 ctrl 图片边缘点击鼠标左键 绘制出线条&#xff0c;表示图片需要被拉伸的部分 File--save 9-patch 文件名pp.9.png。

jms spring_JMS和Spring:有时很重要的小事情

jms springJmsTemplate和DefaultMessageListenerContainer是用于访问JMS兼容MOM的Spring帮助器。 他们的主要目标是在JMS API之上形成一层&#xff0c;并处理诸如事务管理/消息确认之类的基础结构&#xff0c;并隐藏JMS API的某些重复和笨拙的部分&#xff08;保留在那里&#…

重温1 Android系统架构及版本

1、Linux内核层(Linux Kernel) 为Android设备的各种硬件提供了底层驱动&#xff0c;Display Driver/Camera Driver/Bluetooth Driver/Flash Memory Driver/Binder(IPC)Driver/USB Driver/Keypad Driver/WiFi Driver/Audio Drivers/Power Management 2、Libraries/Android Run…

REST资源何时应获得其自己的地址?

在纯粹的REST方法中&#xff0c;所有端点&#xff08;起始端点除外&#xff09;都是不透明的&#xff0c;不需要发布其各种详细信息。 即使使用这种方法&#xff0c;本文中的要点也很重要&#xff0c;因为服务器逻辑将必须确定何时需要结束点。 介绍 在REST体系结构中&#xf…

重温2 在Activity中使用Menu

1、引用string.xml中的字符串 1) 代码中 R.string.hello_world 2) XML中string/hello_world 2、AndroidManifest <activityandroid:name".MainActivity"android:label"string/app_name" ><intent-filter><action android:name"andr…

玩转大数据22:常见的关联规则挖掘算法

引言 关联规则挖掘是数据挖掘中的一种重要技术&#xff0c;主要用于发现数据集中项之间的有趣关系。关联规则挖掘在许多领域都有广泛的应用&#xff0c;如市场篮子分析、推荐系统等。常见的关联规则挖掘算法包括Apriori算法和FP-Growth算法。 一、Apriori算法 关联规则挖掘是…