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

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

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

相关文章

c 调用c语言dll数组,C#调用C类型dll入参为struct的问题详解

前言C# 可以通过 DllImport 的方式引用 C 类型的 dll。但很多 dll 的参数不会是简单的基础类型,而是结构体 struct 。因此就需要在 C# 端定义同样的结构体类型,才能实现调用 C 类型 dll。这里例举几种不同的结构体情况,以及其对应的解决方案。…

Slackware Linux 的发展历程

目前可供Linux用户使用的 发行版有很多种,它们虽基于共同的内核,但在安装、提供的应用程序、服务等方面各具特色,并拥有各自的用户群体。Slackware Linux是一个历史比较悠久的发行版,它的存在见证了Linux的发展历程,它…

golang 泛型_Golang 1.x版本泛型编程

本文介绍了Golang 1.x版本的泛型编程。往期回顾:浅谈动态追踪技术Go是一门天生为服务器程序设计的简洁的语言,因此Go的设计原则聚焦在可扩展性、可读性和并发性,而多态性并不是这门语言的设计初衷,因此就被放在了一边。虽然在2.0版…

jwt令牌_JWT令牌的秘密轮换

jwt令牌当您使用JSON Web令牌 ( JWT )或需要对有效载荷信息进行签名或加密的任何其他令牌技术时,设置令牌的到期日期很重要,因此,如果令牌到期,则可以假定这可能被视为安全漏洞,您拒绝使用此令牌…

linux android build tools,build.gradle 文件中的 Android SDK Build Tools version

build.gradle 文件中的 Android SDK Build Tools versionAndroid,Gradle,SDK2018.07.17在 Android Gradle Plugin 3.0.1 中,最低的 Android SDK Build Tools 是 26.0.2,而我声明的 25.0.0 将被忽略掉。今天新建了一个 Android 项目的时候,无意…

Linux 常用的软件包管理器/软件包管理工具

文章目录RPMYUMDNFDPKGPacmanZypperPortageEopkgUrpmiRPM 代表系统:RHEL、CentOS、Fedora、openSUSE、SUSE企业版、PCLinuxOS、Mandriva Linux、Mageia 等 主命令:rpm YUM 代表系统:RHEL、CentOS 主命令:yum DNF 这是基于 RP…

怎样用C语言实现五子棋,C语言实现五子棋

可以称得上史上最简单的五子棋版本了。可以使用curses库来改进页面和下棋方式。并且对于输入的坐标没有进行鉴别,如果输入的坐标超过棋盘大小,就会段错误退出。我改进了一点,但是还是没有完全避免这个问题。/**Gobang.c*/#include#include#de…

jasperreports_JasperReports:棘手的部分

jasperreports如果您使用Java进行编程的时间足够长,则有可能需要为业务用户生成报告。 就我而言,我已经看到几个项目使用JasperReportsLibrary来生成PDF和其他文件格式的报告。 最近,我荣幸地观察了Mike和他的团队使用上述报告库以及他们所面…

电脑运行adb闪退_adb+python进阶使用

之前文章有提到过使用python加adb刷视频,今天带来进阶版——无线多台手机。首先要使用adb连接多台手机,手机和电脑肯定要在统一局域网内。1.打开手机开发者模式,并通过USB接口链接电脑。2.打开cmd:输入adb tcpip 5555, 会得到相关…

MacBook 强制关机的四种方法

文章目录一、强制关机二、强制断电三、安全关闭(老款 MacBook)四、强制关闭一、强制关机 长按电源键,5 秒左右 二、强制断电 ShiftControlOption电源键 三、安全关闭(老款 MacBook) ControlOptionCommand电源键。…

python存储和读取数据时出现错误_python读取json文件存sql及codecs读取大文件问题...

preface: 最近帮师兄处理json文件,需要读到数据库里面,以备其后续从数据库读取数据。数据是关于yelp网站里面的: https://github.com/Yelp/dataset-examples,http://www.yelp.com/dataset_challenge/. 涉及到一些json和sql的问题,…

Mac OS/macOS 关机的命令

文章目录一、立即关机二、10 分钟后关机三、晚上 8 点关机四、立即重启一、立即关机 sudo halt 或者 sudo shutdown -h now 二、10 分钟后关机 sudo shutdown -h 10 三、晚上 8 点关机 sudo shutdown -h 20:00 四、立即重启 sudo reboot 或者 sudo shutdown -r now

使用枚举映射_用EnumMaps映射枚举键

使用枚举映射这是一种在JDK中存在很长时间的类型,当我们要定义以枚举类型作为键的映射时,这种类型会派上用场: EnumMap是一种特殊的Map 。 我们将为给定的枚举创建一个映射: public enum CoffeeType {ESPRESSO, POUR_OVER, FREN…

linux 划ext4,linux – 有没有像ext4这样的’快速’格式?

严格的答案像-E lazy_itable_init这样的解决方案不会改变结果,只会加快进程.这是明确要求的,在许多情况下人们需要更多.额外奖励在大多数情况下,您实际上需要一些与您的使用模式匹配的选项,不仅可以加快文件系统的创建速度,还可以加快使用速度并增加可用空间.我刚做了一个测试.…

java office在线编辑_国外10个最受欢迎的 Java 开发的 CMS 系统

CMS是Content Management System的缩写,意为"内容管理系统",它具有许多基于模板的优秀设计,可以加快网站开发的速度和减少开发的成本。CMS的功能并不只限于文本处理,它也可以处理图片、Flash动画、声像流、图像甚至电子…

apache kafka_Apache Kafka简介

apache kafka什么是Apache Kafka? Apache Kafka是一个分布式流系统,具有发布和订阅记录流的功能。 在另一方面,它是企业消息传递系统。 它是一个快速,水平可扩展和容错的系统。 Kafka有四个核心API, 生产者API&#x…

Mac OS 查看系统版本信息/硬件信息的命令

文章目录一、查看硬盘信息二、查看系统内核信息三、查看 OS 版本信息一、查看硬盘信息 liaowenxiongdeMacBook-Air:~ liaowenxiong$ system_profiler SPHardwareDataType Hardware:Hardware Overview:Model Name: MacBook AirModel Identifier: MacBookAir7,2Processor Name: …

人脸特征值能存放在sql server中吗_SQL运行内幕:从执行原理看调优的本质

原文链接:https://www.cnblogs.com/arthinking/p/13205303.html相信大家看过无数的MySQL调优经验贴了,会告诉你各种调优手段,如:避免 select *;join字段走索引;慎用in和not in,用exists取代in&a…

rest资源设计_REST资源何时应获得其自己的地址?

rest资源设计在纯粹的REST方法中,所有端点(起始端点除外)都是不透明的,因此不需要发布其各种详细信息。 即使使用这种方法,本文中的要点也很重要,因为服务器逻辑将必须确定何时需要结束点。 介绍 在REST体…