Moving on-premise macOS build to AWS

Bài tóm tắt Grammarly 2021 2. Tăng trưởng Độ khó: Trung bình

Grammarly · 2021 · 2. Tăng trưởng · Độ khó: Trung bình — bài gốc

Bối cảnh

  • Hạ tầng Grammarly nằm trên AWS từ lâu, trừ một chỗ: build iOS/macOS, vì Apple bắt phải build trên phần cứng Apple. Họ có một dàn máy Apple đặt tại văn phòng.
  • Làm việc từ xa (2020–2021) làm lộ hai vấn đề: không scale (số máy cố định; mua máy giữa lúc phong toả rất khó, rồi phải cài đặt và cấu hình tay) và hiệu năng (engineer ở San Francisco phải VPN vào máy ở văn phòng Kyiv, lệch múi giờ, mạng chập chờn).
  • AWS ra EC2 Mac cuối 11/2020; đội Platform của Grammarly bắt đầu chuyển ngay lúc đó, theo họ là một trong những khách hàng đầu tiên.

Thay đổi chính

  • Chọn AWS thay vì MacStadium Orka hay MacinCloud: kỳ vọng ổn định, công cụ sẵn có (Packer cho AMI, Terraform cho tài nguyên) vẫn dùng được, cùng hệ sinh thái nên khỏi thẩm định pháp lý/compliance nhà cung cấp mới.
  • Đặc điểm EC2 Mac cần biết (6/2021): chạy bare metal 1:1 trên một Mac mini trong Dedicated Host; từ lúc bật tới SSH được mất 5–7 phút; sau khi huỷ instance, host mất 60–120 phút để xoá dữ liệu, trong lúc đó không bật lại được; mặc định chỉ 3 Dedicated Host mac1.metal mỗi region; không có Auto Scaling; gắn EBS khi đang chạy phải reboot mới thấy; chỉ có ở một số AZ.
  • Tự động hoá cấu hình: Ansible cài phần mềm (Homebrew, launchd, osx_defaults, Xcode từ .xip kiểm chữ ký), kèm bước tự resize container APFS vì macOS không tự nới theo kích thước EBS; Packer tạo AMI (tăng timeout vì instance khởi động chậm).
  • Cấu hình lúc khởi động bằng EC2 macOS Init (daemon chạy user data theo nhóm ưu tiên): đăng ký instance làm GitLab Runner, cài và đăng ký trình quét lỗ hổng, hẹn reboot để runner chạy trong phiên người dùng.
  • Cấp phát: Terraform AWS provider chưa hỗ trợ Dedicated Host, nên nhúng template CloudFormation trong Terraform (theo họ là cách tạm, sẽ bỏ khi provider hỗ trợ).

Kết quả (theo Grammarly)

  • Dựng build server nhanh, mạng tốt hơn (bỏ VPN), phần mềm và tài nguyên chuẩn hoá, scale ngang build server theo số lượng cần. Hướng tiếp: cho team tự khai báo gói phần mềm khi xin instance.

Vì sao

Bài học cho SWE

  • Đo thời gian vòng đời của loại máy mới (khởi động, dọn host) trước khi thiết kế co giãn; với EC2 Mac 2021, co giãn nhanh là không thực tế.
  • Runner CI tự đăng ký lúc khởi động thì thay máy không cần thao tác tay.
  • Trộn hai công cụ IaC là nợ có chủ đích; ghi rõ điều kiện để trả.

Liên quan