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ừ.xipkiể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
- Dàn build gắn với phần cứng vật lý ở một văn phòng là trạng thái thủ công không nhân bản được; đưa nó về AMI + code cấp phát biến việc thêm runner thành thao tác tự động (Tự động hoá vận hành và auto-remediation, CI và build ở quy mô lớn).
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
- Mercari 2026 (runner tạm trên Kubernetes) · Disney Hotstar 2020 (agent co giãn) · Grammarly 2021
- CI và build ở quy mô lớn · Tự động hoá vận hành và auto-remediation
#EC2 Mac#mac1.metal#Dedicated Host#GitLab Runner#Ansible#Packer#Terraform#CloudFormation#EC2 macOS Init#Build fleet
Được nhắc tới trong
Công ty (1)