亚马逊AWS官方博客

API Gateway 的Android SDK

1.  背景介绍

Amazon API Gateway 是一种完全托管的服务,可以帮助开发者轻松创建、发布、维护、监控和保护任意规模的 API。作为无服务器架构中的一个重要组成部分,已经有越来越多的用户熟悉并使用Amazon API Gateway。为了让大家更轻松地调用生成的API,Amazon API Gateway还提供了生成客户端SDK的功能,目前支持的客户端语言包括Java、JavaScript、iOS(Object-C)、iOS(Swift) 和 Android。

今天,我们通过一个具体的例子演示一下Android SDK,帮助大家快速上手,更方便轻松地使用Amazon API Gateway。

2.  配置部署 API

我们参考官方文档中的宠物店这个例子,配置一套代理HTTP接口的API。我们简化接口定义,以便突出Android SDK的使用,只做2个接口:

/pets

方法: GET

参数:

type String 宠物类型

page int 页码

/pets/{id}

方法: GET

参数: 无

2.1 创建 Model

我们的 API代理的后端接口还是这个宠物店的接口

http://petstore-demo-endpoint.execute-api.com/petstore/pets

我们先根据其返回结果创建相关的结果数据模型。

我们以Oregon区域为例,打开Amazon API Gateway管理控制台

https://us-west-2.console.aws.amazon.com/apigateway/home?region=us-west-2

点击 Create API

保持New API选中不变。

API name 填写petstore。

Description 填写A demo API for Android SDK.。点击 Create API按钮。

这时左侧导航链接会显示成 APIs > petstore> Resources。点击导航链接中的APIs > petstore> Models。这里已经显示有2个默认创建出来的Model。我们点击Create按钮再来创建一个。

2.1.1 Pets: 宠物列表的 Model

Model name* 填写 Pets

Content type* 填写 application/json

Model description 填写 A list of pets。

我们使用https://jsonschema.net/ 这个在线工具来生成Model schema。

Root ID 填写 pets。

我们直接访问 http://petstore-demo-endpoint.execute-api.com/petstore/pets

[
     {
         "id": 1,
         "type": "dog",
         "price": 249.99
     },
     {
         "id": 2,
         "type": "cat",
         "price": 124.99
     },
     {
         "id": 3,
         "type": "fish",
         "price": 0.99
     }
]

帖到 JSON 栏中,其它选项保持不变,点击Generate Schema按钮,结果生成在右侧的窗格中。

复制出来,粘贴到Model schema 格中即可。点击Creat Model按钮保存完成。

2.1.2 Pet: 宠物详情接口的 Model

点击Create按钮再来创建一个。

Model name* 填写 Pet。

Content type* 填写 application/json。

Model description 填写 A pet。

我们再使用https://jsonschema.net/ 这个在线工具来生成Model schema。

Root ID 填写 pet。

我们直接访问http://petstore-demo-endpoint.execute-api.com/petstore/pets/1

把得到的返回结果

{
    "id": 1,
    "type":
    "dog",
    "price":249.99
}

帖到 JSON 栏中,其它选项保持不变,点击Generate Schema按钮,结果生成在右侧的窗格中。复制出来,粘贴到Model schema 格中。点击Creat Model按钮保存完成。

2.2 配置API

2.2.1 宠物列表接口

左侧导航链接点击 APIs > petstore> Resources。保持最顶层的 / 为选中状态时,点击 Actions 下拉菜单,选择Create Resource。

Resource Name* 填写pets

Resource Path 自动填写了 pets。然后点击Create Resource按钮。

这时刚刚创建的/pets应该是选中状态,再点击Actions 下拉菜单,选择Create Method,在当时出现的方法菜单里选择GET,然后点后面的对号符确定。

然后在/pets – GET – Setup 页,Integration type 选HTTP。

Endpoint URL填写 http://petstore-demo-endpoint.execute-api.com/petstore/pets。

其它保持默认,点击Save按钮。

创建成功后,点击 Method Request 链接,在 Method Request配置页,点击URL Query String Parameters 展开之。

点击 Add query string 增加一个参数 type ,点击 Add query string 增加第二个参数 page。其它项保持默认。

点击Method Execution 链接返回,点击Method Response链接。在Method Response配置页,点击 200 左边的三角形,展开响应详情。在Response Body for 200下点击铅笔图标编辑之,把Model菜单下选择Pets,然后点击对勾图标保存。

点击Method Execution 链接返回,点击TEST链接,我们来测试一下。Query Strings 下面 type输入dog,page输入1,然后点击 Test按钮。右侧会显示出形如如下结果,表示这个API已经配置成功。

Request: /pets?type=dog&page=1

Status: 200

Latency: 271 ms

Response Body

[
     {
         "id": 1,
         "type": "dog",
         "price": 249.99
     },
     {
         "id": 2,
         "type": "dog",
         "price": 124.99
     },
     {
         "id": 3,
         "type": "dog",
         "price": 0.99
     }
]

2.2.2 宠物详情接口

左侧导航链接点击 APIs > petstore> Resources。保持最顶层的 /pets 为选中状态时,点击 Actions 下拉菜单,选择Create Resource。

Resource Name* 填写{petId}

Resource Path 自动填写了 –petid-,把它删掉,改成{petId}。然后点击Create Resource按钮。

这时刚刚创建的/{petId}应该是选中状态,再点击Actions 下拉菜单,选择Create Method,在当时出现的方法菜单里选择GET,然后点后面的对号符确定。

然后在/pets/{petId} – GET – Setup 页,Integration type 选HTTP。

Endpoint URL填写 http://petstore-demo-endpoint.execute-api.com/petstore/pets/{petId}。

其它保持默认,点击Save按钮。

创建成功后,点击 Method Request 链接,在 Method Request配置页,点击Request Paths展开之,确认这里已经有一条petId了。如果没有,请返回Create Resource 步骤检查。

点击Method Execution 链接返回,点击Method Response链接。在Method Response配置页,点击 200 左边的三角形,展开响应详情。在Response Body for 200下点击铅笔图标编辑之,把Model菜单下选择Pet,然后点击对勾图标保存。

点击Method Execution 链接返回,点击TEST链接,我们来测试一下。Query Strings 下面{petId}输入1,然后点击 Test按钮。右侧会显示出如下结果,表示这个API已经配置成功。

Request: /pets/1

Status: 200

Latency: 357 ms

Response
Body

{
     "id": 1,
     "type": "dog",
     "price": 249.99
}
2.3 部署API并生成SDK

2.3.1 部署API

左侧导航链接点击 APIs > petstore> Resources,Action 菜单点击 Deploy API,在弹出层里

Deployment stage 菜单下拉选 [New Stage]。

Stage name*填写 test。

Stage description 填写 test stage。

Deployment description 填写 first deploy。

点击 Deploy 按钮。部署成功后会跳转到test Stage Editor。可以看到

Invoke URL: 形如 https://abcde12345.execute-api.us-west-2.amazonaws.com/test

我们把这个 URL 后面接上前述配置过的API路径,再来测试一下。因为我们配置的没有AUTH难,所以可以简单的使用游览器直接访问,比如

https://abcde12345.execute-api.us-west-2.amazonaws.com/test/pets

可以得到宠物列表的JSON结果就表示部署成功了。同理可以再测试一下

https://abcde12345.execute-api.us-west-2.amazonaws.com/test/pets/1

2.3.1 生成SDK

在test Stage Editor页点击SDK Generation选项卡,Platform* 选Android。下面展开的内容,都和我们即将开发的Android App 包名有关,我们先定好包名为 com.example.petstore。相应的这里几项这样填写:

Group ID 填写com.example

Invoker package 填写完整包名com.example.petstore

Artifact ID 填写petstore

Artifact version 填写自己编排的版本号,比如1.0.0

然后点击Generate SDK按钮,弹出下载文件对话框,保存到本机即可。

这是一个ZIP压缩包,解压可以得到以下目录和文件。

│  build.gradle

│  LICENSE.txt

│  NOTICE.txt

│  pom.xml

│  README.md

└─src

└─main

└─java

└─com

└─example

└─petstore

│    PetstoreClient.java

└─model

Pet.java

Pets.java

PetsItem.java

先放在这备用。下面我们用 Android Studio 开始做 App 项目。

3.  Android 开发整合SDK

3.1 创建一个新的Android项目

我们打开Android Studio,新建一个项目,Application name 填写 Petstore,Company domain 填写 example.com,从而 Package name 成为com.example.petstore,和我们前面生成 SDK 时使用的包名保持一致。

然后一路点击Next ,使用默认配置(Empty Activity, Activity Name是MainActivity,Layout Name 是activity_main)创建一个项目。

3.2 整合API Gateway生成的Android SDK

使用 API Gateway生成的SDK其实有官方文档:

http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/how-to-generate-sdk-android.html

但是我们今天用更简便的方法,直接用build.gradle管理包,不需要按官方文档那样安装Maven再编译等。

项目创建起来后,我们在Project面板启用Project视图。

打开app/build.gradle,在 dependencies段添加以下几行,其实就是AWS SDK 的核心包,API Gateway的包以及用于解析JSON的gson包。

compile 'com.amazonaws:aws-android-sdk-core:2.4.+'
compile "com.amazonaws:aws-android-sdk-apigateway-core:2.4+"
compile 'com.google.code.gson:gson:2.8.0'

然后按提示点击Sync now同步项目。这时会下载上述3个依赖库,视网络状态可能需要一些时间。我们可以不用等待,继续后面的配置。

添加访问互联网权限, 打开/app/src/main/AndroidManifest.xml,在 <application 节点前面加上一行:

<uses-permission android:name="android.permission.INTERNET" />

我们打开之前下载的SDK压缩包解压的目录 src/main/java/com/example/petstore,把下面的文件和目录

│    PetstoreClient.java

└─model

Pet.java

Pets.java

PetsItem.java

复制到 Android项目中 com.example.petstore下面。完成的样子如下图所示:

3.3 编写代码用SDK实现调用API

我们使用Cognito进行验证,所以需要先创建一个Cognito 的 Federated identity pool,有关方法请参阅相关文档,这里不再赘述。

http://docs.aws.amazon.com/zh_cn/cognito/latest/developerguide/identity-pools.html

在Android Studio里打开 MainActivity.java。先定义2个常量

然后我们定义一个testPet() 方法。

最后在onCreate()方法里加上如下代码,新开线程做HTTP请求,就可以了。

到这里例子已经完成,我们运行一个App,顺利地话可以看到如下的日志输出,我们已经可以顺利得到API接口的响应结果了。

这是在模拟器上运行的弹出层效果的截图。

例子的源码在下面 git 库的 Petstore 目录,供大家参考。

https://github.com/xfsnow/android

使用时请记得把MainActivity.java里的COGNITO_POOL_ID 换成你自己真实的值,以及new CognitoCachingCredentialsProvider 时要使用你的COGNITO_POOL_ID所在的region 值。

4.  小结

Amazon API Gateway生成的客户端SDK主要功能包括以下几点:

  • 根据我们为各个接口定义的Model批量创建好相应的Model类。
  • 通过 AWS 核心SDK实现HTTP请求的验证。
  • 封装HTTP请求和响应。
  • 把响应结果通过Gson库转换成方便Android Java使用的Model类。

这个简单的例子也体现出生成的客户端SDK便利了客户端应用程序的开发。

 

作者介绍:

薛峰,亚马逊AWS解决方案架构师,AWS的云计算方案架构的咨询和设计,同时致力于AWS云服务在国内和全球的应用和推广,在大规模并发应用架构、移动应用以及无服务器架构等方面有丰富的实践经验。在加入AWS之前曾长期从事互联网应用开发,先后在新浪、唯品会等公司担任架构师、技术总监等职位。对跨平台多终端的互联网应用架构和方案有深入的研究。

云计算转型成熟度模型: 为您的上云行动制定有效策略的指南

云计算转型成熟度模型为帮助企业制定自己的上云之旅提供了指南。该模型定义了确定成熟阶段的特征,在进入下一阶段前必须完成的每个阶段的转型活动,以及在组织成熟度的四个阶段(包括项目,基础,迁移和优化)中实现的结果。

想了解您的企业目前处于云计算转型之旅的什么位置吗?下表可以帮您确定您的企业目前处于哪个阶段:

一旦您确定了目前处于哪个阶段,就可以遵循 AWS 入云框架(AWS CAF) 的指导开始您的下一步旅程了。CAF 可以为企业的入云之旅提供一个经济且高效的计划 。AWS CAF将复杂的迁移计划过程分解为可管理的重点领域, 无论您是需要帮助定义组织的云计算路线图,做应用程序开发的转型或大规模部署任务关键型工作负载,我们都可以按照AWS Cloud Adoption Framework的原则提供规范性的指导。

来自全面入云客户的建议

除了AWS CAF,我们也想分享来自不同行业的客户的建议,这些客户都已经决定将所有系统都迁移到AWS云平台之上(all-in on the AWS Cloud)。

 

“我们在入云之旅的沿途学到的一件事就是文化变革,文化变革可以将人们团结起来坚定地沿着这个旅程走下去,并且真正完成组织转型,不仅要说服人们我们选择的是正确的技术,重要的是要赢得民心,这样才能圆满地完成如云之旅。”

迈克·查普尔,IT服务交付高级主管,Notre Dame


“我们选取了一些系统部署在AWS上,因为可以在Amazon内部进行快速配置, 这些系统运行得更快。 这是一个巨大的成功。 这种成功使我们对取得更多类似的成功产生了浓厚的兴趣。 所以在开始使用POC验证了AWS功能后,我们立即开始扩展到其他系统,直到完全迁移到AWS 。”

埃里克·盖革,IT的副总裁行动,芝加哥联邦住房贷款银行


“对我们来说,最重要的一件事就是,AWS的确能满足我们业务增长的需要。这不仅需要从能力角度来看,还要从区域扩张的角度来看。 这可以帮助我们把我们的业务模式推广到整个地区,最终跨越全球。”

马尔切洛·韦瑟尔勒,CEO,新加坡邮政

 

原文链接:https://aws.amazon.com/cn/blogs/publicsector/cloud-adoption-maturity-model-guidelines-to-develop-effective-strategies-for-your-cloud-adoption-journey/

译者:刘育新

AWS云架构高级咨询顾问,获得AWS解决方案架构师专业级认证和DevOps工程师专业级认证,专注于云迁移解决方案。目前已为多家跨国公司及本土公司、合作伙伴提供上云迁移的咨询设计和实施服务,在加入AWS之前有近20年的IT架构设计和项目管理经验。

使用Apache Kylin和Amazon EMR进行云上大数据OLAP分析

作者:史少锋 Kyligence资深架构师,Apache Kylin committer & PMC

 

公司简介

上海跬智信息技术有限公司 (Kyligence) 是由Apache Kylin (首个来自中国的 Apache 软件基金会顶级开源项目) 核心团队组建,专注于大数据分析领域创新的数据科技公司。Apache Kylin是近两年迅速崛起的开源分布式大数据分析引擎,它充分利用Hadoop MapReduce,HBase,Spark等成熟技术,对超大数据集进行预计算(构建Cube),从而当在线查询请求到来时,通过检索Cube以亚秒级低延迟返回结果,实现真正的大数据上的交互式分析。对于用户来说,Kylin屏蔽了底层平台的技术细节,用户只需要掌握多维模型、数据仓库、SQL等知识,就可以通过Kylin的Web界面进行建模,Kylin将自动生成任务对数据进行计算。计算完成后用户即可通过各类可视化工具连入Kylin进行分析,易用性非常高。今天,Apache Kylin已经在众多企业得到广泛应用,如今日头条等。

解决方案

Kyligence为各行各业的客户提供基于AWS公有云平台的Hadoop数据仓库解决方案。Elastic MapReduce (Amazon EMR) 是AWS推出的云上Hadoop方案,这一方案使得Hadoop的部署、监控、扩容变的非常灵活方便。Amazon EMR将计算和存储分离,可以使用S3做数据存储,用户可随需启停Hadoop而不用担心数据丢失,用户只需为运行时使用的资源付费,从而大大减少运维成本。以最近发布的Apache Kylin v2.0和Amazon EMR 5.5(海外版)为例,在AWS云上使用Kylin是非常简单快速的。

1. 启动EMR集群

如果您已经有在运行的,包含了HBase 1.x服务的EMR集群,那么这一步可以跳过,您可以使用现有集群进行此实验。

EMR的启动非常简单,登录AWS控制台,选择Amazon EMR服务,点击“Create Cluster”,选择最新的5.5版本,类型为HBase:

这里您可以选择合适的硬件配置;默认是m3.xlarge 3个节点,其中1个节点为master,另外两个为core节点。选择合适的EC2 key pair,随后点击“Create cluster”,AWS便会开始自动安装和配置Hadoop/HBase集群。

大约20分钟后,集群状态显示为“Waiting Cluster ready”,这意味着集群准备就绪可以使用了。

 

2. 安装Apache Kylin 2.0

Apache Kylin以Hadoop client的方式运行,使用标准协议/API与集群交互。您可以将它安装在集群的任意节点上,通常建议安装在一个单独的client节点上。在这里我们为了简单,就把Kylin安装在master节点上。

在AWS控制台上,您可以获取SSH到Amazon EMR的方法;点击“Master public DNS”旁边的SSH链接,即可获得,如下图所示:

SSH登录到master节点后,创建一个Kylin安装目录,下载并解压Apache Kylin 2.0的二进制包:

sudo mkdir /usr/local/kylin

sudo chown hadoop /usr/local/kylin

cd /usr/local/kylin

wget http://www-us.apache.org/dist/kylin/apache-kylin-2.0.0/apache-kylin-2.0.0-bin-hbase1x.tar.gz 

tar –zxvf apache-kylin-2.0.0-bin-hbase1x.tar.gz

如果下载速度较慢,可以至Kylin官网寻找并使用更接近的下载镜像。

由于一个已知的问题KYLIN-2587,您需要手动在Kylin里设置一个参数:用编辑器打开/etc/hbase/conf/hbase-site.xml,在其中寻找到“hbase.zookeeper.quorum”这个参数,然后将它以及它的值,拷贝到Kylin目录下的conf/kylin_job_conf.xml文件中。如下所示:

<property>
  <name>hbase.zookeeper.quorum</name>
  <value>ip-nn-nn-nn-nn.ap-northeast-2.compute.internal</value>
</property>

(注意请使用在您环境中真实获得的zookeeper地址)

3. 创建sample cube并启动Kylin

Kylin自带了一个小的数据集以及定义好的cube,只需要运行bin/sample.sh就可以将数据导入到Hive和HBase中:

export KYLIN_HOME=/usr/local/kylin/apache-kylin-2.0.0-bin

$KYLIN_HOME/bin/sample.sh

随后,就可以启动Kylin了:

$KYLIN_HOME/bin/kylin.sh start

大约若干秒以后,Kylin服务就会完成启动,在7070端口等待用户请求。

4. 修改安全组以允许访问Kylin

Amazon EMR默认创建了两个安全组,分别给Amazon EMR master和Amazon EMR core,要想从外网访问Kylin,需要设置相应规则;这里我们是将Kylin部署到了master节点,所以需要编辑master的安全组:

添加规则,允许7070端口从外面地址访问,为安全起见,建议只开放给最小的IP群,例如仅自己的地址:

接下来,在浏览器中输入http://<master-public-address>:7070/kylin,就会显示Kylin的登录页,使用默认账号ADMIN加密码KYLIN完成登录:

5. 构建Sample Cube

登录Kylin后,选择“learn_kylin”的项目,就会看到“kylin_sales”的样例Cube。此Cube模拟一个电商对其销售记录从多维度进行分析的场景,维度包括了时间(天,周,年)、区域、卖家、买家、商品分类等。

此时Cube只有定义,还没有加载数据,状态是“disabled”,需要触发一次Build。点击“Actions”,“Build”,然后选择一个时间范围,Kylin会以此条件从Hive加载数据进行一系列计算(样例数据已经导入到Hive):

所有的MapReduce, Spark, HBase操作,Kylin会自动生成并依次执行。大约七八分钟后,任务进度到100%构建完成,接下来此Cube就可以使用了:

6. 查询Cube

Cube构建完成后状态变更为“Ready”,可以使用SQL对其进行查询。虽然Kylin将原始数据构建成了多维Cube,但是对外的查询接口依旧是标准SQL,且表名、字段名依然是用原始的名称。这意味着用户一方面可以不用学习新的工具和语法,另一方面以前在Hive中执行的查询语句,基本上可以直接在Kylin中执行。

在Kylin主页点击“Insight”,切换到查询视图。此时页面的左导航处显示可以通过Cube进行查询的表和列。这里您可以尝试手写一条SQL,如下面的这条语句,按年计算交易总金额和记录数:

select YEAR_BEG_DT, sum(price), count(*) from kylin_sales inner join kylin_cal_dt on part_dt = cal_dt group by YEAR_BEG_DT;

点击“Submit”,Kylin随即执行并显示结果,如下图所示:

至此您已经完成了在AWS上运行Hadoop + Kylin的任务!从上图可以看出,Kylin的执行只耗费了0.61秒,接下来您使用可视化工具如Tableau, Excel, Saiku, Zeppelin, SmartBI等通过Kylin的ODBC/JDBC驱动连接Kylin server,体验交互式OLAP分析。

使用完以后,记得关闭Amazon EMR集群以节省费用。

成功案例

Strikingly基于AWS公有云和Kylin搭建了大数据解决方案。Strikingly (https://strikingly.com/)是一个简单、易用、美观的Web建站平台,产品中有一个面向用户的 Web Analytics Dashboard,它从各个维度以及不同时间尺度上展现了用户网站包括 Unique View, Geo Distribution 等数据,如下图所示。

用户数据查询的类型主要集中于对于各个维度数据的 group by 和 count distinct,都是比较耗时的查询操作。随着数据规模不断增长,以往的解决办法面临性能瓶颈。研究之后,Strikingly采用了Kylin + Amazon EMR的方案:每隔5分钟将原始数据备份到指定的S3 bucket上。通过预先定义好的Lambda函数对原始数据进行处理,转换成Kylin + Amazon EMR可以处理的数据格式,然后交由Kylin + Amazon EMR计算。通过引入Kylin,成功将数据查询的延迟从5~10秒降低到了1秒以内。当数据量增加的时候,可以通过Amazon EMR控制台动态添加core machine横向扩展服务,提高吞吐能力,这保证了可以对未来一段时间内可以预见的数据规模增加提供足够的技术支撑。

总结

借助于独有的分布式预计算技术,Apache Kylin比其它各类OLAP引擎能提供更高的查询性能和并发能力,并且随着数据量增加,查询延迟依旧可以保持在亚秒级(参考Kylin的SSB测试:https://github.com/Kyligence/ssb-kylin)。近些年云计算技术日趋成熟,越来越多的企业正在将大数据分析迁移到云上,AWS无疑是很热门的选择,而在选择大数据OLAP方案时,低延迟、高并发、可扩展是重要的考虑因素,Kylin结合Amazon EMR可以使云上的大数据分析变得简单而强大。
想要了解Apache Kylin的更多信息,您可以参考Apache Kylin官网(https://kylin.apache.org);如需要了解具体解决方案、商业版及专业服务,请联系Kyligence。

 

作者介绍

史少锋,Kyligence 技术合伙人&资深架构师。高级软件架构师,Apache Kylin核心开发者和项目管理委员会成员(PMC),专注于大数据分析和云计算技术。曾任eBay全球分析基础架构部大数据高级工程师,IBM云计算部门软件架构师;曾是IBM公有云Bluemix dev&ops团队核心成员,负责平台的规划、开发和运营。

新的 AWS 认证专项考试和利益

我们目前正在对 AWS 认证计划进行两项重要更新。我们推出了两项新的 AWS 认证专项考试和新的 AWS 认证利益计划,使您能够通过另一种方式验证您的技能并展示您的专长。

新的 AWS 认证专项考试

我们新的 AWS Certified Advanced Networking – Specialty 考试和 AWS Certified Big Data – Specialty 考试面向具有至少一项相关专业的最新 AWS 助理认证和丰富实践经验的人员。这些凭证可帮助您脱颖而出,获得认可并更有力地证明您独特的专业技能。

新的 AWS 认证利益

旨在帮助展示您的成绩并进一步提高您的 AWS 专业技能,分层的 AWS 认证利益包括新设计的 AWS 认证徽标和证书、数字徽章、免费的实践考试、品牌商品、文字记录共享等。根据您获得的 AWS 认证来享受各种利益。您成功通过的考试越多,享有的利益就越多。

立即参加您的专项考试和享受各种利益

使用 Amazon 账户或 (如果您是 APN 合作伙伴) 您的 APN 门户凭证登录到 AWS 培训和认证门户。然后,单击 AWS 培训和认证门户上的认证链接以访问您的 AWS 认证账户:如果您之前已具有 Webassessor 账户,您可以链接您的账户,以使您的 AWS 认证历史记录显示在AWS认证账户中 (参阅“我在 Webassessor 中已有 AWS 认证账户。我如何访问我的 AWS 认证历史记录?”(在 AWS 培训常见问题中) 以了解如何执行此操作)。

了解更多

如果您有任何问题,请查看 AWS 认证常见问题AWS 培训和认证门户常见问题

-Jeff

新增 – 适用于 Amazon Simple Queue Service (SQS) 的服务器端加密

作为 AWS 服务家族最老牌的成员, Amazon Simple Queue Service (SQS) 是许多应用程序的重要组成部分。Amazon SQS,实现更好的架构利用 Amazon SQS 和 Amazon DynamoDB 进行大规模消息处理等演示文稿说明了如何使用 SQS 构建恢复能力强且高度可扩展的应用程序。如今,我们为 SQS 增加了服务器端加密支持,使它变得更加有用。现在,您可以选择使用  AWS Key Management Service (KMS) 提供的加密密钥,将 SQS 加密消息存储于标准队列和 FIFO 队列中。您可以在创建队列时选择此选项,还可以为现有队列设置此选项。SSE 会加密消息正文,但不会影响队列元数据、消息元数据或队列指标。在现有队列中添加加密不会加密任何积压消息。同样,删除加密时也会将积压消息保持加密。

创建加密队列

最新版本的 AWS管理控制台 允许您使用方便的图形选择标准队列或 FIFO 队列:

您可以针对队列和可选的死信队列设置属性:

现在,您可以选中使用 SSE 并选择所需的密钥:

您可以使用由 AWS 托管的客户主密钥 (CMK),每个客户在每个区域只拥有唯一的客户主密钥;您还可以创建并管理您自己的密钥。如果您选择使用自己的密钥,不要忘了更新您的 KMS 密钥策略,允许对消息进行加密和解密。您还可以配置数据重用周期。此间隔控制 SQS 刷新来自 KMS 的加密信息的频率,范围在 1 分钟到 24 小时之间。使用较短的间隔可以改善安全性,但会提高 KMS 成本。要了解更多详情,请参阅 SQS SSE 常见问题服务器端加密的文档。

现已推出

服务器端加密现已在 美国西部(俄勒冈)和 美国东部(俄亥俄) 区域推出,支持运行中的其他内容。使用加密不收费,但 SQS 对 KMS 的调用需要收费。要了解与此有关的更多信息,请参阅我如何估算客户主密钥 (CMK) 使用成本

-Jeff

AWS 热门初创公司 – 2017 年 4 月

春天到了,花朵绽放,Tina Barr 也为您带来了更多非常棒的初创公司!-Ana


欢迎回来,了解这个月介绍的由 AWS 提供支持的初创公司!今天我们要介绍三家振奋人心的初创公司:

  • Beekeeper – 简化员工在工作场所的沟通方式。
  • Betterment – 让每个人的投资变得更简单。
  • ClearSlide – 领先的销售促成平台。

不要错过三月热门初创公司,请来看看吧。

Beekeeper (瑞士,苏黎世)

Beekeeper 徽标Flavio PfaffhauserChristian Grossmann 都是苏黎世联邦理工学院的毕业生,他们充满热情地希望通过技术促进人们互相联系。最开始只是供学生使用的社交社区很快变身成为 Beekeeper – 这一适用于工作场所的沟通平台可以帮助身处各地的员工进行互动。由于 Flavio 和 Christian 了解如何构建一个吸引人们参与的社交平台,企业开始要求他们提供适应其特定流程和需要的平台。开始打造平台时的概念是要帮助人们感觉到他们是在并肩工作,不管是在办公桌前还是在现场。Beekeeper 成立于 2012 年,专注于改善信息共享、沟通和同事间的协作。公司坚信倾听员工的声音对组织而言至关重要。这款“移动设备第一,桌面友好”的平台具有简单直观的界面,可以将多种操作系统轻松集成到一个生态系统中。界面可以根据公司的品牌和标识改变风格并进行自定义。员工可以随时随地通过私人聊天和群聊与同事联系,进行视频、文件共享和反馈调查。领导团队可以借助 Beekeeper 的分析控制面板发现热门讨论主题,并实时跟踪员工的参与情况和应用使用情况。Beekeeper 目前帮助 137 个国家/地区的用户实现互联,涉及的行业包括酒店业、建筑业、交通业等等。Beekeeper 喜欢使用 AWS,因为工程师可以专注于最重要的事务,那就是解决客户的问题。公司使用 Amazon EC2Amazon S3Amazon RDS 等服务构建其基础设施,使技术团队摆脱了管理任务。Amazon Elastic TranscoderAmazon QuickSight 用于构建分析控制面板,Amazon Redshift 用于数据仓库。查看 Beekeeper 博客,了解他们的最新资讯!

Betterment (纽约州纽约市)
Betterment 徽标
Betterment 的使命是让每个人的投资变得更加容易、更加方便,无论他们有什么样的财务目标。2008 年,Jon Stein 成立了 Betterment,希望彻底改变这一行业,让未来的投资者不要再犯他曾经犯过的常见错误。那时,大多数人的投资渠道非常有限 – 要么自己进行投资,要么雇人帮自己进行投资。不过,有时人们花钱雇来的财务顾问推荐的投资却并不是最适合客户的。Betterment 只选择最符合客户利益和他们的财务目标的投资。如今,他们是规模最大的独立在线投资顾问公司,管理着超过 80 亿美元的资产,客户数量超过 240,000 名。Betterment 运用技术使投资更加简单高效,同时还有助于提高税后收益。他们还提供广泛的金融规划服务,根据客户的人生目标进行个性化的规划。客户输入他们的年龄、是否退休和年收入就可以开始进行投资规划,Betterment 会建议投资金额,以及应该选择哪种投资方式。他们能够以更低的成本提供许多传统投资服务机构无法提供的投资和管理服务。Betterment 的工程师一直在以最快的速度构建变革整个行业的技术,帮助客户实现资金收益最大化。AWS 为 Betterment 提供了轻松预配基础设施的灵活性,将原来需要整个团队进行管理的职责转移给了各项服务。Betterment 最开始使用云时,使用了 Amazon EC2Amazon RDS Amazon S3 的标准实施。随着他们与 AWS 的全面合作,逐步开始利用 Amazon RedshiftAWS LambdaAWS Database Migration ServiceAmazon KinesisAmazon DynamoDB 等服务。如今,他们在使用超过 20 种 AWS 服务,用于日常开发、测试和部署各种功能和增强。点击此处了解有关 Betterment 的更多信息

ClearSlide (加利福尼亚州旧金山)
ClearSlide 是当下领先的销售促成平台,提供完整的整合工具,促进每一次客户交互获得成功。ClearSlide 在 2009 年成立之初,就寻求通过各种方式改善客户体验,还开发了适用于销售部门领导和团队、市场推广、客户支持团队及其他用户的各种能力提升工具。这一平台将内容、沟通渠道和真知灼见聚合到客户的指尖,推动客户进行更好的决策,还能用于管理机会。ClearSlide 为数千家公司提供服务,包括 Comcast、Sacramento Kings、The Economist;目前他们的客户已产生超过 7.5 亿分钟的参与时间。ClearSlide 为销售流程的所有环节提供解决方案。对于销售部门的领导,ClearSlide 提供参与控制面板,以改善交易可见性、对销售代表进行更好地指导,并提高销售预测的准确度。对于市场推广和销售提升团队,他们指导销售员在适当的时间和环境中使用适当的内容进行销售,并提供将内容的 ROI 最大化所需的见解。对于销售代表,ClearSlide 将沟通、内容和分析集成于统一的平台体验中。可以通过电子邮件、面对面、在线会议、Web 或社交媒体等方式进行沟通。如今,ClearSlide 客户完成的交易实现了 10-20% 的增长,新销售代表的入职熟悉时间减少了 25%,销售成本降低了 50-80%。ClearSlide 使用一系列 AWS 服务,但 Amazon EC2Amazon RDS 对他们的业务影响最大。EC2 使他们可以轻松扩展计算容量,这一点对于快速成长的初创公司而言至关重要。它还可提供部署一致性 – 从开发、集成到推出和生产。RDS 降低了开销,允许 ClearSlide 扩展其数据库基础设施。有了 AWS 负责耗时的数据库管理任务,ClearSlide 降低了运营成本,可以专注于向客户提供更具战略意义的服务。观看这个视频,了解使用 ClearSlide 如何使 LiveIntent 的销售周期缩短 22%。在 Twitter 上关注他们,获取所有最新的更新!感谢您了解这个月介绍的由 AWS 提供支持的非常棒的初创公司!

-Tina

利用全新的 Samsung DeX,在您的 Samsung Galaxy S8/S8+ 上使用 Amazon WorkSpaces

技术的不断进步和改进是一件非常有趣的事情。例如,如今的手机屏幕分辨率已经可以匹敌高端台式机,还具备多种连接选项,并且非常轻便。这周的早些时候,我有机会亲自体验了最新款的 Samsung Galaxy S8+ 手机和一种独特的全新配套设备,Samsung DeX Station。我在手机上安装了适用于 Android 平板电脑的 Amazon WorkSpaces 客户端,输入了我的 WorkSpace 注册代码并登录。您可以在我的新视频中观看所有操作:DeX 包含适用于键盘和鼠标的 USB 接口,还可以使用蓝牙与它们通信。它还包含一个冷却风扇、一个手机快速充电器,外加 HDMI 和以太网端口(您还可以使用手机的移动网络或 Wi-Fi 连接)。将所有功能集中起来,您即可随时随地访问云端桌面。在轻装出差时,您可以使用酒店房间中的电视/显示器,完全访问公司网络、文件和其他资源。

-Jeff

对了,如果您希望进一步了解我的工作环境,请查看我爱 Amazon WorkSpace

Amazon Chime 更新 – 使用您的现有 Active Directory,建立您自己的域

我最早介绍 Amazon Chime 是在今年二月 (Amazon Chime – 统一通信服务),并且介绍了我如何与世界各地的人联系并开展协作。自发布以来,Amazon Chime 很快成为了 AWS 团队的首选通信工具。在一天中,我会多次与个人聊天以及参与团队聊天,并经常通过“Chime In”方式参与采用 Amazon Chime 功能的会议来讨论即将进行的发布和演讲。今天,我们向 Amazon Chime 增加了两项新功能:建立您自己的域的功能以及支持您现有的 Active Directory。

建立域

通过建立域,您有权管理该域中所有用户的 Amazon Chime 使用情况。您可以确保员工出于工作目的而登录 Amazon Chime,也可以停用离开组织的员工的账户。要建立域,您需要声明自己拥有特定域名,然后将 TXT 记录输入到您的域的 DNS 条目来支持这一声明。您必须为组织用于电子邮件地址的每个域和子域执行这一操作。下面演示了我如何建立我自己的一个域:

单击“Verify this domain”之后,Amazon Chime 向我提供了我的 DNS 的记录:

执行此操作后,域的状态将更改为 Pending Verification。Amazon Chime 确认新记录按照期望的那样存在后,状态将更改为 Verified,并且团队账户将成为企业账户。

Active Directory 支持

此功能允许用户使用其现有 Active Directory 身份和凭证登录 Amazon Chime。在您设置该功能之后,您可以启用并利用高级 AD 安全功能,例如密码轮换、密码复杂性规则以及多重身份验证。您还可以控制各个组的 Amazon Chime 的 Plus 和 Pro 许可证分配 (请查看计划和定价以了解各种许可证类型的更多信息)。要使用此功能,您必须具有 Amazon Chime 企业账户。如果您使用团队账户,则在继续前,请按照创建企业账户的说明执行操作。然后,您需要使用 AWS Directory Service 设置目录。此时您有两个选项:

  1. 使用 AWS Directory Service AD Connector 连接到您现有的内部 Active Directory 实例。
  2. 使用配置供独立使用的 Microsoft Active Directory。有关此选项的更多信息,请阅读如何创建 Microsoft AD 目录

在设置目录之后,您可以单击 SettingsActive directory,并在下拉列表中选择您的目录,从 Amazon Chime 控制台连接到该目录。

完成此操作之后,您可以选择目录中的各个组,逐个组分配合适的订阅 (Plus 或 Pro)。根据需要设置所有内容之后,您的用户可以使用其现有目录凭证登录 Amazon Chime。这些新功能现已提供,您可以立即开始使用!如果您要了解有关 Amazon Chime 的更多信息,可以观看最新的 AWS 技术讲座:通过 Amazon Chime 打造现代化会议这是讲座的演示文档:-Jeff

EC2 降价 – 预留实例和 M4 实例

随着 AWS 的发展,我们不断寻求方法来让它更好地提供价值。我们与供应商合作降低成本,并且不断地探索能够以更加高效、更具成本效益的方式来构建硬件和软件的方法。除了定期和经常性的减价之外,我们还向客户提供了各种选项,可以帮助他们优化对 AWS 的使用。例如,预留实例 (首次发布于 2009 年) 与按需定价相比,使得 Amazon EC2 用户能够获得显著的折扣,并且在特定可用区中使用时可预留容量。我们的客户使用多种战略来购买和管理其预留实例。一些客户偏好进行预付从而得到更高的折扣;一些客户则偏好无预付款,不过折扣较低 (折扣仍然很可观)。介于这两者之间的客户则对只需部分预付款,即可享受到介于这两种选项的折扣感到非常满意。为了满足各种各样的偏好,我们为大部分最新一代的实例类型增加了 3 年无预付标准预留实例。我们还降低了无预付保留实例、可转换预留实例和通用 M4实例 (包括按需实例和预留实例) 的价格。这是我们的第 61 次 AWS 降价。详细信息见此处 (所有更改和降价都立即生效):

最新 3 年标准预留实例的无预付款选项-我们以前提供的无预付款选项为 1 年期的标准预留实例。现在,我们面向 C4、M4、R4、I3、P2、X1 和 T2 标准预留实例增加了 3 年期的无预付选项。

无预付预留实例降价-我们降低了 C4、M4、R4、I3、P2、X1 和 T2 实例类型的无预付 1 年标准实例和 3 年可转换预留实例的价格,根据实例类型、操作系统和区域,降幅最高可达 17%。下面提供了在多个代表性区域中面向 Linux 的无预付预留实例的平均降价:

美国东部 (弗吉尼亚北部) 美国西部 (俄勒冈) 欧洲 (爱尔兰) 亚太地区 (东京) 亚太地区(新加坡)
C4 -11% -11% -10% -10% -9%
M4 -16% -16% -16% -16% -17%
R4 -10% -10% -10% -10% -10%

可转换预留实例降价-使用可转换预留实例时,您可以随时更改实例系列以及与预留实例关联的其他参数;这让您可以随着应用程序的演变和需求变化来调整预留实例清单。我们降低大部分最新一代实例 (C4、M4、R4、I3、P2、X1 和 T2) 的 3 年可转换预留实例价格,最高可达 21%。下面提供了在多个代表性区域中面向 Linux 的可转换预留实例的平均降价:

美国东部 (弗吉尼亚北部) 美国西部 (俄勒冈) 欧洲 (爱尔兰) 亚太地区 (东京) 亚太地区(新加坡)
C4 -13% -13% -5% -5% -11%
M4 -19% -19% -17% -15% -21%
R4 -15% -15% -15% -15% -15%

类似的降价在几乎所有其他区域中也将实施。

M4 实例降价 – 我们将 M4 Linux 实例的价格最多减少 7%。请访问“EC2 预留实例定价”页面“EC2 定价”页面,或者参考 AWS 价格表 API 来了解所有新价格。

了解更多:以下博客帖子包含有关我们对 EC2 预留实例模型所做的改进的更多信息:

您还可以阅读 AWS 定价预留实例常见问题来了解更多信息。

-Jeff

Cloud Directory 更新 – 对类型化链接的支持

今年早些时候,我谈论了 Cloud Directory – 用于分层数据的云原生目录以及它如何存储大量强类型分层数据。由于 Cloud Directory 可扩展到数亿个对象,因此它非常适合许多云和移动应用程序。在我的原始博客文章中,我已经说明每个目录如何具有一个或多个架构,以及每个架构如何又具有一个或多个分面。每个分面为对象定义所需的和允许的属性集。

类型化链接简介

现在,我们通过增加对类型化链接的支持,来增强 Cloud Directory 模型的表现力。您可以使用这些链接在层次结构中创建对象-对象关系。可以为每个目录定义多种链接 (每种链接类型均是与目录关联的其中一个架构中的单独分面)。除了类型之外,每个链接还可具有一组属性。类型化链接可帮助确保不会无意中删除目前与其他对象有关系的对象,从而保持参考数据的完整性。假定您具有包含位置、工厂、楼层、房间、机器和传感器的目录。上述每个项均可表示为 Cloud Directory 中的一个维度,它在层次结构中具有丰富的元数据信息。您可以定义和使用类型化链接以通过各种方式将对象联系在一起,并创建导致维护要求、服务记录、担保和安全信息的类型化链接,以及链接上用于存储有关源对象和目标对象之间的关系的其他信息的属性。随后,您可以根据链接类型和链接中的属性值来运行查询。例如,您可以找到过去 45 天内未清除的所有传感器,或已超过保修期的所有电机。您可以查找指定楼层的所有传感器,也可以查找给定类型的传感器所在的所有楼层。

使用类型化链接

要使用类型化链接,您只需使用 CreateTypedLinkFacet 函数将一个或多个类型化链接分面添加到架构。然后,调用 AttachTypedLink,并传入源对象和目标对象、类型化链接分面和链接的属性。其他有用函数包括 GetTypedLinkFacetInformationListIncomingTypedLinksListOutgoingTypedLinks。要了解更多信息和查看完整函数列表,请查看 Cloud Directory API 参考。就像为对象执行的操作一样,您可以使用属性规则来约束属性值。您可以约束字符串和字节数组的长度、将字符串限定为一组指定的值并将数目限定为特定范围。我的同事分享了一些示例代码来说明如何使用类型化链接。以下是 ARN 和分面名称:

String appliedSchemaArn   = "arn:aws:clouddirectory:eu-west-2:XXXXXXXXXXXX:directory/AbF4qXxa80WSsLRiYhDB-Jo/schema/demo_organization/1.0";
String directoryArn       = "arn:aws:clouddirectory:eu-west-2:XXXXXXXXXXXX:directory/AbF4qXxa80WSsLRiYhDB-Jo";
String typedLinkFacetName = "FloorSensorAssociation";

第一个代码段按以下顺序创建名为 FloorSensorAssociation 的类型化链接分面,带有 sensor_typemaintenance_date 属性 (属性名和值是链接标识的一部分,因此顺序很重要):

client.createTypedLinkFacet(new CreateTypedLinkFacetRequest()
                                .withSchemaArn(appliedSchemaArn)
                                .withFacet(
                                      new TypedLinkFacet()
                                          .withName(typedLinkFacetName)
                                          .withAttributes(toTypedLinkAttributeDefinition("sensor_type"),
                                                          toTypedLinkAttributeDefinition("maintenance_date"))
                                          .withIdentityAttributeOrder("sensor_type", "maintenance_date")));

private TypedLinkAttributeDefinition toTypedLinkAttributeDefinition(String attributeName) {
 return new TypedLinkAttributeDefinition().withName(attributeName)
 .withRequiredBehavior(RequiredAttributeBehavior.REQUIRED_ALWAYS)
 .withType(FacetAttributeType.STRING);
}

下一个代码段创建两个对象 (sourceFloortargetSensor) 之间的链接,带有 sensor_type watermaintenance_date 2017-05-24

AttachTypedLinkResult result = 
    client.attachTypedLink(new AttachTypedLinkRequest()
                               .withDirectoryArn(directoryArn)
                               .withTypedLinkFacet(
                                   toTypedLinkFacet(appliedSchemaArn, typedLinkFacetName))
                                   .withAttributes(
                                        attributeNameAndStringValue("sensor_type", "water"),
                                        attributeNameAndStringValue("maintenance_date", "2017-05-24"))
                                   .withSourceObjectReference(sourceFloor)
                                   .withTargetObjectReference(targetSensor));

private TypedLinkSchemaAndFacetName toTypedLinkFacet(String appliedSchemaArn, String typedLinkFacetName) {
   return new TypedLinkSchemaAndFacetName()
              .withTypedLinkName(typedLinkFacetName)
              .withSchemaArn(appliedSchemaArn);
}

最后一个代码段枚举了 sensor_type watermaintenance_date 的所有传入类型化链接,范围为 2017-05-202017-05-24

client.listIncomingTypedLinks(
    new ListIncomingTypedLinksRequest()
        .withFilterTypedLink(toTypedLinkFacet(appliedSchemaArn, typedLinkFacetName))
        .withDirectoryArn(directoryArn)
        .withObjectReference(targetSensor)
        .withMaxResults(10)
        .withFilterAttributeRanges(attributeRange("sensor_type", exactRange("water")),
                                   attributeRange("maintenance_date", 
                                                  range("2017-05-20", "2017-05-24"))));

private TypedLinkAttributeRange attributeRange(String attributeName, TypedAttributeValueRange range) {
   return new TypedLinkAttributeRange().withAttributeName(attributeName).withRange(range);
}

private TypedAttributeValueRange exactRange(String value) {
   return range(value, value);
}

要了解更多信息,请参阅 Cloud Directory 管理指南中的对象和链接

现已推出

类型化链接现已提供,您可以立即开始使用!

-Jeff