Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Serverless deploying multiple functions

I've recently updated my serverless project, and I've found that many things have changed in the last few updates.

https://serverless.com/

I don't fully understand whats the correct way to have multiple lambda functions and api gateway endpoints related to the same project. With the old serverless I have every lambda and endpoint as a completely seperate function, this worked pretty well for me.

I can't seem to do this anymore, if I try my second lambda function overrides my first, presumably because my "service name" for both is the same. My service name is the same because I want both rest endpoints in the same API in API Gateway. Since serverless creates the API name based on the service name.

So then I tried to add both functions to the same "Service". this worked for the most part, except that now I need to include my custom role statement for all my functions into the same role (because this one role is now being linked to all my functions). Effectively giving more permissions to each individual function than it should have. The other issue is that all my handler files for the different functions are being put into each functions deployment bundle.

So basically, I'm not sure what is the correct approach to have multiple functions that relate to the same project but are separate in functionality. It used to make sense, now doesn't.

If anybody can give me some pointers please

Thanks

like image 943
3uPh0riC Avatar asked Oct 05 '16 07:10

3uPh0riC


1 Answers

I understand your frustration. I had the same feeling until I looked deeper into the new version and formed a better understanding. One thing to note though, is the new version is not completely finished yet. So if something is completely missing, you can file an issue and have it prioritized before 1.0 is out.

You are supposed to define multiple functions under the same service under the functions: section of serverless.yml. To package these functions individually (exclude code for other functions) you will have to set individually: true under package: section. You can then use include and exclude options at the root level and at the function level as well. There's an upcoming change that will let you use glob syntax in your include and exclude options (example **/*-fn.js). You can find more about packaging here https://serverless.com/framework/docs/guide/packaging/.

Not sure how to use different roles for different functions under the same service.. How did you do it with 0.5?

like image 64
Tolbahady Avatar answered Sep 21 '22 17:09

Tolbahady