我推荐刚起步的创业公司使用 AWS Beanstalk。
大多数 Web 服务的部署方法都是一样的。除非你们的业务是给别人提供不一样的运维服务,不然没必要在部署上花费大量的时间和金钱。你们完全可以选择现成的套路来实现各种 Web 服务的部署:数据库服务器,负载均衡,子网分配,性能检测,日志上传……
而这些套路,在 AWS 上已经形成了固定的脚本,只需要你在页面上点一点就能完成上面提到的所有运维工作。这就是 Beanstalk,一个 AWS 锤炼出来的部署套路实践工具。而且,他是免费的。
创建应用
创建应用只需要两步:1, 给应用起名;2,创建环境。
这两个步骤是什么意思呢?你的每个 Web 服务叫做一个应用(英文 Application),而每个应用在开发过程中会有测试,生成等不同的环境。
所以在创建应用的时候,既要给应用起好名字,也要分配一下应用有哪些环境。
你在上图中的最左边栏就能看到这两步,顺序操作一下就能创建一个部署服务的空壳。然后我们再往里填具体的部署详情。(注意,在新环境中选择创建 Web 服务器,因为本文就是要教你部署 Web 服务)
创建环境
当你选择完「创建 Web 服务器」,AWS 会让你填写很多新环境中的细节。如上图中的红框所示,有这样6个类别需要填写,我们接下来看看每步都是什么意思。
在第一步中,我们看到这里可以选择「预定义配置」,点开一看会发现有 Ruby,Python 等语言,以及 Packer 等容器管理工具。
不难猜测,这是要选择环境中的基本配置以满足我们运行应用的需求。如果你是 Ruby 的应用,就选择 Ruby,AWS 会告诉你他给你准备的基本配置是 Ruby 2.3 和 Passenger。如果你是 Java,或者 Python,AWS 也都会有预先准备好的配置。(因为我比较熟悉 Ruby,所以选择了 Ruby)
这里还有一个应用类型,可以选择「负载均衡,AutoScaling」,或者「单一实例」。前者会帮你把应用程序部署到多台服务器中,形成一个集群;后者只帮你部署到一台服务器上。
我们第一阶段的目标是让大家看看 Beanstalk 的最小可行性套路,所以这里选择「单一实例」,可以避免混乱。但这个配置我们在后面是可以改的,所以想看 AutoScaling 的朋友不用担心。
下一步就到了「上传代码」的过程,这里有3个选项,我们选择第一个,用 AWS 已经准备好的代码来部署,这样能让我们快速的看到 Demo。其他两个选择我在下图中稍微解释一下,我们之后部署更新的时候再去使用。
然后我们点击下一步,就到了填写环境信息这个环节(见下图)。首先是给你的环境起名,然后这里有个「环境 URL」,是什么意思?他的意思是,当你部署完这个应用程序的某个环境,比如开发环境,你就可以从这个 URL 去访问你的服务了。
然后点击下一步,我们就看到 Beanstalk 让我们选择一些能够和 Beanstalk 配合使用的资源,比如 RDS(AWS 提供的数据库服务器),比如 VPC(AWS 提供的子网分配工具),为了快速 Demo,我们暂时都不选,但会在后面的补充教程中给大家看。
再点击下一步,我们就到了配置详细信息的页面。这页内容比较多,但我们只需要改3个箭头标注的地方(见下图),分别是我们的服务器类型(在 Demo 阶段选择最小的服务器,这在部署上线之后也是可以改的),用于登录服务器的密钥对,以及我们的根据类型(硬盘类型)。其他的叫留给默认吧。
然后点击下一页,我们的环境马上就要创建完成了。这一页叫做「环境标签」,更多的是写一些方便分类的记忆的文字,不涉及太多技术上的配置,大家根据自己的喜好填写,比如我写了一个标记环境的标签。
然后点击下一步,就到了一个比较重要的环节,就是配置权限。这里面比较重要的是划着红线的那两句话:
这两个需要选择的地方分别代表你想给你的服务器怎样的权限,以及你想给你在 Beanstalk 中创建的应用什么权限。权限要足够大,因为 Beanstalk 需要有权限帮你创建服务器实例,这样才能实现自动部署。但也不能太大,因为如果大到能删除用户的地步,就不安全了。不过,幸好,AWS 能帮你自动创建一个合适的权限(也就是显示着「创建新角色的部分」)。
然后点击下一步,AWS 会让你重新检查一遍填写的内容,确认无误后,点击启动。
过一段时间就会看到这样的画面,如果控制台显示有异常,可以看看下面的「近期事件」中是否报出的错误。
如果你得到的是如上图一样成功的画面,你点击环境URL(也就是图中蓝色箭头所指的位置),就能访问我们刚刚部署的 Ruby 应用,画面如下。
升级配置 —— 使用负载均衡
接下来我们看看如果升级我们的配置,让他变成使用负载均衡的服务器集群,首先我们点击最左边栏的配置:
你会发现,在上一步中我们写的所有配置项,都出现在了这里。我们首先要更改的是「扩展」这样一项内容。点击这张卡片右上角的小齿轮。
进去之后会可以修改环境内容,我们把他改成「负载均衡、Auto Scaling」:
之后点击确定,并且 AWS 会要求你再次确认。经过这样简单的点击操作,AWS 会为我们建立1个 Auto Scaling 组 和1个 负载均衡器(你可以去相关的Auto Scaling页面查看,也可以看 Beanstalk 的事件记录)。
这个时候我们再去看「配置」那一页,你会发现多了很多可以配置的内容,他们都是关于自动扩展和负载均衡的。如果你想改变他们就自己点点看,具体这些配置是什么意思,可以去看看关于负载均衡的内容。这个时候,你再去点击环境 URL,可以看看能不能访问我们更新之后的服务,如果不能,可以选择在控制台重启服务器,然后在访问。
更进一步,你采用负载均衡以后,想要配置 HTTPS 就容易多了。还是在刚才的「配置」一栏,滑动页面底部,有个叫做「负载均衡」的配置项,点击小齿轮,进入在均衡器管理页面,进行修改:
把安全侦听器端口从 OFF 改成443,然后在SSL 证书 ID 那一栏选择你想使用的证书就可以了。(如果你当前还没有证书,可以去 EC2 的控制台下面的负载均衡器那一栏中,找到上传 SSL 证书的地方)
升级配置 —— 使用数据库服务器
还是在「配置」这一栏中,滑到页面最底部,你可以看到在数据套餐下面可以选择 AWS 的 RDS 作为数据服务器。
我们这里选择「新建 RDS 数据库」来给大家 Demo。
进入新建数据库之后要填写很多配置项,对于初步使用的同学来说,比较重要的是下图中红色字的部分,我在图中解释他们是干嘛用的。如果日后发现,自己对这些配置项不满意,你可以随时到「配置」中去改。
填写完后,点击右下角的「应用」,来启动 RDS 服务器。
等到控制面板显示创建成功之后,我们就可以上传自己的代码到 Beanstalk 中运行了,具体方法,请看下一步。
部署自己的应用
之前,我们在 Beanstalk 上运行的一直是 AWS 提供的实例代码,现在我们要部署自己的应用程序,这样对于我们的工作才有意义。
我在自己的电脑上创建了一个 Ruby on Rails 应用,并且修改了一些配置,具体代码可以看 GitHub:
rails new aws-beanstalk-on-rails-example -d mysql
如果你不熟悉 Rails,可以用自己熟悉的开发语言,但请记住,如果你想使用刚刚配置好的数据库,一定要把数据库的用户名、密码和服务器地址改为环境变量中的RDS_USERNAME
,RDS_PASSWORD
和RDS_HOSTNAME
[1]。为什么是这几个环境变量呢,因为 Beanstalk 官方默认使用这几个变量名。
另外,你的应用程序中需要的可能不只是把数据库的信息存储在环境变量理解,可能还有另外一些密码也需要存储在环境变量里,比如 Rails 应用中需要使用一个叫做 SECRET_KEY_BASE 的环境变量,我们可能通过 Beanstalk 的控制台,把这个变量直接插入我们的环境。下面请再点击一次「配置」那一栏:
在「软件配置」选项卡上点击小齿轮,进入修改页面,我们在页面最下方找到新增环境变量的位置:
这样,我们的环境就都准备好了,只需要上传代码到 Beanstalk 就好了!
下面,就让我们进入最后一步,在控制面板的正中央有个「上传和部署」:
点击他,然后在上传项目的压缩文件并且给这次部署起个名字,然后点击「部署」:
如果你没有代码项目压缩文件,可以去 GitHub 上下载我准备好的文件。然后上传到这里。
点击部署之后,一切就交给 Beanstalk 了。如果不成功,或者部署之后服务无法访问,可以去「日志」这一栏下载日志,检查一下到底是哪里出了问题。如果部署成功,就可以从环境 URL 访问服务了。
总结
Beanstalk 是把其他 AWS 服务组合起来的工具,如果你不用 Beanstalk,自己组装也是一样的,只是 Beanstalk 更加的套路化(相对就损失了自由)。更进一步,如果你熟悉 CloudFormation ,可以用这个更自由的工具来组合更多的 AWS 服务,代替 Beanstalk。
如果你决定使用 Beanstalk,你需要知道,在一开始设置的所有参数,都是可以改的,所以没必要那么紧张。这也是我们教程的思路,一开始只使用 Beanstalk 中配置最少的那一部分,之后再慢慢把更多的参数调成我们想要的,这样可以避免混乱。
-
在 Ruby 中使用
ENV['MYSQL_USER']
来访问环境变量, 更多细节可以参考 AWS 的官方说明 ↩
网友评论