AWS Developer Tools Blog
Creating .NET Core AWS Lambda Projects without Visual Studio
In the last post, we talked about AWS Lambda deployment integration with the dotnet CLI, using the Amazon.Lambda.Tools NuGet package to deploy Lambda functions and serverless applications. But what if you want to create an AWS Lambda project outside of Visual Studio? This is especially important if you’re working on platforms other than Windows.
The “dotnet new” Command
The dotnet CLI has a command named new that you can use to create .NET Core projects from the command line. For example, by default there are options for creating many of the common project types.
C:\BlogContent> dotnet new -all
Template Instantiation Commands for .NET Core CLI.
Templates Short Name Language Tags
------------------------------------------------------------------------------------------------------
Console Application console [C#], F# Common/Console
Class library classlib [C#], F# Common/Library
Unit Test Project mstest [C#], F# Test/MSTest
xUnit Test Project xunit [C#], F# Test/xUnit
ASP.NET Core Empty web [C#] Web/Empty
ASP.NET Core Web App mvc [C#], F# Web/MVC
ASP.NET Core Web API webapi [C#] Web/WebAPI
Nuget Config nugetconfig Config
Web Config webconfig Config
Solution File sln Solution
Examples:
dotnet new mvc --auth None --framework netcoreapp1.1
dotnet new mvc --framework netcoreapp1.1
dotnet new --help
The new command also has the ability to add more project types via NuGet. We recently released a new NuGet package named Amazon.Lambda.Templates that wraps up all the templates we expose in Visual Studio as project types you can create from the dotnet CLI. To install this NuGet package, run the following command.
dotnet new -i Amazon.Lambda.Templates::*
The trailing ::* in the command specifies to install the latest version. Once the install is complete, the Lambda templates show up as part of dotnet new.
C:\BlogContent> dotnet new -all
Template Instantiation Commands for .NET Core CLI.
Templates Short Name Language Tags
------------------------------------------------------------------------------------------------------
Lambda Detect Image Labels lambda.DetectImageLabels [C#] AWS/Lambda/Function
Lambda Empty Function lambda.EmptyFunction [C#] AWS/Lambda/Function
Lambda Simple DynamoDB Function lambda.DynamoDB [C#] AWS/Lambda/Function
Lambda Simple Kinesis Function lambda.Kinesis [C#] AWS/Lambda/Function
Lambda Simple S3 Function lambda.S3 [C#] AWS/Lambda/Function
Lambda ASP.NET Core Web API lambda.AspNetCoreWebAPI [C#] AWS/Lambda/Serverless
Lambda DynamoDB Blog API lambda.DynamoDBBlogAPI [C#] AWS/Lambda/Serverless
Lambda Empty Serverless lambda.EmptyServerless [C#] AWS/Lambda/Serverless
Console Application console [C#], F# Common/Console
Class library classlib [C#], F# Common/Library
Unit Test Project mstest [C#], F# Test/MSTest
xUnit Test Project xunit [C#], F# Test/xUnit
ASP.NET Core Empty web [C#] Web/Empty
ASP.NET Core Web App mvc [C#], F# Web/MVC
ASP.NET Core Web API webapi [C#] Web/WebAPI
Nuget Config nugetconfig Config
Web Config webconfig Config
Solution File sln Solution
Examples:
dotnet new mvc --auth None --framework netcoreapp1.1
dotnet new classlib
dotnet new --help
C:\BlogContent>
To get details about a template, you can use the help command.
dotnet new lambda.EmptyFunction –help
C:\BlogContent> dotnet new lambda.EmptyFunction --help
Template Instantiation Commands for .NET Core CLI.
Lambda Empty Function (C#)
Author: AWS
Options:
-p|--profile The AWS credentials profile set in aws-lambda-tools-defaults.json and used as the default profile when interacting with AWS.
string - Optional
-r|--region The AWS region set in aws-lambda-tools-defaults.json and used as the default region when interacting with AWS.
string - Optional
You can see here that the template takes two optional parameters to set the profile and region. These values are written to the aws-lambda-tools-default.json so you can get started deploying with the Lambda tooling right away.
To create a function, run the following command.
dotnet new lambda.EmptyFunction --name BlogFunction --profile default --region us-east-2
This creates a project for the Lambda function and a test project. We can now use any editor we want to build and test our .NET Core Lambda function. Once we’re ready to deploy the function, we run the following commands.
cd ./BlogFunction/src/BlogFunction dotnet restore dotnet lambda deploy-function BlogFunction –function-role TestRole
After deployment,we can even test the function from the command line by using the following command.
dotnet lambda invoke-function BlogFunction --payload "Hello World"
C:\BlogContent> dotnet lambda invoke-function BlogFunction --payload "Hello World"
Payload:
"HELLO WORLD"
Log Tail:
START RequestId: a54b750b-0dca-11e7-9099-27598ea7c35d Version: $LATEST
END RequestId: a54b750b-0dca-11e7-9099-27598ea7c35d
REPORT RequestId: a54b750b-0dca-11e7-9099-27598ea7c35d Duration: 0.99 ms Billed Duration: 100 ms Memory Size: 256 MB Max Memory Used: 42 MB
Summary
With our Lambda tooling provided by Amazon.Lambda.Tools and our project templates provided by Amazon.Lambda.Templates, you can develop .NET Core Lambda functions on any platform. As always, let us know what you think on our GitHub repository.