Added project files from lamda-dotnet-console
This commit is contained in:
parent
144a482f75
commit
9b4d0c6ea3
11 changed files with 307 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
**/bin
|
||||||
|
**/obj
|
48
ContactForm.sln
Normal file
48
ContactForm.sln
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 15
|
||||||
|
VisualStudioVersion = 15.0.26124.0
|
||||||
|
MinimumVisualStudioVersion = 15.0.26124.0
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ContactForm", "src\ContactForm\ContactForm.csproj", "{8A89BCD5-9930-4BC9-9AE5-6239C9A27846}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ContactForm.Tests", "test\ContactForm.Tests\ContactForm.Tests.csproj", "{D1742E79-E2B1-4F9E-AF74-6407051ADA4F}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
|
Debug|x86 = Debug|x86
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
Release|x64 = Release|x64
|
||||||
|
Release|x86 = Release|x86
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{8A89BCD5-9930-4BC9-9AE5-6239C9A27846}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{8A89BCD5-9930-4BC9-9AE5-6239C9A27846}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{8A89BCD5-9930-4BC9-9AE5-6239C9A27846}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{8A89BCD5-9930-4BC9-9AE5-6239C9A27846}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{8A89BCD5-9930-4BC9-9AE5-6239C9A27846}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{8A89BCD5-9930-4BC9-9AE5-6239C9A27846}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{8A89BCD5-9930-4BC9-9AE5-6239C9A27846}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{8A89BCD5-9930-4BC9-9AE5-6239C9A27846}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{8A89BCD5-9930-4BC9-9AE5-6239C9A27846}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{8A89BCD5-9930-4BC9-9AE5-6239C9A27846}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{8A89BCD5-9930-4BC9-9AE5-6239C9A27846}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{8A89BCD5-9930-4BC9-9AE5-6239C9A27846}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{D1742E79-E2B1-4F9E-AF74-6407051ADA4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{D1742E79-E2B1-4F9E-AF74-6407051ADA4F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{D1742E79-E2B1-4F9E-AF74-6407051ADA4F}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{D1742E79-E2B1-4F9E-AF74-6407051ADA4F}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{D1742E79-E2B1-4F9E-AF74-6407051ADA4F}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{D1742E79-E2B1-4F9E-AF74-6407051ADA4F}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{D1742E79-E2B1-4F9E-AF74-6407051ADA4F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{D1742E79-E2B1-4F9E-AF74-6407051ADA4F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{D1742E79-E2B1-4F9E-AF74-6407051ADA4F}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{D1742E79-E2B1-4F9E-AF74-6407051ADA4F}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{D1742E79-E2B1-4F9E-AF74-6407051ADA4F}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{D1742E79-E2B1-4F9E-AF74-6407051ADA4F}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
31
src/ContactForm/App.cs
Normal file
31
src/ContactForm/App.cs
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
using Serilog;
|
||||||
|
|
||||||
|
namespace ContactForm
|
||||||
|
{
|
||||||
|
public class App
|
||||||
|
{
|
||||||
|
private readonly AppSettings _settings;
|
||||||
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
|
public App(
|
||||||
|
AppSettings settings,
|
||||||
|
ILogger logger
|
||||||
|
)
|
||||||
|
{
|
||||||
|
_settings = settings ??
|
||||||
|
throw new ArgumentNullException(nameof(settings));
|
||||||
|
_logger = logger ??
|
||||||
|
throw new ArgumentNullException(nameof(settings));
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Run(string input)
|
||||||
|
{
|
||||||
|
_logger.Information("Lambda Function Starting");
|
||||||
|
var result = $"{_settings.Prefix}{input?.ToUpper()}";
|
||||||
|
_logger.Information("Lambda Function Finished");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
25
src/ContactForm/ContactForm.csproj
Normal file
25
src/ContactForm/ContactForm.csproj
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||||
|
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
|
||||||
|
<AWSProjectType>Lambda</AWSProjectType>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Amazon.Lambda.Core" Version="1.0.0"/>
|
||||||
|
<PackageReference Include="Amazon.Lambda.Serialization.Json" Version="1.4.0"/>
|
||||||
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.2.0"/>
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="2.2.0"/>
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="2.2.0"/>
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="2.2.0"/>
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.2.0"/>
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="2.2.0"/>
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="2.2.0"/>
|
||||||
|
<PackageReference Include="Serilog" Version="2.7.1"/>
|
||||||
|
<PackageReference Include="Serilog.Extensions.Logging" Version="2.0.2"/>
|
||||||
|
<PackageReference Include="Serilog.Settings.Configuration" Version="3.0.1"/>
|
||||||
|
<PackageReference Include="Serilog.Sinks.Seq" Version="4.0.0"/>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="appsettings.json" CopyToPublishDirectory="Always" CopyToOutputDirectory="PreserveNewest"/>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
67
src/ContactForm/Function.cs
Normal file
67
src/ContactForm/Function.cs
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
using Amazon.Lambda.Core;
|
||||||
|
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
using Serilog;
|
||||||
|
|
||||||
|
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
|
||||||
|
[assembly : LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
|
||||||
|
|
||||||
|
namespace ContactForm
|
||||||
|
{
|
||||||
|
public class Function
|
||||||
|
{
|
||||||
|
private AppSettings _appSettings;
|
||||||
|
private ILogger _logger;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Lamda Function
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
/// <returns>string</returns>
|
||||||
|
public string FunctionHandler(string input, ILambdaContext context)
|
||||||
|
{
|
||||||
|
var configuration = new ConfigurationBuilder()
|
||||||
|
.SetBasePath(Directory.GetCurrentDirectory())
|
||||||
|
.AddJsonFile("appsettings.json", optional : false, reloadOnChange : true)
|
||||||
|
.AddEnvironmentVariables(prefix: "LAMBDA_")
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
_appSettings = new AppSettings();
|
||||||
|
configuration.GetSection("App").Bind(_appSettings);
|
||||||
|
|
||||||
|
_logger = new LoggerConfiguration()
|
||||||
|
.ReadFrom.Configuration(configuration)
|
||||||
|
.Destructure.AsScalar<JObject>()
|
||||||
|
.Destructure.AsScalar<JArray>()
|
||||||
|
.CreateLogger();
|
||||||
|
|
||||||
|
var serviceCollection = new ServiceCollection();
|
||||||
|
ConfigureServices(serviceCollection);
|
||||||
|
|
||||||
|
var serviceProvider = serviceCollection.BuildServiceProvider();
|
||||||
|
var result = serviceProvider.GetService<App>().Run(input);
|
||||||
|
Log.CloseAndFlush();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ConfigureServices(IServiceCollection serviceCollection)
|
||||||
|
{
|
||||||
|
serviceCollection.AddTransient<App>();
|
||||||
|
serviceCollection.AddSingleton<AppSettings>(_appSettings);
|
||||||
|
serviceCollection.AddSingleton<ILogger>(_logger);
|
||||||
|
serviceCollection.AddLogging(logBuilder => logBuilder.AddSerilog(dispose: true));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
7
src/ContactForm/Settings/AppSettings.cs
Normal file
7
src/ContactForm/Settings/AppSettings.cs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
namespace ContactForm
|
||||||
|
{
|
||||||
|
public class AppSettings
|
||||||
|
{
|
||||||
|
public string Prefix { get; set; }
|
||||||
|
}
|
||||||
|
}
|
28
src/ContactForm/appsettings.json
Normal file
28
src/ContactForm/appsettings.json
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"App": {
|
||||||
|
"Prefix": "Test"
|
||||||
|
},
|
||||||
|
"Serilog": {
|
||||||
|
"Using": ["Serilog.Sinks.Seq"],
|
||||||
|
"MinimumLevel": {
|
||||||
|
"Default": "Debug",
|
||||||
|
"Override": {
|
||||||
|
"Microsoft": "Warning",
|
||||||
|
"System": "Warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"WriteTo": [
|
||||||
|
{
|
||||||
|
"Name": "Seq",
|
||||||
|
"Args": {
|
||||||
|
"serverUrl": "http://localhost:5341",
|
||||||
|
"restrictedToMinimumLevel": "Information"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Enrich": ["FromLogContext"],
|
||||||
|
"Properties": {
|
||||||
|
"ApplicationName": "Lambda.Example"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
19
src/ContactForm/aws-lambda-tools-defaults.json
Normal file
19
src/ContactForm/aws-lambda-tools-defaults.json
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"Information": [
|
||||||
|
"This file provides default values for the deployment wizard inside Visual Studio and the AWS Lambda commands added to the .NET Core CLI.",
|
||||||
|
"To learn more about the Lambda commands with the .NET Core CLI execute the following command at the command line in the project root directory.",
|
||||||
|
|
||||||
|
"dotnet lambda help",
|
||||||
|
|
||||||
|
"All the command line options for the Lambda command can be specified in this file."
|
||||||
|
],
|
||||||
|
|
||||||
|
"profile": "default",
|
||||||
|
"region": "eu-west-1",
|
||||||
|
"configuration": "Release",
|
||||||
|
"framework": "netcoreapp2.1",
|
||||||
|
"function-runtime": "dotnetcore2.1",
|
||||||
|
"function-memory-size": 256,
|
||||||
|
"function-timeout": 30,
|
||||||
|
"function-handler": "lambda-dotnet-console::ContactForm.Function::FunctionHandler"
|
||||||
|
}
|
23
test/ContactForm.Tests/ContactForm.Tests.csproj
Normal file
23
test/ContactForm.Tests/ContactForm.Tests.csproj
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
|
||||||
|
<PackageReference Include="Amazon.Lambda.Core" Version="1.0.0" />
|
||||||
|
<PackageReference Include="Amazon.Lambda.TestUtilities" Version="1.0.0" />
|
||||||
|
|
||||||
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.5.0" />
|
||||||
|
<PackageReference Include="xunit" Version="2.3.1" />
|
||||||
|
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\src\ContactForm\ContactForm.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="appsettings.json" CopyToPublishDirectory="Always" CopyToOutputDirectory="PreserveNewest"/>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
29
test/ContactForm.Tests/FunctionTest.cs
Normal file
29
test/ContactForm.Tests/FunctionTest.cs
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
using Amazon.Lambda.Core;
|
||||||
|
using Amazon.Lambda.TestUtilities;
|
||||||
|
|
||||||
|
using ContactForm;
|
||||||
|
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace ContactForm.Tests
|
||||||
|
{
|
||||||
|
public class FunctionTest
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void TestToUpperFunction()
|
||||||
|
{
|
||||||
|
|
||||||
|
// Invoke the lambda function and confirm the string was upper cased.
|
||||||
|
var function = new Function();
|
||||||
|
var context = new TestLambdaContext();
|
||||||
|
var upperCase = function.FunctionHandler("hello world", context);
|
||||||
|
|
||||||
|
Assert.Equal("TestHELLO WORLD", upperCase);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
28
test/ContactForm.Tests/appsettings.json
Normal file
28
test/ContactForm.Tests/appsettings.json
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"App": {
|
||||||
|
"Prefix": "Test"
|
||||||
|
},
|
||||||
|
"Serilog": {
|
||||||
|
"Using": ["Serilog.Sinks.Seq"],
|
||||||
|
"MinimumLevel": {
|
||||||
|
"Default": "Debug",
|
||||||
|
"Override": {
|
||||||
|
"Microsoft": "Warning",
|
||||||
|
"System": "Warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"WriteTo": [
|
||||||
|
{
|
||||||
|
"Name": "Seq",
|
||||||
|
"Args": {
|
||||||
|
"serverUrl": "http://localhost:5341",
|
||||||
|
"restrictedToMinimumLevel": "Information"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Enrich": ["FromLogContext"],
|
||||||
|
"Properties": {
|
||||||
|
"ApplicationName": "Lambda.Example"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue