Skip to content

Commit c8ce789

Browse files
authored
Add LambdaFunctionOptions type to allow additional optional settings to be made for the Lambda function. Added the logging options as initial place options. (#33)
1 parent 40b9146 commit c8ce789

File tree

7 files changed

+43
-2
lines changed

7 files changed

+43
-2
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"Projects": [
3+
{
4+
"Name": "Aspire.Hosting.AWS",
5+
"Type": "Patch",
6+
"ChangelogMessages": [
7+
"Add ability to configure log format and level for Lambda functions"
8+
]
9+
}
10+
]
11+
}

Directory.Packages.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<PackageVersion Include="AWSSDK.CloudFormation" Version="3.7.402.6" />
1616
<PackageVersion Include="AWSSDK.Core" Version="3.7.402.2" />
1717
<PackageVersion Include="AWSSDK.DynamoDBv2" Version="3.7.405.23" />
18+
<PackageVersion Include="AWSSDK.Lambda" Version="3.7.411.39" />
1819
<PackageVersion Include="AWSSDK.SecurityToken" Version="3.7.401.45" />
1920
<PackageVersion Include="AWSSDK.SimpleNotificationService" Version="3.7.400.96" />
2021
<PackageVersion Include="AWSSDK.SQS" Version="3.7.400.96" />

playground/Lambda/Lambda.AppHost/Program.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
using Amazon.Lambda;
23
using Aspire.Hosting.AWS.Lambda;
34

45
#pragma warning disable CA2252 // This API requires opting into preview features
@@ -7,7 +8,7 @@
78

89
var awsSdkConfig = builder.AddAWSSDKConfig().WithRegion(Amazon.RegionEndpoint.USWest2);
910

10-
builder.AddAWSLambdaFunction<Projects.ToUpperLambdaFunctionExecutable>("ToUpperFunction", lambdaHandler: "ToUpperLambdaFunctionExecutable");
11+
builder.AddAWSLambdaFunction<Projects.ToUpperLambdaFunctionExecutable>("ToUpperFunction", lambdaHandler: "ToUpperLambdaFunctionExecutable", new LambdaFunctionOptions { ApplicationLogLevel = ApplicationLogLevel.DEBUG, LogFormat = LogFormat.JSON});
1112

1213
var defaultRouteLambda = builder.AddAWSLambdaFunction<Projects.WebDefaultLambdaFunction>("LambdaDefaultRoute", lambdaHandler: "WebDefaultLambdaFunction");
1314
var addRouteLambda = builder.AddAWSLambdaFunction<Projects.WebAddLambdaFunction>("AddDefaultRoute", lambdaHandler: "WebAddLambdaFunction");

playground/Lambda/ToUpperLambdaFunctionExecutable/LambdaFunction.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ private string TracingLambdaHandler(string input, ILambdaContext context)
2222

2323
private string LambdaHandler(string input, ILambdaContext context)
2424
{
25+
context.Logger.LogDebug("Performing ToUpper for {input}", input);
26+
2527
return input.ToUpper();
2628
}
2729
}

src/Aspire.Hosting.AWS/Aspire.Hosting.AWS.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<PackageReference Include="Amazon.CDK.Lib" />
1616
<PackageReference Include="AWSSDK.Core" />
1717
<PackageReference Include="AWSSDK.CloudFormation" />
18+
<PackageReference Include="AWSSDK.Lambda" />
1819
<PackageReference Include="AWSSDK.SecurityToken" />
1920
<PackageReference Include="AWSSDK.SSO" />
2021
<PackageReference Include="AWSSDK.SSOOIDC" />

src/Aspire.Hosting.AWS/Lambda/LambdaExtensions.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@ public static class LambdaExtensions
3030
/// <param name="lambdaHandler">Lambda function handler</param>
3131
/// <returns></returns>
3232
/// <exception cref="NotImplementedException"></exception>
33-
public static IResourceBuilder<LambdaProjectResource> AddAWSLambdaFunction<TLambdaProject>(this IDistributedApplicationBuilder builder, string name, string lambdaHandler) where TLambdaProject : IProjectMetadata, new()
33+
public static IResourceBuilder<LambdaProjectResource> AddAWSLambdaFunction<TLambdaProject>(this IDistributedApplicationBuilder builder, string name, string lambdaHandler, LambdaFunctionOptions? options = null) where TLambdaProject : IProjectMetadata, new()
3434
{
35+
options ??= new LambdaFunctionOptions();
3536
var metadata = new TLambdaProject();
3637

3738
var serviceEmulator = AddOrGetLambdaServiceEmulatorResource(builder);
@@ -63,6 +64,9 @@ public static class LambdaExtensions
6364
context.EnvironmentVariables["AWS_LAMBDA_FUNCTION_NAME"] = name;
6465
context.EnvironmentVariables["_HANDLER"] = lambdaHandler;
6566

67+
context.EnvironmentVariables["AWS_LAMBDA_LOG_FORMAT"] = options.LogFormat.Value;
68+
context.EnvironmentVariables["AWS_LAMBDA_LOG_LEVEL"] = options.ApplicationLogLevel.Value;
69+
6670
var lambdaEmulatorEndpoint = $"http://{serviceEmulatorEndpoint.Host}:{serviceEmulatorEndpoint.Port}/?function={Uri.EscapeDataString(name)}";
6771

6872
resource.WithAnnotation(new ResourceCommandAnnotation(
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
3+
using Amazon.CDK.AWS.Lambda;
4+
5+
namespace Aspire.Hosting.AWS.Lambda;
6+
7+
/// <summary>
8+
/// Options that can be added to the Lambda function resource.
9+
/// </summary>
10+
public class LambdaFunctionOptions
11+
{
12+
/// <summary>
13+
/// The format for the log messages generated by the Lambda function. Default format is Text.
14+
/// </summary>
15+
public Amazon.Lambda.LogFormat LogFormat { get; set; } = Amazon.Lambda.LogFormat.Text;
16+
17+
/// <summary>
18+
/// The minimum log level captured from the Lambda function. Default log level is INFO.
19+
/// </summary>
20+
public Amazon.Lambda.ApplicationLogLevel ApplicationLogLevel { get; set; } = Amazon.Lambda.ApplicationLogLevel.INFO;
21+
}

0 commit comments

Comments
 (0)