Author: AWS Team


全新 – Amazon CloudWatch 高精度自定义指标和警报

Amazon CloudWatch 自 2009 年年初以来一直是 AWS 的重要组成部分。CloudWatch 与 Auto ScalingElastic Load Balancing 三个产品包组合在一起发布,它已发展成为功能极强、面向 AWS 云中运行的 AWS 资源和应用程序的监控服务。CloudWatch 自定义指标 (早在 2011 年发布) 可用在 CloudWatch 中存储业务和应用程序指标、以图形方式查看这些指标,并基于 CloudWatch 警报启动操作。不用说,这些年来,我们的 CloudWatch 增强了很多的功能!最近的一些增强功能包括延长指标保留期 (以及一项用户界面更新)、控制面板控制面板 API/CloudFormation 支持以及控制面板上的警报

一开始,指标是按照五分钟的时间间隔存储的;后来,在 2010 年,应客户请求缩短到一分钟 (也称为详细监控)。这是一个广受欢迎的改变,但现在我们可以做得更好。我们的客户在流式传输视频、开展限时抢购、每天上百次部署代码,并随着情况的变化非常快速地扩展和缩减应用程序。对于所有这些情况,一分钟为时间间隔还是太长了。这样有可能错过重要的瞬间高峰;分散 (然而事实上相关) 的事件难以跨越时间进行关联,并且在发生故障时的 MTTR (平均修复时间) 过高。

全新的高精度指标
今天,我们将增加对高精度自定义指标的支持,我们还计划以后逐渐增加对 AWS 服务的支持。现在您的应用程序可以以 1 秒的精度将指标发布到 CloudWatch。在发布指标数秒后您就可以在屏幕上滚动查看这些指标,您还可以设置高精度 CloudWatch 警报,可以精细到每 10 秒评估一次。

想象一下可用内存较少时发出警报。这通常是一种瞬时的情况,如果取样不够频繁,将很难捕获到。使用高精度指标,您可以在数秒内查看、检测 (通过警报) 到这种情况并相应地执行操作。

在此例中,右侧的警报不会触发,您也不会知道出现了问题。

发布高精度指标
您可以用两种不同的方式发布高精度指标:

  • APIPutMetricData 函数现在接受可选 StorageResolution 参数。将此参数设置为 1 可发布高精度指标;省略它 (或设置为 60) 可按照标准的 1 分钟精度发布指标。
  • collectd 插件 – collectd 的 CloudWatch 插件已更新,现在支持高精度指标的收集和发布。您需要在该插件的配置文件中设置 enable_high_definition_metrics 参数。

CloudWatch 指标随时间累积;随着指标存在时间变长,精度将大大降低。下面是时间设置:

  • 1 秒指标可用 3 小时。
  • 60 秒指标可用 15 天。
  • 5 分钟指标可用 63 天。
  • 1 小时指标可用 455 天 (15 个月)。

当您调用 GetMetricStatistics 时,可以指定 1、5、10、30 或 60 秒的任意倍数作为高精度指标。您可以指定 60 秒的任意倍数作为标准指标。

快速演示
我选用我最近的 EC2 实例,它安装了最新版本的 collectd 和 Python 插件:

$ sudo yum install collectd collectd-python

然后我下载该插件的设置脚本,让它变成可执行文件,然后运行:

$ wget https://raw.githubusercontent.com/awslabs/collectd-cloudwatch/master/src/setup.py
$ chmod a+x setup.py
$ sudo ./setup.py

我已创建一个合适的 IAM 角色,并将它添加到我的实例中;在设置过程中自动检测到了它。有人要求我启用高精度指标:

collectd 在数秒内开始运行并发布指标。我打开 CloudWatch 控制台查看:

然后我放大,详细查看指标:

我还以 10 秒的时间间隔创建一个警报来检查 memory.percent.used 指标。这样我可以更方便地检测短时间内使用很多内存的情况:

现在提供
现在,高精度自定义指标和警报在所有公共 AWS 区域都可用,并且很快还会支持 AWS GovCloud (US)

目前您每个月可以免费存储 10 个指标;有关更多信息,请参阅 CloudWatch 定价页面。高精度指标的定价与标准精度指标相同,如果需要使用更多指标,用量套餐可以为您节省费用 (对于每个指标)。高精度警报价格为每月每个警报 0.30 美元。

现在提供:三门全新 AWS 专业培训课程

通过 AWS 培训,您可以向专家学习,从而提升知识水平和具备实用技能,更好地利用 AWS 云。今天,我很荣幸地宣布推出我们三个最受欢迎的培训训练营 (AWS re:InventAWS 全球峰会的主要内容) 将成为我们的长期讲师指导培训组合的一部分:

这些为期一天的课程面向希望向培训专家深入学习专业主题知识的个人。

您可以浏览我们的完整课程目录,也可以在 AWS 培训和认证门户中搜索您所在位置附近的公开课程。您还可以联系我们申请为您的团队安排现场专享培训。

Jeff

新增 – Amazon Connect 和 Amazon Lex 集成

Amazon ConnectAmazon Lex 这两项我最喜欢的服务最近推出了一些增强功能,我非常高兴有机会与大家分享这些功能。Amazon Connect 是一项基于云的自助式联络中心服务,可使任何企业能够轻松地以更低成本提供更优质的客户服务。Amazon Lex 是一项使用语音和文本构建对话界面的服务。通过将这两项服务相集成,您可以利用 Lex 的自动语音识别 (ASR) 和自然语言处理 (NLU) 功能为客户打造自助式体验。为了做到这一点,Amazon Lex 团队创建了新的深度学习模型,专门用来识别 8kHz 音频样本中的呼叫中心对话,稍后我将对此进行详细介绍。如果自动程序可以处理 90% 的客户请求,则客户等待时间将会减少,从而有更多时间来使用您的产品。

如需 Amazon ConnectAmazon Lex 的更多背景信息,我强烈建议您阅读 Jeff 之前发布的有关这两项服务的帖子 [1][2] (尤其是在您喜欢 LEGO 的情况下)。


接下来,我将向您展示如何使用这项新集成。大家也许知道,我喜欢在自己的 Twitch 频道上试用这些服务。我会选择一款我们针对 Twitch 频道构建的应用程序,然后针对博客进行修改。在这款应用程序的核心,用户拨打 Amazon Connect 号码后,随即会出现一系列“连锁反应”:将用户连接到 Amazon Lex 自动程序,自动程序调用 AWS Lambda 函数,而函数随后执行一组操作。

我们的应用程序有什么作用呢?我想最终解决哪个代码编辑器最为出色这个问题:我钟爱 Vim,这是一款超赞的编辑器,它的代码编辑功能非常棒 (堪称最好的编辑器)。我的同事 Jeff 偏爱 Emacs,它是一款强大的 操作系统编辑器…如果您的手指头足够灵活的话。另一名同事 Tara 习惯用 Visual Studio 和 Sublime。究竟哪个才是最佳编辑器?无需为此纠结,我想还是让诸位亲爱的读者来投票吧,不要担心您甚至可以为 butterflies投票。

对投票感兴趣?请拨打 +1 614-569-4019,告诉我们您要为哪款编辑器投票!我们不会存储您的号码,也不记录您的语音,尽管放心投票吧,您可为 Vim 多次投票。想看投票的直播吗? http://best-editor-ever.s3-website-us-east-1.amazonaws.com

现在,我们该如何进行巧妙设计呢?

Amazon Lex

我们先看看 Lex 方面的相关设计吧。创建一个名为 VoteEditor 的自动程序,它具有单个目的 VoteEditor、名为 editorConnectToAgent的单个槽。我们会将编辑器槽填满不同的代码编辑器名称 (或许不会考虑 Emacs)。

AWS Lambda

我们的 Lambda 函数也非常简单。先创建一个Amazon DynamoDB 表来存储投票信息,然后创建帮助程序方法来响应 Lex (build_response),随后再确定逻辑。我们将使用 Python 这种最优秀的语言在最佳编辑器中进行编写。

def lambda_handler(event, context):
    if 'VoteEditor' == event['currentIntent']['name']:
        editor = event['currentIntent']['slots']['editor']
        resp = ddb.update_item(
            Key={"name": editor.lower()},
            UpdateExpression="SET votes = :incr + if_not_exists(votes, :default)",
            ExpressionAttributeValues={":incr": 1, ":default": 0},
            ReturnValues="ALL_NEW"
        )
        msg = "Awesome, now {} has {} votes!".format(
            resp['Attributes']['name'],
            resp['Attributes']['votes'])
        return build_response(msg)
    else:
        return build_response("That intent is not supported yet.")

基本上,如果我们收到某个编辑器的投票,而该编辑器并不存在,那么我们会添加该编辑器并附上 1 次投票。否则会增加该编辑器的得票数 (每次增加 1 票)。非常简单。

我们会告诉 Lex 自动程序使用 Lambda 函数来实现我们的目的。在执行下一步之前,我们可以测试一切是否能在 Lex 控制台中正常运行。

Amazon Connect

接下来就到了有趣的部分了。将 Lex 自动程序连接到 Connect 联系流,然后开始存储这些结果。

在联系流中使用自动程序之前,必须确保 Amazon Connect 实例拥有对它的访问权限。为此,我们需要转到 Amazon Connect 服务控制台,选择实例,然后导航至联系流。其中应该有一个名为“Amazon Lex”的部分,在那里,您可以添加自己的自动程序!

现在 Connect 实例已经知道 Lex 自动程序可供调用,接下来我们就可以创建包含 Lex 自动程序的新联系流。通过熟悉的“获取客户输入”小部件将自动程序添加到流中,但在单击该小部件时,其中会出现一个新的“Amazon Lex”选项卡。

里面提供有诸多选项,但简单来说,我们要添加使用自动程序的目的、要使用的自动程序版本,以及介绍自动程序的简短提示 (可能会提示客户输入信息)。

我们的最终联系流如下所示:

在真实示例中,系统可能会允许客户通过 Lex 自动程序执行许多事务,然后,根据“Error”或“ConnectToAgent”目的,将客户放入他们可与真人对话的队列中。

在此,我想特别指出教 Lex 理解 8kHz 音频的巨大优势及其如此重要的原因。Lex 最初接受训练时使用的语音模型与电话相比占用较大的带宽信道。当您与 Alexa 或 Lex 自动程序对话时,系统通常会以 16kHz 的最低速率对您发送的文本进行采样。通过这种保真度较高的记录,可更加轻松地识别声音差异,如“ess”(/s/) 和“eff”(/f/),音频专家如是告诉我。如果使用 Alexa,则音频流还会来自我们控制的有限的一些设备,因此,我们确切地知道麦克风发出的声音应是什么样子。但是,电话及其记录的音频依赖由人类植入的一些“卑鄙技巧”。人类及其耳朵非常擅长根据情景来辨识质量较差的录音的内容 (要获取此方面的证据,请参阅 NASA 阿波罗录音)。因此,大多数数字电话系统默认设置为使用 8kHz 采样率 (而非更高采样率),从而使带宽和保真度之间达到了一种较好平衡。这种基本采样率的首要问题是,您还必须应对以下事实:大量电话数据已失真 (您现在能听到我说话吗?)。目前市面上有数百家不同制造商提供的数千种不同设备,以及大量不同的软件实施方案和编解码器。那么,您该如何解决这一识别问题呢?

Lex 团队找出了解决此问题的最佳方法,即,扩展他们用来解析语音输入的模型集,以纳入专为 Connect 集成设计的 8kHz 模型。他们在 8kHz 数据集的真实客户服务呼叫中保留了自己的模型和网络,而且与其传统模型相比,单词识别率提高了 60% 以上。检测各个单词的准确率越高,识别目的的准确率也就越高。团队为此付出了巨大努力,这可让众多客户通过 Connect 执行更多操作。

最后再说明一下,Connect 使用完全相同的 PostContent 终端节点,因此,如果您是外部开发人员,也可使用该节点,而无需通过 Connect 来利用 Lex 中的这项 8kHz 功能。

希望大家都能喜欢这项功能,与往常一样,要了解真实细节,请参阅这些文档API 参考指南

Randall

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

欢迎回来,了解这个月介绍的热门初创公司!每天,世界各地的初创公司都会推出超赞的创新业务、应用程序和产品。每个月,我们都会介绍一些使用 AWS 完成酷炫工作的初创公司。

7 月份的主题是学习!此类公司主要提供对工具和资源的访问权,从而以不同方式扩大知识面和提升技能。

本月的初创公司包括:

  • CodeHS – 为初中和高中生提供有趣、可访问的计算机科学课程。
  • Insight – 提供密集式助学金计划,帮助培养数据科学方面的技术人才。
  • iTranslate – 让世界上的任何人都能使用 90 多种语言进行读、写、说

CodeHS (加利福尼亚州旧金山)

2012 年,当时还在就读计算机科学专业并兼任入门课程助教的斯坦福大学学生 Zach GalantJeremy Keeshin 注意到了同龄人中间存在的一种趋势。许多人都希望,自己能尽早掌握计算机科学方面的知识。在大四那年,Zach 和 Jeremy 成立了 CodeHS,以便初中和高中可随时随地为学生提供有趣、可访问的计算机科学教育。CodeHS 是基于 Web 的课程学习路径,并提供教师资源、教学计划和职业发展机会。课程还配有省时的教师工具,在教学计划、评分和审阅学生代码及管理课堂方面为教师提供帮助。

CodeHS 立志让所有学生都成为未来的有力影响者,并认为编码与阅读和写作一样会逐渐成为一项新的基本技能,学生通过此类技能可进一步发掘自身兴趣或研究领域。在 CodeHS 2012 年成立之时,美国只有 10% 的高中提供计算机科学课程。Zach 和 Jeremy 矢志改变这一现状,他们提供了一款可让各学校和地区轻松入门的解决方案。借助 CodeHS,数千名教师接受了培训,然后再将知识传授给世界各地成千上万名学生。要使用 CodeHS,只需互联网和一款 Web 浏览器即可。学生可以在线编写和运行自己的代码,随后,教师会立即看到学生所执行的操作及其操作方式。

通过 Amazon EC2Amazon RDSAmazon ElastiCacheAmazon CloudFrontAmazon S3,CodeHS 可以扩展其网站,以满足世界各地不同学校的需求。CodeHS 还会依赖 AWS 在浏览器中编译和运行学生代码,如果教学服务器端语言 (如 Java) 为 AP 课程提供支持,则这一点尤为重要。由于使用率会根据学校安排出现上升或下降趋势,因此,Amazon CloudWatchELB 可用于在学生运行代码时轻松扩展,以便为学生提供无缝体验。

请务必访问 CodeHS 网站;如需详细了解如何为您的学校引入计算机科学教育,请单击此处

Insight (加利福尼亚州帕洛阿尔托)

Insight 成立于 2012 年,旨在创建新的教育模式、优化数据团队的招聘工作,并促进数据专业人员成功转变职业。在过去 5 年内,Insight 一直引领着市场趋势,并启动了一系列专业培训奖学金计划,包括数据科学健康数据科学数据工程人工智能。寻找拥有相应技能、背景和匹配文化的人才对大型公司和初创公司来说是一项挑战,Insight 专注于通过 7 周密集式奖学金计划,培养顶尖人才。迄今为止,从 Insight 毕业的学生超过 1000 名,分布在 350 多家公司,包括 Amazon、Google、Netflix、Twitter 和 The New York Times。

Insight 的数据工程团队熟知当前开源工具和技术生态系统,并提供这一领域最佳实践方面的指导。技术团队会持续在各种数据咨询和指导能力方面与外部小组开展合作,但大部分 Insight 合作伙伴都会参加专业会议。各公司会造访 Insight 办公室,与学员进行非正式交流,并详细介绍自己从事的工作类型及其团队的发展情况。事实证明,这类会议非常有价值,因为学员会经历更好的面试过程,而公司会获得积极热情的新团队成员。

Insight 奖学金计划的一个重要方面是实际操作机会,重点是从构建大数据管道到为行业标准开源工作贡献新想法/新特性的各个环节。除了数据工程团队提供的指导外,Insight 还免费为所有学员提供 AWS 资源供其使用。学员们会定期利用 Amazon S3Amazon EC2Amazon KinesisAmazon EMRAWS LambdaAmazon RedshiftAmazon RDS 及其他服务。AWS 的相关经验可在学员进入行业之初为其提供扎实的技能。奖学金计划目前仅在波士顿、纽约、西雅图和湾区提供。

请参阅 Insight 博客,详细了解数据基础架构、人工智能和先进数据产品领域的趋势。

iTranslate (奥地利)

在 App Store 于 2008 年正式上线运营时,iTranslate 的创始人发现了一个巨大商机。这个 4 人小组坚信,iPhone 和应用程序会改变这个世界,然后他们集思广益,试图开发出属于自己的应用程序。翻译和移动设备的结合似乎是天作之合,到 2009 年 iTranslate 终于面世了。iTranslate 的使命是,让旅行者、学生、商务专业人员、雇主和医务人员能够随时随地使用所有语言进行读、写和说。通过这款应用程序,用户可以将各种平台上的文本、语音、网站等内容翻译成将近 100 种语言。如今,iTranslate 是对话翻译和词典应用程序领域的领导者,其下载量超过了 6000 万次,每月活跃用户达到了 600 万。

iTranslate 通过颠覆性技术和创新,打破了各语言之间的障碍,从而实现实时翻译。这款应用程序提供可用于优化生产力的多种功能,包括离线翻译、网站和语音翻译及语言自动检测。iTranslate 还与一家专门从事智能耳机业务的公司 Bragi 通力合作,最近推出了世界上首款耳机翻译设备。Dash Pro 通过耳机为用户实时提供翻译,从而让用户能够自由交流。

Amazon Polly 面世后不久,iTranslate 就开始使用它。CEO Alexander Marktl 说道,“作为领先的翻译和词典应用程序,iTranslate 的使命是,尽可能为用户提供最好的工具,让用户使用所有语言在全球范围内实现读、写和说能力。通过 Amazon Polly,我们可以高效生成和使用高质量的自然声音合成语音。”利用稳定且简单易用的 API、低延迟和免费缓存等功能,iTranslate 可以在其应用程序不断增加功能时进行扩展。通过更改语速和在男女声之间切换,客户也可以尽享其中的乐趣。为了保证其产品质量、速度和可靠性,iTranslate 还使用了 Amazon EC2Amazon S3Amazon Route 53

要开始使用 iTranslate,请单击此处访问其网站。

—–

感谢您的阅读!

-Tina

Hightail — 助力云中的创意协作

Hightail – 以前的 YouSendIt – 简化了创作任务的审查、改进和审批,帮助世界各地的 5000 多万专业人士更快地向观众奉上出色的内容。自从 2004 年作为文件共享公司首次亮相以来,Hightail 转变了其战略方向,专注于提供增值创意协作服务,并拥有了强大的知名品牌客户阵容。

在今天的客座文章中,Hightail 的技术高级副总裁 Shiva Paranandi 讲述了公司将数 PB 数据从内部部署迁移到云端的迁移故事。他着重介绍了他们对云供应商的评估过程以及全面使用 AWS 的原因。


Hightail 一开始只是帮助人们轻松地共享和存储大型文件,但后来逐渐演变成一个创意协作工具。在我们这里,用户不仅可以控制和共享他们的数字资产,还可以组建他们的创意团队,与客户保持联系,开发创意工作流程,以及从头到尾管理项目。现在我们为 LionsgateJimmy Kimmel Live! 等主要品牌提供协作服务。随着国内外客户的不断增加,我们内部需要更多地关注产品开发和用户服务。我们发现,运行我们自己的数据中心耗费了大量时间、金钱和人力,让我们不堪重负。

我们需要一种可以帮助我们更迅速地进行迭代以满足客户需求并大大缩短产品上市时间的方法。我们希望降低数据中心成本,并能灵活地在全球任何特定区域迅速扩展。在新位置建立数据中心花了很长时间,限制了我们可以实现的增长速度。此外,我们厌倦了总是在需求出现之前进行购买,这意味着我们拥有甚至根本没有使用过的存储容量。我们需要一个分层且高度可扩展的存储解决方案,允许我们将不经常使用的数据保留在不活跃存储中,同时还允许我们根据客户的要求快速重新显示这些数据,从而降低成本。我们的主要推动因素是敏捷性和创新,而云能够在很大程度上实现这些目标。鉴于此,我们决定采用云优先策略,让我们能够将时间和金钱花在使我们的业务独具特色的举措上,而不是将资源用在管理存储和计算基础设施上。

比较 AWS 与云竞争对手

为了开始迁移,我们通过评估包括 AWS、Google、IBM 和 Microsoft 在内的各种云供应商进行了尽职调查。我们认为 AWS 是毫无悬念的赢家。我们一度考虑结合使用多个云提供商的服务来满足我们的需求,但后来发现最好的方法还是只使用 AWS。当我们考虑到培训、同步、支持和系统可用性以及其他迁移和管理因素时,发现采用多云方法是不切实际的。AWS 凭借出色的成本节约和无可匹敌的合作伙伴解决方案生态系统,让我们不再需要任何其他供应商,因此我们选择了全面使用 AWS。

通过迁移到 AWS,我们成功地保证了最低的每 GB 成本定价,接入了庞大的生态系统,快速培养了内部人才,并保持了 SOC II 合规性。生态系统对我们尤其重要,并让 AWS 凭借其庞大的合作伙伴名单从竞争对手中脱颖而出。事实上,我们的图像预览、视频编码和演示文稿的演示等服务所依赖的所有供应商已经是该网络的一部分,因此我们能够很容易地利用我们的现有投资和专业知识。如果我们与其他提供商合作,则意味着要抛弃我们已经用得很好的平台,这不是我们期望的结果。此外,我们在内部培养的 AWS 技术方面的人才数量也令人震惊。培训我们的内部团队与 AWS 合作非常简单,只使用了 AWS 会议、培训材料和支持等可用工具。

迁移数 PB 数据

与 AWS 合作让事情变得更容易。许多情况下,它为我们提供的功能比我们在内部使用的功能更出色。我们轻松地将数 PB 数据从内部存储迁移到 AWS。AWS 通过 Direct Connect 为我们提供了极快的速度,所以我们才能够在三个月多一点的时间内迁移所有数据,且没有对用户造成任何影响。我们采用了 AWS Key Management Service 来保护我们的数据安全,这让我们在整个迁移过程中都高枕无忧。在转换用户之前,我们使用各种方法进行了广泛的 QA 测试,以确保不对客户造成太大影响,这些方法包括我们的数据中心与推送到 AWS 的数据之间的校验和。

我们在 AWS 上的新平台显著改善了我们的用户体验。我们在可靠性、性能和正常运行时间方面都取得了巨大进步,所有这些在我们的业务线中都至关重要。现在我们的上传和下载速度能够比以前的数据中心快多达 17 倍,正常运行时间也增加了几个数量级。此外,我们向新区域部署服务所需的时间减少了 90% 以上。以前我们至少要花半年的时间才能让新区域投入运行,现在我们可以在不到三周的时间内让一个区域启动并正常运作。在 AWS 上,我们甚至可以跨区域在存储桶级别复制数据,以实现灾难恢复目的。

为了降低成本,我们成功地将存储基础设施划分为经常访问的数据和不经常访问的数据两部分。Amazon S3 中的分层存储一直是一项巨大优势,使我们能够优化存储成本,因此我们可以将更多资金投入到产品开发中。现在我们可以立即将数据从不活跃层移动到活跃层,以满足客户需求,并且无需再对存储基础设施进行过度配置。能看到在峰值负载期间服务会自动扩展或缩减,并且知道我们只需为所需服务付费,真让人振奋。

总体而言,我们实现了更多地关注发展、较少地关注基础设施的关键战略目标。我们的迁移体验是无缝的,我们得以与大家分享的进展有力地证明了在 AWS 上运行我们的工作负载是多么容易。我们把成功迁移的一部分原因归功于 AWS 团队提供的专属支持。他们非常棒。他们的几名技术人员通过聊天方式全天候为我们提供服务,事实证明这在大规模迁移过程中至关重要。

-Hightail 技术副总裁 Shiva Paranandi

了解更多

了解有关 Amazon S3 的经济实惠的分层数据存储的更多信息,或者深入探讨我们的 AWS 合作伙伴生态系统,以查看哪些解决方案可以最好地满足贵公司的需求。

利用Kong及AWS Lambda构建无服务器的后端逻辑

Kong是一个开源的API GW及微服务管理层,基于Nginx, Cassandra或者PostgreSQL构建,最初由Mashape开发,用于为其API Marketplace管理超过15,000个API和微服务,并于2015年开源。Kong具有如下优点:

  1. 可扩展性:通过简单地添加更多的机器,Kong可以轻松地水平缩放,这意味着您的平台可以处理几乎任何负载,同时保持低延迟。
  2. 模块化:可以通过添加新的插件来扩展,并通过RESTful Admin API轻松配置所有插件。
  3. 平台无关性:Kong可以运行在任何地方,包括本地数据中心及公有云,支持物理机,虚机及容器部署。

目前Kong的最新版本为0.10.2,支持的插件如下:

  • 认证:Basic Authentication, Key Authentication, OAuth2.0 Authentication, OAuth 2.0 Introspection, HMAC Authentication, JWT, LDAP Authentication
  • 安全:ACL, CORS, Dynamic SSL, IP Restriction, Bot Detection
  • 流控:Rate Limiting, Response Rate Limiting, Request Size Limiting
  • 无服务器架构:AWS Lambda, OpenWhisk
  • 分析监控:Galileo, Datadog, Runscope
  • 内容转换:Request Transformer, Response Transformer, Correlation ID
  • 日志:TCP/UDP/HTTP Logging, File Logging, Syslog, StatsD, Loggly

通过AWS Lambda插件,Kong可以作为一个统一的API前端,接收用户的请求,并调用不同的lambda函数做相关的处理,最后将结果返回给客户端,目前Lambda插件支持如下region:

us-east-1, us-east-2, ap-northeast-1, ap-northeast-2, ap-southeast-1, ap-southeast-2, eu-central-1, eu-west-1

Kong的安装

Kong支持多种安装方式,对于在AWS上运行Kong的情况,主要有三种:

  1. 通过marketplace安装,此安装方式会在一台EC2上同时安装Kong及其存储数据库Cassandra,适合单机部署或者测试环境
  2. 通过CloudFormation安装,CloudFormation安装方式目前支持如下region,可以通过配置选择存储数据库的类型Cassandra还是PostgreSQL,或者不由CloudFormation创建存储数据库
  3. 通过yum在EC2上安装

本文主要讲解第三种方式的安装过程,安装Kong 0.10.1版本

第一步 配置Kong的数据存储

Kong支持两种datastore:Cassandra和PgSQL,方便起见,这里利用AWS RDS创建PgSQL作为数据存储

注意事项:

  1. RDS的安全组需要放行5432端口
  2. 记录RDS创建过程中设置的用户名,密码及数据库名

比如:username/password:ivan/ivan

DB:kong

第二步 安装配置Kong (Amazon Linux)

yum update –y

wget https://github.com/Mashape/kong/releases/download/0.10.1/kong-0.10.1.aws.rpm

yum install kong-0.10.1.aws.rpm –nogpgcheck

cp /etc/kong/kong.conf.default /etc/kong/kong.conf

vim /etc/kong/kong.conf,

修改配置如下

database = postgres

pg_host = postgre-kong.XXXXXXXX.rds.cn-north-1.amazonaws.com.cn

pg_port = 5432

pg_user = ivan

pg_password = ivan

pg_database = kong

简单测试

第三步 创建AMI,利用ELB,Autoscaling Group构建高可用架构

注意,如果EC2上已经启动过kong,那么会将生成的id也打包进入AMI,导致基于AMI生成的多台机器的id相同,从而无法建立集群,创建AMI前需要删除id

rm –f /usr/local/kong/serf/serf.id

参考:

https://github.com/Mashape/kong/issues/1751

检查集群状态

第四步 创建Lambda函数并且测试

第五步 配置Kong API GW并调用Lambda

5.1.配置API

测试

5.2.配置Lambda插件

测试

第六步 配置启用额外的插件

6.1为API开启key认证

配置用户并绑定key

测试

6.2为API限速

6.3基于IP地址的过滤

作者介绍

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

基于Amazon EC2 Container Service的持续集成/持续交付解决方案

基本概念

持续集成/持续交付

互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous integration,简称CI)和持续交付(Continuous delivery,简称CD)。

通过CI/CD构建自动化的代码交付管道,可以实现:

(1) 快速交付。通过CI/CD自动化软件发布的过程,可以更快速地发布新的功能,快速迭代反馈并让新功能更快提供给客户。

(2) 提高质量。自动化构建、测试和发布过程致使可以轻松测试每次代码更改并捕捉易于修复的小型漏洞,通过标准化发布过程运行每一项更改,从而保证应用程序或基础设施代码的质量。

(3) 可配置工作流。通过图形用户界面模拟软件发布过程的各个阶段。

容器

本文涉及到的另外一个概念是容器,相信大家都已经不再陌生,并且很多朋友已经在自己的环境中有实际的运行、部署基于容器的应用,这边简单的回顾下容器的几个重要优势:

一是因为容器可以跨平台,从而让程序猿可以享受到研发生产环境一致性的便利,也就是DevOps。在没有容器之前,常常一个应用做好了在笔记本上可以运转起来,在数据中心就运转不起来,因为操作系统版本不同、库版本不对;或者有的时候生产环境里出现了问题,在笔记本的开发环境中复制不出来。有了容器之后,这些问题就大大减少了。

其二,容器在虚拟机里面可以大幅度提升资源利用率。因为一旦把应用容器化,虚拟机资源就可以通过部署多个容器而得到充分利用,而不是每一个应用去申请一个虚拟机,造成资源的浪费。

Amazon ECS/ECR

Amazon EC2 Container Service (ECS)是一个托管的容器集群管理和调度服务, 可使您在 Amazon EC2 实例集群中轻松运行和管理支持 Docker 的应用程序。

使用 Amazon ECS 后,您不再需要安装、操作、扩展您自己的集群管理基础设施,可以根据资源需求和可用性要求在集群中安排支持 Docker 的应用程序。借助 Amazon ECS,您可以从一个容器扩展到覆盖数百个实例的数千个容器,而运行应用程序的方式并不会因此而变得复杂。您可以运行包括应用程序、批量作业和微服务在内的任何东西。Amazon ECS 将基础设施的一切复杂因素全部消除,让您能够集中精力设计、开发、运行容器化应用程序。

Amazon EC2 Container Registry (ECR) 是完全托管的 Docker 镜像仓库,可以让开发人员轻松存储、管理和部署 Docker 容器映像。Amazon ECR 集成在 Amazon EC2 Container Service (ECS) 中,从而简化产品工作流的开发。

本文主要介绍如何在AWS云上,使用Jenkins快速构建针对容器应用的持续集成/持续交付管道。

下图是整个CI/CD的流程图:

  1. 开发者commit/push新版本的软件工程到GitHub仓库
  2. GitHub的webhook触发Jenkins预先定义好的构建Pipeline
  3. Jenkins下载GitHub,并基于下载的DockerFile构建新的docker镜像并上传ECR仓库
  4. Jenkins调用aws cli更新ECS的task definition引用新的docker镜像并更新相关的service
  5. ECS基于新的service配置更新集群中的container

可以看到,整个代码的发布过程,开发人员只需要在本地开发新版本的软件并提交到GitHub,之后的一系列代码构建、部署等过程可以完全实现自动化,无需人为干预,大大提高了软件迭代的速度,为敏捷开发、微服务化提供支持,同时,可以根据需要添加测试步骤、代码审查、人工审批等步骤,构建一条更为强大灵活的代码交付流程。

 

  1. 准备工作启动一台EC2用于安装jenkins,本例使用Amazon Linux AMI,建议分配EIP(52.34.X.X),并且赋予合适role使其能够操作ECR和ECS
  2. 安装java jdk 1.8
  3. 安装并运行docker daemon,

    yum install docker –y

    chkconfig docker on

    service docker start

  4. 安装并运行jenkins

    wget -O /etc/yum.repos.d/jenkins.repo http://jenkins-ci.org/redhat/jenkins.reporpm –import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.keyyum install jenkins

    chkconfig jenkins on

    service jenkins start

  5. 将jenkins用户加入docker用户组,使其拥有docker cli执行权限
    usermod -a -G docker jenkins
  6. 安装git,jq
    yum install git jq –y

第一步 配置GitHub与Jenkins联动

生成GitHub token,用于jenkins访问GitHub

记录下生成的token字符串

为需要做CI/CD的GitHub创建hook,实现代码更新自动通知Jenkins,Payload URL设置Jenkins Server的地址,默认Jenkins监听8080端口

第二步 配置Jenkins的构建步骤

在浏览器中输入jenkins server的地址(52.34.X.X:8080),开始配置jenkins

初始化登入

安装推荐的插件

安装CloudBees Docker Build and Publish plugin,用于构建docker镜像并上传到ECR仓库

配置github插件,使得jenkins能够连接到github

点击Add GitHub Server增加GitHub服务器,并添加Credentials

在Secret中输入之前记录的GitHub Personal Access Token

点击Test connection测试连通性

创建jenkins项目

设置GitHub项目路径

源代码管理选择Git

勾选GitHub hook trigger for GITScm polling,使得github项目的更改自动触发构建行为

添加三个构建步骤

第一个步骤为通过aws cli登入ECR仓库

第二个步骤为通过CloudBees Docker Build and Publish plugin构建docker镜像并上传到ECR中

第三个步骤为通过脚本注册新的ECS task definition并更新service,实现服务部署,详细代码可以从如下链接获取

https://s3.cn-north-1.amazonaws.com.cn/junyublog/buildstep3.sh

第三步 测试

https://github.com/iwasnobody/ecs-cicd-jenkins

本例使用的GitHub工程对外提供一个apache PHP的静态页面

在本地PC上clone下工程兵修改工程下的src/index.php文件

commit并push到GitHub上

Jenkins界面可以看到自动触发了一次新的构建

查看新的镜像已经被上传到ECR

查看jenkins创建了新版本的task definition

查看service已经引用了新版本的task definition

访问应用,确认已经更新到最新版

 

作者介绍

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

 

 

 

新增:Amazon Kinesis Streams 服务器端加密

在这个智能家居、大数据、物联网设备、手机、社交网络、聊天机器人和游戏机的时代,流媒体数据场景无处不在。利用 Amazon Kinesis Streams,您可以构建自定义应用程序,以便从数千个流媒体数据源捕获、处理、分析和存储每小时数 TB 的数据。由于 Amazon Kinesis Streams 允许应用程序从同一个 Kinesis 流并发处理数据,因此您可以构建并行处理系统。例如,您可以将处理后的数据发送到 Amazon S3,使用 Amazon Redshift 执行复杂分析,甚至使用 AWS Lambda 构建强大的无服务器流媒体解决方案。

Kinesis Streams 为消费者提供了多种流媒体使用案例,现在我们通过为 Kinesis Streams 添加服务器端加密 (SSE) 支持,让服务能够更有效地保护您的传输中数据。借助 Kinesis Streams 的这一新功能,现在您可以提高数据安全性和/或满足任何法规和合规性要求,以符合组织的任何数据流式处理需求。
事实上,Kinesis Streams 现在是支付卡行业数据安全标准 (PCI DSS) 合规性计划涵盖的 AWS 服务之一。PCI DSS 是由主要金融机构成立的 PCI 安全标准委员会管理的专有信息安全标准。PCI DSS 合规性适用于存储、处理或传输持卡人数据和/或敏感的身份验证数据的所有实体,其中包括服务提供商。您可以使用 AWS Artifact 索要 PCI DSS 合规性证明和责任摘要。但是,关于 Kinesis Streams 合规性的好消息还不止这些。Kinesis Streams 现在还符合 AWS GovCloud 中的 FedRAMP 标准。FedRAMP 代表“联邦风险与授权管理项目”(Federal Risk and Authorization Management Program),是美国政府实施的一个项目,为云产品和云服务的安全评估、授权和持续监控提供了一种标准方法。您可以在这里了解有关 AWS 服务的 FedRAMP 合规性的更多信息。

现在您准备好了解关键点了吗?那就记住关键点,而不是纠结于细节。好吧,是有点陈词滥调,但这是我能想到的最好类比了。回到 Kinesis Streams 的 SSE 讨论中,让我来解释 Kinesis 的服务器端加密流程。使用 PutRecord 或 PutRecords API 放入 Kinesis Stream 中的每个数据记录和分区键均使用 AWS Key Management Service (KMS) 主密钥进行加密。通过 AWS Key Management Service (KMS) 主密钥,Kinesis Streams 使用 256 位高级加密标准 (AES-256 GCM 算法) 对传入数据进行加密。

为了对新的或现有流启用 Kinesis Streams 服务器端加密,您可以使用 Kinesis 管理控制台或利用某个可用的 AWS 软件开发工具包。此外,您还可以使用 AWS CloudTrail 服务审核流加密历史记录,验证 Kinesis Streams 控制台中特定流的加密状态,或者检查 PutRecord 或 GetRecord 事务是否已加密。

演练:Kinesis Streams 服务器端加密

我们来快速演练一下 Kinesis Streams 的服务器端加密。首先,我将访问 Amazon Kinesis 控制台并选择 Streams 控制台选项。

进入 Kinesis Streams 控制台后,我可以向我现有的某个 Kinesis 流添加服务器端加密,或者选择创建一个新的 Kinesis 流。对于此演练,我将选择快速创建一个新的 Kinesis 流,因此,我选择 Create Kinesis stream 按钮。

我将该流命名为 KinesisSSE-stream,然后为它分配一个分区。请记住,您的流的数据容量是根据为流指定的分区数量计算的。您可以使用控制台中的 Estimate the number of shards you’ll need 下拉菜单,或者通过在此处阅读更多有关计算方式的内容来估计流中的分区数。为了完成流的创建,现在我单击 Create Kinesis stream 按钮。

创建 KinesisSSE-stream 后,我将在控制面板中选择它,然后选择 Actions 下拉菜单并选择 Details 选项。


KinesisSSE-stream 的“Details”页面上,现在有一个 Server-side encryption 部分。在该部分中,我将选择 Edit 按钮。

现在,我可以通过选择 Enabled 单选按钮,使用 AWS KMS 主密钥为我的流启用服务器端加密。选择该选项后,我就可以选择将哪个 AWS KMS 主密钥用于 KinesisSSE-stream 中的数据加密。我可以选择 Kinesis 服务生成的 KMS 主密钥 (Default) aws/kinesis,也可以选择之前我自己生成的一个 KMS 主密钥。我将选择默认主密钥,然后只需单击 Save 按钮即可。


就是这样!从下面的屏幕截图中可以看出,只有大约 20 秒,服务器端加密即添加到我的 Kinesis 流中,现在传入到我的流中的任何数据都将被加密。需要注意的是,服务器端加密仅对在启用加密后传入的数据进行加密。启用服务器端加密之前 Kinesis 流中预先存在的数据将保持未加密状态。

总结

使用 AWS KMS 密钥的 Kinesis Streams 服务器端加密让您可以轻松地自动加密传入流中的流媒体数据。您可以使用 AWS 管理控制台或 AWS 软件开发工具包启动、停止或更新任何 Kinesis 流的服务器端加密。要了解有关 Kinesis 服务器端加密、AWS Key Management Service 或 Kinesis Streams 的更多信息,请查看 Amazon Kinesis 入门指南AWS Key Management Service 开发人员指南Amazon Kinesis 产品页面

祝流式处理顺利。

Tara

Lambda@Edge – 在边缘智能地处理 HTTP 请求

去年年底,我宣布推出预览版 Lambda@Edge,并谈论了如何使用它在靠近客户的位置 (低延迟) 智能地处理 HTTP 请求。申请并获得预览版访问权的开发人员一直在很好地使用它,并为我们提供了大量非常有用的反馈意见。在预览期间,我们添加了生成 HTTP 响应和支持 CloudWatch Logs 的功能,并根据反馈意见更新了路线图。

现已正式发布
今天我很高兴地宣布 Lambda@Edge 现已正式发布!您可以使用它来:

  • 检查 Cookie 并重写 URL 以执行 A/B 测试。
  • 根据 User-Agent 标头将特定对象发送给用户。
  • 通过在将请求传递到源之前查找特定标头来实现访问控制。
  • 添加、删除或修改标头以将用户指引到不同的缓存对象。
  • 生成新的 HTTP 响应。
  • 干净利落地支持旧 URL。
  • 修改或缩减标头或 URL 以提高缓存利用率。
  • 向其他 Internet 资源发出 HTTP 请求,并使用结果自定义响应。

Lambda@Edge 允许您创建基于 Web 的丰富且个性化的用户体验。由于它正迅速成为当今世界的常态,因此您不需要配置或管理任何服务器。您可以直接上传代码 (在Node.js 中编写的 Lambda 函数),并选择您为分发版创建的其中一个 CloudFront 行为以及所需的 CloudFront 事件:

在本例中,我的函数 (假设名为 EdgeFunc1) 将会运行,以响应对指定分发版中的 image/* 的源请求。如您所见,您可以运行代码以响应四种不同的 CloudFront 事件:

查看器请求 – 当事件从查看器 (HTTP 客户端,通常是 Web 浏览器或移动应用程序) 到达并且可以访问传入 HTTP 请求时,触发此事件。众所周知,每个 CloudFront 边缘站点都维护一个大型对象缓存,以便它可以高效地响应重复的请求。无论请求的对象是否已被缓存,都会触发此特定事件。

源请求 – 由于所请求的对象未缓存在边缘站点而导致边缘站点反过来要向源发出请求时,触发此事件。它可以访问将向源 (通常是 S3 存储桶或在 EC2 实例上运行的代码) 发出的请求。

源响应 – 在源返回对请求的响应后触发此事件。它能够访问来自源的响应。

查看器响应 – 在边缘站点返回对查看器的响应之前触发此事件。它可以访问此响应。

函数在全局范围内复制,并且请求将自动路由到最佳位置进行执行。您可以编写一次代码,然后无需您执行任何明确的操作,即可以较低延迟向世界各地的用户提供代码。

您的代码可以完全访问请求和响应,包括标头、Cookie、HTTP 方法 (GET、HEAD 等) 和 URI。它可以修改现有标头并插入新标头,但存在一些限制。

操作中的 Lambda@Edge
我们来创建一个为了响应查看器请求事件而运行的简单函数。我打开 Lambda 控制台并创建一个新函数。我选择 Node.js 6.10 运行时并搜索 cloudfront 蓝图:

我选择 cloudfront-response-generation 并配置一个触发器来调用该函数:

Lambda 控制台为我提供了有关我函数的运行环境的一些信息:

我照常输入函数的名称和描述:

蓝图包括一个可正常运行的函数。它生成一个“200”HTTP 响应和一个非常简单的主体:

我将该主体用作我自己代码的起点,以便从请求中提取一些有趣的值,并将它们显示在表中:

'use strict';
exports.handler = (event, context, callback) => {

    /* Set table row style */
    const rs = '"border-bottom:1px solid black;vertical-align:top;"';
    /* Get request */
    const request = event.Records[0].cf.request;
   
    /* Get values from request */ 
    const httpVersion = request.httpVersion;
    const clientIp    = request.clientIp;
    const method      = request.method;
    const uri         = request.uri;
    const headers     = request.headers;
    const host        = headers['host'][0].value;
    const agent       = headers['user-agent'][0].value;
    
    var sreq = JSON.stringify(event.Records[0].cf.request, null, ' ');
    sreq = sreq.replace(/\n/g, '<br/>');

    /* Generate body for response */
    const body = 
     '<html>\n'
     + '<head><title>Hello From Lambda@Edge</title></head>\n'
     + '<body>\n'
     + '<table style="border:1px solid black;background-color:#e0e0e0;border-collapse:collapse;" cellpadding=4 cellspacing=4>\n'
     + '<tr style=' + rs + '><td>Host</td><td>'        + host     + '</td></tr>\n'
     + '<tr style=' + rs + '><td>Agent</td><td>'       + agent    + '</td></tr>\n'
     + '<tr style=' + rs + '><td>Client IP</td><td>'   + clientIp + '</td></tr>\n'
     + '<tr style=' + rs + '><td>Method</td><td>'      + method   + '</td></tr>\n'
     + '<tr style=' + rs + '><td>URI</td><td>'         + uri      + '</td></tr>\n'
     + '<tr style=' + rs + '><td>Raw Request</td><td>' + sreq     + '</td></tr>\n'
     + '</table>\n'
     + '</body>\n'
     + '</html>'

    /* Generate HTTP response */
    const response = {
        status: '200',
        statusDescription: 'HTTP OK',
        httpVersion: httpVersion,
        body: body,
        headers: {
            'vary':          [{key: 'Vary',          value: '*'}],
            'last-modified': [{key: 'Last-Modified', value:'2017-01-13'}]
        },
    };

    callback(null, response);
};

我配置我的处理程序,并请求创建一个具有 Basic Edge Lambda 权限的新 IAM 角色:

在下一页上,我确认我的设置 (就像我对常规 Lambda 函数所做的那样),然后单击 Create function

这将创建函数,将触发器附加到分发版,并且还将启动该函数的全局复制。在复制期间 (通常为 5 至 8 分钟),我的分发版状态将更改为 In Progress

复制完成后,状态立即改回 Deployed

然后,我访问分发版的根 (https://dogy9dy9kvj6w.cloudfront.net/),函数将运行,下面是我看到的样子:

尽管单击图片 (它链接到我的分发版的根) 以运行我的代码!

与往常一样,这是一个非常简单的例子,我相信您可以做得更好。以下是帮助您开始使用的几点提示:

站点管理 – 在维护或灾难恢复操作期间,您可以使用 Lambda@Edge 函数使整个动态网站脱机,并替换关键页面。

大量内容 – 您可以创建记分卡、天气预报或公共安全页面,并快速、经济高效地在边缘提供它们。

创建一些很酷的东西,并在评论或博客文章中分享,我会关注的。

需知信息
当您开始思考如何将 Lambda@Edge 用于您的应用程序时,请记住以下几点:

超时 – 处理源请求和源响应事件的函数必须在 3 秒钟内完成。处理查看器请求和查看器响应事件的函数必须在 1 秒钟内完成。

版本控制 – 在 Lambda 控制台中更新代码后,必须发布新版本并为其设置一组新的触发器,然后等待复制完成。您必须始终使用版本号来引用您的代码;$LATEST 和别名不适用。

标头 – 就像您在我的代码中看到的那样,HTTP 请求标头可作为数组访问。标头分为四类:

  • 可访问 – 可以读取、写入、删除或修改。
  • 受限 – 必须传递给源。
  • 只读 – 可以读取,但不能以任何方式修改。
  • 列入黑名单 – 代码看不到它,并且无法添加。

运行时环境 – 运行时环境为每个函数提供 128 MB 内存,但没有内置库,也无法访问 /tmp

Web 服务访问 – 处理源请求和源响应事件的函数必须在 3 秒钟内完成,并且可以通过 HTTP 访问 AWS API 并获取内容。这些请求总是与对原始请求或响应的请求同步进行。

函数复制 – 如前所述,您的函数将在全局范围内复制。复制副本在 Lambda 控制台的“其他”区域中可见:

CloudFront – 您已经了解的有关 CloudFront 和 CloudFront 行为的一切都与 Lambda@Edge 密切相关。您可以使用每个行为类别中的多个行为 (每个行为最多四个 Lambda@Edge 函数),自定义标头和 Cookie 转发等等。还可以在编辑行为时在事件和函数之间建立关联 (通过包含函数版本的 ARN):

现已推出
Lambda@Edge 现已推出,您可以立即开始使用。定价取决于您的函数被调用的次数及其运行时间的长短 (有关详细信息,请参阅 Lambda@Edge 定价页面)。

Jeff