如何减少 Lambda 的大小 Layers/workaround R 包的大小 limit/reduce?

How to reduce size of Lambda Layers/workaround the size limit/reduce size of R packages?

我是 AWS Lambda 上的 运行 R。我一直在为 R 脚本使用的包制作一层。以下是套餐:

install.packages(c("magrittr", "lubridate", "dplyr", "readr", "tidyr",
                   "aws.s3", "readxl", "here", "stringr"), 
                 lib = '/opt/R/new_library/R/library/')

但是随后生成的文件夹超过了 250 MB,这是 Lambda 的限制。

因此,我想知道我的选择是什么:

非常感谢

这很复杂,但程序包通常不会根据安装大小限制进行编程(但请参阅示例 what we said about the tinyverse 和一些关于一般依赖性的想法)。

考虑 data.table 没有依赖关系,而 dplyr 有很多 - 我并不是说你 必须 重写你的脚本,但它是一个 可能方法。

我也是 BH 的维护者,是的,它的影响很大。更糟糕的是,我们不需要 run-time (!!) 所以你可以(非常彻底地)rm -rf 它的 headers。您将无法再 编译 但已经构建的会 运行.

最后,这是主要提示:考虑二进制文件。你有 RSPM 和 BSPM,我已经写了 a few blog posts and videos 关于这个主题——向下滚动查看一些。我是 Rutter PPA 的忠实粉丝和大用户,它为您提供了上述内容(可能带有 aws.s3 软件包)作为准备安装的二进制文件——而 BSPM 使它从 install.packages().[=22 变得容易=]

编辑 所以为了争论起见,我启动了 rocker/r-bspm:20.04 并且大多数包以二进制文件形式到达:

root@b52f4e461ebd:/# du -csh /usr/lib/R/site-library/*
136K    /usr/lib/R/site-library/askpass
140K    /usr/lib/R/site-library/assertthat
147M    /usr/lib/R/site-library/BH
212K    /usr/lib/R/site-library/bspm
212K    /usr/lib/R/site-library/cellranger
580K    /usr/lib/R/site-library/cli
172K    /usr/lib/R/site-library/clipr
840K    /usr/lib/R/site-library/cpp11
272K    /usr/lib/R/site-library/crayon
320K    /usr/lib/R/site-library/curl
516K    /usr/lib/R/site-library/digest
2.0M    /usr/lib/R/site-library/dplyr
136K    /usr/lib/R/site-library/ellipsis
368K    /usr/lib/R/site-library/fansi
160K    /usr/lib/R/site-library/generics
312K    /usr/lib/R/site-library/glue
296K    /usr/lib/R/site-library/here
224K    /usr/lib/R/site-library/hms
824K    /usr/lib/R/site-library/httr
692K    /usr/lib/R/site-library/jsonlite
292K    /usr/lib/R/site-library/lifecycle
2.2M    /usr/lib/R/site-library/littler
1.7M    /usr/lib/R/site-library/lubridate
476K    /usr/lib/R/site-library/magrittr
140K    /usr/lib/R/site-library/mime
3.2M    /usr/lib/R/site-library/openssl
308K    /usr/lib/R/site-library/pillar
116K    /usr/lib/R/site-library/pkgconfig
120K    /usr/lib/R/site-library/prettyunits
208K    /usr/lib/R/site-library/progress
584K    /usr/lib/R/site-library/purrr
188K    /usr/lib/R/site-library/R6
10M     /usr/lib/R/site-library/Rcpp
1.5M    /usr/lib/R/site-library/readr
1.7M    /usr/lib/R/site-library/readxl
108K    /usr/lib/R/site-library/rematch
636K    /usr/lib/R/site-library/remotes
1.4M    /usr/lib/R/site-library/rlang
300K    /usr/lib/R/site-library/rprojroot
1.3M    /usr/lib/R/site-library/stringi
456K    /usr/lib/R/site-library/stringr
156K    /usr/lib/R/site-library/sys
1.7M    /usr/lib/R/site-library/tibble
1.5M    /usr/lib/R/site-library/tidyr
416K    /usr/lib/R/site-library/tidyselect
524K    /usr/lib/R/site-library/utf8
1.8M    /usr/lib/R/site-library/vctrs
472K    /usr/lib/R/site-library/xml2
188M    total
root@b52f4e461ebd:/# 

所以在 BH 上使用建议的 'post-installation surgery'(同样,它是 build 而不是 运行 time R 的依赖性不区分)你可以将其降低到小于 50mb。

它由从源安装的内容补充:

root@b52f4e461ebd:/# du -csh /usr/local/lib/R/site-library/*
144K    /usr/local/lib/R/site-library/askpass
312K    /usr/local/lib/R/site-library/aws.s3
168K    /usr/local/lib/R/site-library/aws.signature
132K    /usr/local/lib/R/site-library/base64enc
2.1M    /usr/local/lib/R/site-library/curl
388K    /usr/local/lib/R/site-library/docopt
832K    /usr/local/lib/R/site-library/httr
696K    /usr/local/lib/R/site-library/jsonlite
140K    /usr/local/lib/R/site-library/mime
3.2M    /usr/local/lib/R/site-library/openssl
160K    /usr/local/lib/R/site-library/sys
472K    /usr/local/lib/R/site-library/xml2
8.6M    total
root@b52f4e461ebd:/# 

(其中一些作为二进制文件存在,所以我会更仔细地研究为什么 BSPM 没有选择二进制文件)。