Author: AWS Team


Amazon Rekognition – 深度学习支持下的图像检测与识别服务

看到这张图片时,你的大脑是如何理解它的呢?

你可能看到一只动物、一只宠物、一只狗或者更为具体——一只金毛犬。图像与这些标签之间的联系并非硬性嵌入您的大脑,而是在看过成百上千张这样的图片之后,你的大脑才能够直接给出正确的解读。通过多个不同层面的认知,我们学会了如何区分动物与植物,猫与狗,以及其它犬种与金毛犬间的差异。

深度学习之于图像检测

然而,事实证明:为计算机赋予和人类同等水平的理解能力是一项相当困难的任务。在数十年的研究过程中,计算机科学家们尝试利用各种方法来解决这一难题。时至今日,计算机科学领域已经达成广泛共识——即解决该问题的最佳途径为深度学习。深度学习利用特征抽象化与神经网络相结合的方法输出结果。这一方法甚至曾被伟大的科幻作家Arthur C. Clarke评论为“简直与魔法无异”。

然而,深度学习仍然需要投入相当高昂的成本。首先,大家需要耗费可观的精力与时间进行训练。从本质角度讲,这意味着我们需要为学习网络提供范围极广的已标记示例(“这是一只狗”、“这是一只宠物”等等),从而确保其能够将图像中的特征性内容与标签联系起来。这个阶段需要占用可观的计算资源,特别是考虑到神经网络自身的实际规模以及多层级属性。训练阶段完成之后,成熟的网络即可更为轻松地评估其它新型图像。其结果通过传统置信水平(0%至100%)表现,而非直接给出不容置疑的事实。如此一来,大家将能够决定自己的应用适合搭配怎样的精度。

Amazon Rekognition介绍

今天,我将向大家介绍Amazon Rekognition。我们的计算机视觉小组多年以来一直致力于开发深度学习方案,并以此为基础推出了这项完备的服务,其目前每天已经能够分析数十亿张图片。该服务利用成千上万对象及场景进行训练,因此现在可供大家的应用程序直接使用。如果大家对此抱有兴趣,那么不妨在着手深入研究并编写代码以利用Rekognition API之前,访问下面的网址:

https://console.aws.amazon.com/rekognition/home

查看我们提供的相关演示。

Rekognition在设计初期就充分考虑到了规模化使用需求,能够识别场景、物品以及面部图像。在获取图像之后,Rekognition能够返回一份标签列表。对于那些包含一张或者多张面孔的图像,它会为每张面孔返回范围框及其属性。下面让我们来看看其如何分析文章开头的这幅金毛犬图片(顺带一提,这只小美女名叫Luna):

如大家所见,Rekognition以高置信水平将Luna标记为一只动物、一只狗、一只宠物以及一只金毛犬。必须强调的是,这些标签相互独立,这意味着该深度学习模型并没有明确理解各标签之间的关系,例如狗与动物。其只是之前Rekognition训练时使用的素材恰好将这两个标签与以狗为中心的内容加以关联。

下面再来看Rekognition如何分析我和妻子两人的合照:

Amazon Rekognition找到了我们的面部位置,并用框体将其圈出,同时告知我妻子的表情非常幸福(这张照片拍摄于她生日当天,能让她感到幸福也是我发自内心的期许)。

大家也可以利用Rekognition比较不同面孔,并询问其是否在给定照片中找到了其它面孔。

这一切强大的处理能力皆可通过一组API函数进行访问,大家可以利用控制台(https://console.aws.amazon.com/rekognition/home)进行快速演示。举例来说,大家可以调用DetectLabels从而通过编程方式重现我给出的第一个示例,或者调用DetectFaces以重现我的第二个示例。大家可以对进行多次调用IndexFaces,从而帮助Rekognition作好识别面部信息的准备。每一次对IndexFaces进行调用,Rekognition都会从图片中提取出部分特性(被称为面部矢量),存储这些矢量并丢弃该图像。大家可以创建一套或者多套Rekognition收集库,并在每套库内存储多个相关面部矢量组。

Rekognition能够直接将处理图像保存在Amazon简单存储服务(简称S3)当中。事实上,大家亦可以利用AWS Lambda函数处理任意规模的新近上传图像。大家还可以利用AWS身份与访问管理(简称IAM)服务对指向Rekognition API的访问加以控制。

Rekognition的实际应用

那么,大家能够利用Rekognition做什么有趣的事?我个人倒是有很多想法。

如果大家已经拥有大量图像,则可利用Amazon Rekognition对其进行标记与索引。由于Rekognition属于一项服务,因此大家能够每天处理数百万张图像,而无需为底层基础设施的设置、运行以及规模伸缩费心。大家可以随时运用视觉搜索、标签浏览以及一切交互式发现模式。

大家也可以利用Rekognition配合多种不同验证及安全背景。大家可以对摄像头上显示的面孔与存档照片进行比较,从而判断是否允许对方进入安全区域。大家也可以执行视觉监控,即从照片中找出那些值得关注或者追踪的对象或者人物。

大家可以构建“智能化”营销公告牌,利用其收集观看人员的相关统计数据。

已经上线

Rekognition服务目前已经在美国东部(北弗吉尼亚州)、美国西部(俄勒冈州)以及欧洲(爱尔兰)服务区上线,大家从今天开始即可使用。作为AWS免费层的组成部分,大家每月可利用其分析最多5000张图像并存储最多1000个面部矢量,免费周期为一年。在此之后(或者您需要对处理容量进行扩展),大家需要以分层方式根据分析图像以及所存储面部矢量的具体数量付费。

还想了解更多信息?我们将于美国中央时区时间12月14日星期三的上午4:00到5:00召开网络研讨会,感兴趣的朋友可以访问:

https://publish.awswebcasts.com/content/connect/c1/7/en/events/event/private/23850344/41359021/event_registration.html?connect-session=graysonbreezdndrpkw7uwmhrgxc&sco-id=55023367&campaign-id=JB&_charset_=utf-8

进行注册。

中国区的AWS用户也不用着急,我们将会很快举办一场AWS re:Invent 2016的回顾活动,全面为大家介绍此次发布的新功能与新服务。敬请期待!

-Jeff

原文链接:

https://aws.amazon.com/cn/blogs/aws/amazon-rekognition-image-detection-and-recognition-powered-by-deep-learning/

 

如何在AWS上安装使用分布式TensorFlow

前言

近几年来,深度学习得到了长足的发展,伴随着深度学习的发展,深度学习框架也变得越来越为人们所熟知。TensorFlow是谷歌开源的深度学习框架,自开源以来得到了业界的认可和支持,特别是在TensorFlow分布式版本发布以后,更多的深度学习专业人士开始使用TensorFlow进行分布式的深度学习研究。

深度学习框架底层需要硬件资源的支持,特别需要GPU实例的支持,而AWS云端弹性的GPU实例无疑是深度学习从业人员手中最灵活的资源。

本文将介绍在AWS上使用GPU实例安装配置分布式TensorFlow的过程,希望可以让读者快速搭建自己的深度学习环境,尽快深入到自己的生产应用中或者是研究领域中。

环境准备

首先我们需要为TensorFlow安装准备基础环境,其中包括AWS账号的创建,IAM用户的创建,VPC的划定等工作。有关这些具体工作的细节在本文就不详细讲述了,这些方面的细节请参考相关博文或者技术文档。

准备好账号之后就需要启动两台GPU实例进行设置,考虑到启动实例后需要进行一些软件部署,建议先启动一台GPU实例,安装设置好TensorFlow之后创建实例的AMI镜像,然后通过镜像启动第二台GPU实例,这样比较节省时间。

本文以Ubuntu作为基础环境,所以在启动实例的时候选择操作系统时选择Ubuntu镜像,本例选择的是。

进一步需要做的是选择实例类型,在AWS上的GPU实例有G2和P2两种大的类型。

P2使用了NVIDIA的K80 GPU,实例的具体配置如下:

G2使用了NVIDIA的K520 GPU,实例具体配置如下:


选择你希望使用的实例类型,然后按照EC2启动向导启动该实例。关于EC2启动的不同选项请参考相关文档,这里需要留意的是“置放组”选项,如果我们启动多个EC2实例运行TensorFlow并进行分布式计算,把这些实例放在一个“置放组”内会有效提高实例间的网络通讯效率。

实例启动后通过ssh工具连接到该实例上开始安装过程。

安装TensorFlow

准备好EC2实例后,通过ssh工具连接到实例上,开始以下安装工作。

因为TensorFlow安装需要较长时间,所以建议连接到EC2实例上以后通过screen命令或者tmux命令启动session管理,这样安装过程中出现ssh连接中断也可以继续完成安装工作。

首先需要安装相关的依赖包,具体命令如下:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install -y build-essential git python-pip libfreetype6-dev libxft-dev libncurses-dev libopenblas-dev gfortran python-matplotlib libblas-dev liblapack-dev libatlas-base-dev python-dev python-pydot linux-headers-generic linux-image-extra-virtual unzip python-numpy swig python-pandas python-sklearn unzip wget pkg-config zip g++ zlib1g-dev
sudo pip install -U pip

安装完依赖包以后接着安装CUDA包,本例中我是直接下载了CUDA 8.0的本地deb包进行安装,安装命令如下,读者在参考使用以下命令时注意修改对应的URL链接和版本号:

wget https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb -O cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64.deb
 
sudo dpkg -i cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
CUDA安装比较简单,主要时间消耗在下载CUDA安装包上。安装了CUDA包以后,可以通过nvidia-smi命令查看本地的GPU设备情况,一方面检查GPU硬件情况,一方面也可以确认CUDA安装是否成功。

在我的G2.xlarge实例上安装CUDA并执行nvidia-smi命令后输出如下:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 367.57                 Driver Version: 367.57                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GRID K520           Off  | 0000:00:03.0     Off |                  N/A |
| N/A   33C    P0     1W / 125W |      0MiB /  4036MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
 
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
安装了CUDA后接着安装CuDNN,安装CuDNN需要到NVIDIA网站上注册,注册以后才能下载。这里略去注册过程,读者可以自行到以下网站注册:

https://developer.nvidia.com/rdp/cudnn-download

我下载的是cudnn-8.0-linux-x64-v5.1.tgz文件,下载后的安装命令如下:

tar -zxf ./cudnn-8.0-linux-x64-v5.1.tgz
 
sudo cp -R cuda/lib64/* /usr/local/cuda-8.0/lib64
 
sudo cp cuda/include/cudnn.h /usr/local/cuda-8.0/include/

然后我们需要设置一些环境变量,我将以下配置加入~/.bashrc文件中,并用source ~/.bashrc命令让配置生效。

export CUDA_HOME=/usr/local/cuda-8.0
export CUDA_ROOT=/usr/local/cuda-8.0
export PATH=$PATH:$CUDA_ROOT/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CUDA_ROOT/lib64

安装了NVIDIA的相关组件后我们还需要安装bazel,为了安装bazel,我们需要先安装java8,具体命令如下:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

安装java8会有图形化向导,按照向导指引安装就好了。

安装了java8以后执行以下命令安装bazel:

echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
curl https://storage.googleapis.com/bazel-apt/doc/apt-key.pub.gpg | sudo apt-key add -
sudo apt-get update && sudo apt-get install bazel
sudo apt-get upgrade bazel

经过以上准备,相关的软件都安装配置好了,可以开始编译TensorFlow了。

首先把TensorFlow项目克隆到本地:

git clone --recurse-submodules https://github.com/tensorflow/tensorflow

接着进入tensorflow目录并运行configure命令为编译做准备,注意要加上sudo,否则会出现权限的问题。

cd tensorflow
 
sudo ./configure

执行./configure会出现文本配置界面,在选择不同选项时几乎可以都使用缺省值,当然在选择是否有GPU支持时要选择Y,然后就是要注意“Cuda compute capability”一项,如果你选择的实例类型是G2,这里需要输入3.0,因为G2实例使用的GPU是K520,只能支持Cuda compute capability 3.0。如果你选择的机型是P2,因为使用的GPU是K80,可以使用缺省的Cuda compute capability,本例使用的TensorFlow版本缺省的是3.5。

具体选项请参考以下截图:

如果你为G2实例类型选择了3.5或者更高版本,运行TensorFlow时会出现以下错误信息:

Ignoring visible gpu device (device: 0, name: GRID K520, pci bus id: 0000:00:03.0) with Cuda compute capability 3.0. The minimum required Cuda capability is 3.5.

配置好以后通过bazel命令编译,注意使用sudo命令:

sudo bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

编译需要一段时间,编译完成后使用buildpippackage命令为python构建pip包,以下命令中的/tmp/tensorflow_pkg目录是pip包输出的临时文件,可以根据你自己的环境进行调整:

sudo bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

构建了pip包以后使用pip命令进行安装,注意以下命令中的/tmp/tensorflow_pkg/tensorflow-0.11.0-cp27-cp27mu-linux_x86_64.whl是上一个命令生成的whl包文件路径,其中包括了具体的版本号,在你自己编译的时候需要留意这个版本号是否有变化:

sudo pip install /tmp/tensorflow_pkg/tensorflow-0.11.0-cp27-cp27mu-linux_x86_64.whl

以上命令执行完以后就成功安装了TensorFlow了,可以开始测试了。

测试与分布式部署

神经网络的测试经常使用mnist数据集进行,TensorFlow中自带了mnist的样例,安装好TensorFlow以后通过以下命令可以进行测试:

python tensorflow/tensorflow/models/image/mnist/convolutional.py

一切正常的话,很快convolutional.py命令就可以执行完成,结束后会输出准确率。

测试结束后,进一步需要做的事情就是分布式部署。如开篇讲到的,在AWS上可以使用镜像(AMI)简化新实例启动过程中的安装工作。

基本做法就是选中以上步骤配置的EC2实例,然后选择“”操作执行镜像创建的操作。当我们需要启动第二台GPU实例时,选择刚创建的镜像进行启动就好了。

启动第二台实例时注意选择第一台实例使用的子网,减少其它因素的干扰。如果对网络性能有特别要求,还可以将两台实例放在同一个“置放组”中,提高两台GPU实例之间的网络通讯速度。

另外,如下文所示,TensorFlow不同进程启动的时候会使用不同的端口,本例使用的是2222和2223端口。为了让两个GPU实例可以通过这些端口通讯,需要设置两个GPU实例所使用的安全组,开放2222,2223,2224的入站访问。

在tensorflow的源代码目录中有个分布式样例文件叫:./tensorflow/tools/dist_test/python/mnist_replica.py,是已经写好的分布式代码。

该python程序通过–pshosts指定参数服务的IP和端口,通过–workerhosts指定工作进程的IP地址和端口。

本例中使用的两台GPU实例的ip地址分布是172.31.24.117和172.31.30.43,我在172.31.24.117上运行参数服务器进程,命令如下:

python ./tensorflow/tools/dist_test/python/mnist_replica.py --ps_hosts=172.31.24.117:2222 --worker_hosts=172.31.24.117:2223,172.31.30.43:2223 --job_name=ps --task_index=0 

注意这里的参数–job_name=ps用于指定本进程的角色。

接着在172.31.24.117上起第一个worker进程,命令如下:

python ./tensorflow/tools/dist_test/python/mnist_replica.py --ps_hosts=172.31.24.117:2222 --worker_hosts=172.31.24.117:2223,172.31.30.43:2223 --job_name=worker --task_index=0 

这个命令和第一个启动参数服务器的命令几乎一样,差别就是–job_name=worker这个参数。

接着在172.31.30.43上启动第二个worker进程,命令如下

python ./tensorflow/tools/dist_test/python/mnist_replica.py –ps_hosts=172.31.24.117:2222 –worker_hosts=172.31.24.117:2223,172.31.30.43:2223 –job_name=worker –task_index=1
因为都是启动worker进程,所以两个启动worker进程的命令都是用的 –jobname=worker 参数,关键在于第一个worker进程使用taskindex=0 参数,而第二个worker进程使用task_index=1 参数。

执行以上命令后稍等片刻两个worker进程就会开始mnist数据集的训练,从日志输出上可以看出两个worker进程分别负责了部分样本的训练。

结语

以上就是AWS上编译安装TensorFlow并执行分布式训练的过程,完成以上环境搭建以后就可以开始你自己的分别式神经网络训练了。

作者介绍:

邓明轩

亚马逊AWS解决方案架构师,拥有15年IT 领域的工作经验,先后在IBM,RIM,Apple 等企业担任工程师、架构师等职位;目前就职于AWS,担任解决方案架构师一职。喜欢编程,喜欢各种编程语言,尤其喜欢Lisp。喜欢新技术,喜欢各种技术挑战,目前在集中精力学习分布式计算环境下的机器学习算法。

New feature launched to AWS China (BJS) region, operated by SINNET – Amazon RDS for SQL Server – Support for Native Backup/Restore to Amazon S3

As a managed database service, Amazon RDS takes care of the more routine aspects of setting up, running, and scaling a relational database. We first launched support for SQL Server in 2012. Continuing our effort to add features that have included SSL support, major version upgrades, transparent data encryption, enhanced monitoring and Multi-AZ, we have now added support for SQL Server native backup/restore.

SQL Server native backups include all database objects: tables, indexes, stored procedures and triggers. These backups are commonly used to migrate databases between different SQL Server instances running on-premises or in the cloud. They can be used for data ingestion, disaster recovery, and so forth. The native backups also simplify the process of importing data and schemas from on-premises SQL Server instances, and will be easy for SQL Server DBAs to understand and use.

Support for Native Backup/Restore

You can now take native SQL Server database backups from your RDS instances and store them in an Amazon S3 bucket. Those backups can be restored to an on-premises copy of SQL Server or to another RDS-powered SQL Server instance.  You can also copy backups of your on-premises databases to S3 and then restore them to an RDS SQL Server instance. SQL Server Native Backup/Restore with Amazon S3 also supports backup encryption using AWS Key Management Service (Note) across all SQL Server editions. Storing and transferring backups in and out of AWS through S3 provides you with another option for disaster recovery.

You can enable this feature by adding the SQL_SERVER_BACKUP_RESTORE option to an option group and associating the option group with your RDS SQL Server instance. This option must also be configured with your S3 bucket information and can include a KMS key to encrypt the backups.

Start by finding the desired option group:

Then add the SQL_SERVER_BACKUP_RESTORE option, specify (or create) an IAM role to allow RDS to access S3, point to a bucket, and (if you want) specify and configure encryption:

After you have set this up,  you can use SQL Server Management Studio to connect to the database instance and invoke the following stored procedures (available within the msdb database) as needed:

  • rds_backup_database – Back up a single database to an S3 bucket.
  • rds_restore_database – Restore a single database from S3.
  • rds_task_status – Track running backup and restore tasks.
  • rds_cancel_task – Cancel a running backup or restore task.

To learn more, take a look at Importing and Exporting SQL Server Data.

Note
Key Management Service is not currently available in AWS China (BJS) region, operated by SINNET. You may go to other AWS regions to deploy this service.

由光环新网运营的AWS中国北京(BJS)区域现推出新RDS功能 – 支持SQL Server 本机备份/还原到Amazon S3

Amazon RDS作为托管数据库服务,负责关系数据库设置、运行和扩展方面的多种常规工作。我们于 2012 年首次推出对 SQL Server 的支持。之后一直在努力丰富和完善各项功能 (包括 SSL 支持、主要版本升级、透明数据加密、增强监控和多可用区),现在又增加了对 SQL Server 本机备份/还原的支持。SQL Server 本机备份包括所有数据库对象:表、索引、存储过程和触发器。这些备份通常用于在本地或云中运行的不同 SQL Server 实例间迁移数据库。它们可用于数据提取、灾难恢复等。本机备份还可简化从本地 SQL Server 实例中导入数据和架构的过程,并且便于 SQL Server 数据库管理员了解和使用。

支持本机备份/还原

您现在可以从 RDS 实例中进行本机 SQL Server 数据库备份,并将其存储在 Amazon S3 存储桶中。这些备份可以还原到 SQL Server 的本地副本或另一个支持 RDS 的 SQL Server 实例。您还可以将本地数据库备份复制到 S3,然后再将其还原到 RDS SQL Server 实例。使用 Amazon S3 进行的 SQL Server 本机备份/还原还支持在所有 SQL Server 版本中使用 Key Management Service (附注)进行备份加密。通过 S3 在 AWS 中存储和传入/传出备份将为您提供另一种灾难恢复选择。您可以通过在选项组中添加 SQL_SERVER_BACKUP_RESTORE 选项并将该选项组与 RDS SQL Server 实例相关联的方法来启用此功能。此选项还必须配有您的 S3 存储桶信息并且可包含 KMS 密钥才能对备份进行加密。首先找到所需的选项组:

然后添加 SQL_SERVER_BACKUP_RESTORE 选项,指定 (或创建) IAM 角色,以允许 RDS 访问 S3、指向存储桶并 (根据需要) 指定和配置加密:

设置此选项后,您可以使用 SQL Server Management Studio 根据需要连接到数据库实例并调用以下存储过程 (在 msdb 数据库中提供):

rds_backup_database – 将一个数据库备份到 S3 存储桶。
rds_restore_database – 从 S3 中还原一个数据库。
rds_task_status – 跟踪正在运行的备份和还原任务。
rds_cancel_task – 取消正在运行的备份或还原任务。
要了解更多信息,请参阅导入和导出 SQL Server 数据

*附注:KMS服务尚未于由光环新网运营的AWS中国(BJS)区域提供服务,用户若需使用KMS功能,可至AWS全球其他区域进行操作。

Amazon S3 和 Amazon Glacier 降价

我们很高兴地宣布,我们整合了S3产品的价格区间,同时调降了存储产品S3和Glacier的价钱。S3产品的价格区间从6个整合至3个 : 0-50TB,50-500TB,以及500TB以上。我们希望帮助客户更加容易理解账单并管理预算。我们也会在全球区域调降S3和Glacier 产品价格达20%以上。以上的更新将更好地帮助用户节省成本,同时如往常一般,享受简单、持久、以及大规模的AWS目标存储服务。

由光环新网运营的AWS中国(北京)区域的存储产品价格调整如下:

Glacier – 0.0334元人民币 每GB每月 56%的降幅

此项价格变动将由2016年12月1日起生效。

除了价格调降之外,Glacier并推出了新的提取数据的选项,让客户有更经济的选择,并且能在更短的时间内提取所需数据,且我们将以费率计价的方式调整为单一的按数据大小计费。

用户现有三种提取数据的方式:

  • 标准:用户可以在三到五小时内得到存档数据,这是之前已经有的方式,并且也是默认的提取数据选项。
  • 加速:若用户偶有突发状况需紧急提取所需数据时,现在可以选择加速提取选项。此选项可以让用户在1-5分钟内得到所需数据,最大支持到250MB的数据提取。我们提供用户两种计费方式:按需及预付费。按需方式类似EC2,在大部分情况下用户都可以使用;而预付费方式,在用户预缴了月费的情况下,保障了用户无论何时都可以使用。
  • 批量:批量提取为Glacier最低价的数据提取选择,用户可用最优惠的价格,在5-12小时内取得所需大量数据,

此项功能变动现已生效。

 

构建健壮的混合云网络——BJS DX+VPN篇

背景介绍:

近年来,随着公有云的普及,一方面,越来越多的用户选择利用公有云在弹性、灵活性等方面的优势,在云上部署新的应用系统,另一方面,大量的企业有很多现有的本地基础设施投资,所以企业上云的过程并不是一触而就的,期间势必存在云应用与本地数据中心应用并存的局面,为了更好的融合云与本地数据中心的应用环境,实现整体应用系统的稳定性和高可用性,构建一个健壮的混合云网络至关重要。

在AWS上,用来连接AWS与本地数据中心的方式主要有以下3种:

1.    纯VPN组网

2.    纯专线组网

3.    VPN与专线的混合组网

其中,对于AWS中国区来讲,由于AWS自身的VPN服务VGW目前尚未落地,客户急需要一个替代方案,能够达到类似于VGW的冗余及故障切换功能。

本篇主要讲述第三种组网方式,着眼点在于如何实现混合云网络的健壮性及故障自愈。

此外笔者始终认为“Network is not just ping success”,尤其对于大型企业来说,网络流量的监控,故障事件的告警,日志的搜集检索等功能并非可选项,所以本篇也会顺带介绍如何在AWS云上实现这些功能。

对于第一,第二种组网方式的高可用实现,请参考:

《构建健壮的混合云网络——BJS VPN篇》

《构建健壮的混合云网络——BJS DX篇》

注意:本篇以AWS中国区VGW尚未落地为前提,VPN部分以开源软件实现,但应用场景并不仅限于AWS中国区,如何客户需要一些VGW暂时无法满足的功能,同样可以在AWS Global利用本篇搭建符合自身需求的解决方案,具体可能的需求包括但不限于:

1.    需要使用VGW暂时不支持的加解密算法

2.    需要使用VGW暂时不支持的hash算法

3.    需要使用证书认证

4.    All in one解决方案,VPN设备除了提供VPN功能外,还需要提供防火墙,NAT等功能

拓扑图:

对于DX与VPN互备的场景,有如下几种情况:

1.    1条DX+1条VPN

2.    2条DX+1条VPN

3.    1条DX+2条VPN

4.    2条DX+2条VPN

对于1,2两种场景下,可以简单地通过调整Private-1,Private-2的路由表实现AWS侧的主备,即:流量优先选择DX专线,在专线故障时切换到VPN链路。

启用路由传递,路由表中会出现一条10.10.0.0/16,target为VGW的路由

设置一条静态路由10.0.0.0/8,target为VPN设备的eni

由于路由最长匹配的原则,默认去往本地站点10.10.0.0/16的流量会通过VGW走专线,当专线发生故障的时候,10.10.0.0/16的路由不会传递进入路由表,此时10.0.0.0/8的路由生效,流量切换到VPN链路。

对于3,4两种场景下,无法通过上述方式在两条VPN链路之间切换,需要部署拓扑图中的monitor设备来监控DX和VPN链路及VPN设备的健康状态并实现链路切换。

本例主要介绍monitor及Strongswan设备上的脚本功能,及如何与监控,告警相结合。

VPC基本配置,DX基本配置,Strongswan配置及本地站点切换方式请参考:

《构建健壮的混合云网络——BJS VPN篇》

《构建健壮的混合云网络——BJS DX篇》

1.    链路切换逻辑:

当专线链路正常时,设置服务器的路由指向VGW,流量通过专线传输,当监测到专线故障时,将服务器路由指向相同AZ中的Strongswan,并且开始监测Strongswan实例及VPN链路的健康状态,当一条VPN链路发生故障时,切换相应流量跨AZ传输给另一个AZ中的Strongswan,当其中一个AZ的Strongswan发送故障时,切换流量的同时,通过stop/start该Strongswan恢复实例。

2.    除了链路切换功能外,通过monitor及Strongswan上运行脚本能实现故障告警,VPN流量统计及事件日志收集检索功能:

SNS邮件及短信告警:

CloudWatch针对VPN流量监控:

Elasticsearch & Kibana做事件日志收集及检索:

可以针对site,dx,vpn做检索:

所有脚本可以从如下的github上下载得到:

3.    脚本功能说明:

3.1 monitor实例上运行的脚本:

monitor.sh:

 

1.    实现DX链路,VPN链路及VPN设备的健康检测并修改服务器路由切换流量

2.    发现故障后,产生告警通知,通过SNS服务邮件及短信通知相关运维人员

3.    本地产生故障日志,通过logstash输出到Elasticsearch服务存储

注:SNS短信通知目前BJS暂不支持,Elasticsearch & Kibana服务在BJS需要自己搭建

monitor实例需要对路由表做操作,并与SNS服务交互,所以需要赋予相关的角色

其中,monitor policy的配置如下:

{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Action": [

                "ec2:DescribeInstances",

                "ec2:CreateRoute",

                "ec2:ReplaceRoute",

                "ec2:StartInstances",

                "ec2:StopInstances"

            ],

            "Effect": "Allow",

            "Resource": "*"

        }

    ]

}

3.2 Strongswan实例上运行的脚本:

tunnel_init.sh:创建tunnel接口及路由相关流量到tunnel口

traffic_monitor.sh:收集进出tunnel口的VPN流量统计信息,通过自定义metric发送到CloudWatch中,实现VPN流量的监控

ipsec.conf/ipsec.secrets配置文件:Strongswan配置文件,建立ipsec vpn隧道

Strongswan实例需要收集VPN流量信息并与CloudWatch交互,所以需要赋予相关的角色

4.    脚本使用方法:

monitor.sh:运行在monitor实例上,monitor实例需要拥有操控路由表,SNS等

monitor.sh的如下脚本语句需要做相应的修改

VPN_ID1="i-0e1466e8a5dd4892c"

VPN_ID2="i-0430fe110cdec5835"

VGW_ID="vgw-078bcc55"

VPN_RT_ID1="rtb-468f5222"

VPN_RT_ID2="rtb-4b8f522f"

DX_IP="10.10.3.100"

Remote_IP1="169.254.100.1"

Remote_IP2="169.254.200.1"

logstash_site="Singapore"

litterbin=$(aws sns publish --region ap-southeast-1 --topic-arn "arn:aws:sns:ap-southeast-1:93870664XXXX:DCI-Status" --subject "Status of DCI between Singapore and Ireland Changed!" --message file://logfile)

litterbin=$(aws sns publish --region ap-southeast-1 --phone-number "+861860135XXXX" --message file://logfile)

其中VPN_ID1,VPN_ID2分别为Strongswan-1,Strongswan-2的instance id,VGW_ID为VGW的id,VPN_RT_ID1,VPN_RT_ID2分别为Private-1,Private-2关联的路由表id,DX_IP为DX链路的检测ip,通常为专线提供商MPLS VPN网络的PE设备或者是本地站点的出口路由器公网ip,Remote_IP1,Remote_IP2分别为本地站点两条VPN的隧道口ip,logstash_site为AWS站点标示,该值会体现在告警及日志中,用于区分多个AWS站点。

–region,–topic-arn,–phone-number根据需要修改,其中SNS的topic需要事先创建并且通过相关邮箱订阅来接收消息。

所有事件日志会先写入本地/tmp/logstash.txt文件中,通过logstash上传给elasticsearch。

 

修改/etc/logstash/conf.d/logstash.conf

input {

file {

         path => "/tmp/logstash.txt"

         codec => json

}

}

 

output {

elasticsearch {

         hosts => "http://search-test-cfwkwatg5unnpsgvbd5lyruquy.ap-southeast-1.es.amazonaws.com"

         index => "XXXX"

}

}

可以设置/etc/rc.d/rc.local文件,使monitor实例开机运行monitor.sh脚本

 

vpn_monitor.sh:运行在Strongswan实例上,创建VPN隧道接口及相关路由

traffic_monitor.sh:运行在Strongswan实例上,收集隧道接口的流量信息并以自定义metric的方式传输给CloudWatch服务

可以设置/etc/rc.d/rc.local文件,使Strongswan实例开机运行vpn_monitor.sh和traffic_monitor脚本

作者介绍:

余骏

亚马逊AWS解决方案架构师,负责基于AWS的云计算方案架构的咨询和设计,同时致力于AWS云服务在国内的应用和推广。在加入AWS之前,在思科中国担任系统工程师,负责方案咨询和架构设计,在企业私有云和基础网络方面有丰富经验。

构建健壮的混合云网络——BJS DX篇

背景介绍:

近年来,随着公有云的普及,一方面,越来越多的用户选择利用公有云在弹性、灵活性等方面的优势,在云上部署新的应用系统,另一方面,大量的企业有很多现有的本地基础设施投资,所以企业上云的过程并不是一触而就的,期间势必存在云应用与本地数据中心应用并存的局面,为了更好的融合云与本地数据中心的应用环境,实现整体应用系统的稳定性和高可用性,构建一个健壮的混合云网络至关重要。

在AWS上,用来连接AWS与本地数据中心的方式主要有以下3种:

1.    纯VPN组网

2.    纯专线组网

3.    VPN与专线的混合组网

其中,对于AWS中国区来讲,由于AWS自身的VPN服务VGW目前尚未落地,客户急需要一个替代方案,能够达到类似于VGW的冗余及故障切换功能。

本篇主要讲述第二种组网方式,着眼点在于如何实现混合云网络的健壮性及故障自愈。

对于第一,第三种组网方式的高可用实现,请参考:

《构建健壮的混合云网络——BJS VPN篇》

《构建健壮的混合云网络——BJS DX+VPN篇》

对于如何实现对VPN流量的监控、故障告警及事件日志搜集,请参考:

《构建健壮的混合云网络——BJS DX+VPN篇》

拓扑图:

AWS与本地站点之间建立两条专线,为了保证一条专线故障后,剩下的专线能够承载所有的业务流量,建议使用主备模式,考虑到高可用,建议两条专线分别终结在SINNET和CIDS两个DX Location,并且可以使用两家专线提供商的链路。

配置步骤:

1.    申请专线

小于500M的专线由AWS APN Partner提供,这里以APN Partner方案为例,大于1G的专线接入请参考如下文档:

https://www.amazonaws.cn/en/documentation/directconnect/

向APN Partner申请链路,根据要求提供相关信息,通常包括用户AWS账号,专线带宽等信息。

2.    接受连接并创建virtual interface

当APN Partner建立好专线后,登入management console,选择Direct Connect服务,将可以看到相关的连接,需要选择接受连接。

创建Virtual Interface。

选择创建Private Virtual Interface,设置接口名称并与相关VPC的VGW关联

根据自己的需要设置互联地址及本地站点的AS号

3.    下载本地站点端路由器的配置

4.    修改本地路由器端BGP配置,实现主备冗余

a.    AWS侧出向流量主备通过AS-PATH属性实现

b.    本地站点侧出向流量主备通过Local-Preference属性实现

下面是本地站点侧,备份链路路由器上的参考配置:

route-map LOCAL-PRE permit 10

 set local-preference 50

!

route-map PREPEND permit 10

 set as-path prepend 1111 1111

router bgp 1111

 network 0.0.0.0

 neighbor 169.254.10.2 remote-as 17493

 neighbor 169.254.10.2 route-map LOCAL-PRE in

 neighbor 169.254.10.2 route-map PREPEND out

5.    确认接口up

6.    设置需要通过专线访问本地站点的路由表的下一跳为VGW

 

作者介绍:

余骏

亚马逊AWS解决方案架构师,负责基于AWS的云计算方案架构的咨询和设计,同时致力于AWS云服务在国内的应用和推广。在加入AWS之前,在思科中国担任系统工程师,负责方案咨询和架构设计,在企业私有云和基础网络方面有丰富经验。

构建健壮的混合云网络——BJS VPN篇

背景介绍:

近年来,随着公有云的普及,一方面,越来越多的用户选择利用公有云在弹性、灵活性等方面的优势,在云上部署新的应用系统,另一方面,大量的企业有很多现有的本地基础设施投资,所以企业上云的过程并不是一触而就的,期间势必存在云应用与本地数据中心应用并存的局面,为了更好的融合云与本地数据中心的应用环境,实现整体应用系统的稳定性和高可用性,构建一个健壮的混合云网络至关重要。

在AWS上,用来连接AWS与本地数据中心的方式主要有以下3种:

1.    纯VPN组网

2.    纯专线组网

3.    VPN与专线的混合组网

其中,对于AWS中国区来讲,由于AWS自身的VPN服务VGW目前尚未落地,客户急需要一个替代方案,能够达到类似于VGW的冗余及故障切换功能。

本篇主要讲述第一种组网方式,着眼点在于如何实现混合云网络的健壮性及故障自愈,并不会讲述太多的IPSec VPN知识。

对于第二,第三种组网方式的高可用实现,请参考:

《构建健壮的混合云网络——BJS DX篇》

《构建健壮的混合云网络——BJS DX+VPN篇》

对于如何实现对VPN流量的监控、故障告警及事件日志搜集,请参考:

《构建健壮的混合云网络——BJS DX+VPN篇》

拓扑图:

Strongswan-1和Strongswan-2分别作为Region A两个AZ内的VPN设备,与客户本地站点的internet出口设为分别建立两条VPN隧道,Private-1和Private-2分别模拟Region A两个AZ中的两台内网设备。

本场景需要实现如下目的:

1.    Private-1,Private-2能够与本地站点内的设备通过私网互通

2.    AWS侧能够检测VPN连接的健康状态并实现自动的故障切换

3.    AWS侧能够检测VPN设备的健康状态并实现自动的故障切换

4.    本地站点侧能够检测VPN连接的健康状态并实现自动的故障切换

5.    本地站点侧能够检测VPN设备的健康状态并实现自动的故障切换

系统工作流程:

1.    Strongswan-1和Strongswan-2设置开机自动运行vpn_monitor.sh脚本,该脚本首先会将Private-1和Private-2去往本地站点的路由分别指向本AZ中的VPN设备,即:Strongswan-1和Strongswan-2

2.    接着Strongswan-1和Strongswan-2会通过互相ping来检测对端的可达性,同时通过ping本地站点VPN设备的tunnel地址来检测VPN连接的可达性。

3.    如果Strongswan-1的VPN连接发生故障,Strongswan-1会将Private-1路由的target从Strongswan-1修改为指向Strongswan-2,连接恢复后,Strongswan-1会将路由切换回自身

4.    如果Strongswan-1发生故障,Strongswan-2的ping检测失败,Strongswan-2会将Private-1路由的target从Strongswan-1修改为指向Strongswan-2

5.    Strongswan-2接着会对Strongswan-1做stop,start操作

6.    当Strongswan-1在另外一台物理机上启动后,自动运行的脚本会将Private-1路由从Strongswan-2修改为指向Strongswan-1

配置步骤:

1.    为Strongswan-1和Strongswan-2创建合适的角色并关联

由于Strongswan-1和Strongswan-2需要对VPC路由表及EC2实例做操作,所以需要创建合适的角色并与实例关联。

在IAM服务中选择策略->创建策略

选择创建您自己的策略

使用如下内容设置策略文档,并点击创建策略

在IAM服务中选择角色->创建新角色

设置角色名称

选择AWS服务角色->Amazon EC2

选择筛选条件为客户管理的策略,并勾选之前创建的Strongswan_Policy

审核配置并点击创建角色

在创建Strongswan-1和Strongswan-2的EC2时,关联Strongswan_role角色

需要注意为Strongswan-1,Strongswan-2关联EIP,避免IP发生变化导致VPN无法建立,并且需要在控制台关闭源/目地址检查

2.    VPC网络规划

本场景的VPC的CIDR为172.16.0.0/16,一共需要至少四个子网分别对应4台EC2,Strongswan-1和Strongswan-2可以共用一张路由表,默认路由到IGW,Private-1和Private-2分别需要一张独立的路由表,关于如何配置VPC,子网,IGW,路由表等内容,可以参考如下文档:

Amazon Virtual Private Cloud用户指南

http://docs.amazonaws.cn/AmazonVPC/latest/UserGuide/VPC_Introduction.html

Strongswan-1和Strongswan-2所在子网的路由表设置如下

Private-1所在子网的路由表设置如下,eni-23fbd87a为Strongswan-1的网卡ID,10.10.0.0/16为本地站点网段

Private-2所在子网的路由表设置如下,eni-2d75e606为Strongswan-2的网卡ID,10.10.0.0/16为本地站点网段

3.    配置Strongswan

3.1  在Strongswan-1及Strongswan-2的/etc/sysctl.conf文件中添加如下内容,开启转发,关闭重定向及反向路径过滤:

net.ipv4.ip_forward = 1

net.ipv4.conf.all.accept_redirects = 0

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.rp_filter = 2

运行sysctl –p使修改生效

3.2  安装Strongswan

修改/etc/yum.repos.d/epel.repo,将enabled=0修改成enabled=1

wget ftp://fr2.rpmfind.net/linux/centos/6.8/os/x86_64/Packages/trousers-0.3.13-2.el6.x86_64.rpm

rpm -ivh trousers-0.3.13-2.el6.x86_64.rpm

yum install strongswan -y

chkconfig strongswan on

3.3  配置Strongswan-1的strongswan

修改Strongswan-1的/etc/strongswan/ipsec.conf,添加如下内容,其中172.16.1.157为Strongswan-1的私网地址,54.223.192.238为Strongswan-1的公网地址,52.50.130.77为本地站点路由器的公网地址:

conn vpn1

            type=tunnel

            mobike=no

            authby=secret

            keyexchange=ikev1

            ike=aes128-sha1-modp1024

            esp=aes128-sha1-modp1024

            left=172.16.1.157

            leftid=54.223.192.238

            leftsubnet=0.0.0.0/0

            right=52.50.130.77

            rightsubnet=0.0.0.0/0

            auto=start

            dpddelay=3

            dpdtimeout=15

            dpdaction=restart

            mark=100

3.4  创建Strongswan-1的/etc/strongswan/ipsec.secrets文件,添加如下内容:

54.223.192.238 52.50.130.77 : PSK "cisco"

3.5  配置Strongswan-2的strongswan

修改Strongswan-2的/etc/strongswan/ipsec.conf,添加如下内容,其中172.16.2.126为Strongswan-2的私网地址,54.222.191.34为Strongswan-2的公网地址,52.51.34.140为本地站点路由器的公网地址:

conn vpn1

            type=tunnel

            mobike=no

            authby=secret

            keyexchange=ikev1

            ike=aes128-sha1-modp1024

            esp=aes128-sha1-modp1024

            left=172.16.2.126

            leftid=54.222.191.34

            leftsubnet=0.0.0.0/0

            right=52.51.34.140

            rightsubnet=0.0.0.0/0

            auto=start

            dpddelay=3

            dpdtimeout=15

            dpdaction=restart

            mark=100

3.6  创建Strongswan-2的/etc/strongswan/ipsec.secrets文件,添加如下内容:

54.222.191.34              52.51.34.140 : PSK "cisco"

3.7  下载脚本到Strongswan-1和Strongswan-2,修改如下内容

脚本下载地址:https://s3.cn-north-1.amazonaws.com.cn/junyublog/vpn_monitor.sh

VPN_ID="i-0430fe110cdec5835"

VPN_RT_ID="rtb-4b8f522f"

Remote_IP="169.254.40.105"

My_RT_ID="rtb-468f5222"

VPN_ID为peer的instance id,对于运行在Strongswan-1上的脚本,该值为Strongswan-2的instance id,对于运行在Strongswan-2上的脚本,该值为Strongswan-1的instance id

对于运行在Strongswan-1上的脚本,VPN_RT_ID为Private-2所在子网关联的路由表,对于运行在Strongswan-2上的脚本,VPN_RT_ID为Private-1所在子网关联的路由表

Remote_IP为对端本地站点路由器的tunnel地址

My_RT_ID为本机负责转发的EC2的路由表ID,对于运行在Strongswan-1上的脚本,该值为Private-1的路由表ID,对于运行在Strongswan-2上的脚本,该值为Private-2的路由表ID

4.    创建tunnel接口及路由表

在/etc/rc.d/rc.local文件中添加如下内容:

Strongswan-1:

litterbin=$(ip link add tunnel1 type vti local 172.16.1.157 remote 52.50.130.77 key 100)

litterbin=$(ip add add 169.254.100.2/30 remote 169.254.100.1/30 dev tunnel1)

litterbin=$(ip link set tunnel1 up mtu 1436)

litterbin=$(ip rule add priority 10 from all lookup 10)

ip route add 169.254.100.0/30 via 169.254.100.1 table 10

ip route add 10.10.0.0/16 via 169.254.100.1 table 10

/bin/bash ./home/ec2-user/vpn_monitor.sh > /tmp/log

其中169.254.100.2为Strongswan-1的tunnel口地址,169.254.100.1为对端本地站点路由器的tunnel口地址,172.16.1.157为Strongswan-1的私网地址,52.50.130.77为对端本地站点路由器的出口地址

 

Strongswan-2

litterbin=$(ip link add tunnel1 type vti local 172.16.2.126 remote 52.51.34.140 key 100)

litterbin=$(ip add add 169.254.200.2/30 remote 169.254.200.1/30 dev tunnel1)

litterbin=$(ip link set tunnel1 up mtu 1436)

litterbin=$(ip rule add priority 10 from all lookup 10)

ip route add 169.254.200.0/30 via 169.254.200.1 table 10

ip route add 10.10.0.0/16 via 169.254.200.1 table 10

/bin/bash ./home/ec2-user/vpn_monitor.sh > /tmp/log

其中169.254.200.2为Strongswan-2的tunnel口地址,169.254.200.1为对端本地站点路由器的tunnel口地址,172.16.2.126为Strongswan-1的私网地址,52.51.34.140为对端本地站点路由器的出口地址

5.    本地站点路由器参考配置

此处以Cisco路由器为例,思路如下:

a.    创建tunnel-based ipsec vpn

b.    通往VPC网段的路由指向tunnel接口,并且使用ip sla track

c.    设置ip sla检测Strongswan的tunnel ip可达性

d.    本地内网配置IGP,将静态路由重分发到IGP中

 

Cisco Router 1:

track 100 ip sla 10 reachability

!

crypto keyring KEYRING 

  local-address 10.10.1.100

  pre-shared-key address 54.223.192.238 key cisco

!

crypto isakmp policy 100

 encr aes

 authentication pre-share

 group 2

 lifetime 28800

crypto isakmp keepalive 10 10

crypto isakmp profile isakmp-profile

   keyring KEYRING

   match identity address 54.223.192.238 255.255.255.255

   local-address 10.10.1.100

!

crypto ipsec security-association replay window-size 128

!

crypto ipsec transform-set TRAN esp-aes esp-sha-hmac

 mode tunnel

crypto ipsec df-bit clear

!

crypto ipsec profile ipsec-profile

 set transform-set TRAN

 set pfs group2

!

interface Tunnel100

 ip address 169.254.100.1 255.255.255.0

 ip tcp adjust-mss 1387

 tunnel source 10.10.1.100

 tunnel mode ipsec ipv4

 tunnel destination 54.223.192.238

 tunnel protection ipsec profile ipsec-profile

 ip virtual-reassembly

!

router ospf 100

 router-id 1.1.1.1

 redistribute static subnets route-map static2ospf

!

ip route 172.16.0.0 255.255.0.0 Tunnel100 169.254.100.2 tag 100 track 100

!

ip sla 10

 icmp-echo 169.254.100.2 source-ip 169.254.100.1

 frequency 5

ip sla schedule 10 start-time now

!

route-map static2ospf permit 10

 match tag 100

 

Cisco Router 2:

track 100 ip sla 10 reachability

!

crypto keyring KEYRING 

  local-address 10.10.2.100

  pre-shared-key address 54.222.191.34 key cisco

!

crypto isakmp policy 100

 encr aes

 authentication pre-share

 group 2

 lifetime 28800

crypto isakmp keepalive 10 10

crypto isakmp profile isakmp-profile

   keyring KEYRING

   match identity address 54.222.191.34 255.255.255.255

   local-address 10.10.2.100

!

crypto ipsec security-association replay window-size 128

!

crypto ipsec transform-set TRAN esp-aes esp-sha-hmac

 mode tunnel

crypto ipsec df-bit clear

!

crypto ipsec profile ipsec-profile

 set transform-set TRAN

 set pfs group2

!

interface Tunnel100

 ip address 169.254.200.1 255.255.255.0

 ip tcp adjust-mss 1387

 tunnel source 10.10.2.100

 tunnel mode ipsec ipv4

 tunnel destination 54.222.191.34

 tunnel protection ipsec profile ipsec-profile

 ip virtual-reassembly

!

router ospf 100

 router-id 2.2.2.2

 redistribute static subnets route-map static2ospf

!

ip route 172.16.0.0 255.255.0.0 Tunnel100 169.254.200.2 tag 100 track 100

!

ip sla 10

 icmp-echo 169.254.200.2 source-ip 169.254.200.1

 frequency 5

ip sla schedule 10 start-time now

!

route-map static2ospf permit 10

 match tag 100

 

作者介绍:

余骏

亚马逊AWS解决方案架构师,负责基于AWS的云计算方案架构的咨询和设计,同时致力于AWS云服务在国内的应用和推广。在加入AWS之前,在思科中国担任系统工程师,负责方案咨询和架构设计,在企业私有云和基础网络方面有丰富经验。

GPU为Amazon Graphics WorkSpaces提供助力

从之前发表的《我爱我的Amazon WorkSpaces》一文就能看出,我是个WorkSpace的狂热支持者——我也从不不否认这一点。

自从这篇文章发表以来,我发现很多朋友都跟我有着同样的选择。众多AWS客户都乐于享受这种酣畅淋漓的安全桌面计算环境管理体验,我自然也是其中一员。作为用户,我们热爱WorkSpace这种强大的设备支持广度与能力——从Windows到Mac计算机、PCoIP Zero客户端、Chromebook、iPad、Fire平板乃至Android平板皆在其中。作为管理员,我们感激WorkSpace能够为任意数量的用户提供高水平云桌面。而作为企业领导者,我们则喜爱按小时或者按月付费来使用这套桌面方案的方式。

全新Graphics选项

此前爱好者们已经拥有多种硬件选项:Value版、Standard版与Performance版组合。其vCPU(虚拟CPU)数量为1或2个,内存为2到7.5 GiB,这些组合适用于多种办公生产型用例。

今天我们迎来了WorkSpace家族中的全新GPU助力型Graphics组合。这套组合提供的高端虚拟桌面非常适合3D应用开发者、3D建模师以及需要使用CAD、CAM或者CAE等工具的工程师用户。下面来看其规格参数:

  • 显示——英伟达GPU,包含1536个CUDA核心与4 GiB显存。
  • 处理——8个vCPU。
  • 内存——15 GiB。
  • 系统存储分卷——100 GB。
  • 用户存储分卷——100 GB。

这套新的组合包已经在提供WorkSpaces服务的各服务区推出,且同样可在前文中提到的设备平台上运行。大家可以运行内含许可的操作系统(Windows Server 2008配合Windows 7 Desktop Experience),或者自行准备Windows 7或者10系统许可。各应用程序可使用其中的OpenGL 4.x、DirectX、CUDA、OpenCL,另外英伟达GRID SDK亦能够发挥其中GPU的性能优势。

在考虑PB级别数据的分析与可视化处理时,请注意这些实例能够与EC2、RDS、Amazon Redshift、S3以及Kinesis进行紧密协作。具体来讲,大家能够在服务器端处理计算密集型分析任务,而后对其进行渲染并直接在手边的WorkSpace上显著其结果。我个人对利用这些AWS服务组合创建令人赞叹的应用程序抱有信心,而且此类应用显然无法通过其它具备同样成本效益的方式加以实现。

Graphics Bundle与其它捆绑包之间存在一大重要区别。考虑到底层硬件的运作方式,运行此捆绑包的WorkSpaces在与AutoStop运行模式相结合时(我之前曾在〈Amazon WorkSpaces更新——按小时使用与Root分卷扩展〉一文中提到),其不会存储本地状态(包括运行中的应用以及已打开的文档)。我们建议大家在断开与WorkSpace间的连接或者不再续用之前,保存已打开的文档并关闭应用程序。

演示

我个人在工作中并不需要构建3D应用或者使用CAD、CAM乃至CAE工具。不过,我非常喜欢用乐高积木设计并搭建有趣的东西!我在这里启动了最新版本的乐高数字设计师(简称LDD),并花了一段时间雕琢自己的设计成果。虽然没有进行任何基准测试,但这套GPU强化型版本确实带来了理想的运行速度,且能够快速生成高质量成品。下面来看我做的一点设计研究工作:

设计完成之后,接下来就是搭建工作了。相较于挪动显示器来查看自己的设计方案,我得以直接利用自己的Fire平板登录Graphics WorkSpace。我能够快速缩放并旋转自己的设计方案——虽然这台平板本身的计算能力非常有限。下面来看Fire平板上WorkSpace的实际表现:

如大家所见,两套屏幕(台式机与Fire平板)的显示内容一模一样!我可以根据平板上的设计在自己的桌上排布乐高积木,并快速查看设计效果:

价格
Graphics WorkSpaces目前提供按小时计费的使用选项。大家需要支付小额的固定费用按月购买基础设施与存储资源,并在周期之内每小时支付额外的WorkSpace使用费。AWS开出的价格为美国东部服务区(北弗吉尼亚州)每月22美元加每小时1.75美元; 感兴趣的朋友可以点击此处查看WorkSpaces价格页面以了解更多信息。

作者:Jeff Barr, 亚马逊AWS首席布道师

原文链接:

https://aws.amazon.com/cn/blogs/aws/new-gpu-powered-amazon-graphics-workspaces/

Amazon QuickSight全面上线——更快更易用的大数据商务分析服务

经过超过1500家企业级客户(包括初创企业及全球化大公司)的预览之后,我兴奋地向大家宣布,Amazon QuickSight目前已经正式上线!在去年发给大家的预览版本邀请当中,我曾经写道:

过去,商务智能一直是一项需要投入巨大时间与精力之后才能实现的工作。大家需要承担相关成本,设置并运行基础设施及软件,管理规模化体系(而用户往往因此受到负面影响)并投入大量资金招聘顾问以进行数据模拟。即便如此,您的用户仍然要在复杂的用户界面中挣扎,而且渴望能能在移动设备上探索数据却无法被满足。打算访问NoSQL与流数据?只能说祝大家好运了!

Amazon QuickSighthttps://quicksight.aws/能够为大家提供速度可观、易于使用的云支持型商业分析方案,且其实现成本仅为传统内部解决方案的十分之一。QuickSight允许大家在数分钟之内开始操作。您只需要进行登录、指定数据源,而后即可对数据进行可视化处理。在场景之下,SPICE(即超高速、并行、内存内计算引擎)将以迅如闪电的速度运行您的查询请求,并提供极为出色的数据可视化成果。

深入挖掘数据

在与客户的交流当中我们深切感受到:每位客户都表示希望能从其存储的数据当中获取更多价值。他们意识到,如今蕴含于数据当中的潜在价值正愈发显露。但同时,他们又失望地得知:发现并提取这些价值,需要高昂成本且实现难度极大。内部商业分析工具的使用许可会带来大量开销,同时给现有基础设施造成沉重的负载压力。许可成本与工具复杂性制约着用户群体,事实上只有少数专家能够顺畅使用这些方案。综合来讲,上述因素共同导致大多数企业认为:自己尚没有准备好投资构建一套真正的商业分析功能组合。

QuickSight的构建目标正在于此!它能够以“服务”形式运行,并将商业分析能力交付至任意规模与形式的企业客户手中。其速度极快且易于使用,不会给现有基础设施带来额外运行负担,同时可以每用户9美元的低廉价格,按月进行付费。

上手之后,大家会发现QuickSight允许大家对存储在多种不同服务及位置的数据进行处理。大家可以直接使用来自Amazon Redshift数据仓库、Amazon关系型数据库服务(简称RDS)中各关系数据库以及S3内的普通文件。大家亦能够使用一系列连接器以访问存储于内部MySQL、PostgreSQL以及SQL Server数据库、微软Excel电子表格、Salesforce乃至其它服务中的数据。

QuickSight在设计当中亦充分考虑到客户的扩展需求。大家可以随时添加更多用户、数据源以及数据集,同时无需购买任何长期许可或者向数据中心内添加更多硬件设备。

马上开始

下面我们将展开一番QuickSight游历。由于已经得到管理员的许可,所以我可以直接登录QuickSight并开始操作。以下为QuickSight的主界面:

我首先选择从Redshift集群当中提取数据。这里点击Manage data并查看我的现有数据集:

我没有看到我所需要的数据集,所以点击New data set并查看相关选项:

而后点击Redshift(手动连接)并输入登录凭证,这样即可访问我的数据仓库(如果该Redshift集群运行在我的当前AWS账户之内,则可自动发现此来源):

QuickSight会查询该数据仓库并显示相关模式(表组)以及当前可用的表。这里我选择public模式以及all_flights表作为示例:

现在我拥有两个选项。我可以将表提取至SPICE进行快速分析,亦可直接对其进行查询。这里我选择将其提取至SPICE:

这里还是两个选项。我可以点击Edit/Preview data(编辑/查看数据)并选择需要导入的行及列,亦可点击Visualize(可视化)导入全部数据并对其加以处理。这里我选择Edit/Preview。可以看到各字段(图片左侧),而后我可以利用勾选框仅选定自己感兴趣的部分:

另外,我也可以点击New Filter(新过滤器),从弹出菜单内选定一个字段,而后创建一套过滤机制:

两个选择(选择字段以及按行过滤)都允许我控制需要提取至SPICE的具体数据。通过这种方式,我可以控制需要进行可视化处理的数据,亦能帮助我更为高效地利用内存资源。在做好处理准备之后,我点击Prepare data & visualize(准备数据&可视化)。这时,数据会被加载至SPICE当中,而我则可随时对其进行可视化处理。我简单选择了一个字段作为演示。举例来说,我可以选择origin_state_abbr字段并查看各州拥有多少航班:

右侧的缩短视图能够为我提供一些额外上下文信息。我可以上下滚动或者选定需要显示的值区间。我也可以点击次级字段以了解更多信息。这里我点击flights,将排序设置为descending(降序),而后滚动至顶部。现在,我可以查看数据中由每个州起飞的具体航班了:

QuickSight的AutoGraph功能会自动根据所选定的数据生成一份对应的可视化图表。举例来说,如果我添加fl_date字段,则会得到一份以时间为轴的各州航班数量图表:

根据我的查询、数据类型以及数据属性,QuickSight还能够提供其它可视化选项:

我还能够自行选择多种视觉类型,包括纵向&横向条形图、线图、透视图、树状图、饼状图以及热度图等:

在完成可视化图表的创建之后,我可以捕捉图表内容并利用结果故事板构建对应的数据驱动型故事:

我亦能够将自己的可视化成果共享给其他同事:

最后,我的可视化成果可通过自己的移动设备进行查看:

价格与SPICE容量
QuickSight永久提供一个免费用户与1 GB免费SPICE容量。这意味着每一位AWS用户都能够在无需承担任何成本的前提下分析数据并获取商业洞察结论。Amazon QuickSight的标准版起步价格为每月9美元,其中包含10 GB SPICE容量(请参阅QuickSight Pricing页面以了解更多细节信息)。

SPICE容量管理工作非常轻松易行。我只需要在菜单当中点击Manage QuickSight即可(当然,必须具备ADMIN角色方可执行修改):

而后我可以看到自己的当前容量状态:

我可以点击Purchase more capacity(购买更多容量):

我也可以点击Release unused purchased capacity(释放未使用的已购容量),从而削减我当前拥有的SPICE容量:

已经全面上线
Amazon QuickSight目前已经在美国东部(北弗吉尼亚州)、美国西部(俄勒冈州)以及欧洲(爱尔兰)服务区全部上线,大家从今天开始即可上手使用。

受到篇幅所限,本篇文章只是稍微涉及到QuickSight的表层。不过考虑到这项服务允许免费使用,因此建议大家马上申请、载入部分数据并自行探索其中隐藏的更多秘密!

作者:Jeff Barr,亚马逊AWS首席布道师

原文链接:

https://aws.amazon.com/cn/blogs/aws/amazon-quicksight-now-generally-available-fast-easy-to-use-business-analytics-for-big-data/