awsbox,一个面向 Node.js 的 PaaS 层:最新进展更新

这是我们在 Mozilla Hacks 博客上讨论 awsbox 的第二次。在第一篇文章中,我们向您简要介绍了 awsbox,它是 Node.js 节日季 文章系列的一部分。在这里,我们想向您介绍 awsbox 的一些新增功能。

简单回顾一下,awsbox 是一个基于 Amazon EC2 构建的,面向 Node.js 应用程序的极简 PaaS 层。它是一个 DIY 解决方案,允许您在几分钟内创建实例、设置 DNS、运行应用程序服务器、将新代码推送到实例,并最终销毁实例。

自从我们首次发布 awsbox 以来,它的使用量一直在稳步增长,现在每月从 npm 下载量超过 3000 次。这超出了我们最初的预期,也许我们弥合了当前可用的“基础设施”和“平台”服务之间的差距。

awsbox 的目标

awsbox 的目标是在 Amazon API 之上提供一个易于使用但可配置的抽象层,以创建您自己的 PaaS 解决方案。但是,它也应该允许您做超出 PaaS 服务所能做的事情——但只有在您想做的时候才做。

考虑到这一点,我们最近添加了一些新功能,让您可以更多地控制部署。总的来说,我们的目标是快速设置开发环境,这有助于加快开发过程,而不是用于生产部署(但这并不意味着 awsbox 不能更适合于生产部署)。

新功能

现在 Nginx 被用作您应用程序的反向代理。由于您的 Web 服务器由机器上一个非特权用户(即“app”用户)运行,我们需要一种方法来监听端口 80 或 443,并将其代理到您的应用程序。虽然过去 http-proxy(在 npm 上)出色地完成了这项工作,但我们认为 Nginx 现在和将来会更适合 awsbox。能够将配置文件放入 Nginx 意味着我们可以开始添加更多功能,例如多个 Web 服务器、多个应用程序或从多个子域提供服务。

另一个新功能是能够使用 Route53 自动将子域指向您的实例。通过围绕另一个 AWS 服务而不是一个单独的服务来聚集,意味着我们只需要担心在环境中有一组凭据。每次使用 awsbox 创建或销毁实例时,都会自动执行子域创建和删除,这有助于保持环境整洁。

我们团队中的一些成员在欧洲工作,也有一些成员在北美工作,还有一些成员在世界的另一边。我们决定将我们的实例搬到我们身边,而不是将我们的请求传送到世界的另一边到我们的实例。我们之前只在“us-east-1”区域使用的基础 AMI 现在在所有 AWS 区域都可用,包括我们的欧洲团队使用的“eu-west-1”和“ap-southeast-2”。能够在悉尼创建实例让我非常开心。 :)

随着越来越多的人不断创建、重复使用和销毁实例,我们认为能够搜索任何实例并使用任何标准进行搜索是公平的。除了能够列出所有虚拟机之外,您现在还可以通过 IP 地址、AMI、实例 ID、名称、标签或实际上 12 种不同的标准来查找它们。这使得查找您正在寻找的实例变得非常容易。

最后... 没有人喜欢比他们需要花费更多的钱,所以我们现在有了帮助确定谁启动了哪个实例的功能(这样我们就可以询问他们是否可以终止它!)。AWS_EMAIL 环境变量作为标签添加到创建时的实例中,这样我们就知道如果需要减少账单,应该跟谁交谈。

新命令

随着这些最近的架构更改,我们还添加了一些额外的命令来帮助您管理您的实例和 DNS。现在我们已经支持多区域,所以有一些与之相关的新的命令。

# lists all AWS regions for EC2
$ awsbox.js regions

# lists all regions and their availability zones
$ awsbox.js zones

我们现在还可以列出我们所有在 Route53 中的域及其子域,以及能够搜索哪些记录
指向 IP 地址

# lists all domains in Route53
$ awsbox.js listdomains

# lists all resource records in this zone
$ awsbox.js listhosts example.com

# find which subdomains/domains point to an ip address
$ awsbox.js findbyip 1.2.3.4

# delete this subdomain
$ awsbox.js deleterecord sub.example.com

为了帮助管理 AMI,现在有一个命令可以帮助您从现有实例创建 AMI,整理它,创建 AMI,然后将其复制到所有其他可用区域

# create an ami and copy to all regions
$ awsbox.js createami ami-adac0de1

最后,一些可以帮助您确定谁拥有哪个实例的命令

# search instance metadata for some text
$ awsbox.js search 1.2.3.4
$ awsbox.js search ami-adac0de1
$ awsbox.js search persona

# show meta info related to an instance
$ awsbox.js describe i-1cec001

# claim an instance as your own
$ awsbox.js claim i-b10cfa11

# list all unclaimed instances
$ awsbox.js unclaimed

所有这些都是对现有命令的补充,现在总共有 21 个命令,所有这些命令都帮助您管理自己的部署。

未来

最近 awsbox 开发出现了一次小复兴,许多人贡献了新功能。它对 Persona 团队来说是一个宝贵的工具,因为它使我们能够相当快地创建实例,非正式地或正式地进行尝试,然后以与创建它们一样快(如果速度还不够快!)的速度将其销毁。而且我们也不必对此感到内疚,因为在 IaaS 时代,按需获取服务器是常态。

我们也围绕着在 AWS 本身中使用更多服务而聚集。通过将后端 AWS API 库迁移到 AwsSum,我们现在可以与以前更多的 AWS 服务进行对话,并希望能够利用它们来帮助使开发部署更快更轻松。

但是,我们也认为 awsbox 还可以变得更好。我们对未来有一些想法,但我们也欢迎来自你们的任何想法或代码。请随时查看文档和问题,并留下您的意见。如果您有与这些想法相关的很棒的代码,那么我们很乐意审查您的 pull request——毕竟 awsbox 是开源的。

关于 Andrew Chilton

Andy 目前在 Mozilla 的身份团队中从事 Persona 工作。他热爱 Node.js、Web API、异步和 *aaS(任何服务)。他编写了 AwsSum,这是一个面向所有 AWS API 的 Node.js 库,并且也发布了 一些模块 到 npm 上。Andy 还运营着

Andrew Chilton 的更多文章...

关于 Robert Nyman [荣誉编辑]

Mozilla Hacks 的技术布道者和编辑。发表关于 HTML5、JavaScript 和开放网络的演讲和博客。Robert 坚定地相信 HTML5 和开放网络,自 1999 年以来一直在从事 Web 前端开发——在瑞典和纽约市。他还经常在 http://robertnyman.com 上写博客,热爱旅行和结识新朋友。

Robert Nyman [荣誉编辑] 的更多文章...


2 条评论

  1. Mirco Zeiss

    感谢您创建和维护 awsbox。它是一个非常棒的工具,我过去经常使用它。

    最近我发现了 Dokku - https://github.com/progrium/dokku。它是一个基于 Docker (https://www.docker.io/) 构建的工具,并且允许您像 “git push server master” 一样轻松地部署应用程序。您可以通过 docker start、docker stop 等命令管理服务器上运行的进程。Nginx 也被用作代理。它没有提供 awsbox 的所有功能,但对于快速原型设计,我如今倾向于使用 Dokku。

    我写了一篇详细的教程,指导您在 Amazon EC2 上安装和运行 Dokku 的过程 - http://mircozeiss.com/dokku-in-depth-tutorial-your-private-saas-on-amazon-ec2/。请告诉我您的想法。

    致敬,
    Mirco

    2013 年 10 月 17 日,凌晨 3:06

    1. Andrew Chilton

      哇,Dokku 看起来很棒(我们都知道 Docker 很棒)。:) 谢谢你提供教程链接,看起来很全面。

      2013 年 10 月 17 日 凌晨 04:29

本文评论已关闭。