この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
AWS Elastic Beanstalk for Node.js が出たので、express で作ったアプリケーションをデプロイしてみました。
事前準備
- AWS Elastic Beanstalk Command Line Tool をダウンロードしてパスを通します。
http://aws.amazon.com/code/6752709412171743 - Git をインストールします。
1.6.6 以降が必要です。 - node.js と express をインストールします。
http://nodejs.org/※
http://expressjs.com/
※ 先日、stable v0.10.0 が出ましたが、Beanstalk の Node.js のバージョンは、0.8.18 なので 0.8系で行いました。
express アプリケーションの作成
先ずは、express を使ってサンプルのアプリケーションを作成します。
$ express beanstalk-sample
create : beanstalk-sample
create : beanstalk-sample/package.json
create : beanstalk-sample/app.js
create : beanstalk-sample/public
create : beanstalk-sample/public/javascripts
create : beanstalk-sample/public/images
create : beanstalk-sample/public/stylesheets
create : beanstalk-sample/public/stylesheets/style.css
create : beanstalk-sample/routes
create : beanstalk-sample/routes/index.js
create : beanstalk-sample/routes/user.js
create : beanstalk-sample/views
create : beanstalk-sample/views/layout.jade
create : beanstalk-sample/views/index.jade
install dependencies:
$ cd beanstalk-sample && npm install
run the app:
$ node app
依存モジュールをインストールします。
$ cd beanstalk-sample
$ npm install
ローカルで確認するために、npm start。
$ npm start
npm WARN package.json application-name@0.0.1 No README.md file found!
> application-name@0.0.1 start /Users/yamatoyo/Documents/example/beanstalk-sample
> node app
Express server listening on port 3000
起動されることを確認します。
Elastic Beanstalk の環境をつくる
最初に git リポジトリを作成します。
$ git init
Initialized empty Git repository in /Users/xxx/Documents/beanstalk-sample/.git/
リポジトリに追加しないファイルを .gitignore に追加します。
$ cat > .gitignore <<EOT
node_modules/
.gitignore
.elasticbeanstalk/
EOT
[/code]
<p>eb init で環境を作成します。インタラクティブに行えます。<br/>
最初に、Access Key と Secret Access Key の入力が求められます。</p>
$ eb init
To get your AWS Access Key ID and Secret Access Key,
visit "https://aws-portal.amazon.com/gp/aws/securityCredentials".
Enter your AWS Access Key ID (current value is "xxxxx*****xxxxx"):
Enter your AWS Secret Access Key (current value is "xxxxx*****xxxxx"):
リージョンは、Tokyoリージョンを選択しました。
Select an AWS Elastic Beanstalk service region.
Available service regions are:
1) US East (Virginia)
2) US West (Oregon)
3) US West (North California)
4) EU West (Ireland)
5) Asia Pacific (Singapore)
6) Asia Pacific (Tokyo)
7) Asia Pacific (Sydney)
8) South America (Sao Paulo)
Select: (1 to 8): 6
アプリケーション名と環境名は auto-generated のものを使用しました。
Enter an AWS Elastic Beanstalk application name (auto-generated value is "beanstalk-example"):
Enter an AWS Elastic Beanstalk environment name (auto-generated value is "beanstalk-example-env"):
solution stack は、64bit の Amazon Linux を選択しました。
Select a solution stack.
Available solution stacks are:
1) 32bit Amazon Linux running PHP 5.4
2) 64bit Amazon Linux running PHP 5.4
3) 32bit Amazon Linux running PHP 5.3
4) 64bit Amazon Linux running PHP 5.3
5) 32bit Amazon Linux running Node.js
6) 64bit Amazon Linux running Node.js
7) 64bit Windows Server 2008 R2 running IIS 7.5
8) 64bit Windows Server 2012 running IIS 8
9) 32bit Amazon Linux running Tomcat 7
10) 64bit Amazon Linux running Tomcat 7
11) 32bit Amazon Linux running Tomcat 6
12) 64bit Amazon Linux running Tomcat 6
13) 32bit Amazon Linux running Python
14) 64bit Amazon Linux running Python
15) 32bit Amazon Linux running Ruby 1.8.7
16) 64bit Amazon Linux running Ruby 1.8.7
17) 32bit Amazon Linux running Ruby 1.9.3
18) 64bit Amazon Linux running Ruby 1.9.3
Select: (1 to 18): 6
RDS は no を選択しました。
Create an RDS DB Instance? [y/n]: n
アプリケーションの開始
eb start コマンドで、Beanstalk上のアプリケーションを開始できます。
$ eb start
Starting application "beanstalk-sample".
Waiting for environment "beanstalk-sample-env" to launch.
2013-03-13 16:01:51INFOcreateEnvironment is starting.
2013-03-13 16:01:56INFOUsing elasticbeanstalk-ap-northeast-1-077645620084 as Amazon S3 storage bucket for environment data.
2013-03-13 16:02:40INFOCreated load balancer named: awseb-e-s-AWSEBLoa-9PIDIBHZ8XPY
2013-03-13 16:02:51INFOCreated security group named: awseb-e-s3pmwsxbq8-stack-AWSEBSecurityGroup-ZA85A2XQSSLF
2013-03-13 16:02:55INFOCreated Auto Scaling launch configuration named: awseb-e-s3pmwsxbq8-stack-AWSEBAutoScalingLaunchConfiguration-2CQ8MVC9DM3P
2013-03-13 16:03:56INFOWaiting for EC2 instances to launch. This may take a few minutes.
2013-03-13 16:03:56INFOCreated Auto Scaling group named: awseb-e-s3pmwsxbq8-stack-AWSEBAutoScalingGroup-17SFWQNFJCO79
2013-03-13 16:04:52INFOCreated Auto Scaling group policy named: arn:aws:autoscaling:ap-northeast-1:077645620084:scalingPolicy:64c6ecab-df01-439a-bda8-fd098958e4d4:autoScalingGroupName/awseb-e-s3pmwsxbq8-stack-AWSEBAutoScalingGroup-17SFWQNFJCO79:policyName/awseb-e-s3pmwsxbq8-stack-AWSEBAutoScalingScaleDownPolicy-FI44ZUPH7B5E
2013-03-13 16:04:55INFOCreated CloudWatch alarm named: awseb-e-s3pmwsxbq8-stack-AWSEBCloudwatchAlarmLow-11UQ8TKKEBO91
2013-03-13 16:04:58INFOCreated Auto Scaling group policy named: arn:aws:autoscaling:ap-northeast-1:077645620084:scalingPolicy:764d3171-e239-463b-a7b9-21aed802e105:autoScalingGroupName/awseb-e-s3pmwsxbq8-stack-AWSEBAutoScalingGroup-17SFWQNFJCO79:policyName/awseb-e-s3pmwsxbq8-stack-AWSEBAutoScalingScaleUpPolicy-IY9CLIN1XF12
2013-03-13 16:05:00INFOCreated CloudWatch alarm named: awseb-e-s3pmwsxbq8-stack-AWSEBCloudwatchAlarmHigh-6Q8V01UFMV8T
ELBやAuto Scaling Group、CloudWatch alarm などが自動で生成されました。
処理が終わったら、eb statusコマンドで、作成された情報を確認します。
$ eb status --verbose
Retrieving status of environment "beanstalk-sample-env".
URL: beanstalk-sample-env-xxxxxx.elasticbeanstalk.com
Status: Ready
Health: Green
Environment Name:beanstalk-sample-env
Environment ID:e-s3pmwsxbq8
Solution Stack:64bit Amazon Linux running Node.js
Version Label:Sample Application
Date Created:2013-03-13 16:01:52
Date Updated:2013-03-13 16:08:08
Description:None
ブラウザで上記のURL http:// beanstalk-sample-env-xxxxxx.elasticbeanstalk.com を開くと、Congratulations の画面が開きます。
Beanstalk にデプロイする
Beanstalk にデプロイするには、aws.push コマンドを使用します。
$ git add .
$ git commit -m 'Initial commit.'
[master (root-commit) 7f5e89a] Initial commit.
7 files changed, 83 insertions(+)
create mode 100644 app.js
create mode 100644 package.json
create mode 100644 public/stylesheets/style.css
create mode 100644 routes/index.js
create mode 100644 routes/user.js
create mode 100644 views/index.jade
create mode 100644 views/layout.jade
$ git aws.push
Counting objects: 13, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (11/11), done.
Writing objects: 100% (13/13), 1.57 KiB, done.
Total 13 (delta 0), reused 0 (delta 0)
remote:
To https://xxxx….
* [new branch] HEAD -> master
push 後すぐは、Status が Updating になっています。
$ eb status --verbose
Retrieving status of environment "beanstalk-sample-env".
URL: beanstalk-sample-env-xxxxxx.elasticbeanstalk.com
Status: Updating
Health: Grey
Environment Name:beanstalk-sample-env
Environment ID:x-xxxxxxxxx
Solution Stack:64bit Amazon Linux running Node.js
Version Label:git-xxxxxx
Date Created:2013-03-13 16:01:52
Date Updated:2013-03-13 16:11:27
Description:None
少しまって、再度確認すると、Status が Ready になりました。
$ eb status --verbose
Retrieving status of environment "beanstalk-sample-env".
URL: beanstalk-sample-env-xxxxxx.elasticbeanstalk.com
Status: Ready
Health: Green
Environment Name:beanstalk-sample-env
Environment ID:x-xxxxxxxxx
Solution Stack:64bit Amazon Linux running Node.js
Version Label:git-xxxxxx
Date Created:2013-03-13 16:01:52
Date Updated:2013-03-13 16:13:35
Description:None
ブラウザで http:// beanstalk-sample-env-xxxxxx.elasticbeanstalk.com を開くと、きちんとデプロイされています。
コンソールを確認してみる
Management Console では、イベントログや、
バージョンなどが確認できます。
アプリケーションの削除
確認が終わったので、環境とアプリケーションを削除します。
$ eb stop
Terminate environment? [y/n]: y
Stopping environment "beanstalk-sample-env". This may take a few minutes.
2013-03-14 01:14:24 INFO terminateEnvironment is starting.
2013-03-14 01:14:39 INFO Deleted CloudWatch alarm named: awseb-e-s3pmwsxbq8-stack-AWSEBCloudwatchAlarmHigh-6Q8V01UFMV8T
2013-03-14 01:14:42 INFO Deleted Auto Scaling group policy named:・・・・
・・・・・
Stop of environment "beanstalk-sample-env" has completed.
$ eb delete
Delete application? [y/n]: y
Deleted application "beanstalk-sample".
まとめ
今回 Beanstalk を初めて触ってみましたが、コマンドラインで簡単に操作出来る点、特にgit形式でデプロイを簡単に行える部分が気に入りました。
他にもAmazon RDSやElasticacheとの連携も容易に行うことができるようなので、機会があれば次回試してみます。