Itération 122442
Itération 122442

Reputation: 2972

Structure of a serverless application

I am new to serverless application. I followed the aws tutorial to build a simple nodejs serverless app with codestar and lambda.

However, imagine this node app does multiple things. In consequence, it has mutiple functions inside index.js, one for functionnality A, one for functionnality B, etc (for example).

Do I have to attach multiple lambda expressions, one for each functionality, to this codestar project?

Upvotes: 1

Views: 915

Answers (2)

ketan
ketan

Reputation: 2904

Question: Do I have to attach multiple lambda expressions, one for each functionality, to this codestar project? Answer: Yes

AWS CodeStar Project Details:

AWS Code star project contains below file structure(reference link):

README.md - this file
buildspec.yml - this file is used by AWS CodeBuild to package your service for deployment to AWS Lambda
app.js - this file contains the sample Node.js code for the web service
index.js - this file contains the AWS Lambda handler code
template.yml - this file contains the Serverless Application Model (SAM) used by AWS Cloudformation to deploy your service to AWS Lambda and Amazon API Gateway.

Assume you have the template.yml file like below:

AWSTemplateFormatVersion: 2010-09-09
Transform:
- AWS::Serverless-2016-10-31
- AWS::CodeStar
Resources:
  HelloWorld:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.first_handler
      Runtime: nodejs4.3
      Role:
        Fn::ImportValue:
          !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']]
      Events:
        GetEvent:
          Type: Api
          Properties:
            Path: /first
            Method: get
  HelloWorld2:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.second_handler
      Runtime: nodejs4.3
      Role:
        Fn::ImportValue:
          !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']]
      Events:
        GetEvent:
          Type: Api
          Properties:
            Path: /second
            Method: get

Notice that, in above tamplate.yml file specified "HelloWorld" and "HelloWorld2" configurations.

  • HelloWorld configuration contains "Handler" value as "index.first_handler" meaning that "index" is the filename of index.js and first_handler is the method in index.js file.
  • Likewise, HelloWorld2 configuration contains "Handler" value as "index.second_handler" meaning that "index" is the filename of index.js and second_handler is the method in index.js file.

Conclusion:

You can specify any number of lambda functions in your index.js (whatever.js) file. Only you need to specify the proper Handler to identify the app your lambda function.

Hope this is the answer to your question. Feel free to ask doubts, if you have!

Upvotes: 2

Vijayanath Viswanathan
Vijayanath Viswanathan

Reputation: 8571

you don't need multiple handler functions (index.js) and you cannot have multiple handler functions. If the different functionality is doing the logically separated job then you can add multiple JS files and write functions there but you should refer that to your handler function (index.js). Alternatively, you can write functionality in index.js itself but better idea and clean code is to separate logically different functionality to another file and refer it

Upvotes: 0

Related Questions