使用AWS Elastic Beanstalk和新遗物部署可扩展应用程序

有许多部署Web应用程序的选项。但是,部署可扩展的Web应用程序可以带来一些独特的复杂性。您可以通过将基础设施放在AWS上的基础设施中来解决一些这些复杂性。但是对于弹性豆章,您可以获得一个完整的可扩展解决方案,而无需自己配置所有组件。

可扩展的Web应用程序能够自动提出额外的资源,而不是需要从人类的干预。这种类型的自动编程需要一个公平的基础设施 - 可以采取宝贵的时间配置的东西。强大的可扩展基础架构应包括应用程序服务器,数据库服务器,负载均衡器,日志聚合,防火墙,监控和警报。没有自动化,几乎您的基础架构的每个组件都需要更新以使其了解新资源。带有弹性Beanstalk - 包含强大的基础架构的所有组件 - 自动处理资源的创建和拆除。换句话说,你可以拥有你的蛋糕,也可以吃它。

Elastic Beanstalk不是AWS的单独技术堆栈。实际上,它将传统的组件从EC2,S3,RDS和CloudWatch带到完全可扩展的基础架构中。因此,如果您的应用程序已在AWS上运行,则可能会利用Elastic Beanstalk的Orchestration和Scaling系统。Elastic Beanstalk支持在Linux上运行的Java,Python,PHP和Ruby运行的应用程序,或在Windows Server上运行的IIS。它还支持MySQL,Oracle和Windows SQL Server中的数据库。由于您的应用程序在EC2实例上运行,因此可以安装其他软件包以支持您的技术堆栈,如MEMCACHED和REDIS。为您的应用程序添加新遗物也很简单。由于我们只需使用标准的AWS组件,因此您需要进行任何特殊更改,以便启动和运行。

在这个例子中,我们将在Michael Hartl设置Rails教程示例应用程序在山语乘客上运行。在开始之前,你需要弹性Beanstalk CLI工具配置和正确配置。

配置应用程序堆栈
首先,初始化应用程序堆栈。在此步骤中,选择您将在托管应用程序的位置。

[Sourcecode语言=“Bash”]
eb init美元
[/源代码]

验证AWS凭据后,选择要部署应用程序的区域。您可以将实例部署到该区域内的多个可用区域,以提供高质量的冗余。我们将选择美国西部(俄勒冈州),选项2,举个例子:

[Sourcecode语言=“Bash”]
选择一个AWS弹性Beanstalk服务区域。
可用的服务区域是:
1)美国东部(弗吉尼亚州)
美国西部(俄勒冈州)
3)美国西部(北加利福尼亚州)
欧盟西部(爱尔兰)
亚太地区(新加坡)
6)亚太地区(东京)
7)亚太地区(悉尼)
选择:(1到7):2
[/源代码]

接下来设置应用程序名称,默认为初始化Beanstalk的目录名称。只需点击回车接受默认值:

[Sourcecode语言=“Bash”]
输入一个AWS弹性Beanstalk应用程序名称(自动生成的值是“railstutorial”):
[/源代码]

您可以为应用程序命名环境,例如开发、阶段或生产环境。我们将为本教程部署一个staging环境:

[Sourcecode语言=“Bash”]
输入一个AWS弹性Beanstalk环境名称(自动生成的值为“railstory -env”):railstory -staging
[/源代码]

现在是选择应用程序堆栈的时候了。这是一个运行在Ruby 1.9.3上的Rails 3.2应用程序。我们的应用程序将使用64位Amazon Linux实例,即选项14。下面你可以看到你的应用程序的可用堆栈选项:

[Sourcecode语言=“Bash”]
选择一个解决方案堆栈。
可用的解决方案栈有:
1) 32位Amazon Linux运行PHP 5.3
2)64位亚马逊Linux运行PHP 5.3
3)64位Windows Server 2008 R2运行IIS 7.5
4)64位Windows Server 2012运行IIS 8
5) 32位亚马逊Linux运行Tomcat 7
6) 64位亚马逊Linux运行Tomcat 7
7) 32位亚马逊Linux运行Tomcat
8)64位亚马逊Linux运行Tomcat 6
9)运行Python的32位Amazon Linux
10)运行Python的64位Amazon Linux
11)32位亚马逊Linux运行Ruby 1.8.7
12)运行Ruby 1.8.7的64位Amazon Linux
13)运行Ruby 1.9.3的32位Amazon Linux
14)运行Ruby 1.9.3的64位Amazon Linux
选择:(1到14):14
[/源代码]

我们的应用程序需要一个关系数据库,因此我们需要将RDS作为堆栈的一部分。我们从一个全新的安装开始,所以我们没有快照来恢复:

[Sourcecode语言=“Bash”]
创建RDS DB实例?[y / n]: y

创建RDS BD实例(当前值为“无快照”):
1)没有快照
2)其他快照
选择:(1 ~ 2):1
输入RDS数据库主密码:
重新输入密码以确认:
[/源代码]

通常,您会在终止整个堆栈之前备份数据。但在本例中,我们不需要备份数据,因此我们将选择“no”。

[Sourcecode语言=“Bash”]
如果终止环境,您的RDS DB实例将被删除,您将丢失数据。
创建快照?[y / n]: n
[/源代码]

启动应用程序堆栈
这就是为应用程序配置弹性Beanstalk所需要的全部内容。如果您需要更新您的选择,只需使用eb init再过一遍。现在我们只需要启动堆栈并推送我们的代码。

[Sourcecode语言=“Bash”]
eb美元开始
启动应用程序“railstutorial”。
等待环境“railtutorial -staging”启动。
2012-12-02 12:25:08 INFO createEnvironment正在启动。
......
该应用程序可在“railstutorial-staging-gcsi2pfevm.elasticbeanstalk.com”上获得。
[/源代码]

这将需要一些时间来完成,并且一旦命令完成,您的应用程序堆栈仍将启动。您可以检查您的栈的状态,查找健康:绿色

[Sourcecode语言=“Bash”]
$ eb状态-verbose
检索环境“railtutorial -staging”的状态。
URL: railstutorial-staging-gcsi2pfevm.elasticbeanstalk.com
状态:更新
健康:灰色
环境的名字:railstutorial-staging
环境ID: e-twb3pccvxz
解决方案栈:64位Amazon Linux运行Ruby 1.9.3
版本标签:GIT-C5B54C38F70ED4AFCBD3624746FB0E6B9FFFDE3D-135448131313527
日期创建:2012-12-02 12:25:09
更新日期:2012-12-02 12:48:35
描述:无

RDS数据库:AWSEBRDSDatabase | aapx7gzecu7cns.chojteloju75.us- west2.rdss.amazonaws.com:3306
数据库引擎mysql 5.5.27
分配存储:5
实例类:db.t1.micro
多阿兹:假
主用户名:Ebroot
创造时间:2012-12-02 12:30:13
DB实例状态:available
[/源代码]

一旦应用程序的运行状况变为绿色,您就具备了部署代码所需的一切条件。您现在可以访问应用程序的URL来找到示例AWS应用程序。

配置数据库以使用RDS
您的应用程序几乎可以部署了,首先您需要更改数据库配置以使用RDS实例。繁重的工作由我们负责,其中大多数数据库配置存储在环境变量中。对于我们的Rails应用,你只需要你的配置/形式文件包括以下内容:

(源代码里的语言=“ruby”)
生产:
适配器:mysql2
编码:UTF8.
数据库:<= env ['rds_db_name']>
用户名:<= ENV[' RDS_USERNAME '] >
密码:<= ENV[' RDS_PASSWORD '] >
主机:<= env ['rds_hostname']>
port: <= ENV[' RDS_PORT '] >
[/源代码]

RDS目前支持MySQL,Oracle和MS SQL Server。在我们的应用程序中,我们正在使用MySQL,因此我们需要包含mysql2宝石在我们的宝石上,做包安装

部署应用程序代码
要部署应用程序,我们只需要推动我们的堆栈:

[Sourcecode语言=“Bash”]
git aws.push美元
[/源代码]

对于Rails应用程序,弹性Beanstalk工具会自动运行迁移,并通过资产管道编译我们的资产。应用程序将需要在推送后重新启动,因此您可以使用EB状态再次监视重启,直到运行状况恢复为绿色。当你恢复绿色后,你应该能够访问你的应用程序的URL,并看到你的代码运行。

为HTTPS配置弹性Beanstalk
我们的应用程序使用HTTPS保护我们的用户免受窥探。强烈建议您的站点的所有部分都使用HTTPS服务(不仅仅是注册/登录部分)。在Elastic Beanstalk上设置HTTPS需要两个步骤。首先,创建并上传SSL证书,然后配置Elastic Beanstalk以使用您的证书。

对于生产应用程序,您应该使用从信誉良好的证书颁发机构购买的证书。对于我们的示例应用程序,我们使用自签名证书(当使用自签名证书时,浏览器将显示证书警告,因此在生产环境中永远不应该使用它们)。

我们将使用OpenSSL来生成证书。首先,我们需要一个私钥:

[Sourcecode语言=“Bash”]
$ openssl genrsa 1024> privateKey.pem
[/源代码]

接下来我们使用我们的私钥来生成一个证书签名请求:

[Sourcecode语言=“Bash”]
$ openssl req -new -key privateKey.pem -out csr.pem
[/源代码]

系统将提示您完成证书详细信息。回答每个问题以完成请求。然后我们生成自签名证书:

[Sourcecode语言=“Bash”]
$ openssl x509 -req -days 365-in csr.pem -signkey privateKey.pem -out server.crt
[/源代码]

您现在有了一个自签名证书和私钥,我们将把它们上传到AWS身份管理服务。你需要我CLI工具安装并配置后才能继续。通过IAM CLI上传证书和私钥:

[Sourcecode语言=“Bash”]
$ iam-servercertupload -b server.crt -k privateKey.pem -s RailStutorial
[/源代码]

尽管该命令不会向提示符返回任何内容,但应该上传所有内容。现在你需要获取证书的唯一标识符:

[Sourcecode语言=“Bash”]
iam-servercertlistbypath美元
攻击:aws:我::YOURACCOUNTNUM:服务器证书/ railsTutorial
[/源代码]

要配置Elastic Beanstalk以使用HTTPS,您需要这样做编辑配置行动菜单。

编辑配置

负载均衡器选项卡并设置HTTPS侦听器端口到443.将唯一标识符从您的证书中放入SSL证书编号场地。

负载平衡器配置

点击应用更改一旦您的应用程序堆栈重新启动,您就可以通过HTTPS访问您的应用程序。

为您的应用程序添加新遗物
向应用程序添加New Relic只需安装代理并将配置文件添加到代码库即可。对于Rails,我们只添加newrelic_rpmgem和配置在配置/ newrelic.yml

如果您使用AWS,您可以免费获得新的遗物标准。只是注册一个账户并按照说明下载代理和配置文件。在几分钟内使用你的应用程序,你会看到性能指标在你的新Relic仪表盘。

ckelly@newrelic.com'

查看贴子

有兴趣为New Relic博客写作吗?亚搏体育登入网给我们发一份建议书!!