Category: 最新发布


Gluon 简介:AWS 和 Microsoft 合作推出的新机器学习库

作者:Matt Wood 博士

Amazon Linux AMI 2017.09 现已推出

我很高兴地宣布,Amazon Linux AMI 的最新版本 (2017.09) 现可供所有 AWS 区域中当前一代的所有 EC2 实例使用。此 AMI 包含受支持和维护的 Linux 映像,该映象旨在为 EC2 上运行的应用程序提供稳定、安全和高性能的环境。

易于升级
只需运行以下两条命令然后重启,就可将现有实例升级:

$ sudo yum clean all
$ sudo yum update

好处多多
此 AMI 包含许多新功能,其中有很多都是应客户要求而添加的。总结如下:

Kernel 4.9.51 – 此内核以 4.9 稳定内核系列为基础,包括 ENA 1.3.0 驱动程序,还支持 TCP 瓶颈带宽和 RTT (BBR)。请阅读我的文章 Elastic Network Adapter – Amazon EC2 高性能网络接口,了解有关 ENA 的更多内容。要了解如何启用 BBR,请阅读发行说明

Amazon SSM 代理 – Amazon SSM 代理现已默认安装。也就是说,现在您可以使用 EC2 Run Command 在您的实例上配置并运行脚本,而无需进行其他设置。要了解更多内容,请阅读使用 Systems Manager Run Command 执行命令使用 EC2 Run Command 在不使用 SSH 访问的情况下大规模地管理实例

Python 3.6 – 现已包含 Python 最新版本,还可通过 virtualenvalternatives 进行管理。您可以使用如下方法安装 Python 3.6:

$ sudo yum install python36 python36-virtualenv python36-pip

Ruby 2.4 – 现已提供 Ruby 2.4 系列最新版本。安装方法如下:

$ sudo yum install ruby24

OpenSSL – 此 AMI 目前使用 OpenSSL 1.0.2k

HTTP/2 – 此 AMI 的 httpd24nginxcurl 程序包现已支持 HTTP/2 协议。

关系数据库 – 现已推出 Postgres 9.6MySQL 5.7,安装方法如下:

$ sudo yum install postgresql96
$ sudo yum install mysql57

OpenMPIOpenMPI 程序包现已由 1.6.4 升级到 2.1.1。已推出 OpenMPI 兼容包,可用于构建及运行较旧的 OpenMPI 应用程序。

更多 – 更新的其他程序包包括 Squid 3.5Nginx 1.12Tomcat 8.5GCC 6.4

立即启动
您现在就可以使用此 AMI 在所有 AWS 区域启动 EC2 实例。它适用于由 EBS 提供支持的实例和由实例存储提供支持的实例,还支持 HVM 和 PV 模式。

Jeff

Microsoft SQL Server 2017 在 Amazon EC2 上的实践

Microsoft SQL Server 2017 (几天前刚刚发布) 包含许多强大的新功能,包括支持图形数据库数据库自动优化,还能创建无集群 Always On 可用性组。它还能在 Linux 和 Docker 容器中运行。

在 EC2 上运行

我很高兴地在此宣布,现在,您可以启动运行 Windows Server 2016 以及 SQL Server 2017 的四个版本 (Web、Express、Standard 和 Enterprise) 的 EC2 实例了。今天,AMI (Amazon 系统映像) 已在所有 AWS 区域提供,可以在各种 EC2 实例类型上运行,包括全新的 x1e.32xlarge (具有 128 个 vCPU 和接近 4 TB 的内存)。您可以通过 [控制台] 或 [Marketplace] 启动这些实例。以下是它们在控制台中的样子:

以及在 AWS Marketplace 中的样子:

丰富的许可选项

对于 SQL Server 您拥有多种许可选项:

按需付费 – 如果您已经在运行旧版 SQL Server,希望升级,但不想购买许可,那么此选项很适合您。您不必进行调整、软件合规性审计或软件保障,也不需要长期购买。如果您运行的是 SQL Server 标准版,还可得益于我们最近的降价,最多可节省 52%。

许可证移动性 – 选择此选项可使用您的活跃软件保障协议,将现有许可证带到 EC2,还能在 Windows 或 Linux 实例上运行 SQL Server。

自带许可 – 选择此选项,您可利用现有许可证投资,尽量降低升级成本。您可以在 EC2 专用实例EC2 专用主机上运行 SQL Server,如果按内核许可 SQL Server,还有可能降低运营成本。使用此选项可在 EC2 Linux 实例上运行 SQL Server 2017 (支持 SUSE、RHEL 和 Ubuntu),还支持在 EC2 Windows 和 Linux 实例上运行的基于 Docker 的环境。要了解有关这些选项的更多详情,请阅读在 Linux 上安装 SQL Server 的指南使用 Docker 运行 SQL Server 2017 容器映像

了解更多

要了解有关 SQL Server 2017 的更多详情,并深入探索您的许可选项,请查看 AWS 上的 SQL Server 页面。如果您需要迁移规划方面的建议和指导,请与有能力处理 Microsoft 工作负载,且专注于数据库解决方案的合格 AWS 合作伙伴联系。Amazon RDS 计划于 11 月提供对 SQL Server 2017 的支持。届时将会向您提供完全托管选项。请安排时间在 PASS 峰会 (11 月 1-3 日,西雅图) 和 [re:Invent] (11 月 27 日到 12 月 1 日,拉斯维加斯) 与 AWS 团队见面。

Jeff 附言 – 特别感谢我的同事 Tom Staab (合作伙伴解决方案架构师) 对此篇博文的贡献!

释放创造力 – AWS Step Functions 让您事事顺利

我经常进行有关 Amazon 创新文化的演讲,通常,开场幻灯片都会引用 Amazon 创始人 Jeff Bezos 一句发人深省的话:

我喜欢和客户坐在一起,听他们讲述我们如何帮助他们释放了创造力,让他们能够追寻梦想。今年早些时候,我与可口可乐公司的 Patrick 聊天,想了解他们如何使用 AWS Step Functions 和其他 AWS 服务支持 Coke.com Vending Pass 计划。此计划包括,在支持使用可口可乐 Vending Pass 进行移动支付的自动贩售机上购买产品可以赢得饮品奖励。参与者可轻扫已启用 NFC 的手机,完成 Apple PayAndroid Pay 购买,同时向自动贩售机表明身份,并赢取积分,将来即可在自动贩售机上免费获得饮品

轻扫之后,SNS 主题和 AWS Lambda 函数的组合会对部分现有后端代码启动两次调用,以计算贩售点数并更新参与者的记录。遗憾的是,后端代码响应太慢,还有一些计时依赖性,从而导致漏掉更新,并有可能使 Vending Pass 参与者觉得很困惑。解决这个问题的最初方案非常简单:修改 Lambda 代码,在两次调用之间加入 90 秒延迟。这样确实可以解决问题,但平白消耗了处理时间 (对 Lambda 函数的使用计费取决于请求的持续时间,以 100 毫秒为间隔)。

为了使解决方案更加经济高效,团队转而使用 AWS Step Functions,并构建了非常简单的状态机。我在之前的一篇博文中介绍过,Step Functions 能够使用易于构建的可视化工作流,大规模协调分布式应用程序的组件和微服务。

可口可乐构建了非常简单的状态机来简化业务逻辑并降低成本。您的状态机也可以同样简单,还可以利用其他 Step Function 功能,例如顺序执行和并行执行,以及做出决策和选择备用状态的能力。可口可乐状态机如下图所示:

FirstStateSecondState 状态 (Task 状态) 会调用相应的 Lambda 函数,同时 Step Functions 会实施 90 秒的延迟 (Wait 状态)。这种修改可以简化逻辑并降低成本。下图说明了这些功能是如何结合在一起的:

下一步工作
首战告捷让他们进一步调研了无服务器计算,并打算在其他项目中进行应用。Patrick 告诉我,他们已经看到了工作效率的大幅提高,开发人员也很开心。开发人员不用再等待服务器进行预置,借用 Jeff 的话来说,他们现在可以释放创造力,追寻梦想。他们希望使用 Step Functions 改善应用程序的扩展能力、功能和可靠性,这已远远超出最初的可口可乐 Vending Pass 方面的用途。例如,可口可乐已使用 Lambda、Step Functions 和 API Gateway 构建了无服务器解决方案,用于向他们的食品服务合作伙伴发布营养信息。

Patrick 和他的团队现在正在试验机器学习和人工智能。他们构建了一个原型应用程序,用于分析 Instagram 的照片流,并提取品味和风味方面的趋势。这个应用程序是一天就构建完成的快速原型,利用了 LambdaAmazon DynamoDBAmazon API GatewayAmazon Rekognition,用 Patrick 的话来说,这是一个“巨大的成功,将发挥重要作用”。

为了更快地构建无服务器应用程序,开发团队已在无服务器应用程序框架的基础上创建了内部 CI/CD 参考架构。这种架构包括无服务器导览,以及一些用于访问内部服务和资产的样板文件代码。Patrick 告诉我,他们使用这种模型可以轻松地将有前景的项目从“一人一电脑”扩展到整个开发团队。

Patrick 将参加 AWS re:Invent,在我的同事 Tim Bray 之后发表演说。要亲眼目睹他们的风采,请参加 SRV306 – 狂野状态机!客户如何使用 AWS Step Functions

Jeff

Amazon Linux AMI 2017.09 现已推出

我很高兴地宣布,Amazon Linux AMI 的最新版本 (2017.09) 现可供所有 AWS 区域中当前一代的所有 EC2 实例使用。此 AMI 包含受支持和维护的 Linux 映像,该映象旨在为 EC2 上运行的应用程序提供稳定、安全和高性能的环境。

易于升级
只需运行以下两条命令然后重启,就可将现有实例升级:

$ sudo yum clean all
$ sudo yum update

好处多多
此 AMI 包含许多新功能,其中有很多都是应客户要求而添加的。总结如下:

Kernel 4.9.51 – 此内核以 4.9 稳定内核系列为基础,包括 ENA 1.3.0 驱动程序,还支持 TCP 瓶颈带宽和 RTT (BBR)。请阅读我的文章 Elastic Network Adapter – Amazon EC2 高性能网络接口,了解有关 ENA 的更多内容。要了解如何启用 BBR,请阅读发行说明

Amazon SSM 代理 – Amazon SSM 代理现已默认安装。也就是说,现在您可以使用 EC2 Run Command 在您的实例上配置并运行脚本,而无需进行其他设置。要了解更多内容,请阅读使用 Systems Manager Run Command 执行命令使用 EC2 Run Command 在不使用 SSH 访问的情况下大规模地管理实例

Python 3.6 – 现已包含 Python 最新版本,还可通过 virtualenvalternatives 进行管理。您可以使用如下方法安装 Python 3.6:

$ sudo yum install python36 python36-virtualenv python36-pip

Ruby 2.4 – 现已提供 Ruby 2.4 系列最新版本。安装方法如下:

$ sudo yum install ruby24

OpenSSL – 此 AMI 目前使用 OpenSSL 1.0.2k

HTTP/2 – 此 AMI 的 httpd24nginxcurl 程序包现已支持 HTTP/2 协议。

关系数据库 – 现已推出 Postgres 9.6MySQL 5.7,安装方法如下:

$ sudo yum install postgresql96
$ sudo yum install mysql57

OpenMPIOpenMPI 程序包现已由 1.6.4 升级到 2.1.1。已推出 OpenMPI 兼容包,可用于构建及运行较旧的 OpenMPI 应用程序。

更多 – 更新的其他程序包包括 Squid 3.5Nginx 1.12Tomcat 8.5GCC 6.4

立即启动
您现在就可以使用此 AMI 在所有 AWS 区域启动 EC2 实例。它适用于由 EBS 提供支持的实例和由实例存储提供支持的实例,还支持 HVM 和 PV 模式。

Jeff

新增 – 停止和恢复 EC2 竞价型实例上的工作负载

EC2 竞价型实例可让您以高达按需费率 90% 的折扣访问备用 EC2 计算容量。从能够请求特定数量的特定大小实例开始,我们通过支持竞价型队列Auto Scaling 竞价型队列,让竞价型实例变得更加有用和灵活,从而允许您保持任何所需级别的计算容量。

EC2 用户很早就能够在保持 EBS 卷的挂载状态的情况下停止正在运行的实例,这让应用程序能够在实例再次开始运行时自动从它们中断的地方重新开始。

停止和恢复竞价型实例
今天,我们正在整合这两个重要功能,允许您设置竞价出价和竞价队列,以便在没有等于或低于您的出价的容量可用时,通过停止 (而不是终止) 实例进行响应。挂载到已停止实例的 EBS 卷保持不变,EBS 支持的根卷也保持不变。当有容量可用时,实例将会启动,并且可以继续进行,而无需花时间配置应用程序、设置 EBS 卷、下载数据、加入网络域等。

许多 AWS 客户已经增强了他们的应用程序来创建和利用检查点,这增加了一些弹性,并获得了在此过程中利用 EC2 的启动/停止功能的能力。这些客户现在可以在竞价型实例上运行这些应用程序,平均节约 70-90% 的成本。

当实例停止时,您可以修改 EBS 优化、用户数据、Ramdisk ID 和终止时删除属性。已停止的竞价型实例不会产生任何计算时间费用;挂载的 EBS 卷的空间按通常费率收费。

以下是创建竞价出价或竞价型队列并指定使用停止/开始的方法:

需知信息
此功能现已推出,您可以立即在提供竞价型实例的所有 AWS 区域中开始使用此功能。它旨在与 EC2 实例和 EBS 卷新的按秒计费功能结合使用,并具有远远超过竞价型实例提供的成本节约的潜力。

EBS 卷始终存在于特定可用区 (AZ) 内。因此,指定特定可用区的竞价请求和竞价型队列请求将始终在该可用区中重新启动。

与有可能跨越各种实例类型的竞价型队列一起使用此功能时,应小心谨慎。由于队列的构成可能会随时间而变化,因此您需要注意账户对 IP 地址和 EBS 卷的限制。

我期待听到关于这个功能,您想到了新的和富有创意的用途。如果您原本认为您的应用程序不适合使用竞价型实例,或者处理中断所需的开销太高,则是时候再看一眼了!

Jeff

新功能 – EC2 实例和 EBS 卷的每秒计费功能

在过去,如果您需要使用计算能力,则需要购买或租用服务器。当我们在 2006 年推出 EC2 时,使用一个实例一个小时只需支付一小时的费用是头条新闻。即付即用模式激励我们的客户思考开发、测试和运行所有类型的应用程序的新方法。

如今,AWS Lambda 等服务证明我们可以在短时间内完成大量有用的工作。我们的许多客户都在设计适用于 EC2 的应用程序,以便能够在更短的时间内 (有时仅为几分钟) 充分利用大量实例。

EC2 和 EBS 的每秒计费
于 10 月 2 日开始生效,以按需、预留和竞价形式发布的 Linux 实例的使用将按 1 秒的增量计费。同样,EBS 卷的预置存储也将按 1 秒的增量计费。

每秒计费功能也适用于 Amazon EMRAWS Batch

Amazon EMR – 我们的客户增加了其 EMR 群集的容量以更快地获得结果。借助适用于群集中的 EC2 实例的每秒计费功能,添加节点要比以往任何时候都更经济高效。

AWS Batch – 我们的客户运行的许多批处理作业在 1 小时内即可完成。AWS Batch 已启动和终止竞价型实例;利用每秒计费功能,批处理将变得更划算。

Elastic GPUsElastic GPUs 的使用按秒计费,最少1分钟。

Provisioned IOPS – io1 EBS 卷的 Provisioned IOPS 按秒计费。

我们的一些更精明的客户已构建系统,通过在管理其游戏、广告技术或 3D 渲染队列时战略性地选择最有利的目标实例来从 EC2 中获得最大价值。每秒计费功能消除了这种额外的实例管理层的需要,并实现了所有客户和所有工作负载的成本节省。

虽然这将导致许多工作负载的价格降低(您知道我们喜欢降价),但我认为这并不是此改变的最重要方面。我相信,这种改变将激励您进行创新并以新的方式思考您的受计算限制的问题。您如何利用这一点来增强对持续集成的支持?这是否能改变您为开发和测试工作负载预置瞬态环境的方式?您的分析、批处理和 3D 渲染将会怎么样?

云计算的许多优势之一是,在您需要时预置或取消预置资源的弹性特性。通过对使用量每秒计费,我们使客户能够提高其弹性、节省资金,并且客户将被定位以利用计算中的持续改进。

需知信息
此更改在所有 AWS 区域中都是有效的,并且将于 10 月 2 日开始生效,适用于新发布的或已经运行的所有 Linux 实例。每秒计费功能目前不适用于运行 Microsoft Windows 或 Linux 发行版的实例,后者已按小时单独计费。每个实例均最少有 1 分钟计费。

列表价格和竞价市场价格仍按每小时列出,但计费单位下调至秒,预留实例使用量也按秒计算(您可以在 1 个小时内启动、使用和终止多个实例并获得所有实例的预留实例优势)。此外,账单将以十进制格式显示次数,如下所示:

AWS Marketplace 中的区域专用费、EBS 快照和产品仍按小时计费。

Jeff

新增 – 适用于 Windows 的 Amazon EC2 Elastic GPU

作者:Randall | 原文链接

今天,我们高兴地宣布,适用于 Windows 的 Amazon EC2 Elastic GPU 正式推出。Elastic GPU 是一种 GPU 资源,可以挂载到 Amazon Elastic Compute Cloud (EC2) 实例来提升应用程序的图形性能。Elastic GPU 提供 medium (1GB)、large (2GB)、xlarge (4GB) 和 2xlarge (8GB) 几种大小,可以作为 G3 或 G2 等 GPU 实例类型 (用于 OpenGL 3.3 应用程序) 的成本更低的替代方案。您可以将 Elastic GPU 用于多种实例类型,灵活地为应用程序选择适当的计算、内存和存储资源,使之达到平衡。您现在就可以在 us-east-1 和 us-east-2 区域预配置 Elastic GPU。

对于 eg1.medium,Elastic GPU 的起始价仅为每小时 0.05 USD,即一小时五美分。如果我们将该 Elastic GPU 挂载到 t2.medium (0.065 USD/小时),一个使用 GPU 的实例每小时的总花费不到 12 美分。以前,最便宜的图形工作站 (G2/3 级) 的成本是每小时 76 美分。由此可见,新服务将使运行特定图形工作负载的成本降低 80% 以上。

何时应当使用 Elastic GPU?

Elastic GPU 最适合需要少量或间歇性附加 GPU 能力来实现图形加速和支持 OpenGL 的应用程序。Elastic GPU 支持 OpenGL 3.3 及更低版本的 API 标准,并且扩展的 API 支持不久也将推出。

Elastic GPU 并非实例的硬件部分。它们通过您子网中的 Elastic GPU 网络接口挂载到实例上,当您启动使用 Elastic GPU 的实例时,便会创建这么一个网络接口。下图显示了 Elastic GPU 是如何挂载的。

因为 Elastic GPU 是通过网络挂载的,所以必须预配置一个有足够网络带宽的实例来支持您的应用程序,这一点很重要。而确保实例安全组允许端口 2007 上的流量也同样重要。

任何可以使用 OpenGL API 的应用程序都可以利用 Elastic GPU,因此 Blender、Google Earth、SIEMENS SolidEdge 等都可以使用 Elastic GPU 来运行。甚至包括坎巴拉太空计划 (Kerbal Space Program)!

好了,现在我们知道了什么时候使用 Elastic GPU 及其工作原理,下面我们来启动一个实例并使用一个 Elastic GPU。

使用 Elastic GPU

首先,导航到 EC2 控制台并单击“Launch Instance”。接下来,选择一个 Windows AMI,如“Microsoft Windows Server 2016 Base”。然后,选择一个实例类型。确保选择“Elastic GPU”部分并分配一个 eg1.medium (1GB) Elastic GPU。

我们还将在高级详细信息部分包含一些用户数据。我们将编写一个简短的 PowerShell 脚本来下载并安装 Elastic GPU 软件。

<powershell>
Start-Transcript -Path "C:\egpu_install.log" -Append
(new-object net.webclient).DownloadFile('http://ec2-elasticgpus.s3-website-us-east-1.amazonaws.com/latest','C:\egpu.msi')
Start-Process "msiexec.exe" -Wait -ArgumentList "/i C:\egpu.msi /qn /L*v C:\egpu_msi_install.log"
[Environment]::SetEnvironmentVariable("Path",$env:Path + ";C:\Program Files\Amazon\EC2ElasticGPUs\manager\",[EnvironmentVariableTarget]::Machine)
Restart-Computer -Force
</powershell>

该软件将所有 OpenGL API 调用都发送到挂载的 Elastic GPU。

接下来,我们将仔细检查,以确保我的安全组已对 VPC 开放了 TCP 端口 2007,这样 Elastic GPU 才能与我的实例连接。最后,我们单击启动,等待实例和 Elastic GPU 完成预配置。完成这项工作最好的方法是创建一个可以挂载到该实例的单独的 SG。

您可以观看下面有关启动过程的动画。

或者,我们也可以通过 AWS CLI 使用如下的简短调用来进行启动:

$aws ec2 run-instances --elastic-gpu-specification Type=eg1.2xlarge \
--image-id ami-1a2b3c4d \
--subnet subnet-11223344 \
--instance-type r4.large \
--security-groups "default" "elasticgpu-sg"

然后,按照此处的 Elastic GPU 软件安装说明操作。

现在,通过查看任务栏中 Elastic GPU 的状态,可以看出 Elastic GPU 在正常运转并且已挂载。

我们欢迎您对该服务提出任何反馈意见,您可以单击 GPU 状态框左下角的反馈链接,让我们了解您使用 Elastic GPU 的体验。

Elastic GPU 演示

好了,我们已预配置了实例并挂载了 Elastic GPU。我在 AWS 的队友希望我谈谈可以运行哪些令人惊奇的精彩 3D 应用程序,但当我了解到 Elastic GPU 之后,我首先想到的就是坎巴拉太空计划 (KSP),因此我准备用它进行一次简短测试。毕竟,如果您不能将试飞员 Jebediah Kerman 送入太空,还要这套软件做什么呢?我下载了 KSP 并添加了发射参数 -force-opengl ,以确保我们将使用 OpenGL 进行渲染。下面您会看到我在建造太空船方面糟糕的尝试 – 过去我的表现可要好很多。考虑到我们使用的网络采用的是有损耗的远程桌面协议,情况还算顺利。

我本来想展示一张火箭发射的照片,但它甚至还没离开地面就意外地迅速解体了。我只好从头再来。

在此期间,我可以检查我的 Amazon CloudWatch 指标,看看在我玩游戏的这一小段时间里使用了多少 GPU 内存。

合作伙伴、定价和文档

为了继续为我们的客户打造出色体验,我们的 3D 软件合作伙伴 (如 ANSYS 和 Siemens) 正打算在 Elastic GPU 上利用 OpenGL API,目前他们正在认证 Elastic GPU 是否适合其软件。您可在此处了解有关我们的合作伙伴关系的更多信息。

可在此处找到有关 Elastic GPU 定价方面的信息。可在此处找到更多文档。

现在,我要失陪了,我还有几艘虚拟火箭要造。

Randall

新增 – 通过 IP 地址在 AWS 和本地资源间实现应用程序负载均衡

作者:Jeff Barr / 原文链接

去年,我介绍了有关新型 AWS 应用程序负载均衡器的信息,并展示了如何针对 EC2 实例以及在容器中运行的微服务,用它进行第 7 层 (应用程序) 路由。

在向 AWS 迁移的这个漫长过程中,有些客户会构建混合应用程序。这些客户告诉我们,他们希望使用单个应用程序负载均衡器,在现有本地资源以及 AWS 云中运行的新资源组合中分配流量。其他客户则希望将流量分配到分散在两个或多个 Virtual Private Cloud (VPC) 中的 Web 或数据库服务器中,在同一实例上托管 IP 地址不同但端口号相同的多项服务,并为不支持服务器名称指示 (SNI) 的客户端提供基于 IP 的虚拟托管支持。还有一些客户则希望在同一实例上 (或许是在容器内) 托管某项服务的多个实例,同时使用多个界面和安全组来实施精细访问控制。

这些情况会出现在各种混合、迁移、灾难恢复和本地使用情形及场景中。

路由到 IP 地址
应用程序负载均衡器现在可以将流量直接路由到 IP 地址,以满足这些使用情形。这些地址可以与 ALB 位于同一 VPC 中、位于同一区域中的对等 VPC 中、位于与 VPC 连接的 EC2 实例上 (通过 ClassicLink),或者位于 VPN 连接或 AWS Direct Connect 连接另一端的本地资源上。

应用程序负载均衡器已将目标分成了目标组。在今天发布的版本中,每个目标组现在都有一个目标类型属性:

instance – 和以前一样,目标通过 EC2 实例 ID 进行注册。

ip – 将目标注册为 IP 地址。您可以对负载均衡器 VPC 内的目标使用来自负载均衡器 VPC CIDR 的任何 IPv4 地址,对负载均衡器 VPC 之外的目标 (包括对等 VPC、EC2-Classic,和可通过 Direct Connect 或 VPN 访问的本地目标) 使用 RFC 1918 范围 (10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16) 或 RFC 6598 范围 (100.64.0.0/10) 内的任何 IPv4 地址。

每个目标组都有负载均衡器和运行状况检查配置,并一如既往地将指标发布到 CloudWatch。

假设您正处于将应用程序迁移到 AWS 的过渡阶段,或者希望使用 AWS 通过 EC2 实例来扩充本地资源,并需要将应用程序流量分配到 AWS 和本地资源中,则可以将所有资源 (AWS 和本地) 注册到同一个目标组并将该目标组与负载均衡器相关联。或者,您也可以使用两个负载均衡器在 AWS 和本地资源中实现基于 DNS 的加权负载均衡,即一个负载均衡器用于 AWS,另一个负载均衡器用于本地资源。如果应用程序 A 的后端位于 VPC 中,而应用程序 B 的后端位于本地,在这种情况下您就可以将每个应用程序的后端放在不同的目标组中,并使用基于内容的路由将流量路由到每个目标组。

创建目标组
接下来,我将介绍如何在创建应用程序负载均衡器的过程中创建目标组,从而将流量发送到一些 IP 地址。输入一个名称 (ip-target-1),并将 ip 选为目标类型:

然后输入 IP 地址目标。此类地址可以来自托管负载均衡器的 VPC:

也可以是上述某个私有范围 (适用于位于托管负载均衡器的 VPC 之外的目标) 内的其他私有 IP 地址:

检查设置并创建负载均衡器之后,只要指定的 IP 地址通过运行状况检查,系统便会向其发送流量。每个负载均衡器最多可以包含 1000 个目标。

我可以随时检查目标组并编辑目标集:

如您所见,在我抓取这个屏幕截图时其中一个目标的运行状况不佳 (这是故意设计的)。每个目标组的指标都会发布到 CloudWatch;我可以在控制台中查看这些指标,还可以创建 CloudWatch 警报:

现已推出
此功能现已在所有 AWS 区域推出,您可以立即开始使用。

Jeff

新工具 – AWS SAM Local (Beta 版) – 在本地构建和测试无服务器应用程序

今天,我们将发布一款新工具 — SAM Local (Beta 版)。使用这款工具,您可以轻松在本地构建和测试无服务器应用程序。在本文中,我们将使用 SAM Local 快速构建、调试并部署一款应用程序,该应用程序允许我们通过对终端节点运行 curl 命令给 Tabs 或 Spaces 投票。AWS 去年推出了无服务器应用程序模式 (SAM),让开发人员能够更轻松地部署无服务器应用程序。如果您还不熟悉 SAM,请阅读我的同事 Orr 发布的一篇优秀文章,其中详细介绍了如何使用 SAM,读完该文章大约需要 5 分钟。SAM 的核心是基于 AWS CloudFormation 的强大开源规范,它可轻松将您的无服务器基础设施保持为代码并提供可爱的标识。

SAM Local 吸收了 SAM 的全部精华并将它们应用到您的本地计算机中。

有多种安装 SAM Local 的方法,但最简便的方法是通过 NPM。通过运行 npm install -g aws-sam-local 命令可以快速安装,但如果您希望获得最新版本,始终可以直接从来源安装: go get github.com/awslabs/aws-sam-local (这将创建一个名为 aws-sam-local 而非 sam 的二进制文件)。

我想要投票,因此我们来编写一款简单的 SAM 应用程序,将票投给 Spaces 而不是 Tabs。我们将使用非常简单但功能强大的 API Gateway 架构来处理 Lambda 函数,并将结果存储在 DynamoDB 中。最终,用户应能够对 API 运行 curl 命令 curl https://SOMEURL/ -d '{"vote": "spaces"}' 并返回票数。

我们首先来编写一个简单的 SAM template.yaml:

AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
  VotesTable:
    Type: "AWS::Serverless::SimpleTable"
  VoteSpacesTabs:
    Type: "AWS::Serverless::Function"
    Properties:
      Runtime: python3.6
      Handler: lambda_function.lambda_handler
      Policies: AmazonDynamoDBFullAccess
      Environment:
        Variables:
          TABLE_NAME: !Ref VotesTable
      Events:
        Vote:
          Type: Api
          Properties:
            Path: /
            Method: post

我们创建一个 [dynamo_i] 表,并通过一个环境变量向我们的 Lambda 函数公开该表,该环境变量名为 TABLE_NAME

为了测试此模板是否有效,我继续调用 sam validate 确保我没有打错字。该命令返回 Valid! ,接下来我们继续处理 Lambda 函数。

import os
import os
import json
import boto3
votes_table = boto3.resource('dynamodb').Table(os.getenv('TABLE_NAME'))

def lambda_handler(event, context):
    print(event)
    if event['httpMethod'] == 'GET':
        resp = votes_table.scan()
        return {'body': json.dumps({item['id']: int(item['votes']) for item in resp['Items']})}
    elif event['httpMethod'] == 'POST':
        try:
            body = json.loads(event['body'])
        except:
            return {'statusCode': 400, 'body': 'malformed json input'}
        if 'vote' not in body:
            return {'statusCode': 400, 'body': 'missing vote in request body'}
        if body['vote'] not in ['spaces', 'tabs']:
            return {'statusCode': 400, 'body': 'vote value must be "spaces" or "tabs"'}

        resp = votes_table.update_item(
            Key={'id': body['vote']},
            UpdateExpression='ADD votes :incr',
            ExpressionAttributeValues={':incr': 1},
            ReturnValues='ALL_NEW'
        )
        return {'body': "{} now has {} votes".format(body['vote'], resp['Attributes']['votes'])}

我们在本地测试一下这个函数。我需要创建一个真实的 DynamoDB 数据库进行演示,并且需要通过环境变量 TABLE_NAME提供该数据库的名称。我可以使用 env.json 文件来执行该操作,也可以直接在命令行中传递它。首先,我可以通过调用
$ echo '{"httpMethod": "POST", "body": "{\"vote\": \"spaces\"}"}' |\
TABLE_NAME="vote-spaces-tabs" sam local invoke "VoteSpacesTabs"

来测试 Lambda 函数,它返回 Spaces 的票数,因此从理论上讲,函数内容全都正确无误。用键盘输入上述全部内容比较费劲,但我可以使用 sam local generate-event api 生成示例事件,并将该事件传递到本地调用。最简单的方式是在本地运行我们的 API。让我们运行: sam local start-api。接下来,我可以对我的本地终端节点运行 curl 命令进行测试。
我将运行命令 $ curl -d '{"vote": "tabs"}' http://127.0.0.1:3000/ ,该命令返回:“tabs now has 12 votes”。当然,第一次尝试编写此函数的效果并不完美。我编辑并保存了几次。热重载的其中一个优点是我可以随意更改函数,而不必执行任何额外的操作来测试新函数。这大大简化了迭代开发。

假设我们不希望通过网络访问真正的 DynamoDB 数据库。我们应该怎么做?我们可以下载 DynamoDB Local,并通过运行如下命令启动它: java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb。然后,我们可以在 Lambda 函数中使用 AWS_SAM_LOCAL 环境变量,以决定其行为方式。我们来稍微修改一下函数:

import os
import json
import boto3
if os.getenv("AWS_SAM_LOCAL"):
    votes_table = boto3.resource(
        'dynamodb',
        endpoint_url="http://docker.for.mac.localhost:8000/"
    ).Table("spaces-tabs-votes")
else:
    votes_table = boto3.resource('dynamodb').Table(os.getenv('TABLE_NAME'))

这样,我们就使用本地终端节点连接到本地数据库,这让在没有 WiFi 的环境下工作变得更轻松。

SAM Local 还支持交互调试!在 Java 和 Node.js 中,我只需传递 -d 标记和一个端口,即可立即启用调试程序。在 Python 中,我可以使用诸如 import epdb; epdb.serve() 之类的库并通过库进行连接。然后,我们可以调用 sam local invoke -d 8080 "VoteSpacesTabs" ,我们的函数将暂停执行,等待您逐步完成调试程序。

好的,我想我们已经准备就绪,现在开始部署吧!

首先,我将调用 sam package 命令 (该命令只是 aws cloudformation package 的别名),然后我将使用该命令的结果来运行 sam deploy命令。

$ sam package --template-file template.yaml --s3-bucket MYAWESOMEBUCKET --output-template-file package.yaml
Uploading to 144e47a4a08f8338faae894afe7563c3  90570 / 90570.0  (100.00%)
Successfully packaged artifacts and wrote output template to file package.yaml.
Execute the following command to deploy the packaged template
aws cloudformation deploy --template-file package.yaml --stack-name 
$ sam deploy --template-file package.yaml --stack-name VoteForSpaces --capabilities CAPABILITY_IAM
Waiting for changeset to be created..
Waiting for stack create/update to complete
Successfully created/updated stack - VoteForSpaces

这将转到我们的 API:

我将跳到生产阶段,并添加一些速率限制,以防你们过度投票,但另一方面,我们已经完成了本地工作并将它部署到云中,而这并不复杂。我非常享受第一次部署就成功的状态!

现在,您可以投票并实时查看结果了!http://spaces-or-tabs.s3-website-us-east-1.amazonaws.com/

我们希望 SAM Local 能够简化无服务器应用的测试、调试和部署。我们提供了 CONTRIBUTING.md 指南,并欢迎你们提交提取请求。请 @ 我们,让我们知道您构建的超酷应用程序。您可以查看我们的新增功能文章以及此处在线提供的文档。

Randall