sanfrancesco / prerendercloud-lambda-edge

Pre-render CloudFront with this Lambda@Edge function. Powered by https://headless-render-api.com (formerly named prerender.cloud from 2016 - 2022)
https://headless-render-api.com
MIT License
206 stars 35 forks source link

Error associating lambda function #1

Closed MrStiMu closed 6 years ago

MrStiMu commented 6 years ago

Hello,

This is the message i see after using make deploy:

------Error while associating Lambda functions with CloudFront------

{ InvalidLambdaFunctionAssociation: The function code size is larger than the maximum allowed size for functions that are triggered by a CloudFront event: 13810013 Max allowed: 1048576 Function: arn:aws:lambda:us-east-1:934024889921:function:Lambda-Edge-Prerendercloud-dev-viewerRequest:1
    at Request.extractError (/Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/aws-sdk/lib/protocol/rest_xml.js:53:29)
    at Request.callListeners (/Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
    at Request.emit (/Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
    at Request.emit (/Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/aws-sdk/lib/request.js:683:14)
    at Request.transition (/Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/aws-sdk/lib/request.js:22:10)
    at AcceptorStateMachine.runTo (/Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/aws-sdk/lib/state_machine.js:14:12)
    at /Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/aws-sdk/lib/state_machine.js:26:10
    at Request.<anonymous> (/Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/aws-sdk/lib/request.js:38:9)
    at Request.<anonymous> (/Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/aws-sdk/lib/request.js:685:12)
    at Request.callListeners (/Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/aws-sdk/lib/sequential_executor.js:115:18)
  message: 'The function code size is larger than the maximum allowed size for functions that are triggered by a CloudFront event: 13810013 Max allowed: 1048576 Function: arn:aws:lambda:us-east-1:934024889921:function:Lambda-Edge-Prerendercloud-dev-viewerRequest:1',
  code: 'InvalidLambdaFunctionAssociation',
  time: 2017-09-23T17:50:19.646Z,
  requestId: 'a7d93ab3-a087-11e7-b1ad-0b8d548a9b8a',
  statusCode: 400,
  retryable: false,
  retryDelay: 17.514498835987812 }
jotto commented 6 years ago

Did you use yarn or npm?

MrStiMu commented 6 years ago

yarn on macOs

MrStiMu commented 6 years ago

This is the full output:

MacBook-Pro-van-Stijn:prerendercloud-lambda-edge sjdmulde$ make deploy
yarn run serverless -- deploy
yarn run v1.0.2
warning From Yarn 1.0 onwards, scripts don't require "--" for options to be forwarded. In a future version, any explicit "--" will be forwarded as-is to the scripts.
$ "/Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/.bin/serverless" "deploy"
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service .zip file to S3 (13.17 MB)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
........................
Serverless: Stack update finished...
Service Information
service: Lambda-Edge-Prerendercloud
stage: dev
region: us-east-1
api keys:
  None
endpoints:
  None
functions:
  viewerRequest: Lambda-Edge-Prerendercloud-dev-viewerRequest
  originRequest: Lambda-Edge-Prerendercloud-dev-originRequest
✨  Done in 51.93s.
node deploy.js
before []
after [ { EventType: 'viewer-request',
    LambdaFunctionARN: 'arn:aws:lambda:us-east-1:934024889921:function:Lambda-Edge-Prerendercloud-dev-viewerRequest:1' },
  { EventType: 'origin-request',
    LambdaFunctionARN: 'arn:aws:lambda:us-east-1:934024889921:function:Lambda-Edge-Prerendercloud-dev-originRequest:1' } ]

------Error while associating Lambda functions with CloudFront------

{ InvalidLambdaFunctionAssociation: The function code size is larger than the maximum allowed size for functions that are triggered by a CloudFront event: 13810013 Max allowed: 1048576 Function: arn:aws:lambda:us-east-1:934024889921:function:Lambda-Edge-Prerendercloud-dev-viewerRequest:1
    at Request.extractError (/Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/aws-sdk/lib/protocol/rest_xml.js:53:29)
    at Request.callListeners (/Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
    at Request.emit (/Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
    at Request.emit (/Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/aws-sdk/lib/request.js:683:14)
    at Request.transition (/Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/aws-sdk/lib/request.js:22:10)
    at AcceptorStateMachine.runTo (/Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/aws-sdk/lib/state_machine.js:14:12)
    at /Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/aws-sdk/lib/state_machine.js:26:10
    at Request.<anonymous> (/Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/aws-sdk/lib/request.js:38:9)
    at Request.<anonymous> (/Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/aws-sdk/lib/request.js:685:12)
    at Request.callListeners (/Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/aws-sdk/lib/sequential_executor.js:115:18)
  message: 'The function code size is larger than the maximum allowed size for functions that are triggered by a CloudFront event: 13810013 Max allowed: 1048576 Function: arn:aws:lambda:us-east-1:934024889921:function:Lambda-Edge-Prerendercloud-dev-viewerRequest:1',
  code: 'InvalidLambdaFunctionAssociation',
  time: 2017-09-23T17:50:19.646Z,
  requestId: 'a7d93ab3-a087-11e7-b1ad-0b8d548a9b8a',
  statusCode: 400,
  retryable: false,
  retryDelay: 17.514498835987812 }

Successfully associated Lambda functions with CloudFront

node create-invalidation.js
{ Location: 'https://cloudfront.amazonaws.com/2017-03-25/distribution/E3OI5WRANYZX2V/invalidation/I2ZLMMP6HUJ5V2',
  Invalidation: 
   { Id: 'I2ZLMMP6HUJ5V2',
     Status: 'InProgress',
     CreateTime: 2017-09-23T17:50:16.470Z,
     InvalidationBatch: { Paths: [Object], CallerReference: '2017-09-23T17:50:19.857Z' } } }
jotto commented 6 years ago

Can you also verify whether you have a package-lock.json in your dir?

MrStiMu commented 6 years ago

No i don't

MrStiMu commented 6 years ago

i have a yarn.lock

jotto commented 6 years ago

also print a listing of your node_modules

ls node_modules

MrStiMu commented 6 years ago

image

MrStiMu commented 6 years ago

MacBook-Pro-van-Stijn:prerendercloud-lambda-edge sjdmulde$ ls node_modules @types capture-stack-trace decompress-response filename-reserved-regex https-proxy-agent js-yaml minimatch pend sax tmp agent-base caw decompress-tar filenamify iconv-lite json-refs minimist pify seek-bzip trim-repeated ansi chai decompress-tarbz2 filesize ieee754 json-stringify-safe mkdirp pinkie semver tunnel-agent ansi-escapes chalk decompress-targz form-data imurmurhash jsonfile moment pinkie-promise semver-regex type-detect ansi-regex ci-info decompress-unzip formidable inflight jwt-decode ms prepend-http serverless typedarray ansi-styles cli-cursor deep-eql fs-extra inherits klaw mute-stream prerendercloud shelljs unbzip2-stream apollo-client cli-width deep-equal fs.realpath ini lazystream native-promise-only process-nextick-args slash unzip-response archiver code-point-at deep-extend gauge inquirer lodash nock propagate slide uri-js archiver-utils combined-stream delayed-stream get-proxy is-fullwidth-code-point lodash-es node-fetch proto-list spawn-sync url are-we-there-yet commander delegates get-stdin is-natural-number lodash.difference normalize-path pseudomap sprintf-js url-parse-lax argparse component-emitter download get-stream is-object lodash.pad npm-conf punycode stack-trace url-to-options array-union compress-commons duplexer3 glob is-plain-obj lodash.padend npmlog qs string-width util-deprecate array-uniq concat-map encoding globby is-promise lodash.padstart number-is-nan querystring string_decoder uuid assertion-error concat-stream end-of-stream got is-redirect lodash.uniq object-assign raven strip-ansi vary async config-chain escape-string-regexp graceful-fs is-retry-allowed loose-envify once rc strip-dirs walkdir asynckit cookie esprima graceful-readlink is-stream lowercase-keys onetime readable-stream strip-json-comments whatwg-fetch aws-sdk cookiejar events graphlib is-wsl lru-cache opn redux strip-outer wrappy balanced-match core-util-is exit graphql isarray lsmod os-shim remove-trailing-separator superagent write-file-atomic base64-js crc exit-hook graphql-anywhere isurl make-dir os-tmpdir replaceall supports-color xml2js bl crc32-stream extend graphql-tag iterall methods p-cancelable restore-cursor symbol-observable xmlbuilder bluebird create-error-class external-editor has-ansi jasmine mime p-finally rimraf tabtab xtend brace-expansion crypto-browserify fd-slicer has-symbol-support-x jasmine-core mime-db p-timeout run-async tar-stream yallist buffer debug figures has-to-string-tag-x jmespath mime-types path-is-absolute rx through yauzl buffer-crc32 decompress file-type has-unicode js-tokens mimic-response path-loader safe-buffer timed-out zip-stream MacBook-Pro-van-Stijn:prerendercloud-lambda-edge sjdmulde$

MrStiMu commented 6 years ago

Should i do an npm install?

jotto commented 6 years ago

no, do not do npm install, that will create the package-lock.json which I know causes problems for serverless.

Run this: grep version node_modules/serverless/package.json

MrStiMu commented 6 years ago

"version": "1.19.0",

jotto commented 6 years ago

OK - I am finally able to reproduce this on my end, investigating now.

MrStiMu commented 6 years ago

Ok thank you

MrStiMu commented 6 years ago

The inital yarn command was with yarn version 0.23 and afterwards i did an upgrade before running the make deploy.

Full output:

MacBook-Pro-van-Stijn:prerendercloud-lambda-edge sjdmulde$ yarn yarn install v0.23.2 [1/4] 🔍 Resolving packages... [2/4] 🚚 Fetching packages... [3/4] 🔗 Linking dependencies... [4/4] 📃 Building fresh packages... success Saved lockfile. warning Your current version of Yarn is out of date. The latest version is "1.0.2" while you're on "0.23.2".

jotto commented 6 years ago

OK - looks like there might be an issue with the latest version of yarn and serverless for excluding dev dependencies in the production bundle.

So ignore my previous comment about package-lock.json, apparently that's now required for serverless to work.

npm install should solve the issue. I'll update the docs

MrStiMu commented 6 years ago

Ok, i've executed npm install (had to re-install npm because of a homebrew problem) and now i get:

MacBook-Pro-van-Stijn:prerendercloud-lambda-edge sjdmulde$ make deploy yarn run serverless -- deploy yarn run v1.0.2 warning From Yarn 1.0 onwards, scripts don't require "--" for options to be forwarded. In a future version, any explicit "--" will be forwarded as-is to the scripts. $ "/Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/.bin/serverless" "deploy" Serverless: Packaging service... Serverless: Excluding development dependencies... Serverless: Uploading CloudFormation file to S3... Serverless: Uploading artifacts... Serverless: Uploading service .zip file to S3 (288.18 KB)... Serverless: Validating template... Serverless: Updating Stack... Serverless: Checking Stack update progress... ..... Serverless: Operation failed!

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

An error occurred: ViewerRequestLambdaFunction - Function not found: arn:aws:lambda:us-east-1:934024889921:function:Lambda-Edge-Prerendercloud-dev-viewerRequest.

Get Support -------------------------------------------- Docs: docs.serverless.com Bugs: github.com/serverless/serverless/issues Forums: forum.serverless.com Chat: gitter.im/serverless/serverless

Your Environment Information ----------------------------- OS: darwin Node Version: 8.5.0 Serverless Version: 1.23.0

error Command failed with exit code 1. info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. make: *** [deploy] Error 1

jotto commented 6 years ago

git pull && rm -rf node_modules

jotto commented 6 years ago

git pull && rm -rf node_modules && npm install

MrStiMu commented 6 years ago

After doing a git pull

MacBook-Pro-van-Stijn:prerendercloud-lambda-edge sjdmulde$ git pull Already up-to-date. MacBook-Pro-van-Stijn:prerendercloud-lambda-edge sjdmulde$ rm -rf node_modules MacBook-Pro-van-Stijn:prerendercloud-lambda-edge sjdmulde$ npm install

spawn-sync@1.0.15 postinstall /Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/spawn-sync node postinstall

serverless@1.23.0 postinstall /Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/serverless node ./scripts/postinstall.js

npm WARN prerendercloud-lambda-edge No repository field. npm WARN prerendercloud-lambda-edge No license field.

added 274 packages in 5.409s MacBook-Pro-van-Stijn:prerendercloud-lambda-edge sjdmulde$ make deploy ./node_modules/.bin/serverless deploy Serverless: Packaging service... Serverless: Excluding development dependencies... Serverless: Uploading CloudFormation file to S3... Serverless: Uploading artifacts... Serverless: Uploading service .zip file to S3 (257.11 KB)... Serverless: Validating template... Serverless: Updating Stack... Serverless: Checking Stack update progress... ..... Serverless: Operation failed!

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

An error occurred: ViewerRequestLambdaFunction - Function not found: arn:aws:lambda:us-east-1:934024889921:function:Lambda-Edge-Prerendercloud-dev-viewerRequest.

Get Support -------------------------------------------- Docs: docs.serverless.com Bugs: github.com/serverless/serverless/issues Forums: forum.serverless.com Chat: gitter.im/serverless/serverless

Your Environment Information ----------------------------- OS: darwin Node Version: 8.5.0 Serverless Version: 1.23.0

make: *** [deploy] Error 1

jotto commented 6 years ago

Delete your .serverless dir and/or the function in lambda and do it again

On Sep 23, 2017, at 1:43 PM, Stijn De Mulder notifications@github.com wrote:

After doing a git pull

MacBook-Pro-van-Stijn:prerendercloud-lambda-edge sjdmulde$ git pull Already up-to-date. MacBook-Pro-van-Stijn:prerendercloud-lambda-edge sjdmulde$ rm -rf node_modules MacBook-Pro-van-Stijn:prerendercloud-lambda-edge sjdmulde$ npm install

spawn-sync@1.0.15 postinstall /Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/spawn-sync node postinstall

serverless@1.23.0 postinstall /Users/sjdmulde/Projects/prerendercloud-lambda-edge/node_modules/serverless node ./scripts/postinstall.js

npm WARN prerendercloud-lambda-edge No repository field. npm WARN prerendercloud-lambda-edge No license field.

added 274 packages in 5.409s MacBook-Pro-van-Stijn:prerendercloud-lambda-edge sjdmulde$ make deploy ./node_modules/.bin/serverless deploy Serverless: Packaging service... Serverless: Excluding development dependencies... Serverless: Uploading CloudFormation file to S3... Serverless: Uploading artifacts... Serverless: Uploading service .zip file to S3 (257.11 KB)... Serverless: Validating template... Serverless: Updating Stack... Serverless: Checking Stack update progress... ..... Serverless: Operation failed!

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

An error occurred: ViewerRequestLambdaFunction - Function not found: arn:aws:lambda:us-east-1:934024889921:function:Lambda-Edge-Prerendercloud-dev-viewerRequest.

Get Support -------------------------------------------- Docs: docs.serverless.com Bugs: github.com/serverless/serverless/issues Forums: forum.serverless.com Chat: gitter.im/serverless/serverless

Your Environment Information ----------------------------- OS: darwin Node Version: 8.5.0 Serverless Version: 1.23.0

make: *** [deploy] Error 1

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.

MrStiMu commented 6 years ago

I've deleted the AWS resources (S3 bucket, functions and cloudformation stack).

When i execute the code i get a deployment:

MacBook-Pro-van-Stijn:prerendercloud-lambda-edge sjdmulde$ make deploy ./node_modules/.bin/serverless deploy Serverless: Packaging service... Serverless: Excluding development dependencies... Serverless: Creating Stack... Serverless: Checking Stack create progress... ..... Serverless: Stack create finished... Serverless: Uploading CloudFormation file to S3... Serverless: Uploading artifacts... Serverless: Uploading service .zip file to S3 (256.3 KB)... Serverless: Validating template... Serverless: Updating Stack... Serverless: Checking Stack update progress... ........................ Serverless: Stack update finished... Service Information service: Lambda-Edge-Prerendercloud stage: dev region: us-east-1 stack: Lambda-Edge-Prerendercloud-dev api keys: None endpoints: None functions: viewerRequest: Lambda-Edge-Prerendercloud-dev-viewerRequest originRequest: Lambda-Edge-Prerendercloud-dev-originRequest

BUT when i goto the functions in AWS (Lambda functions), there is no associated trigger with cloudfront. I am now manually adding the trigger and see what happens

jotto commented 6 years ago

I haven't seen in the Lambda UI after running this deployment script (specifically the API calls for associating the Lambda function with the distribution) - I believe it's a bug somewhere in the AWS console. But I always see it at the bottom of the "Behaviors" tab for the CloudFront Distribution.

jotto commented 6 years ago

image

You should see requests after logging into prerender.cloud and more importantly, you should see logs in AWS CloudWatch in one of the regions you are closest to geographically. For example, I am in San Francisco and I see CloudWatch logs in us-west-2 Oregon (it should be in us-west-1 N California for me but it's not perfect).

MrStiMu commented 6 years ago

I managed to get it working, but now i get errors in:

image

There is no explanation in cloudwatch why it's giving errros.

jotto commented 6 years ago

The issues here are resolved because:

For posterity, it seems as of Nov 2017 you can't delete Lambda@Edge functions, so if you ever attempt to delete them, it will time out or fail. If, at that point you want to re-use this project, you'll have to rename the functions (in about 2 places)