0
0
Lập trình
TT

Ngày 53: Thiết lập Pipeline CI/CD trên AWS phần 4

Đăng vào 1 tháng trước

• 6 phút đọc

Chủ đề:

#aws#devops#cicd

Giới thiệu

Trong phần này của chuỗi bài viết về CI/CD trên AWS, chúng ta sẽ tiếp tục thiết lập và cấu hình CodeDeploy, một dịch vụ giúp triển khai ứng dụng lên EC2. Bài viết sẽ hướng dẫn bạn từng bước để tạo ra một pipeline CI/CD hoàn chỉnh, giúp tự động hóa quy trình phát triển ứng dụng.

Điều kiện tiên quyết (kiểm tra nhanh)

  • Bạn đã có một kho lưu trữ CodeCommit chứa: index.html, buildspec.yml, appspec.yml, và các script cần thiết (ví dụ, scripts/restart_nginx.sh).
  • Một instance EC2 đang chạy (khuyến nghị Amazon Linux 2), với nginx và agent CodeDeploy đã được cài đặt và chạy. Nếu agent chưa được cài đặt, hãy làm theo hướng dẫn cài đặt agent.
  • Một dự án CodeBuild xây dựng kho lưu trữ của bạn và tạo ra artifact (đảm bảo buildspec.yml chính xác).
  • Một bucket S3 trong cùng một khu vực để sử dụng làm kho lưu trữ artifact cho CodePipeline (bạn sẽ tạo cái này dưới đây).
  • Các vai trò IAM: Vai trò dịch vụ CodePipeline (cho phép CodePipeline tương tác với CodeBuild/CodeDeploy/S3), vai trò dịch vụ CodeBuild và vai trò dịch vụ CodeDeploy (hoặc sử dụng các vai trò tự động được tạo bởi console). Hướng dẫn về IAM sẽ được cung cấp dưới đây.

Phần A — Tạo ứng dụng CodeDeploy + Nhóm triển khai (qua console + CLI)

Qua Console (khuyến nghị cho lần đầu)

  1. Mở AWS Console → CodeDeploy → Applications → Tạo ứng dụng.
    • Tên: MyCodeDeployApp
    • Nền tảng tính toán: EC2/On-premises.
  2. Sau khi tạo ứng dụng, chuyển đến tab Nhóm triển khai → Tạo nhóm triển khai.
    • Tên nhóm triển khai: MyDeploymentGroup
    • Vai trò dịch vụ: chọn hoặc tạo một vai trò IAM cho phép CodeDeploy thực hiện trên các tài nguyên (console có thể tự động tạo).
    • Cấu hình môi trường: chọn cách xác định các mục tiêu EC2:
      • Thẻ EC2 (khuyến nghị) — gán thẻ cho instance EC2 của bạn, sau đó cung cấp bộ lọc thẻ ở đây; HOẶC
      • Nhóm Auto Scaling hoặc ID instance Amazon EC2.
    • Giữ các tùy chọn khác mặc định (hoặc thiết lập tùy chọn rollback/trigger theo nhu cầu) và Tạo nhóm triển khai.
  3. Bạn đã có một nhóm triển khai mà CodeDeploy có thể nhắm tới.

Qua CLI (ví dụ)

Gán thẻ cho instance của bạn trước (hoặc sử dụng ID instance). Ví dụ:

bash Copy
aws ec2 create-tags --resources i-0123456789abcdef0 --tags Key=CodeDeploy,Value=day53

Tạo nhóm triển khai (thay thế ARNs và tên):

bash Copy
aws deploy create-deployment-group \
  --application-name MyCodeDeployApp \
  --deployment-group-name MyDeploymentGroup \
  --service-role-arn arn:aws:iam::123456789012:role/CodeDeployServiceRole \
  --ec2-tag-filters Key=CodeDeploy,Value=day53,Type=KEY_AND_VALUE \
  --deployment-config-name CodeDeployDefault.OneAtATime \
  --auto-rollback-configuration enabled=true,events=DEPLOYMENT_FAILURE

Phần B — Kiểm tra appspec.yml và các script triển khai

File appspec.yml của bạn (đặt tại root kho lưu trữ) nên ánh xạ các file và định nghĩa các hook. Ví dụ về appspec.yml tối thiểu cho EC2/nginx:

yaml Copy
version: 0.0
os: linux
files:
  - source: /index.html
    destination: /usr/share/nginx/html/

hooks:
  AfterInstall:
    - location: scripts/restart_nginx.sh
      timeout: 300
      runas: root

scripts/restart_nginx.sh:

bash Copy
#!/bin/bash
sudo systemctl restart nginx

Đảm bảo rằng các script có thể thực thi (sử dụng chmod +x scripts/*.sh) và đã được đẩy lên CodeCommit. (Tham khảo AppSpec).

Phần C — Tạo bucket S3 cho artifact của CodePipeline

CodePipeline cần một bucket S3 làm kho lưu trữ artifact trong khu vực của pipeline:

bash Copy
aws s3 mb s3://my-pipeline-artifacts-123456789012 --region <your-region>

Thay thế bằng một tên bucket duy nhất.

Phần D — Tạo CodePipeline (Console — dễ nhất)

  1. Mở AWS Console → CodePipeline → Tạo pipeline.
  2. Cài đặt pipeline:
    • Tên pipeline: MyPipeline-Day53
    • Vai trò dịch vụ: Để CodePipeline tạo một vai trò dịch vụ mới (console sẽ tạo một vai trò tên như AWS-CodePipeline-Service), hoặc chỉ định ARN vai trò của bạn. (Tạo tự động qua Console là dễ nhất.)
    • Kho lưu trữ artifact: chọn bucket S3 mà bạn đã tạo.
  3. Thêm giai đoạn Nguồn:
    • Nhà cung cấp: AWS CodeCommit
    • Kho lưu trữ: chọn kho lưu trữ của bạn (ví dụ, MyDemoRepo)
    • Nhánh: main (hoặc nhánh của bạn)
  4. Thêm giai đoạn Xây dựng:
    • Nhà cung cấp: AWS CodeBuild
    • Tên dự án: chọn dự án CodeBuild mà bạn đã tạo trước đó (nó sẽ sử dụng buildspec.yml để xây dựng).
    • Đảm bảo rằng dự án CodeBuild xuất một artifact (ví dụ, BuildOutput) nếu bạn cần chuyển file cho CodeDeploy.
  5. Thêm giai đoạn Triển khai:
    • Nhà cung cấp: AWS CodeDeploy
    • Tên ứng dụng: chọn MyCodeDeployApp
    • Nhóm triển khai: chọn MyDeploymentGroup
  6. Tạo pipeline. CodePipeline sẽ bắt đầu và hiển thị các giai đoạn. Đẩy một commit vào nhánh để kích hoạt nó.

Phần E — Kiểm tra pipeline

  1. Thực hiện một thay đổi nhỏ trên index.html (ví dụ, thay đổi văn bản) và đẩy lên CodeCommit:
bash Copy
git add index.html
git commit -m "Kiểm tra pipeline - Ngày 53"
git push origin main
  1. Truy cập vào console CodePipeline và theo dõi tiến trình pipeline: Nguồn → Xây dựng → Triển khai.
    • Khi việc triển khai hoàn tất, mở IP công cộng EC2 hoặc URL của load balancer; bạn nên thấy index.html đã được cập nhật. Nếu không, hãy kiểm tra nhật ký triển khai CodeDeploy và trạng thái agent CodeDeploy trên instance EC2.

Mẹo khắc phục sự cố (các vấn đề thường gặp)

  • Pipeline thất bại tại Nguồn: kho lưu trữ/nhánh sai hoặc vai trò CodePipeline không có quyền. Kiểm tra vai trò và tên kho lưu trữ.
  • CodeBuild thất bại: kiểm tra cú pháp buildspec.yml và nhật ký xây dựng trong CodeBuild.
  • CodeDeploy thất bại: đảm bảo agent CodeDeploy đã được cài đặt và chạy trên EC2, các đường dẫn trong appspec.yml chính xác và các script có thể thực thi. Kiểm tra /var/log/aws/codedeploy-agent/codedeploy-agent.log trên instance.
  • Lỗi Quyền/Vai trò: xác nhận các vai trò dịch vụ tồn tại (vai trò CodePipeline, vai trò CodeBuild, vai trò CodeDeploy) và có các chính sách cần thiết (tạo tự động qua console giúp đơn giản hóa điều này).

Thực tiễn tốt nhất

  • Luôn kiểm tra nhật ký của CodeDeploy và CodeBuild để phát hiện lỗi kịp thời.
  • Sử dụng version control cho các file cấu hình như buildspec.ymlappspec.yml để dễ dàng quản lý và theo dõi thay đổi.

Các lỗi thường gặp

  • Thiếu quyền truy cập trong IAM cho các dịch vụ AWS.
  • Đường dẫn không chính xác trong appspec.yml dẫn đến lỗi không tìm thấy file.

Mẹo hiệu suất

  • Sử dụng các instance EC2 hiệu suất cao cho việc triển khai để giảm thiểu thời gian downtime.
  • Tối ưu hóa buildspec.yml để giảm thời gian xây dựng và triển khai.

Kết luận

Với những bước hướng dẫn trên, bạn đã có thể thiết lập một pipeline CI/CD hoàn chỉnh trên AWS, giúp tự động hóa quy trình triển khai ứng dụng. Hãy thử nghiệm và tối ưu hóa quy trình của bạn để có hiệu suất tốt nhất. Nếu bạn có bất kỳ câu hỏi nào, hãy để lại comment bên dưới hoặc tham gia cộng đồng lập trình viên để cùng thảo luận!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào