亚马逊AWS官方博客

AWS 使用 Twitch 进行实时流媒体播放

Twitch 是当今面向开发人员、玩家和艺术家的领先社区流媒体视频平台之一。每天有数百万人在访问 Twitch,通过与其他热情洋溢的在线流媒体参与者一起加入实时研讨会,观看他人的媒体并讨论他们的爱好。Amazon Web Services 也融入到这股潮流中,于去年 11 月份增设了 AWS Twitch 频道,将最新的 AWS 技术带给众多 Twitch 粉丝。AWS Twitch 频道每周都会开展各种实时互动式编程和制作者研讨会,专门面向不同等级的云爱好者。有关即将进行的研讨会系列和以前广播的详细信息,或者希望见到我们的团队,请访问 https://aws.amazon.com/twitch/。 AWS Twitch 频道在全年将会有许多节目,每个节目都有不同的主题、主持人和话题。目前,有两个节目可供您收看:使用 AWS 实时编写代码和 AWS Maker Studio 节目。在使用 AWS 实时编写代码节目中,技术传播者 Randall Hunt、Julio Faerman 和 Abby Fuller 从开发人员的角度构建几乎涵盖所有 AWS 服务的应用程序和解决方案。作为一名 Twitch 粉丝,您在观看节目时能够利用一项非常好的功能,也就是可以确定播放的位置。此外,来自 Amazon、AWS 和社区的贵宾将加入到我们的 Twitch 主讲人队伍中,讨论如何在 AWS 平台上构建非常棒的新项目和实施。AWS Maker Studio 在 5 月 17 日首次播出节目,并为我们的所有人介绍专门面向制作者的项目和解决方案。主讲人 Todd Varland、Trevor […]

Read More

EC2 内存中处理更新:具有 4 到 16 TB 内存 + SAP HANA 横向扩展到 34 TB 的实例

我每个月都会多次在西雅图的执行简报中心与 AWS 客户畅谈。我会介绍我们的创新过程,并讨论如何根据客户的要求和反馈更好地制定每个 AWS 产品的路线图。一个很好的例子就是,在我们的努力下,AWS 已经成为 SAP 业务解决方案产品组合的理想平台。多年来,我们的客户向我们透露,他们在 AWS 中运行大规模 SAP 生产应用程序,而我们一直努力为他们提供旨在满足其工作负载的 EC2 实例。由于 SAP 安装始终是任务关键型应用产品,因此 SAP 对其产品可以在特定类型和大小的 EC2 实例上使用进行认证。我们直接与 SAP 合作以取得认证,并使 AWS 成为运行其产品的强大可靠的平台。下面快速回顾我们在这个领域的一些最重要的公告: 2012 年 6 月 – 我们扩大了在 AWS 上提供的经过 SAP 认证的解决方案系列。2012 年 10 月 – 我们宣布 SAP HANA 内存中数据库现在可以在 AWS 上开展生产运行。2014 年 3 月 – 我们宣布,SAP HANA 现在可以在具有高达 244 GB 内存的 cr1.8xlarge […]

Read More

从永恒之蓝开始,安全防范没有结束

信息安全现状 时钟进入到2017年,物联网安全,DDoS攻击和勒索软件被越来越多的国内外信息安全预测机构列为年度最大信息安全威胁。上周爆发的勒索软件WannaCry (又称作永恒之蓝)已席卷全球99个国家,让各类技术宅男们和信息安全的童鞋们又错过了一个美好的周末。尽管目前该病毒已被安全人员找到了阻止其传播的方法,但是类似的安全事件依然给我们敲响了云端安全运维的警钟。 WannaCry事件回顾,5月12日晚, WannaCry 蠕虫病毒在全球大肆爆发。据外媒报道,攻击在99个国家实施了超过75000次攻击。该攻击利用漏洞MS17-010中的某些版本的SMB服务器协议进行传播,利用Windows 445 端口的安全漏洞潜入电脑并对多种文件类型加密并使用户无法打开,攻击者称需支付比特币解锁,补丁程序已于2017年3月14日发布,但未打补丁的用户有可能遭受此次攻击。通过这个事件我们发现只要是购买正版操作系统并及时更新补丁的用户,都不会受到影响。永久解决办法有2个,1.开启windows的自动更新功能,将最新补丁打上; 2.对于部分比较老的windows系统可以手动下载更新包并安装。 这样的安全事件不是第一次也不会是最后一次,要确保我们的信息安全,需要做的事情有太多,比如完善的信息安全应对机制,一系列自动化运维工具或服务,坚决的执行能力以及定期的审核机制。如果你恰好开始关心信息安全,而我们又专业,不妨看看AWS是如何看待信息安全的。 AWS信息安全理念 数据属于谁? 虽然是一个老生常谈的问题,但确实一个非常重要的问题,而且答案永远只有一个,数据属于客户。当你上云之后,如何确保你的数据真的属于你是很多客户评估是否上云时最纠结的问题!在AWS,你可以非常清晰的从上图中看到这个界限。所有操作系统以上(包括操作系统本身)的内容都是客户自己自主可控,AWS没有任何权限访问,同时如果你使用的是AWS提供的Windows或者Linux镜像,该镜像 的补丁机制是全球一致管理的,我们会从各个合作厂商那得到补丁,并第一时间更新到镜像里。如果是开篇提到的流氓攻击,在AWS上的客户可以不需要担心了,因为该补丁在镜像中自动更新了。 如何确保我在云上是安全的? 如何数据安全可能是一个说上三天三夜都没法说完的话题,今天我们从AWS信息安全最佳实践出发,给大家从几个层面来分析信息安全的层级,并重点介绍如何帮助客户在理解理念之后的安全落地问题。首先我们可以看到在云上我们需要这么几个维度的安全,底层基础架构的安全,网络的安全,权限及审计的安全,服务本身的安全,事先预防等等。总之,信息安全从来都不是靠说的,而是靠做的,所以接下来我们给大家做一些简单示范,让你在使用AWS时更加得心应手。 底层基础架构的安全 熟悉AWS的同学可能知道,AWS底层的虚拟化平台使用的是Xen,套用一句官话,不管我们的工程师是多么的小心,我们依然需要时刻告知我们的客户对于AWS服务底层安全的疑虑,所以大家可以在以下链接找到关于Xen的信息安全公告,同时大家也可以从AWS信息安全白皮书中看到AWS如何对于底层基础架构的安全设计,限于篇幅的原因本文不作展开。 Xen Security Advisiories https://aws.amazon.com/cn/security/security-bulletins/ AWS Security Best Practices https://d0.awsstatic.com/whitepapers/aws-security-whitepaper.pdf 网络安全 上云的安全 当你的数据需要上云时,你有三种非常安全的方式来传输您的数据,通过TLS加密的HTTPS协议将数据直接通过互联网传输到S3, 建立专用VPN进行数据传输以及通过专线将AWS与您的数据中心打通,并将AWS纳入您现有的全球专线网络中,让你全球任何一个办公室或者数据中心都通过内网的方式随时的安全访问云端的数据或者系统,如同您多了一个拥有无限扩展能力的远端数据中心。 云上的安全 当您的数据或者系统已经部署在AWS上时,你可以通过上图的简单示意图来对您的系统进行网络隔离及控制。比如,你可以按照不同的应用划分不同的VPC,不同的VPC之间网络隔离,同时在同一个VPC内设置不同安全级别网络区域,如公有访问区,DMZ区,私有网络区。利用VPC内的免费防火墙工具安全组,网络ACL来对云端的机器及网段进行精细化控制。如图上的例子,你可以通过图形界面在安全组上关闭该机器137,139,445 端口就能轻松的规避本文开篇提到的流氓攻击。如果您确实需要开启这些端口,也可以在安全组内指定对具体的源IP开放端口,或者将这些机器放置在私有网段,当这些私有网段的机器需要访问互联网的某些站点进行补丁升级等操作时,通过NAT的方式允许VPC的出向流量。 如果您还需要对VPC内不同私有网段的机器访问进行更精细化控制,还可以通过另外一个免费的防火墙网络ACL来实现。 当您的网络与AWS云端VPC通过VPN或者专线联通时,你还可以通过路由表来控制您哪些数据中心的网段可以访问云端的哪些网段。 权限及审计安全 当你的业务上云后,你可能面临不同人员需要管理你云端资源,这些人可能包括,您公司的开发人员,运维人员,财务部,人事部以及您外部形形色色的服务供应商或者运维外包供应商,如何给予这些人员适当权限去访问他们需要访问的AWS资源以及事后审核这些人员的访问情况,是很多企业客户迫切需要解决问题。 AWS IAM不但可以轻松解决上述所有访问权限问题,还可以帮您打通绝大部分企业遇到的SSO问题,让你数据中心的AD或者第三方机构与AWS建立授权机制,当您的用户在本地AD通过验证后,直接访问AWS上的数据,无需重复创建用户。同时可以给所有IAM用户开启复杂密码功能,并强制用户每隔一段时间修改密码。 内审或者外审通常是一个企业每年必做的事情,在AWS只需开启CloudTrail服务就可以自动记录所有AWS资源的使用情况,下图是一个CloudTrail的简单示例,我们可以看到什么时间哪个用户对什么资源做了什么事情。 同时还可以进一步查看某个事件的详细信息,便于审核,如下图所示: 服务本身的安全机制 由于AWS服务众多,限于篇幅的原因,本文重点讲解AWS虚拟机(EC2)的安全,如您对其他服务也很感兴趣,欢迎阅读AWS安全白皮书。 AWS Security Best Practices https://d0.awsstatic.com/whitepapers/aws-security-whitepaper.pdf      Amazon EC2多层安全模型 Amazon EC2多层安全模型包含底层物理服务器的操作系统,虚拟操作系统或者客户操作系统,防火墙和签名的API调用。目标是防止EC2内的数据被未授权的系统或者用户访问,在不牺牲客户配置灵活性的时,尽最大限度保证EC2本身的安全。 Amazon EC2当前利用了一个AWS高度定制化的Xen […]

Read More

数据库迁移服务DMS——手把手教你玩转MongoDB到DynamoDB之间数据库迁移

1. 前言 AWS最近刚刚宣布了一项关于数据库迁移的新feature,支持Mongodb数据库作为源端,迁移到目标端Dynamodb中,这样可以使MongoDB的用户充分利用DynamoDB数据库提供的技术优势,譬如完全托管服务,高性能低延迟(毫秒级),精细化粒度控制等等。由于最近项目中涉及很多数据库迁移的事情,同时也对NOSQL数据库异构平台迁移非常感兴趣,写了这篇文档供大家参考。 2. DMS服务介绍 DMS作为数据迁移服务支持下面三种迁移类型: 迁移源库中存在的数据到目标库 迁移源库中存在的数据并且复制新增加的数据到目标库 只复制新增加的数据库 数据迁移时源端和目标端设置 MongoDB作为源端 AWS DMS支持Mongodb作为源端的版本为2.6.x和3.0.x,MongoDB 作为一个基于文档存储的数据库,数据模式非常灵活,支持JSON和BJSON格式进行存储。当前AWS DMS 支持MongoDB作为源端以两种模式进行迁移,它们分别是文档模式和表模式。在文档模式中,需要设置参数extractDocID=true和nestingLevel=none,在复制时不支持collection的重命名。在表模式中需要启用表模式需要设置nestingLevel=one,另外在选择CDC时它不支持添加新的collection和重名collection。 DynamoDB作为目标端 使用Dynamodb作为目标端时需要配置partion key和Object mapping。 具体注意事项请参考官方文档链接: http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MongoDB.html 3. 配置步骤 3.1 安装Mongodb 安装Mongodb的方式有多种方法,可以选择Marketplace或者AWS提供的cloudformation以及手动下载Mongodb软件进行安装,我选择手动安装Mongodb2.6.12版本。 A、登录EC2,获取如下软件: ubuntu@ip-172-31-60-214:~$ wget http://downloads-distro.mongodb.org/repo/ubuntu-upstart/dists/dist/10gen/binary-amd64/mongodb-org_2.6.12_amd64.deb ubuntu@ip-172-31-60-214:~$ wget http://downloads-distro.mongodb.org/repo/ubuntu-upstart/dists/dist/10gen/binary-amd64/mongodb-org-mongos_2.6.12_amd64.deb ubuntu@ip-172-31-60-214:~$ wget http://downloads-distro.mongodb.org/repo/ubuntu-upstart/dists/dist/10gen/binary-amd64/mongodb-org-tools_2.6.12_amd64.deb ubuntu@ip-172-31-60-214:~$ wget http://downloads-distro.mongodb.org/repo/ubuntu-upstart/dists/dist/10gen/binary-amd64/mongodb-org-server_2.6.12_amd64.deb ubuntu@ip-172-31-60-214:~$ wget http://downloads-distro.mongodb.org/repo/ubuntu-upstart/dists/dist/10gen/binary-amd64/mongodb-org-shell_2.6.12_amd64.deb B、安装软件包: ubuntu@ip-172-31-60-214:~$ sudo dpkg -i mongodb-org* C、创建数据目录和日志目录: ubuntu@ip-172-31-60-214:~$ sudo mkdir /data /log […]

Read More

DAX – DynamoDB集成全托管的内存缓存,轻松搞定读取负载!

相信大家已经都知道,Amazon DynamoDB 是一项全托管的NoSQL 数据库服务,适合所有需要一致性且延迟低于 10 毫秒的任意规模的应用程序,支持文档和键值存储模型。使用DynamoDB,可创建数据库表来存储和检索任意量级的数据,并提供任意级别的请求流量。现在,DynamoDB还提供了Auto-Scaling的功能,即可以通过你预先设置的阈值自动扩展和缩减表的吞吐量,做到完全弹性自动伸缩的目的,真正达到让你的数据库按实际吞吐量进行付费。 这么高的并发量却依然可以保持服务器的平均延迟在个位数毫秒,这让DynamoDB受到了非常多用户的青睐。然而随着大数据时代的数据暴增,很多客户的场景比较特殊,他们对数据库的响应时间越来越苛刻,甚至需要达到微秒的级别!这无疑给DynamoDB数据库又带来了一个难题。甚至也有客户会提到,能不能在DynamoDB前面放一层类似Redis的Cache服务呢?如果这样做的话,需要自己搭建缓存数据库,并且解决DynamoDB和Redis之间的数据同步问题;同时还要重写代码实现业务逻辑,比如如果数据在缓存中,则立即返回,如果数据没有在缓存中,则必须从数据库里面读取,将数据写入到缓存中,然后再返回。 当用户还带着这样的担心时,现在,Amazon DynamoDB已经整合了这一特性,推出了一个新的功能,即Amazon DynamoDB Accelerator,简称DAX。这是一种完全托管并且高度可靠的内存缓存,即使每秒种的请求量达到数百万,却依然可以将Amazon DynamoDB的响应时间从数毫秒缩短到数微秒!其实在很多场景都可以用到DAX,比如实时竞拍、秒杀、电商、社交游戏等场景,DAX可以提供快速的内存读取性能;再比如在产品促销日,读取访问量会明显上升,但是销售日结束访问量就会回归正常,诸如此类读取密集型的工作负载但同时又对成本敏感的应用都可以使用DAX服务。像类似于Expedia、Twilio、Genesys、eyeview等客户都已经率先用上了DAX服务 目前,DAX还是处于预览版,您可以点击链接进行申请。接下来,让我们创建一个DAX集群,赶紧体验一下微秒级别的响应测试吧! 1. DAX集群的原理 上图中可以看到,DAX起了一组缓存的节点(目前最多可以是10个节点),并将这些节点置放在VPC内部,应用程序部署在EC2上,这样EC2和DAX Cluster通过内网直接访问。关于DAX的内存缓存,主要是DynamoDB的读和写操作: (1)最终一致性的读取操作,支持GetItem、BatchGetItem、Query、Scan接口,如果读取在DAX缓存中命中,将直接从DAX集群里读取;如果是第一次读取没有命中,那就从DyanmoDB里面读取。 (2)写入操作支持BatchWriteItem、UpdateItem、DeleteItem、PutItem接口,写入的时候数据先写入到DynamoDB表,确认写入成功之后,然后再写到DAX集群(item cache),这个操作只有在DynamoDB表和DAX集群都写入了数据的时候才算成功。如果由于一些原因这个操作失败了,那么这个item将不会缓存到DAX里面,并且会抛出一个exception。这种方式可以让缓存和数据库的数据保持一致性和完整性,不会出现过期数据在缓存里面。 (3)如果DAX有多个节点时,会选取一个主节点(primary node),多个从节点(read replica node),数据最终会分布到所有节点上,但对于客户端来说,只需要关心唯一的DAX连接地址,已经内置了负载均衡和路由策略,并且自动执行故障检测、故障恢复、软件修补等管理任务。 接下去,我们将模拟这一过程,进行实际测试。 2. 启动DAX集群 首先启动一个DAX集群,指定集群的节点数(目前节点最多为10个),我们建议您在生产环节中启用两个以上的节点,并将这些节点置放在不同的可用区中,从而提高高可用。设置好相应的IAM Role和Policy。Policy可以配置“只读”权限,或者“读和写”权限。更多关于权限配置可以参考: http://s3.amazonaws.com/dynamodb-preview-dax/DAX.access-control.html 接下去设置DAX集群的子网组,DAX集群的节点会部署在这些子网里面。选定VPC和相对应的子网,并设置安全组。安全组入站需要打开DAX所用到的8111端口。 接下去配置DAX的参数组,指定Cache的Query TTL和Item TTL值。TTL的时间小到可以是“秒”,大到可以到“天”。 也可以自定义选定维护窗口,如果需要的话可以再加一个SNS通知,这样只要集群有维护就会立刻以短信,或者邮件等形式通知到您。 到这里,DAX集群就创建成功了。DAX集群会有一个唯一的endpoint地址,例如,这里是 dax-cluster-demo.bnsilv.clustercfg.dax.usw2.cache.amazonaws.com:8111 另外可以看到在这个例子中DAX集群启动了3个节点。 DAX集群具体的3个节点 3. 启动EC2 ,作为应用程序的server,同时作为DAX的client 如果仅作为测试,可以启动一台t2.micro的小型机器(Amazon Linux)。 EC2通过监控检查,启动成功。 4. 安装Java应用程序 (1)首先通过客户端连接到这台Amazon Linux EC2 (2)安装Java SDK sudo yum install […]

Read More

Redshift又添新功能:让用户直接查询S3中的海量数据而无需复制到本地

背景 在Amazon Redshift 数据仓库为核心的用户,常常陷入一个困境,要想利用该MPP架构的云端数据仓库能力,用户通常需要利用Redshift的 copy命令将数据从S3并行拷贝到Redshift中,如果在数据量比较大的情况下,成本上的考量和业务上的诉求的矛盾会让用户犹豫不定; 尤其突出的矛盾是,客户的业务部门的需求涵盖数据范围同时包含数据仓库的数据和放在S3上的中间或者原始数据集,此时,我们能怎么做? AWS大数据最佳实践的启示 AWS大数据最佳实践告诉我们要将数据的存储和处理、分析相分离,比如在Amazon EMR服务架构中(如下图),要分析的数据集按照一定的格式压缩存储在Amazon S3上,在EMR中通过Hive定义外表关联到S3上的数据,但不复制到EMR本地,从而实现了数据存储和分析处理的解耦;在大量的用户实践中,我们发现如此的架构优化,可以帮助客户节约大量的存储成本,同时,EMR分析集群无状态化,可以按需动态启动和停止EMR集群,从而优化了计算成本。同理,我们能否在Redshift数据仓库中引入类似的外部表的概念呢? Amazon Redshift Spectrum简介 Amazon Redshift Spectrum是Redshift的一个新特性,它可以帮助客户将Redshift的分析能力从本地存储扩展到Amazon S3数据湖中海量的非结构化数据而不需要加载数据。通过Redshift Spectrum您可以将热数据存储到 Amazon Redshift 群集中,以获得本地磁盘性能;同时使用 Amazon Redshift Spectrum 将您的查询扩展到 Amazon S3 中存储的冷数据,以获得无限的可扩展性和低成本。 详细情况请参考官方介绍:https://aws.amazon.com/cn/redshift/spectrum/ 目标人群及应用场景 该新功能的推出完善了Redshift数据仓库用户的大数据分析的应用场景,客户可以直接利用Redshift和Redshift Spectrum的能力同时处理本地和S3上的数据集;所以,目标受众是Redshift数据仓库的用户比如金融,电商,游戏等等行业客户。 从应用场景来看,可以满足如下业务需求: 针对数据仓库本地数据和S3上的数据提供一致的、熟悉的数据仓库操作体验 提供终端用户统一的BI或者SQL客户端接入 跨数据仓库热数据和S3冷数据的复杂混合查询 满足低频的业务全数据的低成本即席查询 大数据处理示例管道 本大数据处理示例管道展示了以Redshift数据仓库为核心的典型用户场景,原始数据,中间结果和ETL处理之后的数据都保存在数据湖Amazon S3上;用户通过BI工具或者熟悉的SQL客户端通过Redshift(包括Redshift Spectrum)操作所有的业务数据,包括大数据量的原始数据和存储在数据仓库本地的热数据;客户无需专门为了某个业务的特殊需求,将数据从冷数据从S3复制到Redshift本地再作分析。 支持的数据格式 Redshift Spectrum 使用您已使用的开发数据格式在 Amazon S3 中直接查询数据,这些格式包括 文本文件如 CSV格式文件 日志文件如TSV格式 列式格式如Apache Parquet和Hive中的RCFile格式文件 二进制文件:Sequence格式文件 压缩格式支持:gzip、snappy、bz2 […]

Read More

让你的数据库流动起来 – 利用MySQL Binlog实现流式实时分析架构

数据分析特别是实时数据分析,已经越来越多的成为各行各业的分析要求与标准 – 例如,(新)零售行业可能希望通过­­线下POS数据与实时门店客流流量的进行实时结合与分析,实现商品销售,销量,总类等等的实时预测; 在线广告平台期望通过广告(Impression)总类,数据量以及基于时间的点击(Click)量,计算实时的广告转化率(Conversion Rate);物联网的用户想通过实时分析线下的状态设备与设备采集的数据,进行后台的计算与预判 – 例如做一些设备维修的提前预警(Predicative Failure Analysis)与线下用户的使用习惯;电商平台或者是在线媒体需要给终端用户提供个性化的实时推荐等等。 纵观这些业务系统,从数据流的角­­度看,往往数据架构可以分为前后端两个部分 – 前端的业务数据与日志收集系统(其中业务数据系统一般都是利用关系型数据库实现 –  例如 MySQL,PostgreSQL)与后端的数据分析与处理系统 (例如ElasticSearch 搜索引擎,Redshift数据仓库,基于S3的Hadoop系统 等等,或者基于Spark Stream的实时分析后端)。 “巧妇难为无米炊”,实时数据分析的首要条件是实现实时数据同步,即从上述前端系统到后端系统的数据同步。具体来讲包含两个要求(根据业务场景的不同,实时性会有差异)- 1) 实时 2) 异构数据源的增量同步。实时的要求容易理解 – 无非是前后端系统的实时数据ETL的过程,需要根据业务需求,越快越好。所谓异构数据源的增量同步是指,前端产生的增量数据(例如新增数据,删除数据,更新数据 – 主要是基于业务数据库的场景,日志相对简单,主要是随时间的增量数据)可以无缝的同步到后端的数据系统 – 例如ElasticSearch,S3或者Redshift等。 显然,这里的挑战主要是来自于异构数据源的数据ETL – 直白一点,就是怎么把MySQL(或者其他RDBMS)实时的同步到后端的各类异构数据系统。因为,MySQL的表结构的存储不能简单的通过复制操作实现数据同步。  业界典型的做法大概可以归纳为两类 – 1)通过应用程序双写的架构 (application dual-writes)  2) 利用流式架构实现数据同步,即基于流式数据的Change Data Caputre (CDC) 。 双写架构实现简单,利用应用逻辑实现,但是要保证数据一致性相对复杂(需要通过二阶段提交实现 – two phase commit),而且,架构扩展相对比较困难 – 例如增加新的数据源,数据库等。 利用流式数据重构数据,越来越成为很多用户与公司的实时数据处理的架构演化方向。 MySQL的Binlog,以日志方式记录数据变化,使这种异构数据源的实时同步成为可能。 今天,我们主要讨论的是如何利用MySQL的binlog实现流式数据同步。 MySQL […]

Read More

客户端直连S3实现分片续传思路与实践

Amazon S3是互联网存储解决方案,能让所有开发人员访问同一个具备可扩展性、可靠性、安全性和快速价廉的数据存储基础设施。Amazon S3 提供了一个简单 Web 服务接口,可用于随时在 互联网上的任何位置存储和检索任何数量的数据。开发人员可以利用Amazon提供的REST API接口,命令行接口或者支持不同语言的SDK访问S3服务. 同时S3对于上传功能的API提供也是非常丰富的,与此同时,很多客户对于S3的断点续传也有了很深入的需求,本篇博客将会介绍如何使用S3的Javascript SDK来实现客户端浏览器到S3的断点续传功能. 安全考量 首先我们需要度量在浏览器客户端直连上传到S3这个场景下的安全问题,我们是一定不能把我们的AccessKey暴露到客户端浏览器的,但是上传到S3的API一定要提供AccessKey和SecretKey,因此这里我们将会利用生成临时的AccessKey和SecretKey(结合有效期)的方式来保证客户端的上传,这里介绍一篇关于利用TVM (Token Vending Machine)来生成临时Key并上传S3的文章,本文主要探讨关于S3的分片上传和断点续传的知识点. Javascript SDK和S3 API简介 从整体编程语言架构的层面上来讲,AWS的各个语言的SDK都主要划分为上层和下层的API, 上层API主要是针对一些用户必要的功能利用下层API所作的一层封装,掌握了这个原则之后我们就可以合理的利用AWS的上层API看能否实现自身的需求. Javascript SDK文档总结 在掌握SDK之前,我们应该先对SDK的文档和大致的结构有一个了解,这样才能方便我们更好的使用SDK, 下面列出了SDK的官网入门连接和API参考文档. API参考文档: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/index.html S3 API参考文档: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html 构建SDK中的S3对象 首先,AWS的SDK都是先需要利用Credentials来构建对象的,这里我们构建S3的对象也是如此,但是请注意一定不能将自己的Key暴露在客户端或者提交到代码中,应该使用 TVM获取了Key之后再利用AWS.Credentials对象来构建S3的对象. 在构建S3对象时,也需要同时指定AWS的Region. 利用上层Javascript API构建简单的分片断点续传功能 接下来,我们一步一步的来创建上层API构建断点续传的实践. 1. 创建工程 这里我们以node.js平台的express来提供简单的静态服务. 本文不会涉及如何安装node.js,关于安装指南,可以参考官网nodejs.org 首先利用npm包管理器安装express模版生成器: npm install express-generator -g 完成后我们利用命令行生成项目: mkdir s3upload express –view=ejs 这里的–view=ejs主要指定ejs作为express的html模版引擎,方便我们的测试. 创建好之后的工程结构如下图: 2. 编写页面UI 这里我们通过引入<script […]

Read More

自动化部署服务——AWS CodeDeploy 快速入门

作为DevOps和微服务的深入践行者,Amazon在内部积累了许多持续集成、交付和部署的自动化工具和平台。其中, Apollo作为代码部署的自动化平台,每年进行超过5000万次部署。 为了能够让广大开发者和企业用户使用到功能丰富且久经考验的代码部署平台,在Apollo的经验基础上,AWS发布了自动化部署服务——CodeDeploy。 平台介绍 AWS CodeDeploy旨在帮助用户完成应用的快速部署,按照用户指定的策略将代码部署在一组EC2服务器上。用户策略可以包括集群部署速度、部署事件通知、警报处理策略等。此外,CodeDeploy还可以和弹性负载均衡(Elastic Load Balancer)、自动扩展组(Auto Scaling Group)等服务结合,完成无缝升级和动态部署。 为方便有效地组织部署任务,CodeDeploy设立了三个概念:应用(Application)、部署(Deployment),以及部署配置(Deployment Configuration)。 1)应用程序(Application) 应用程序是部署的核心,由部署组(Deployment Group)和代码修订(Revisions)组成。一个应用可以包含多个部署组,一个部署组又可以包含多台EC2服务器。同时,一个服务器也可以属于多个部署组,因为一个服务器可能同时运行多个应用。 1.1)部署组 创建或修改部署组时,如果添加EC2服务器,可以通过标签(Tag)对已有的EC2服务器进行筛选。所以,在创建EC2时一定要打上标签(Tag),便于在创建应用的部署组时找到对应业务的服务器。 此外,部署组还可以添加自动扩展组(Auto Scaling Group),以及用户自己机房的主机(On-Premise Instance)。 1.2)代码修订 代码修订保存了当前应用涉及到得所有代码,代码的存放位置可以在S3或Github。 如果用户自建代码托管,当需要部署时,可以在工作机上同步代码到本地,然后使用AWS命令行进行打包上传。 aws deploy push –application-name <MyAppName> \       –s3-location s3://<MyBucketName>/<MyNewAppBundleName> \       –source <PathToMyBundle> 上面的命令可以将运行目录下得代码打包上传到S3,同时显示在关联应用的代码修订一栏中。 2)部署(Deployment) 每一次部署都有唯一的ID标记,并保存所有信息,如代码来源、部署时间、目标服务器、部署结果等。并且针对每一台服务器,都可以详细查看部署过程中的事件(如下载程序、安装前检查、 程序启动、安装后检查等7个事件),以便追踪部署的各个步骤。当部署出错时,可以快速定位和排查。 3)部署配置(Deployment Configuration) 部署配置存放了一次部署的服务器台数或百分比,在发起部署时需要指定所需配置。CodeDeploy默认提供了三种配置:一次部署一台、一次部署一半数量的服务器,以及一次完成全部部署。部署发起后,CodeDeploy会按照上述策略进行工作,指导完成部署组内全部服务器的更新。 如果用户要自定义部署策略,建议使用命令行完成。比如下面的例子创建的配置就是一次完成20%的服务器部署。 aws deploy create-deployment-config –deployment-config-name ThreeQuartersHealthy –minimum-healthy-hosts type=FLEET_PERCENT,value=20 此外,CodeDeploy还可以管理物理主机(或第三方主机)。只要在物理主机上安装和配置CodeDeploy Agent,Agent向CodeDeploy注册完成后,CodeDeploy就可以像管理 EC2服务器一样在物理服务器上部署应用。 […]

Read More

手把手教你在FPGA实例上运行“Hello World”

前言 在4月19号的旧金山AWS技术峰会上,亚马逊CTO Werner Vogels宣布了多项AWS新功能,其中就包括众人期待已久的FPGA实例F1。 F1 实例配有最新的 16 nm Xilinx UltraScale Plus FPGA,目前有f1.2xlarge和f1.16xlarge两种类型,其中f1.2xlarge配备有1个FPGA卡, f1.16xlarge配备有8个FPGA卡。 使用 F1 实例部署硬件加速在许多高性能计算 (HPC) 应用程序中非常有用,可解决需要高带宽、增强型联网和较高计算能力的复杂科学、工程和业务问题。F1 实例尤其适用于有时间要求的应用程序,如临床基因组学、实时视频处理和财务风险分析。 因为这段时间都在学习神经网络,所以F1实例最吸引我的是在FPGA上部署神经网络模型,神经网络的前向计算以高频脉冲的方式同时发生在门电路构成的神经网络单元上,想想都让人激动。 不过FPGA这个东西确实太专业了,入门学习曲线不是一般的陡,启动F1实例运行一个简单的Hello World都需要折腾一番。 所以在这里记录一下自己启动F1实例运行Hello World的过程,供各位参考,希望可以让大家开始开始FPGA的旅程。 启动f1实例 f1实例的启动过程和一般的EC2启动过程类似,有关AWS账号的准备,EC2创建过程的细节请大家参考相关技术文档。以下只列出一些需要注意的地方。 测试时我选择了“弗吉尼亚北部”这个区域,也就是us-east-1区域。 启动f1实例时强烈推荐使用 AWS FPGA Developer AMI 镜像, FPGA Developer AMI 包括一个预先打包的工具开发环境,其中含有用于模拟 FPGA 设计、编译代码及构建和注册 AFI 的脚本和工具。 在启动实例的第一步,选择系统镜像的时候选择“AWS Marketplace”,然后搜索“FPGA”就可以找到FPGA Developer AMI, 该镜像在弗吉尼亚北部区域的ID为:ami-3afc6f2c,镜像选择界面截图如下。 启动过程中注意给你的实例指定一个IAM Role, 后续使用AWS CLI命令行工具的时候就需要配置静态的Access Key和Secret Key了。 还有就是安全组配置,缺省的22号端口保留打开状态,另外建议开3389端口,后续如果你希望使用远程连接的方式使用图形化界面需要用到这个端口。 还有一个不需要再强调的就是你启动的f1实例需要有公有IP。 系统登录 […]

Read More