What is serverless deployment?
- It is a development model built to run apps without the hassle of managing servers, it is maintained, and scaled by third-party cloud providers. The developers need to focus on writing code and deploying the code.
- we are using Node.js for development
How does It work?
- Aws cloud formation template is created from the serverless.yml file
- if a stack is not created it will create a stack with an s3 bucket that will store
- functions zip file
- serverless fetches the hash of the previous deployment (if any) and compares it with the current hash if they are the same then it terminates the deployment
- else it deploys the functions zip to the s3 bucket attaches any policy , resources etc to cloud formation template
- the stack is updated with new cloud formation template
- each deployment publishes a new version of each function in your services.
[Node.js] install serverless npm install -g serverless [Node.js]install serverless
we can also use sls short-hand command for serverless
now we can get help for commands by typing sls create -help command
now if u have installed aws cli and configured the access key and secret key
in that than u don’t have to type this command
[command line] sls config credentials – provider aws – key accesskey – secret secretkey [command line]create lambda using serverless
[command line] sls create – template aws – nodejs [command line]this will be two files
serverless.yml and handle.js
[JavaScript] ‘use strict’; module.exports.hello = async (event) => { return { statusCode: 200, body: JSON.stringify( { message: ‘Go Serverless v1.0! Your function executed successfully!’, input: event, }, null, 2 ), }; // Use this code if you don’t use the http event with the LAMBDA-PROXY integration // return { message: ‘Go Serverless v1.0! Your function executed successfully!’, event }; }; [JavaScript]handler .js contains basic function details# Welcome to Serverless!
[YAML] # Welcome to Serverless! # # This file is the main config file for your service. # It’s very minimal at this point and uses default values. # You can always add more config options for more control. # We’ve included some commented out config examples here. # Just uncomment any of them to get that config option. # # For full config options, check the docs: # docs.serverless.com # # Happy Coding! service: serverless-code # app and org for use with dashboard.serverless.com #app: your-app-name #org: your-org-name # You can pin your service to only deploy with a specific Serverless version # Check out our docs for more details frameworkVersion: ‘3’ provider: name: aws runtime: nodejs12.x # you can overwrite defaults here # stage: dev # region: us-east-1 # you can add statements to the Lambda function’s IAM Role here # iam: # role: # statements: # – Effect: “Allow” # Action: # – “s3:ListBucket” # Resource: { “Fn::Join” : [“”, [“arn:aws:s3:::”, { “Ref” : “ServerlessDeploymentBucket” } ] ] } # – Effect: “Allow” # Action: # – “s3:PutObject” # Resource: # Fn::Join: # – “” # – – “arn:aws:s3:::” # – “Ref” : “ServerlessDeploymentBucket” # – “/*” # you can define service wide environment variables here # environment: # variable1: value1 # you can add packaging information here #package: # patterns: # – ‘!exclude-me.js’ # – ‘!exclude-me-dir/**’ # – include-me.js # – include-me-dir/** functions: hello: handler: handler.hello # The following are a few example events you can configure # NOTE: Please make sure to change your handler code to work with those events # Check the event documentation for details # events: # – httpApi: # path: /users/create # method: get # – websocket: $connect # – s3: ${env:BUCKET} # – schedule: rate(10 minutes) # – sns: greeter-topic # – stream: arn:aws:dynamodb:region:XXXXXX:table/foo/stream/1970-01-01T00:00:00.000 # – alexaSkill: amzn1.ask.skill.xx-xx-xx-xx # – alexaSmartHome: amzn1.ask.skill.xx-xx-xx-xx # – iot: # sql: “SELECT * FROM ‘some_topic'” # – cloudwatchEvent: # event: # source: # – “aws.ec2” # detail-type: # – “EC2 Instance State-change Notification” # detail: # state: # – pending # – cloudwatchLog: ‘/aws/lambda/hello’ # – cognitoUserPool: # pool: MyUserPool # trigger: PreSignUp # – alb: # listenerArn: arn:aws:elasticloadbalancing:us-east-1:XXXXXX:listener/app/my-load-balancer/50dc6c495c0c9188/ # priority: 1 # conditions: # host: example.com # path: /hello # Define function environment variables here # environment: # variable2: value2 # you can add CloudFormation resource templates here #resources: # Resources: # NewResource: # Type: AWS::S3::Bucket # Properties: # BucketName: my-new-bucket # Outputs: # NewOutput: # Description: “Description for the output” # Value: “Some output value” [YAML]serverless.yml contains serverless config now u can have a configuration as per requirement in the serverless.yml file
like defining roles, security group information in Resources, stages of deployment prod, dev, etc and if all is set then
deploy the lambda through
[command line] sls deploy command [command line]if using stage region etc than
[command line] sls deploy – stage prod – region ap-south-1 [command line]function at lambda can be invoked from the terminal or can be invoked locally
[command line] sls invoke –function hello sls invoke local –function hello [command line]if you get a deployment package size issue you can install web-pack plugin and defines this in serverless.yml
[command line] npm i serverless-webpack plugins: – serverless-webpack [command line]after this, you need to configure your functions in webpack.config.js file and deploy file size issue will be resolved.
Resources :
Serverless Framework – Deploying to AWS
The Serverless Framework was designed to provision your AWS Lambda Functions, Events and infrastructure Resources…www.serverless.com