node.jsaws-lambdaserverless-architectureaws-codestar

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?


Solution

  • 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.

    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!