-
-
Save CalvinAllen/1e88b7430ff34d46306cc489e3eaac46 to your computer and use it in GitHub Desktop.
| { | |
| "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" : "<snip>", | |
| "region" : "us-east-2", | |
| "configuration" : "Release", | |
| "framework" : "netcoreapp3.1", | |
| "function-runtime" : "dotnetcore3.1", | |
| "function-memory-size" : 512, | |
| "function-timeout" : 15, | |
| "function-handler" : "bootstrap::AWSLambda1.Function::FunctionHandler", | |
| "msbuild-parameters" : "--self-contained true", | |
| "function-name" : "Calvins-Test-Cron-Lambda", | |
| "function-description" : "", | |
| "function-role" : "<snip>", | |
| "tracing-mode" : "PassThrough", | |
| "environment-variables" : "" | |
| } |
| <Project Sdk="Microsoft.NET.Sdk"> | |
| <PropertyGroup> | |
| <OutputType>Exe</OutputType> | |
| <TargetFramework>netcoreapp3.1</TargetFramework> | |
| <LangVersion>latest</LangVersion> | |
| <AWSProjectType>Lambda</AWSProjectType> | |
| <AssemblyName>bootstrap</AssemblyName> | |
| </PropertyGroup> | |
| <ItemGroup> | |
| <PackageReference Include="Amazon.Lambda.CloudWatchLogsEvents" Version="2.0.0" /> | |
| <PackageReference Include="Amazon.Lambda.RuntimeSupport" Version="1.1.1" /> | |
| <PackageReference Include="Amazon.Lambda.Core" Version="1.1.0" /> | |
| <PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.0.0" /> | |
| </ItemGroup> | |
| </Project> |
| using Amazon.Lambda.Core; | |
| using Amazon.Lambda.RuntimeSupport; | |
| using Amazon.Lambda.Serialization.SystemTextJson; | |
| using System; | |
| using System.Threading.Tasks; | |
| using Amazon.Lambda.CloudWatchLogsEvents; | |
| namespace AWSLambda1 | |
| { | |
| public class Function | |
| { | |
| /// <summary> | |
| /// The main entry point for the custom runtime. | |
| /// </summary> | |
| /// <param name="args"></param> | |
| private static async Task Main(string[] args) | |
| { | |
| Func<CloudWatchLogsEvent, ILambdaContext, string> func = FunctionHandler; | |
| using(var handlerWrapper = HandlerWrapper.GetHandlerWrapper(func, new DefaultLambdaJsonSerializer())) | |
| using(var bootstrap = new LambdaBootstrap(handlerWrapper)) | |
| { | |
| await bootstrap.RunAsync(); | |
| } | |
| } | |
| /// <summary> | |
| /// A simple function that takes a string and does a ToUpper | |
| /// | |
| /// To use this handler to respond to an AWS event, reference the appropriate package from | |
| /// https://github.com/aws/aws-lambda-dotnet#events | |
| /// and change the string input parameter to the desired event type. | |
| /// </summary> | |
| /// <param name="input"></param> | |
| /// <param name="context"></param> | |
| /// <returns></returns> | |
| public static string FunctionHandler(CloudWatchLogsEvent input, ILambdaContext context) | |
| { | |
| return input?.Awslogs?.DecodeData(); | |
| } | |
| } | |
| } |
| { | |
| "errorType": "LambdaException", | |
| "errorMessage": "Unable to load type 'AWSLambda1.Function' from assembly 'bootstrap'." | |
| } |
| START RequestId: 5f974297-4f05-432e-a002-d3fba58ea269 Version: $LATEST | |
| Unable to load type 'AWSLambda1.Function' from assembly 'bootstrap'.: LambdaException | |
| 14 May 2020 14:33:58,989 [WARN] ([email protected]:297 errno: Address family not supported by protocol) run_dotnet(dotnet_path, &args) failed | |
| END RequestId: 5f974297-4f05-432e-a002-d3fba58ea269 | |
| REPORT RequestId: 5f974297-4f05-432e-a002-d3fba58ea269 Duration: 931.38 ms Billed Duration: 1000 ms Memory Size: 512 MB Max Memory Used: 43 MB | |
| Unknown application error occurred |
Does your function need to know any details of how it was triggered? Are you hard coding parameters in the CloudWatchEvent?
No, I don't care about any params, just need it to get triggered.
This is our project file. We used the template from the AWS Toolkit for Visual Studio. We are not using a custom runtime, since AWS now supports 3.1 natively.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
<AWSProjectType>Lambda</AWSProjectType>
</PropertyGroup>
<ItemGroup>
<Content Include="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Amazon.Lambda.Core" Version="1.1.0" />
<PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="1.0.0" />
</ItemGroup>
</Project>Here is our trimmed down function. You may not need all the usings, I didn't delete what we had in place for our actual work.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using Amazon.Lambda.Core;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.LambdaJsonSerializer))]
namespace BradTest
{
public class Function
{
public async Task<string> Handler(ILambdaContext context)
{
// do stuff here
}
}
}Here is our trimmed down function. You may not need all the usings, I didn't delete what we had in place for our actual work.
using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Threading.Tasks; using Amazon.Lambda.Core; // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.LambdaJsonSerializer))] namespace BradTest { public class Function { public async Task<string> Handler(ILambdaContext context) { // do stuff here } } }
The code that was generated from the blueprint in the VS extension looks NOTHING like this...
I think it was Custom Runtime Function - which is probably the problem. It had comments in it indicating what to change to work against CloudWatchLogsEvent triggers, which I thought it was I needed.
Looking at what is generated for "Empty", its much closer to what you have.
I switched the configuration/settings/code over to match yours, and got it working!
Excellent!


Yeah, just a dirt simple function that will respond to a cron (CloudWatchLogsEvent). I can't get that part working, let alone what I will actually want the function to do in response to it.