Quay lại

Hướng Dẫn Triển Khai Ứng Dụng Tự Động Bằng AWS Systems Manager Documents (SSM Documents) Chuyên mục Devops    2025-12-10    0 Lượt xem    0 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Trong bối cảnh các hệ thống backend ngày càng phức tạp, việc triển khai (deploy) thủ công qua SSH trở nên lỗi thời, mất kiểm soát và dễ tạo sự không đồng nhất giữa các môi trường. Một giải pháp hiệu quả, bảo mật và hoàn toàn tự động chính là AWS Systems Manager Documents (SSM Documents).

Trong bài viết này, chúng ta sẽ khám phá:

  • SSM Document là gì và hoạt động được như thế nào

  • Lợi ích khi sử dụng SSM cho việc deploy

  • Cách xây dựng quy trình deploy tự động container (PHP, nginx, Laravel, Node…)

  • Thực chiến viết RunShellScript để deploy backend

  • Mẹo cấu hình log, rollback và kiểm soát phiên bản

  • Best practices khi áp dụng trong môi trường Dev / Staging / Production


🔎 AWS Systems Manager Documents (SSM Documents) là gì?

SSM Documents là một thành phần quan trọng của AWS Systems Manager, cho phép bạn:

  • Chạy script trên EC2, on-premise servers hoặc hybrid servers

  • Điều khiển tài nguyên AWS một cách không cần SSH

  • Tự động hóa deploy, update, maintain, backup…

  • Quản lý hạ tầng theo tiêu chuẩn DevOps & NoOps

Một SSM Document có thể chứa nhiều bước (steps), mỗi step dùng một action:

  • aws:runShellScript – chạy shell script

  • aws:runPowerShellScript – chạy PowerShell

  • aws:downloadContent – download file

  • aws:createStack – deploy CloudFormation

  • aws:copyImage – copy AMI

  • v.v…

Tất cả được thực hiện qua SSM Agent, không cần mở port SSH.


💡 Tại sao nên sử dụng SSM Documents để deploy backend?

Một số lợi ích rõ ràng:

✔ Triển khai không cần SSH

Bảo mật hơn nhiều so với việc mở port 22 cho developer.

✔ Tự động hóa và có thể repeat 100%

Deploy mọi môi trường giống nhau – không xung đột.

✔ Audit & theo dõi log thuận tiện

Mọi lệnh chạy qua SSM đều có log, traceable, audit được.

✔ Dễ dàng rollback

Bạn chỉ cần giữ nhiều version của document.

✔ Dễ tích hợp CI/CD

SSM Document có thể trigger từ:

  • GitHub Actions

  • GitLab CI

  • AWS CodePipeline

  • GitHub Webhook

  • Hoặc bất kỳ pipeline nào


🛠 Deploy thực chiến backend container bằng SSM Document

Giả sử hệ thống backend của bạn bao gồm:

  • Container PHP (Laravel)

  • Container nginx

  • Logs cần được export

  • Pull image từ AWS ECR

  • Tự động mount logs ra host

Một mẫu SSM Document thực tế có thể như sau:

{
  "schemaVersion": "2.2",
  "description": "Deploy Backend STG",
  "mainSteps": [
    {
      "action": "aws:runShellScript",
      "name": "runShellScript",
      "inputs": {
        "runCommand": [
          "runuser -l ec2-user -c 'sh /home/ec2-user/export_logs.sh'",
          "runuser -l ec2-user -c 'docker stop php'",
          "runuser -l ec2-user -c 'docker rm php'",
          "runuser -l ec2-user -c 'docker stop nginx'",
          "runuser -l ec2-user -c 'docker rm nginx'",
          "runuser -l ec2-user -c 'docker rmi $(docker images -q)'",
          "runuser -l ec2-user -c 'aws ecr get-login-password --region ap-south-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-south-1.amazonaws.com'",
          "runuser -l ec2-user -c 'docker pull 123456789012.dkr.ecr.ap-south-1.amazonaws.com/stg_backend_nginx:1.0.1'",
          "runuser -l ec2-user -c 'docker pull 123456789012.dkr.ecr.ap-south-1.amazonaws.com/stg_backend_php:1.0.1'",
          "runuser -l ec2-user -c 'mkdir -p /home/ec2-user/php_logs'",
          "runuser -l ec2-user -c 'mkdir -p /home/ec2-user/nginx/logs'",
          "runuser -l ec2-user -c 'docker network create --driver bridge backend'",
          "runuser -l ec2-user -c 'docker run --restart unless-stopped -d --name php --network backend -e TZ=Asia/Tokyo -v /home/ec2-user/php_logs:/var/www/html/storage/logs 123456789012.dkr.ecr.ap-south-1.amazonaws.com/stg_backend_php:1.0.1'",
          "runuser -l ec2-user -c 'docker run --restart unless-stopped -d --name nginx --network backend -p 8090:80 -p 8091:443 -v /home/ec2-user/nginx/logs:/var/log/nginx 123456789012.dkr.ecr.ap-south-1.amazonaws.com/stg_backend_nginx:1.0.1'",
          "runuser -l ec2-user -c 'docker exec -i php cron'"
        ]
      }
    }
  ]
}​

🧩 Giải thích quy trình deploy

1️⃣ Export log trước khi deploy

Tránh mất dữ liệu log của container cũ.

2️⃣ Stop & remove container và old images

Dọn sạch môi trường.

3️⃣ Pull image mới từ ECR

Đảm bảo server chạy bản mới nhất từ pipeline CI/CD.

4️⃣ Tạo network riêng

Giúp php container giao tiếp với nginx container.

5️⃣ Mount logs ra host

Quan trọng nếu muốn đưa log lên CloudWatch Logs.

6️⃣ Start container mới

Ứng dụng được chạy bằng image mới.

7️⃣ Run cron hoặc migrations

Tùy hệ thống.


📡 Tự động đẩy log lên CloudWatch Logs

Nếu bạn muốn log Laravel / nginx xuất hiện trong CloudWatch:

✔ Mount log ra host

✔ CloudWatch Agent đọc log từ host

✔ Auto start khi deploy

Một đoạn config CloudWatch Agent ví dụ:

 
{
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/home/ec2-user/php_logs/*.log",
            "log_group_name": "stg-backend-php",
            "log_stream_name": "{instance_id}-php"
          },
          {
            "file_path": "/home/ec2-user/nginx/logs/*.log",
            "log_group_name": "stg-backend-nginx",
            "log_stream_name": "{instance_id}-nginx"
          }
        ]
      }
    }
  }
}

🌟 Best Practices khi dùng SSM để deploy

🔒 1. Không mở SSH cho developer

Chỉ cần SSM + IAM Role là đủ.

☁ 2. Log mọi thứ lên CloudWatch

Dễ debug – dễ audit – không mất log.

🔁 3. Mỗi lần deploy tạo một version document

Rollback cực nhanh.

🧱 4. Không viết script quá dài trong SSM Document

Tách phần script ra file .sh trên EC2, và chỉ gọi:

 
aws:runShellScript → sh /home/ec2-user/deploy.sh

🚨 5. Test trước ở STG

Đặc biệt với hệ thống nhiều container.


🎯 Kết luận

AWS Systems Manager Documents là một công cụ vô cùng mạnh mẽ giúp bạn:

  • Triển khai backend tự động

  • Quản lý server không cần SSH

  • Tối ưu hoá pipeline CI/CD

  • Giảm thiểu lỗi con người

  • Tăng sự ổn định của các môi trường Dev–Stg–Prod

Nếu bạn đang vận hành hệ thống backend chạy container (Laravel, NodeJS, Go, Java…) trên EC2, SSM Document là một giải pháp đáng cân nhắc để nâng cấp quy trình deploy của bạn.

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday