serverlessDotNetStarter
Starter template for serverless framework with following scope:
- deploy C# / NET 6 solution in AWS cloud using:
- Lambda
- Api Gateway
- debug and test solution locally in Visual Studio Code
- works operating system independent
Prerequisites to install
- NodeJS
- Serverless Framework CLI
- .NET Core 6
- AWS-Lambda-DotNet
- Visual Studio Code
- C# Extension for Visual Studio Code
Verify that everything is installed (copy & paste)
# package manager for nodejsnpm -v# serverless framework cli > 1.5sls -v# dotnet (cli) > 6.0dotnet --version
Installation (copy & paste)
# clone solution# serverless create --template-url https://github.com/pharindoko/serverlessDotNetStarter --path {SERVICE_NAME}serverless create --template-url https://github.com/pharindoko/serverlessDotNetStarter --path serverlessDotNetStartercd serverlessDotNetStarter# restore / install dotnet references described in csproj filedotnet restore AwsDotnetCsharp.csproj# install Lambda NET Mock Test Tool and Amazon Lambda Tools# more details: https://github.com/aws/aws-lambda-dotnet/tree/master/Tools/LambdaTestTooldotnet tool install -g Amazon.Lambda.Toolsdotnet tool install --global Amazon.Lambda.TestTool-6.0dotnet tool list -g# required dotnet packages:## Package Id Version Commands------------------------------------------------------------------------#amazon.lambda.testtool-6.0 0.12.4 dotnet-lambda-test-tool-6.0#amazon.lambda.tools 5.4.5 dotnet-lambda
For VS Code Debugging:
code --install-extension ms-dotnettools.csharp --force
Debug & Test locally
I followed this guideline: (Please read in case of issues)
How to Debug .NET Core Lambda Functions Locally with the Serverless Framework
1. Open Visual Studio Code
# open Visual Studio Codecode .
2. Setup Amazon Lambda Testtool
Edit the "program" property in .vscode/launch.json file and update placeholder for {user} (placeholders marked in bold)
For Windows
"program": /Users/{user}/.dotnet/tools/dotnet-lambda-test-tool-6.0
For MacOs / Linux
"program": /Users/{user}/.dotnet/tools/dotnet-lambda-test-tool-6.0
More information:
- https://github.com/aws/aws-lambda-dotnet/tree/master/Tools/LambdaTestTool#configure-for-visual-studio-code,
- https://github.com/aws/aws-lambda-dotnet/tree/master/Tools/LambdaTestTool#configure-for-visual-studio-for-mac
In case of issues - try this:
"program": /Users/{user}/.dotnet/tools/.store/amazon.lambda.testtool-6.0/{nuget-version}/amazon.lambda.testtool-6.0/{nuget-version}/tools/net6.0/any/Amazon.Lambda.TestTool.WebTester6.0.dll",
how to get the right nuget version ?
dotnet tool list -g
Result:
Package Id Version Commands
------------------------------------------------------------------------
amazon.lambda.testtool-6.0 e.g. version 0.12.4 dotnet-lambda-test-tool-6.0
3. Press F5 to start the debugging and local testing of lambda function
- Hint: Lambda Mock Test Tool should be started locally on port 5050
- Click on Button "Execute Function"
you should get hello world as a result.
Test Another Example: getquerystring
-
Select function to getquerystring (upper right dropdownlist)
-
Insert this json value in the function input textbox for a first test:
{"httpMethod": "GET","queryStringParameters": {"foo": "dfgdfg","woot": "food"}}
Mind: For a successful response querystringParameter foo must be inserted
Build Package
Mac OS or Linux
./build.sh
Windows
build.cmd
Deploy via Serverless Framework
serverless deploy
A cloudformation stack in AWS will be created in background containing all needed resources
After successful deployment you can see following output
Service Information service: myService stage: dev region: us-east-1 stack: myService-dev resources: 10 api keys: None endpoints: GET - endpointUrl --> https://{api}.execute-api.us-east-1.amazonaws.com/dev/hello functions: hello: myService-dev-hello layers: None
Test endpoint after deployment
2 simple options:
- Use postman as UI Tool
- Use curl
Use the endpointUrl from up above.
curl https://{api}.execute-api.us-east-1.amazonaws.com/dev/hellocurl https://{api}.execute-api.us-east-1.amazonaws.com/dev/getquerystring?foo=test
Mind: For a successful response of function getquerystring the querystringParameter foo must be inserted
FAQ
Can I use the solution with Visual Studio IDE (2017 or 2019)
How to add an api key
- Setup API Key in serverless.yml file https://serverless.com/framework/docs/providers/aws/events/apigateway/#setting-api-keys-for-your-rest-api
How to add additional lambda functions
- Create a new C# Function in Handler.cs or use another file
- Add a new function to serverless.yml and reference the C# Function as handler https://serverless.com/framework/docs/providers/aws/guide/functions/
Destroy the stack in the cloud
sls remove
I deployed the solution but I get back a http 500 error
- Check Cloudwatch Logs in AWS - the issue should be describe there.
- For a successful response of function getquerystring the querystringParameter foo must be inserted
How can I change the lambda region or stack name
Please have a look to the serverless guideline: https://serverless.com/framework/docs/providers/aws/guide/deploying/