Comments (6)
@godu I think this should be reopened. serverless-offline
is now recommending the use of --useWorkerThreads
for node v11.7+ dherault/serverless-offline#508 (comment) because there's no way to debug when using --useSeparateProcesses
, however --useWorkerThreads
doesn't work with serverless-offline-sqs
in that the process.env is still wrong for the function despite being launched in a separate worker thread.
from serverless-plugins.
The code is messing with process.env before calling the handler and then it changes it back after the handler is invoked. However, if you have any async code that is called by the handler then that code may run after process.env is set back. I'm running into this same issue and am wondering why process.env should be reset?
from serverless-plugins.
same here ...
from serverless-plugins.
I'm encountering an issue related to this as well. Is there a plan to change this? If so, is there an ETA?
from serverless-plugins.
Hi,
First of all, IMO, it's more a serverless-offline
's bug than serverless-offline-{kinesis/sqs/dynamodb-stream}
's one.
Unfortunately, I think we need this kind of hack to avoid possible side-effects produce by some process.env
s mutations.
I'll explain.
AWS Lambda allow us to defined different environment variables by lambda. However, serverless-offline
, by default, execute all lambdas in the same thread, and share, in the facts, the same process.env
value.
By example, imagine two lambdas lambda-red
and lambda-blue
:
functions:
lambda-red:
handler: handler.color
environment:
COLOR: red
lambda-blue:
handler: handler.color
environment:
COLOR: blue
with the same handler :
module.exports.color = (event, context, color) => {
console.log(process.env.COLOR);
setTimeout(() => {
console.log(process.env.COLOR);
cb();
}, 1000);
};
If we trigger both in the same time, we got this output:
lambda-red: red
lambda-blue: blue
# 1s later
lambda-red: blue
lambda-blue: blue
A solution is to use --useSeparateProcesses
options to isolate lambda's execution's context.
I think a good practice is to extract environment variables in the root scope, due to the process.env
's immutability property that should have.
const {COLOR} = process.env;
module.exports.color = (event, context, color) => {
console.log(COLOR);
setTimeout(() => {
console.log(COLOR);
cb();
}, 1000);
};
I'm open for suggestion. Maybe there is another solution.
from serverless-plugins.
Any chance to get a workaround or fix for those who cannot move to node v11.7+? I've been looking at other options, but have not found any simple alternative.
from serverless-plugins.
Related Issues (20)
- Error upon installing serverless-offline-sqs HOT 1
- [serverless-offline-sqs] Can't create explicit queues on AWS or sqslite
- [serverless-offline-sqs] Uncaught exceptions from SQS handler functions terminates nodejs process
- [serverless-offline-sqs] Support for maximumBatchingWindow HOT 1
- Support removed for node 14; please restore HOT 1
- [serverless-offline-sqs] TypeError: Cannot read property 'debug' of undefined
- support serverless-offline 12
- [serverless-offline-dynamodb-streams] Error: Cannot find module 'serverless-offline/lambda' HOT 3
- Guide for setting up serverless-offline-sqs + serverless-lift + localstack sqs HOT 3
- serverless won't start if serverless-offline-dynamodb-streams table or stream does not exist
- Support of dynamodb event stream filterPatterns HOT 1
- Cannot find module 'source-map-support/register'
- serverless-offline-dynamodb-streams is still using aws-sdk@v2
- serverless offline startup fails due to serverless-offline-kinesis build error
- Severless Offline SQS using AWS SDK v2
- Is this repo still maintained? HOT 1
- [serverless-offline-sqs] Doesn't trigger lambda when new message is added to elasticMQ
- [serverless-offline-sqs] support serverless-offline v13 HOT 1
- serverless-offline running forever
- serverless-offline-sqs breaks when upgrading @aws-sdk from 3.226.0 to 3.556.0 HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from serverless-plugins.