前言
以下的教學將手把手帶著大家把Nodejs應用程式部屬到AWS Elastic Beanstalk上面, 文章若有不清楚的地方也歡迎大家在文章底下留言反應以下教學將會使用到
aws cli
,以及 awseb cli
首先, 安裝CLI工具
apt-get update
apt-get install python-pip
apt-get install awscli
apt-get install awsebcli
設定CLI工具
aws configure
工具的設定好之後, 接下來要帶著大家在Elastic Beanstalk上面建立以下資源
1. 建立Application
首先在Elastic Beanstalk建立應用程式基本資料, 我們可以在這邊給應用程式一個名子, 以及相關描述
appname="andytestawseb12345"
aws elasticbeanstalk create-application \
--application-name $appname \
--description "my application"
2. 建立Application version
在這邊可以任意地定義部屬的應用程式版本
appver="dev"
aws elasticbeanstalk create-application-version \
--application-name $appname \
--version-label $appver
{
"ApplicationVersion": {
"ApplicationName": "andytestawseb12345",
"Status": "UNPROCESSED",
"VersionLabel": "dev",
"ApplicationVersionArn": "arn:aws:elasticbeanstalk:us-east-2:900616790362:applicationversion/andytestawseb12345/dev",
"DateCreated": "2019-07-20T12:38:04.503Z",
"DateUpdated": "2019-07-20T12:38:04.503Z",
"SourceBundle": {
"S3Bucket": "elasticbeanstalk-us-east-2",
"S3Key": "GenericSampleApplication"
}
}
}
3. 建立Configuration Template
在AWS portal上有個頁面可以用來設定部屬的相關環境, 如EC2的instance種類, 以及將要部屬的instance數量 ,,,等等如下而Portal上的操作可以簡化成以下的指令
cfgName="t2vmcfg"
aws elasticbeanstalk create-configuration-template \
--application-name $appname \
--template-name $cfgName \
--solution-stack-name "64bit Amazon Linux 2018.03 v4.9.2 running Node.js" \
--option-settings \
"ResourceName=AWSEBAutoScalingGroup,Namespace=aws:autoscaling:asg,OptionName=MinSize,Value=2" \
"Namespace=aws:autoscaling:launchconfiguration,OptionName=InstanceType,Value=t2.micro"
{
"ApplicationName": "andytestawseb12345",
"PlatformArn": "arn:aws:elasticbeanstalk:us-east-2::platform/Node.js running on 64bit Amazon Linux/4.9.2",
"TemplateName": "t2vmcfg",
"DateCreated": "2019-07-20T12:42:05Z",
"DateUpdated": "2019-07-20T12:42:05Z",
"SolutionStackName": "64bit Amazon Linux 2018.03 v4.9.2 running Node.js"
}
4. 建立Environment
當app基本資料還有部屬的相關環境設定都建置完後, 接下來就是執行以下指令, 將部屬環境建起來aws elasticbeanstalk create-environment \
--cname-prefix $appname \
--application-name $appname \
--template-name $cfgName \
--version-label $appver \
--environment-name $appname \
--option-settings Namespace="aws:autoscaling:launchconfiguration",OptionName="IamInstanceProfile",Value="aws-elasticbeanstalk-ec2-role"
輸出結果
{
"ApplicationName": "andytestawseb12345",
"EnvironmentName": "andytestawseb12345",
"VersionLabel": "dev",
"Status": "Launching",
"EnvironmentArn": "arn:aws:elasticbeanstalk:us-east-2:900616790362:environment/andytestawseb12345/andytestawseb12345",
"PlatformArn": "arn:aws:elasticbeanstalk:us-east-2::platform/Node.js running on 64bit Amazon Linux/4.9.2",
"SolutionStackName": "64bit Amazon Linux 2018.03 v4.9.2 running Node.js",
"EnvironmentId": "e-rp3dadug9x",
"CNAME": "andytestawseb12345.us-east-2.elasticbeanstalk.com",
"Tier": {
"Version": "1.0",
"Type": "Standard",
"Name": "WebServer"
},
"Health": "Grey",
"DateUpdated": "2019-07-20T12:47:04.633Z",
"DateCreated": "2019-07-20T12:47:04.633Z"
}
這個指令會花一段時間大概3~5分鐘去建背後所需的資源, 在AWS portal 上可以看到建立中的狀態, 當它轉為綠燈時表示建立完成
或是使用指令來看新環境狀態是否Ready
aws elasticbeanstalk describe-environments --environment-names $appname
成功建立之後可以連上去看看結果(如下所示)
當雲端上的資源建立好之後, 就可以開始寫程式然後部屬到上面去嘍, 接下來請大家找一個乾淨的資料夾進行以下的步驟
1. 建立一個 server.js
把以下的程式碼複製到 server.js
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World! andy');
});
app.listen(process.env.PORT || 3000 , function () {
console.log('Example app listening on port 3000!');
});
2. 初始化環境
git init
echo node_modules > .gitignore
npm init --yes
npm install --save express
為了避免等等執行awseb cli出現錯誤訊息, 請大家將程式碼加入版控
git add -A
git commit -m 'first commit'
eb init $appname
最後部屬程式
eb deploy
測試
eb open
結論
要在AWS Elastic Beanstalk上部屬一個Node.js應用程式其實非常的簡單, 因為相關的資源建置比如EC2, Load Balancer, Auto Scaling Group, Cloudwatch 等等,,,都在建立Elastic Beanstalk的時候時一併建立了, 除此之外, 透過CIL工具還, 透過CIL工具還可以將整個部屬的步驟做到CI\CD流程當中, 達到自動化的目的Ref:
https://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/environments-create-awscli.html
https://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/eb3-init.html
https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/create-configuration-template.html
https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/describe-environments.html
留言
張貼留言