Serverless is toolkit for deploying and operating serverless framework due to focus your application.
In this article, I would like to introduce how to build basic lambda API by Node.js/Python with Docker.
🚌 Installation
| yarn global add serverless | 
😀 Docker Config for Python
If you want to develop a function with Python, it is better to use Dockerfile, because it is easy to use pip library in lambda.
Create Dockerfile for development:
| FROM python:3.6 | 
Also, create docker-compose.yml:
| version: '3.5' | 
After then, create .env.docker:
| aws_access_key_id=YOUR_ACCESS_KEY_ID | 
Please add your AWS Access information and do not commit the .env.docker file in git repository.
🏀 Start the image for dev
| docker-compose up -d | 
🐠 Set AWS Access key
| sls config credentials --provider aws --key $AWS_ACCESS_KEY_ID --secret $AWS_SECRET_ACCESS_KEY | 
🐡 Create lambda function with Pytnon3 template
Create new service:
| # Create service with Python 3.x | 
Modify serverless.yml configuration file:
(diff --no-index --unified=1 serverless.org.yml serverless.yml):
| @@ -25,3 +25,3 @@ provider: | 
🐯 Confirm developing function
Enable to confirm your devloping function on local
| # Call the function | 
🗻 Deploy code to AWS
After development, you can deploy your code by one command:
| sls deploy -v | 
🎂 Confirm the deployed function
Enable to confirm your devloping function on local or you can call your API by curl:
| # Call the function | 
🐞 Add pip libraries for lambda
If you want to use library, please install pip libraries as follows:
| # In docker | 
🎃 Remove deployed function
| sls remove | 
🍮 Configuration (serverless.yml)
Memory Size, Timeout, etc in AWS lambda
You can configure memory size and timeout for function in AWS lambda:
| # https://serverless.com/framework/docs/providers/aws/guide/functions/ | 
If you want to know more detail, please see https://serverless.com/framework/docs/providers/aws/guide/functions/ .
Including/excluding file or folder
Please configure including/excluding a file or a folder.
| # you can add packaging information here | 
If you want to know more detail, please see https://serverless.com/framework/docs/providers/aws/guide/packaging/
Cron(Scheduled job) configuration
Enable to configure cron/scheduled job.
| # Cron (scheduled job) information | 
If you want to know more detail, please see https://serverless.com/framework/docs/providers/aws/events/schedule/
😼 Impression
My impression for serverless is as follows:
- A deploy command (serverless deploy) is simple and useful to create the required IAM, set up CloudWatch logs, set up S3 for deployment, deploy, etc.
- Cron (CloudWatch Events) needs just a line to YAML, there are a lot of useful configurations.
- I thought that it was easy for using Google Cloud Function to manage credential on GCP, I tried a little, but it was buggy. I think that serverless is useful in only AWS lambda.- There are some problems in GCF and serverless. Also, GCF is beta yet.
 
- I found https://github.com/serverless/serverless-graphql . If it becomes better, it is a good option for GraphQL server.
🐮 [Appendix] Google Cloud function with Node.js
Supported Node.js version
Node version is 6.14.0, so please be careful: https://cloud.google.com/functions/docs/writing/ .
| echo '6.14.0' > .nvmrc | 
Quick Start
Create a project:
| serverless create --template google-nodejs --path gcf-nodejs | 
Install npm libraries:
| cd gcf-nodejs | 
Create your credential
https://serverless.com/framework/docs/providers/google/guide/credentials
Deploy your code
| serverless deploy | 
Confirmation
| # Confirm your code by function | 
More detail
If you want to know more detail, please see https://serverless.com/framework/docs/providers/google/guide/quick-start/ .
Concerns
- SLA is not guaranteed because it is in beta test.
- It is impossible to configure environment variable like AWS.
- There is no mechanism like cron, scheduled job.
- It is thought that the test with GCP is not done much.
🎉 Appendix
Manage permission for your Lambda function
If your function read/edit data in DynamoDB table, you can add these additional permission statements directly in your serverless.yml:
| provider: | 
If you want to know more details, please see https://serverless.com/blog/abcs-of-iam-permissions/ .
Python / Load and delete a credential
Load and delete a credential data from environment variable in AWS lambda:
| def load_credential(): | 
🍄 References
- https://dev.classmethod.jp/cloud/aws/serverless-framework-with-python-3-6/
- https://qiita.com/bremen/items/7e9407349d74a6a62822
- https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html
🖥 Recommended VPS Service
    VULTR provides high performance cloud compute environment for you.
    Vultr has 15 data-centers strategically placed around the globe, you can use a VPS with 512 MB memory for just $ 2.5 / month ($ 0.004 / hour).
    In addition, Vultr is up to 4 times faster than the competition, so please check it => Check Benchmark Results!!
    
     
    
