Giới Hạn Code Storage Trong Aws Lambda
AWS
17
serverless
3
White

Chiến Kira viết ngày 24/04/2019

link bài viết gốc: https://chienkira.github.io/blog/posts/gi%E1%BB%9Bi-h%E1%BA%A1n-code-storage-trong-aws-lambda/
Qua cọ xát thực tế mới ngộ ra được bản chất của cái limit code storage trong AWS lambda. Bài này muốn chia sẻ lại một chút kiến thức mới biết được với mọi người.

Bối cảnh

Công ty đang làm service chủ yếu theo kiến trúc serverless, nên dùng tương đối nhiều AWS Lambda functions.

  • Số lượng Lambda: 238
  • Code size của Lambda: average 20MB ~ max 50MB

Diễn biến

Ngày đẹp trời nhận được thông báo CI job failed.
Kiểm tra thì phát hiện ra job deploy hàm lambda đã không chạy được thành công.

Log của serverless như sau:

Serverless: Operation failed!

   Serverless Error ---------------------------------------

      An error occurred: XXXXXXXXXXXXXXXXX - Code storage limit exceeded. (Service: AWSLambda; Status Code: 400; Error Code: CodeStorageExceededException; Request ID: XXXXXX).

Tưởng gì Code storage limit exceeded thì chắc là có function nào bự quá quy định rồi.
Một function Lambda thì chỉ được tối đa 50 MB zipped thôi, chắc có anh nào nhồi nhét tạo ra một cái hàm bự chà bá chứ gì?

Nghĩ vậy, mình dòm lên những dòng log phía trên tìm manh mối.

Serverless: Uploading service .zip file to S3 (14.4 MB)...

Vậy là đếch phải rồi, code size của function Lambda hoàn toàn bình thường như cân đường hộp sữa!

Đến lúc phải nhờ sensei Google chỉ giáo, sensei bảo rằng ngoài cái giới hạn ở trên, còn có một cái giới hạn khác mà AWS đặt ra áp dụng lên từng region của từng tài khoản.

Giới hạn đó như sau:

Resource Default Limit
Concurrent executions 1,000
Function and layer storage 75 GB

Ref: AWS Lambda Limits

Code storage tối đa cho phép là 75GB cho tổng số toàn bộ Lambda functions trên 1 region.

Ta có thể check xem hiện tại ta đang xài đến bao nhiêu trong 75GB bằng cách mở màn hình Dashboard Lambda và kiểm tra phần thông tin hiển thị phía trên đầu trang.

Lúc xảy ra lỗi này thì Code storage của mình đã là 100%.

Ảnh minh họa sau mình chụp sau khi xử lý rồi.

Vậy là biết thêm một cái limit mới, cái này nếu không dùng quá nhiều Lambda thì chắc tới tết mới chạm được vạch 75GB :)) Mà nghĩ lại thì việc công ty đã dùng đến 75GB vẫn có gì đó "ảo tung chảo" quá.
Nhẩm thử, cứ cho là 1 Lambda có 50MB code size đi chăng nữa thì tổng lại vẫn chỉ là như sau thôi.

50MB * 238funtions / 1024 = 11.6GB

Thế tại sao lại bị AWS tính là 100% của 75GB rồi?!?!

Đây mới là cái mình muốn chia sẻ với mọi người nhất.
Như mọi người đã biết, Lambda function có thể lưu lại các versions.
Mấu chốt ở đây là ta đã quên đi phần dung lượng cần thiết để lưu các version cũ.

Ở trường hợp của mình, mỗi lần serverless deploy thì đều tạo ra 1 version mới. Do đó mà code storage cứ tăng vèo vèo không thương tiếc mỗi lần CI chạy deploy. CI tiện lợi càng "thúc đẩy" các anh chị em dev và push push tới tấp, thế thì 75GB chứ 750GB cũng không trụ được lâu ấy chứ :))

Xử lý

Có 2 hướng xử lý có thể xem xét đến.

  • Nếu như ta cần thiết phải giữ versioning ở trên aws lambda, ta có thể dùng đến plugin serverless-prune-plugin. Hàng này khá xịn, nó có thể tự động giữ đến n version mới nhất trên aws, các version cũ hơn sẽ được kiểm tra và xóa - prune khỏi aws mỗi lần deploy.

  • Còn nếu như ta xác định khỏi cần thiết giữ các version cũ của lambda trên aws, giữ trên git là đủ :)) thì ta có thể lựa chọn disable versioning bằng setting sau.

   provider:
   ...
   versionFunctions: false # optional, default is true
   ...

Và nhớ trước khi xử lý gì thì cũng nên làm 1 cái script để xóa vợi các version không cần thiết cho code storage giảm xuống dưới 100% đã nhé ạ. Không thì chả deploy nổi lên nữa để mà xử lý đâu mọi người ạ. :smiley:

link bài viết gốc: https://chienkira.github.io/blog/posts/gi%E1%BB%9Bi-h%E1%BA%A1n-code-storage-trong-aws-lambda/

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Chiến Kira

7 bài viết.
25 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
15 1
Lập trình viên không sớm thì muộn cũng sẽ yêu cái máy tính không khác gì yêu vợ. Rồi ngày qua ngày tiếp xúc với cửa sổ dòng lệnh, mắt lập trình viê...
Chiến Kira viết 5 tháng trước
15 1
White
12 2
Blue green deployment là cái khỉ ho gì? Nó có gì hay và có "ngon" không? Nếu bạn đang có câu hỏi tương tự trong đầu thì hãy thử đọc hết bài viết n...
Chiến Kira viết 5 tháng trước
12 2
White
5 0
Unpack trong python Link bài viết gốc ở blog của mình: (Link) Ký tự ngoài là toán tử multiplication (phép nhân) và string replication ra, trong...
Chiến Kira viết 4 tháng trước
5 0
Bài viết liên quan
White
1 1
Transfer files từ local computer đến AWS EC2 dùng FileZilla Bài toán: Làm thế nào để copy files từ local computer đến AWS EC2? Cách làm: Có mấy ...
Minh-Trung Nguyễn viết 6 tháng trước
1 1
White
2 0
Bài viết gốc có ở blog của mình: (Link) Trong bài viết này, mình muốn giới thiệu về module trong terraform, và cách sử dụng nó để deploy lên nhiều...
Chiến Kira viết 2 tháng trước
2 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
7 bài viết.
25 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!