From adf70dc25f109702eefe1fcbabfc77e2e6cc77e5 Mon Sep 17 00:00:00 2001 From: Matchu Date: Thu, 19 Aug 2021 16:12:12 -0700 Subject: [PATCH] Use chrome-aws-lambda for assetImage Okay cool, this one worked! We use this special Chrome package with AWS Lambda support, and then we use normal Playright in dev, and then we exclude `playwright` from the deployment (even though it got auto-detected by `require("playwright")`) to just barely sneak in under the 50MB limit for this function. Phew! The preview deploys for this seem to be, actually working? So that's exciting! --- api/assetImage.js | 17 ++++++++++++++--- package.json | 3 ++- vercel.json | 7 ++++++- yarn.lock | 46 +++++++++++++++++++++++++++++++++------------- 4 files changed, 55 insertions(+), 18 deletions(-) diff --git a/api/assetImage.js b/api/assetImage.js index f5402b4..69aaa51 100644 --- a/api/assetImage.js +++ b/api/assetImage.js @@ -18,8 +18,6 @@ const beeline = require("honeycomb-beeline")({ disableInstrumentationOnLoad: true, }); -const playwright = require("playwright-aws-lambda"); - // To render the image, we load the /internal/assetImage page in the web app, // a simple page specifically designed for this API endpoint! const ASSET_IMAGE_PAGE_BASE_URL = process.env.VERCEL_URL @@ -36,7 +34,20 @@ const ASSET_IMAGE_PAGE_BASE_URL = process.env.VERCEL_URL let BROWSER; async function getBrowser() { if (!BROWSER) { - BROWSER = await playwright.launchChromium({ headless: true }); + if (process.env["NODE_ENV"] === "production") { + // In production, we use a special chrome-aws-lambda Chromium. + const chromium = require("chrome-aws-lambda"); + const playwright = require("playwright-core"); + BROWSER = await playwright.chromium.launch({ + args: chromium.args, + executablePath: await chromium.executablePath, + headless: true, + }); + } else { + // In development, we use the standard playwright Chromium. + const playwright = require("playwright"); + BROWSER = await playwright.chromium.launch({ headless: true }); + } } return BROWSER; } diff --git a/package.json b/package.json index 1a97f8a..b6f5805 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "apollo-server-env": "^3.0.0", "aws-sdk": "^2.726.0", "canvas": "^2.6.1", + "chrome-aws-lambda": "^10.1.0", "dataloader": "^2.0.0", "dompurify": "^2.2.0", "easeljs": "^1.0.2", @@ -41,7 +42,6 @@ "lru-cache": "^6.0.0", "mysql2": "^2.1.0", "node-fetch": "^2.6.0", - "playwright-aws-lambda": "^0.7.0", "playwright-core": "^1.14.0", "react": "^17.0.1", "react-autosuggest": "^10.0.2", @@ -138,6 +138,7 @@ "inquirer": "^7.3.3", "jest-image-snapshot": "^4.3.0", "lint-staged": "^10.5.4", + "playwright": "^1.14.0", "prettier": "^2.0.5", "react-is": "^16.13.1", "ts-node": "^9.1.1", diff --git a/vercel.json b/vercel.json index cd2a01b..bb1976f 100644 --- a/vercel.json +++ b/vercel.json @@ -22,5 +22,10 @@ "src": "/static/js/[^.]*\\.[^.]*\\.chunk.js", "status": 404 } - ] + ], + "functions": { + "api/assetImage.js": { + "excludeFiles": "node_modules/playwright/**" + } + } } diff --git a/yarn.lock b/yarn.lock index fd29f6d..384c28e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7768,6 +7768,13 @@ chownr@^2.0.0: resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== +chrome-aws-lambda@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/chrome-aws-lambda/-/chrome-aws-lambda-10.1.0.tgz#ac43b4cdfc1fbb2275c62effada560858099501e" + integrity sha512-NZQVf+J4kqG4sVhRm3WNmOfzY0OtTSm+S8rg77pwePa9RCYHzhnzRs8YvNI6L9tALIW6RpmefWiPURt3vURXcw== + dependencies: + lambdafs "^2.0.3" + chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" @@ -12930,12 +12937,12 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -lambdafs@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/lambdafs/-/lambdafs-1.3.0.tgz#7e369cedc9a09623bb365fa99a1113c2ab2fc7ae" - integrity sha512-HqRPmEgtkTW4sCYDUjTEuTGkjCHuLvtZU8iM8GkhD7SpjW4AJJbBk86YU4K43sWGuW5Vmzp1lVCx4ab/kJsuBw== +lambdafs@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/lambdafs/-/lambdafs-2.0.3.tgz#f2acc53cf4862d29f1df654c327864b4faeb1d4a" + integrity sha512-5YWwZA/QKk09GdfcJ/ABVO+bpFoGlnTBa5jmyM8Kt9yIzl2lDDVBPLK+Aenq2UEcuDpqxXIYI5zLB7VZNepTrg== dependencies: - tar-fs "^2.0.0" + tar-fs "^2.1.1" language-subtag-registry@~0.3.2: version "0.3.21" @@ -14886,13 +14893,6 @@ pkg-up@3.1.0, pkg-up@^3.1.0: dependencies: find-up "^3.0.0" -playwright-aws-lambda@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/playwright-aws-lambda/-/playwright-aws-lambda-0.7.0.tgz#6bef962700dc0053ff306ffbc04a11f26a994810" - integrity sha512-vmcXA98LioRhcQg9v+xSLk/HHpkfuOyPQTFGx02rtUa00AEYuMQlNIEMSFn50Sm7R8cwQehyzI3FdKcWhYSAdA== - dependencies: - lambdafs "^1.3.0" - playwright-core@^1.14.0: version "1.14.0" resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.14.0.tgz#af51da7b201c11eeda780e2db3f05c8bca74c8be" @@ -14913,6 +14913,26 @@ playwright-core@^1.14.0: ws "^7.4.6" yazl "^2.5.1" +playwright@^1.14.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.14.0.tgz#18301b11f5278a446d36b5cf96f67db36ce2cd20" + integrity sha512-aR5oZ1iVsjQkGfYCjgYAmyMAVu0MQ0i8MgdnfdqDu9EVLfbnpuuFmTv/Rb7/Yjno1kOrDUP9+RyNC+zfG3wozA== + dependencies: + commander "^6.1.0" + debug "^4.1.1" + extract-zip "^2.0.1" + https-proxy-agent "^5.0.0" + jpeg-js "^0.4.2" + mime "^2.4.6" + pngjs "^5.0.0" + progress "^2.0.3" + proper-lockfile "^4.1.1" + proxy-from-env "^1.1.0" + rimraf "^3.0.2" + stack-utils "^2.0.3" + ws "^7.4.6" + yazl "^2.5.1" + please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" @@ -18090,7 +18110,7 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar-fs@^2.0.0: +tar-fs@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==