Skip to content

A .NET 6 starter solution for AWS Lambda - easily to deploy via serverless framework and locally debugable in VS Code

Notifications You must be signed in to change notification settings

pharindoko/serverlessDotNetStarter

Repository files navigation

serverlessDotNetStarter .NET 6

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

Verify that everything is installed (copy & paste)

# package manager for nodejs
npm -v
# serverless framework cli > 1.5
sls -v
# dotnet (cli) > 6.0
dotnet --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 serverlessDotNetStarter
cd serverlessDotNetStarter
# restore / install dotnet references described in csproj file
dotnet 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/LambdaTestTool

dotnet tool install -g Amazon.Lambda.Tools
dotnet tool install --global Amazon.Lambda.TestTool-6.0
dotnet 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 Code
code .

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:

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"

Image description

you should get hello world as a result.

Test Another Example: getquerystring

  1. Select function to getquerystring (upper right dropdownlist)

  2. 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 the endpointUrl from up above.

curl https://{api}.execute-api.us-east-1.amazonaws.com/dev/hello
curl 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)
  1. Yes. Here`s the guideline.
How to add an api key
  1. 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
  1. Create a new C# Function in Handler.cs or use another file
  2. 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
  1. Check Cloudwatch Logs in AWS - the issue should be describe there.
  2. 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/

About

A .NET 6 starter solution for AWS Lambda - easily to deploy via serverless framework and locally debugable in VS Code

Topics

Resources

Stars

Watchers

Forks

Contributors 3

  •  
  •  
  •  
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy