Học AWS Từ Số 0: Hướng dẫn tạo EC2 Instance và triển khai Golang App với CI/CD

10 tháng 04, 2025 - 85 lượt xem

Giới thiệu:

Amazon EC2 là dịch vụ cung cấp máy chủ ảo mạnh mẽ và linh hoạt trên nền tảng AWS, cho phép người dùng dễ dàng triển khai ứng dụng. Bài viết này hướng dẫn chi tiết cách khởi tạo một EC2 instance, cài đặt môi trường để chạy ứng dụng Golang, và tích hợp quy trình CI/CD đơn giản sử dụng GitHub Actions – giúp tự động hóa việc triển khai mỗi khi cập nhật mã nguồn.

1. Tạo EC2 Instance

  1. Truy cập AWS Console
    Truy cập AWS Console, trên thanh tìm kiếm gõ EC2 và chọn EC2.
Tìm kiếm EC2
Tìm kiếm EC2
  1. Khởi tạo Instance
    Chọn Launch Instance.
Launch Instance
Launch Instance
  1. Cấu hình Instance

    • Nhập tên server, ví dụ: helloAWS.
    • Chọn hệ điều hành: Ubuntu (hoặc Amazon Linux).
    Chọn hệ điều hành
    Chọn hệ điều hành
  2. Tạo SSH Key

    • Ở mục Key pair (login), chọn Create key pair.
    • Name: my-key (tùy chọn).
    • File format: .pem (dành cho Linux/macOS).
    • Tải file .pem về máy để đăng nhập vào server sau này.
    Tạo SSH Key pair
    Tạo SSH Key pair
  3. Cấu hình tường lửa (Security Group)

    • Chọn Security Group > Create security group.

    • Tên: my-security-group.

    • Mô tả: my-security-group.

    • Thêm 2 rule trong Inbound Security Group Rules:

      Rule 1 – Cho phép SSH (để login EC2)

      • Type: SSH
      • Port range: 22
      • Source: 0.0.0.0/0
      • Description: Allow SSH from anywhere

      Rule 2 – Cho phép HTTP (để truy cập web)

      • Type: HTTP
      • Port range: 8080
      • Source: 0.0.0.0/0
      • Description: Allow HTTP from anywhere
    Set Rules cho phép SSH login và Http truy cập trang web
    Set Rules cho phép SSH login và Http truy cập trang web
  4. Khởi chạy Instance
    Nhấn Launch instance.

    • Đợi vài phút để EC2 sẵn sàng.
    • Sao chép Public IPv4 address để sử dụng cho SSH và truy cập web sau này.
  5. Kiểm tra Instance
    Quay lại EC2 Dashboard, chọn instance vừa tạo và sao chép Public IPv4 address.


2. Đăng nhập vào Server từ Terminal

  1. Sử dụng SSH để đăng nhập
    Từ file .pem đã tải, chạy các lệnh sau:

    chmod 400 my-key.pem
    ssh -i "my-key.pem" ubuntu@<EC2-Public-IP>
    

    Lưu ý:

    • Với Ubuntu, user mặc định là ubuntu.
    • Với Amazon Linux 2, user mặc định là ec2-user.
  2. Cài đặt môi trường Go
    Chạy các lệnh sau để cài đặt Go:

    sudo apt update && sudo apt upgrade -y
    sudo apt install golang-go -y
    go version  # Kiểm tra version của Go
    

3. Tạo Golang App và Gắn CI/CD vào EC2

3.1 Tạo Golang App

  1. Tạo thư mục project trên máy local

    mkdir hello-aws
    cd hello-aws
    
  2. Tạo file main.go

    touch main.go
    
  3. Nội dung file main.go

    package main
    
    import (
        "fmt"
        "net/http"
    )
    
    func main() {
        http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
            fmt.Fprintf(w, "Hello AWS from Golang!")
        })
    
        fmt.Println("Server is running on port 8080...")
        http.ListenAndServe(":8080", nil)
    }
    
  4. Tạo và đẩy code lên GitHub

    git init
    git add .
    git commit -m "Initial commit"
    git branch -M main
    git remote add origin <repo-url>
    git push -u origin main
    

3.2 Thêm Secrets vào GitHub Repository

Thêm các Secrets sau vào repo GitHub:

  • EC2_HOST: Public IPv4 address của EC2.
  • EC2_USER: ubuntu (hoặc ec2-user nếu dùng Amazon Linux).
  • EC2_KEY: Nội dung của file .pem.

3.3 Tạo Workflow File cho CI/CD

  1. Tạo file workflow

    touch .github/workflows/main.yml
    
  2. Nội dung file main.yml

    name: Deploy to AWS EC2
    
    on:
      push:
        branches:
          - main
    
    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout code
            uses: actions/checkout@v3
    
          - name: Set up Go
            uses: actions/setup-go@v3
            with:
              go-version: '1.21'
    
          - name: Build Go app
            run: |
              GOOS=linux GOARCH=amd64 go build -o hello-aws main.go
              echo "EC2_HOST: $EC2_HOST"
              echo "EC2_USER: $EC2_USER"
              echo "EC2_KEY length: ${#EC2_KEY}"
    
          - name: Deploy to EC2
            env:
              EC2_HOST: ${{ secrets.EC2_HOST }}
              EC2_USER: ${{ secrets.EC2_USER }}
              EC2_KEY: ${{ secrets.EC2_KEY }}
            run: |
              echo "$EC2_KEY" > private_key.pem
              chmod 400 private_key.pem
              ssh -o StrictHostKeyChecking=no -i private_key.pem $EC2_USER@$EC2_HOST << 'EOF'
                pkill -f hello-aws || true
                rm -f /home/ubuntu/hello-aws
              EOF
              scp -i private_key.pem hello-aws $EC2_USER@$EC2_HOST:/home/ubuntu/
              ssh -i private_key.pem $EC2_USER@$EC2_HOST << 'EOF'
                chmod +x /home/ubuntu/hello-aws
                nohup /home/ubuntu/hello-aws > app.log 2>&1 &
              EOF
    
  3. Đẩy code và trigger workflow

    git add .
    git commit -m "deploy to EC2"
    git push origin main
    

4. Kiểm tra Kết quả

  1. Truy cập ứng dụng
    Chạy lệnh sau để kiểm tra:

    curl http://<EC2-Public-IP>:8080
    
  2. Kết quả mong đợi
    Nếu thấy dòng chữ "Hello AWS from Golang!", bạn đã triển khai thành công!

    Kết quả
    Kết quả

Kết luận:

Với hướng dẫn thực hành cụ thể, bài viết giúp người học nắm bắt quy trình triển khai một ứng dụng backend đơn giản lên EC2 và thiết lập CI/CD cơ bản. Đây là bước quan trọng để hiểu rõ cách làm việc với môi trường thực tế, và là nền tảng cần thiết để tiếp cận các giải pháp triển khai chuyên nghiệp hơn trong tương lai.

Bình luận

avatar
Lê Minh Vương 2025-04-10 10:30:00.102738 +0000 UTC

Bài viết rất hữu ích. Cảm ơn bạn đã chia sẻ

 

Nguyễn Công Mạnh
Nguyễn Công Mạnh 2025-04-10 11:38:09.604939 +0000 UTC

  🫶 🫶 🫶 Cảm ơn bạn đã quan tâm!

Avatar
* Vui lòng trước khi bình luận.
Ảnh đại diện
  +2 Thích
+2