- Authors
- Name
- Nguyễn Đức Xinh
- Published on
- Published on
Hướng dẫn khởi tạo và triển khai 1 ứng dụng NodeJS đơn giản với AWS Elastic Beanstalk CLI
AWS Elastic Beanstalk CLI (EB CLI) là một công cụ command line mạnh mẽ giúp đơn giản hóa việc quản lý và triển khai ứng dụng trên AWS Elastic Beanstalk. Hướng dẫn này sẽ giúp bạn khởi tạo và triển khai 1 ứng dụng đơn giản với EB CLI.
AWS Elastic Beanstalk CLI là gì?
AWS Elastic Beanstalk CLI là một giao diện dòng lệnh cho phép các nhà phát triển tương tác với AWS Elastic Beanstalk. Với EB CLI, bạn có thể:
- Tạo, cập nhật và triển khai ứng dụng.
- Quản lý môi trường ứng dụng.
- Giám sát sức khỏe và nhật ký ứng dụng. Việc sử dụng EB CLI giúp đơn giản hóa quy trình làm việc, giúp bạn triển khai và quản lý ứng dụng trực tiếp từ terminal.
Yêu Cầu
Trước tiên, hãy đảm bảo hệ thống của bạn đáp ứng các yêu cầu sau:
- Cài đặt EB CLI: Cần có EB CLI để thực hiện.
- Tài khoản AWS : Cần có tài khoản AWS hợp lệ để cấu hình và triển khai ứng dụng.
Kiểm Tra EB CLI
Hãy đảm bảo rằng EB CLI đã được cài đặt bằng cách chạy lệnh sau:
eb --version
# EB CLI 3.21.0 (Python 3.13.1 (main, Dec 3 2024, 17:59:52) [Clang 16.0.0 (clang-1600.0.26.4)])
Nếu cài đặt thành công, bạn sẽ thấy phiên bản EB CLI đã cài.
Nếu chưa cài đặt EB CLI, bạn có thể xem hướng dẫn cài đặt từ Hướng Dẫn Cài Đặt AWS Elastic Beanstalk CLI
Tạo và Cấu Hình Ứng Dụng Của Bạn
1. Chuẩn Bị Ứng Dụng
Đảm bảo rằng ứng dụng của bạn đã sẵn sàng để triển khai. Ví dụ, nếu bạn làm việc với ứng dụng Node.js, thư mục dự án của bạn cần có tệp package.json
, và với ứng dụng Python, cần có tệp requirements.txt
.
Ở đây mình sẽ tạo 1 ứng dụng NodeJS
đơn giản:
- Tạo Folder ứng dụng
mkdir sample-001
cd sample-001
- Tạo file server.js
Lưu ý nếu bạn chọn platform là NodeJS thì bạn cần phải tạo file:
server.js
hoặcapp.js
hoặcpackage.json
để không bị lỗi.
vim server.js
// server.js
const http = require('node:http');
const hostname = '127.0.0.1';
const port = 8080;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello Elastic Beanstalk!\n');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
2. Khởi Tạo Elastic Beanstalk:
Di chuyển đến thư mục ứng dụng của bạn và khởi tạo Elastic Beanstalk bằng cách chạy:
cd sample-001
eb init
# Hoặc
eb init --profile <your-profile> --region ap-northeast-1 <app-name>
Lệnh eb init
sẽ yêu cầu bạn chọn khu vực ứng dụng, nền tảng (Node.js, Python, v.v.) và các cấu hình khác.
- Select a default region: Đặt khu vực mặc định cho việc triển khai
- Enter Application Name: Nhập tên ứng dụng. Sau khi enter, ứng dụng sẽ được tạo.
- Select a platform: Chọn ngôn ngữ lập trình và nền tảng. Bạn có thể chọn .NET Core, .NET, Docker, Go, Java, Node.js, PHP, Packer, Python, Ruby, Tomcat.
- Select a platform branch: Tương ứng với platform sẽ có các lựa chọn phiên bản cho bạn chọn. Ví dụ ở trên mình chọn platform là Nodejs thì sẽ có các option như
- Node.js 20 running on 64bit Amazon Linux 2023
- Node.js 18 running on 64bit Amazon Linux 2023
- Node.js 18 running on 64bit Amazon Linux 2
- Do you want to set up SSH for your instances
- Select a keypair: Chọn keypair có sẵn hoặc tạo mới keypair dùng để kết nối ssh tới server.
3. Kiểm tra kết quả.
Sau khi hoàn thành các prompt trên sẽ thực hiện các công việc sau:
- Tạo 1 Ứng dụng trên Elastic Beanstalk. Bạn có thể vào AWS Console để xem
- Tạo file .gitignore trong thư mục
sample-001
của bạn
# Elastic Beanstalk Files
.elasticbeanstalk/*
!.elasticbeanstalk/*.cfg.yml
!.elasticbeanstalk/*.global.yml
- Tạo file .elasticbeanstalk/config.yml trong thư mục
sample-001
của bạn
branch-defaults:
default:
environment: null
group_suffix: null
global:
application_name: sample-001
branch: null
default_ec2_keyname: xinhnd-demo
default_platform: Node.js 22
default_region: ap-northeast-1
include_git_submodules: true
instance_profile: null
platform_name: null
platform_version: null
profile: xinhnd-demo
repository: null
sc: null
workspace_type: Application
Nếu bạn muốn thay đổi config thì có thể thay đổi nội dung trong file: .elasticbeanstalk/config.yml hoặc chạy lại lệnh eb init
Tạo Môi Trường
Bây giờ, khi ứng dụng của bạn đã được khởi tạo, hãy tạo một môi trường trên Elastic Beanstalk.
- Tạo Môi Trường : Chạy lệnh sau để tạo môi trường.
eb create test-environment --enable-spot
- Thay
test-environment
bằng tên bạn muốn cho môi trường của mình. AWS sẽ tự động tạo ra các tài nguyên như EC2 instances, load balancer và nhóm auto-scaling. --enable-spot
dùng để tránh gặp lỗi:The Launch Configuration creation operation is not available in your account. Use launch templates to create configuration templates for your Auto Scaling groups
- Lệnh tạo môi trường còn nhiều option khác bạn có thể tìm hiểu và áp dụng theo nhu cầu của bạn.
Creating application version archive "app-241219_165510037311".
Uploading sample-001/app-241219_165510037311.zip to S3. This may take a while.
Upload Complete.
Environment details for: test-environment
Application name: sample-001
Region: ap-northeast-1
Deployed Version: app-241219_165510037311
Environment ID: e-wppmimmywb
Platform: arn:aws:elasticbeanstalk:ap-northeast-1::platform/Node.js 22 running on 64bit Amazon Linux 2023/6.4.0
Tier: WebServer-Standard-1.0
CNAME: UNKNOWN
Updated: 2024-12-19 09:55:14.760000+00:00
Printing Status:
2024-12-19 09:55:12 INFO createEnvironment is starting.
2024-12-19 09:55:14 INFO Using elasticbeanstalk-ap-northeast-1-xxx as Amazon S3 storage bucket for environment data.
2024-12-19 09:55:36 INFO Created security group named: sg-0db630d0b5f36722c
2024-12-19 09:55:52 INFO Created target group named: arn:aws:elasticloadbalancing:ap-northeast-1:xxx:targetgroup/awseb-AWSEB-CZA929RAUYIJ/634e7ada03e8386c
2024-12-19 09:55:52 INFO Created security group named: awseb-e-wppmimmywb-stack-AWSEBSecurityGroup-RHpwKLGoA29c
2024-12-19 09:56:22 INFO Created Auto Scaling group named: awseb-e-wppmimmywb-stack-AWSEBAutoScalingGroup-D8pAC2zGWjjF
2024-12-19 09:56:23 INFO Waiting for EC2 instances to launch. This may take a few minutes.
2024-12-19 09:56:23 INFO Created Auto Scaling group policy named: arn:aws:autoscaling:ap-northeast-1:xx:scalingPolicy:f919507e-3f8d-4984-826f-87ad46ffc4d7:autoScalingGroupName/awseb-e-wppmimmywb-stack-AWSEBAutoScalingGroup-D8pAC2zGWjjF:policyName/awseb-e-wppmimmywb-stack-AWSEBAutoScalingScaleUpPolicy-0i70NqKOuGuB
2024-12-19 09:56:23 INFO Created Auto Scaling group policy named: arn:aws:autoscaling:ap-northeast-1:xx:scalingPolicy:d7fa73e6-4bb8-4074-b3ba-564cbd163daa:autoScalingGroupName/awseb-e-wppmimmywb-stack-AWSEBAutoScalingGroup-D8pAC2zGWjjF:policyName/awseb-e-wppmimmywb-stack-AWSEBAutoScalingScaleDownPolicy-RHL5GRHXRaZ9
2024-12-19 09:56:38 INFO Created CloudWatch alarm named: awseb-e-wppmimmywb-stack-AWSEBCloudwatchAlarmHigh-2MkudqnTybol
2024-12-19 09:56:38 INFO Created CloudWatch alarm named: awseb-e-wppmimmywb-stack-AWSEBCloudwatchAlarmLow-SsB6MRStYjWU
2024-12-19 09:58:10 INFO Created load balancer named: arn:aws:elasticloadbalancing:ap-northeast-1:xx:loadbalancer/app/awseb--AWSEB-RTybRKOCG4F8/02375a6e136fbefe
2024-12-19 09:58:12 INFO Created Load Balancer listener named: arn:aws:elasticloadbalancing:ap-northeast-1:xx:listener/app/awseb--AWSEB-RTybRKOCG4F8/02375a6e136fbefe/b20331465eb7d726
2024-12-19 09:58:24 INFO Instance deployment completed successfully.
2024-12-19 09:58:55 INFO Application available at test-environment.eba-tpctzeqf.ap-northeast-1.elasticbeanstalk.com.
2024-12-19 09:58:56 INFO Successfully launched environment: test-environment
Sau khi chạy xong thì bạn có thể xem môi trường mới được tạo trên AWS Console.
Ec2 instances
Source code sẽ được lưu trữ trên S3.
Tạo ra file: .elasticbeanstalk/test-environment.env.yml
ApplicationName: sample-001
DateUpdated: 2024-12-19 10:03:22+00:00
EnvironmentName: test-environment
PlatformArn: arn:aws:elasticbeanstalk:ap-northeast-1::platform/Node.js 22 running
on 64bit Amazon Linux 2023/6.4.0
settings:
AWSEBAutoScalingScaleDownPolicy.aws:autoscaling:trigger:
LowerBreachScaleIncrement: '-1'
AWSEBAutoScalingScaleUpPolicy.aws:autoscaling:trigger:
UpperBreachScaleIncrement: '1'
AWSEBCloudwatchAlarmHigh.aws:autoscaling:trigger:
UpperThreshold: '6000000'
AWSEBCloudwatchAlarmLow.aws:autoscaling:trigger:
BreachDuration: '5'
EvaluationPeriods: '1'
LowerThreshold: '2000000'
MeasureName: NetworkOut
Period: '5'
Statistic: Average
Unit: Bytes
...
Truy Cập Ứng Dụng
Sau khi triển khai thành công, Elastic Beanstalk sẽ cung cấp cho bạn một URL để truy cập ứng dụng của mình. Để tìm URL, chạy:
eb open
Bạn cũng có thể tìm thấy URL này trong AWS Management Console dưới bảng điều khiển Elastic Beanstalk.
Triển Khai Ứng Dụng
Khi bạn có thay đổi code, hoặc thay đổi cấu hình thì bạn cần triển khai ứng dụng của bạn lên Elastic Beanstalk bằng lệnh sau:
Thử đổi code và thực hiện deploy
res.end('Hello Elastic Beanstalk - new code!\n');
eb deploy
Creating application version archive "app-241219_170320446983".
Uploading sample-001/app-241219_170320446983.zip to S3. This may take a while.
Upload Complete.
2024-12-19 10:03:22 INFO Environment update is starting.
2024-12-19 10:03:26 INFO Deploying new version to instance(s).
2024-12-19 10:03:38 INFO Instance deployment completed successfully.
2024-12-19 10:03:44 INFO New application version was deployed to running EC2 instances.
2024-12-19 10:03:44 INFO Environment update completed successfully
Lệnh này sẽ đóng gói ứng dụng của bạn và triển khai nó lên môi trường Elastic Beanstalk bạn đã tạo.
Clean up
Để xoá môi trường Elastic Beanstalk của bạn bằng EB CLI, hãy chạy lệnh sau.
eb terminate
Giám Sát và Mở Rộng Ứng Dụng
Elastic Beanstalk cung cấp các công cụ giám sát để theo dõi sức khỏe và hiệu suất của ứng dụng. Bạn có thể xem nhật ký, thiết lập cảnh báo và mở rộng ứng dụng dựa trên các chỉ số như sử dụng CPU và lưu lượng truy cập.
- Xem Nhật Ký : Bạn có thể lấy nhật ký từ môi trường của mình bằng cách:
eb logs
- Auto scaling : Elastic Beanstalk tự động mở rộng ứng dụng của bạn. Tuy nhiên, bạn có thể điều chỉnh các cài đặt mở rộng bằng cách thay đổi cấu hình môi trường của mình. Bạn cũng có thể thiết lập chính sách auto-scaling để định nghĩa các ngưỡng mở rộng lên hoặc xuống.
Các Tính Năng Nâng Cao của AWS Elastic Beanstalk
Mặc dù các bước triển khai cơ bản rất đơn giản, AWS Elastic Beanstalk cung cấp nhiều tính năng nâng cao cho các nhà phát triển và nhóm muốn kiểm soát nhiều hơn.
Tùy Chỉnh Cài Đặt Môi Trường
Elastic Beanstalk cho phép bạn tùy chỉnh các cài đặt môi trường thông qua các tệp cấu hình hoặc thông qua AWS Management Console. Các cài đặt này bao gồm:
- Cấu Hình Cơ Sở Dữ Liệu : Tích hợp với các cơ sở dữ liệu RDS như MySQL, PostgreSQL hoặc DynamoDB.
- Các Gói Phần Mềm Tùy Chỉnh : Thêm các phụ thuộc phần mềm hoặc phần mềm trung gian tùy chỉnh vào môi trường của bạn.
- Biến Môi Trường : Thiết lập các biến môi trường như khóa API, thông tin xác thực cơ sở dữ liệu, v.v.
Sử Dụng Elastic Beanstalk với Docker
Elastic Beanstalk cũng hỗ trợ Docker, cho phép bạn triển khai các ứng dụng đã được container hóa. Với Docker, bạn có thể định nghĩa môi trường ứng dụng của mình trong tệp Dockerfile
và triển khai nó lên Elastic Beanstalk bằng EB CLI.
Continuous Integration/Continuous Deployment (CI/CD)
Bạn có thể tích hợp Elastic Beanstalk với các công cụ CI/CD như AWS CodePipeline, Jenkins hoặc GitHub Actions để tự động triển khai các phiên bản ứng dụng mới. Điều này giúp cập nhật ứng dụng nhanh chóng và hiệu quả.
Best Practice Khi Sử Dụng AWS Elastic Beanstalk
- Cấu Hình Môi Trường : Giữ các tệp cấu hình của bạn (ví dụ:
ebextensions
, Dockerfiles) dưới sự kiểm soát phiên bản để theo dõi các thay đổi môi trường. - Bảo Mật : Sử dụng các vai trò IAM và chính sách để kiểm soát quyền truy cập vào các tài nguyên AWS một cách an toàn.
- Sao Lưu và Khôi Phục : Sao lưu dữ liệu ứng dụng của bạn thường xuyên bằng các dịch vụ như Amazon S3 và snapshots của RDS
Kết Luận
AWS Elastic Beanstalk là một nền tảng mạnh mẽ và linh hoạt để triển khai và quản lý các ứng dụng web trên AWS. Bằng cách làm theo bài hướng dẫn này bạn đã có thể dễ dàng triển khai ứng dụng Nodejs đến người dùng. Bạn có thể tận dụng hiệu quả Elastic Beanstalk để xây dựng và triển khai các ứng dụng có khả năng mở rộng và đáng tin cậy.