Ý tưởng: Ta sẽ build ra file jar của app, sau đó upload file jar đó lên s3 bucket. Tiếp đó tải file jar lên ec2 instance và chạy file jar trên instance.
Tải java 17 trên instance bằng lệnh sudo yum install java-17-amazon-corretto-headless
. Sau đó check tải thành công bằng lệnh java -version
!
Để generate ra file jar của app, ta vào IDE, mở project back end, truy cập vào Maven, chuột phải vào install trong Lifecycle và chọn Run Maven Build. !
Hoàn thành tạo file jar của app, file jar vừa tạo sẽ nằm trong folder target !
Truy cập vào S3, vào bucket đã tạo, tạo folder mới tên library-app-be
. Sau khi tạo xong folder, ta upload file jar vừa tạo bằng cách kéo thả vào folder
!
Trước khi download s3 lên instance, ta cần make s3 public bằng cách thêm policy cho nó:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::demowebapp-workshop-01/*"
}
]
}
Truy cập vào file jar trên bucket và copy Object URL của nó
Ở session manager, chạy lệnh sudo wget (sudo wget https://demowebapp-workshop-01.s3.ap-southeast-1.amazonaws.com/library-app-be/library-app-be-0.0.1-SNAPSHOT.jar
) để tải file jar lên instance
Chạy lệnh java -jar library-app-be-0.0.1-SNAPSHOT.jar
để chạy app trên instance
Để có thể tạm test bằng Postman, ta có thể tạm thời gán public-route-table (mục đích để có thể sử dụng IGW) cho private-subnet-1 (subnet chứa ec2 instance)
Truy cập postman, ta có thể sử dụng Public IPv4 address hoặc Public IPv4 DNS để gọi tới các API
Để có thể giữ cho app chạy sau khi terminate session, chúng ta sẽ sử dụng nohup bằng lệnh sau nohup java -jar (ex: nohup java -jar library-app-be-0.0.1-SNAPSHOT.jar
)
Để dừng app sau khi chạy bằng nohup, ta chạy lệnh sau pkill -f 'java -jar library-app-be-0.0.1-SNAPSHOT.jar'
Nhưng ta cần phải tìm cách để app chạy tự động sau khi instance reboot, vì vậy ta sẽ sử dụng systemd để tạo service cho app (run java app as a service)
sudo chmod +x /home/ec2-user/library-app-be-0.0.1-SNAPSHOT.jar
sudo vim /etc/systemd/system/library.service
Insert the code below into your-application.service:
[Unit]
Description=Java Application as a Service
After=syslog.target
[Service]
User=ec2-user
ExecStart=ExecStart=/usr/bin/java -jar /home/ec2-user/library-app-be-0.0.1-SNAPSHOT.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
cd /etc/systemd/system/
sudo chmod 777 library.service
sudo nano library.service
sudo systemctl daemon-reload
sudo systemctl enable library.service
sudo systemctl start library.service
sudo systemctl status library.service -l
sudo systemctl stop library.service