- ไลบรารีจาก awslabs ที่ช่วยให้สามารถใช้ Amazon S3 เป็น Git remote และเซิร์ฟเวอร์ LFS ได้
- เป็น implementation ของ git remote helper สำหรับใช้ S3 เป็นเซิร์ฟเวอร์ Git แบบ serverless
- รวมถึง implementation ของ
git-lfs custom transfer ที่สามารถ push ไฟล์จัดการ LFS ไปยัง S3 bucket เดียวกันได้ด้วย
- เป็นสคริปต์ Python ทำงานได้บนเวอร์ชัน 3.9 ขึ้นไป
- ข้อมูลทั้งหมดถูกเข้ารหัสโดยค่าเริ่มต้นทั้งขณะจัดเก็บและระหว่างส่งข้อมูล และเพื่อเพิ่มชั้นความปลอดภัยสามารถใช้คีย์ KMS ที่ลูกค้าจัดการเองเพื่อเข้ารหัสข้อมูลใน S3 bucket ได้ โดยแนะนำให้ใช้ bucket key เพื่อลดค่าใช้จ่าย
- การควบคุมสิทธิ์เข้าถึง remote รับประกันได้ผ่านสิทธิ์ของ IAM โดยควบคุมได้ในระดับ bucket, prefix และคีย์ KMS
- ด้วยคุณสมบัติแบบกระจายของ
git แม้จะเกิดไม่บ่อย แต่ผู้ใช้หลายคนอาจรัน git push พร้อมกันบน branch เดียวกันได้ ในกรณีนี้ bundle หลายชุดจะถูกเก็บใน S3 และ git push ครั้งถัดไปอาจล้มเหลว หากต้องการแก้ปัญหานี้ต้องรันคำสั่ง git-remote-s3 doctor
สรุปโดย GN⁺
git-remote-s3 เป็นเครื่องมือที่มีประโยชน์ซึ่งช่วยให้ใช้ Amazon S3 เป็น Git remote และเซิร์ฟเวอร์ LFS แบบ serverless ได้
- สามารถเสริมความปลอดภัยได้ด้วยการเข้ารหัสข้อมูลและการควบคุมสิทธิ์การเข้าถึง
- ยังมีเครื่องมือสำหรับแก้ปัญหาการเขียนพร้อมกันเพื่อเพิ่มความเสถียร
- โปรเจ็กต์อื่นที่มีความสามารถคล้ายกันคือ
lfs-s3
2 ความคิดเห็น
ถ้าต้องแยกใส่การยืนยันตัวตนสำหรับ LFS นอกเหนือจาก git ด้วย ก็น่าจะมีเรื่องจุกจิกที่น่ารำคาญเกิดขึ้นเยอะกว่าที่คิดนะครับ
ความคิดเห็นจาก Hacker News
ถ้าอยากใช้ S3 เป็น git remote แต่กังวลเรื่องความเป็นส่วนตัว ก็มีคนสร้างเครื่องมือที่ใช้ Restic เพื่อใช้ S3 เป็น git remote ที่ไม่ต้องเชื่อถือได้
ควรจำไว้ว่า หน่วยคิดค่าบริการขั้นต่ำของ AWS S3 คือ 128KB ถ้าซอร์สทรีของคุณเต็มไปด้วยไฟล์เล็ก ๆ ค่าใช้จ่ายของ Git repository อาจสูงกว่าที่คาดไว้
น่าแปลกใจที่ทำได้ด้วยแค่ S3 bucket อย่างเดียว เดิมทีคิดว่าจะต้องใช้ API Gateway, Lambda function และ DynamoDB table เพื่อรองรับ S3 bucket ไม่ได้นึกถึงการไปทำฝั่งไคลเอนต์เลย
น่าเสียดายที่ยัง mock ทุกอย่างทั้งที่มี moto อยู่แล้ว
วิธีหนึ่งในการแก้ปัญหาคือใช้ moto แต่ก็มี implementation ของ S3 storage อยู่มากมาย รวมถึง minio เวอร์ชัน Apache 2 ด้วย และสำหรับสิ่งที่เสถียรอย่าง S3 API ก็ไม่จำเป็นต้องใช้เวอร์ชันล่าสุด
กำลังใช้ rudolfs ที่เขียนด้วย Rust ประสิทธิภาพยอดเยี่ยม แต่ยังไม่มีฟีเจอร์ทั้งหมดที่ต้องการ (authentication)
ใช้ CloudFormation template สำหรับ LFS บน S3 มานานแล้ว
GitHub ควรลดราคา LFS
สามารถใช้ Cloudflare Workers เพื่อลดขั้นตอนการตั้งค่า/ชิ้นส่วนที่ต้องดูแลได้
ในส่วน LFS นั้น dvc ทำงานได้ดีกว่า git-lfs และรองรับ S3 ในตัว
git-annex ก็รองรับ S3 ในตัวเช่นกัน
บน S3 ไม่สามารถ push แบบมีทรานแซกชันและคงความสอดคล้องได้ จึงดูเหมือนเป็นเครื่องมือที่ไม่เหมาะ
ดูเหมือนจะเป็นเครื่องมือที่ไม่เหมาะสำหรับโฮสต์ Git repository