Site logo
Authors
  • avatar Nguyễn Đức Xinh
    Name
    Nguyễn Đức Xinh
    Twitter
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ặc app.js hoặc package.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:

  1. Tạo 1 Ứng dụng trên Elastic Beanstalk. Bạn có thể vào AWS Console để xem

Elastic Beanstalk Application

  1. Tạo file .gitignore trong thư mục sample-001 của bạn
# Elastic Beanstalk Files
.elasticbeanstalk/*
!.elasticbeanstalk/*.cfg.yml
!.elasticbeanstalk/*.global.yml
  1. 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.

  1. 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.

Demo EB app

Demo EB app

Demo EB app

Demo EB app

Ec2 instances

Demo EB app

Source code sẽ được lưu trữ trên S3.

Demo EB app

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.

Demo EB app

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.

Demo EB app

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.

  1. 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
  1. 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

  1. 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.
  2. 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.
  3. 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.