結論
nodejs+puppeteer+lambdaのアプリケーションには .npmrc が必須
起きたこと
C:\[hogehoge]>npx sls deploy
をしたら
Serverless Error --------------------------------------- An error occurred: [Function Name] - Unzipped size must be smaller than 262144000 bytes (Service: AWSLambda; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: [fugafuga]).
と怒られました。
Serverlessのログを見てみると、
~略~ Serverless: Uploading CloudFormation file to S3... Serverless: Uploading artifacts... Serverless: Uploading service .zip file to S3 (157.42 MB)... Serverless: Validating template... ~略~
157MBのzipをアップロードしようとしている。
Lambdaの容量制限は50MBなのでそりゃ怒られる…
調査したこと
各ディレクトリのサイズを調査すると、node-module で300MBくらい食ってることが判明。
何度か npm install を繰り返して原因究明。
アプリケーションに使用していたPuppeteerの中にChromium(130MBくらい)が含まれていた。こいつのせい!
こいつがデプロイの時に含まれないようにしたいと思い、除外設定を探すもヒットせず。
解決法
たどり着いた神記事がこちら
https://www.pressmantech.com/tech/serverless/4613
ちょっと自分の対応の角度はズレてた。
解決法は「デプロイに含めない」ではなく、「そもそもインストールしない」だった。
というわけで、↑の記事に従って以下の手順を踏んだ。
1. node-moduleディレクトリを全削除
2. .npmrcをルートディレクトリに作る(書くのは1行だけ)
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=TRUE
3. npm install
これで skip install が出た。
もう一回デプロイ挑戦したらzipのサイズは130MBくらい減っていて、無事lambdaにアップロードされていった。
ありがたや。