Ý 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.jarsudo vim /etc/systemd/system/library.serviceInsert 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.servicesudo nano library.servicesudo systemctl daemon-reloadsudo systemctl enable library.servicesudo systemctl start library.servicesudo systemctl status library.service -lsudo systemctl stop library.service