playground/Lambda/Lambda.AppHost/Program.cs (29 lines of code) (raw):
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
using Amazon.Lambda;
using Aspire.Hosting;
using Aspire.Hosting.AWS.Lambda;
#pragma warning disable CA2252 // This API requires opting into preview features
var builder = DistributedApplication.CreateBuilder(args);
var awsSdkConfig = builder.AddAWSSDKConfig().WithRegion(Amazon.RegionEndpoint.USWest2);
var cdkStackResource = builder.AddAWSCDKStack("AWSLambdaPlaygroundResources");
var sqsDemoQueue1 = cdkStackResource.AddSQSQueue("DemoQueue1");
var sqsDemoQueue2 = cdkStackResource.AddSQSQueue("DemoQueue2");
builder.AddAWSLambdaFunction<Projects.ToUpperLambdaFunctionExecutable>("ToUpperFunction", lambdaHandler: "ToUpperLambdaFunctionExecutable", new LambdaFunctionOptions { ApplicationLogLevel = ApplicationLogLevel.DEBUG, LogFormat = LogFormat.JSON});
var defaultRouteLambda = builder.AddAWSLambdaFunction<Projects.WebDefaultLambdaFunction>("LambdaDefaultRoute", lambdaHandler: "WebDefaultLambdaFunction");
var listAwsResourcesRouteLambda = builder.AddAWSLambdaFunction<Projects.WebAWSCallsLambdaFunction>("ListAwsResourcesRoute", lambdaHandler: "WebAWSCallsLambdaFunction");
var addFunction = builder.AddAWSLambdaFunction<Projects.WebCalculatorFunctions>("AddFunction", lambdaHandler: "WebCalculatorFunctions::WebCalculatorFunctions.Functions::AddFunctionHandler");
var minusFunction = builder.AddAWSLambdaFunction<Projects.WebCalculatorFunctions>("MinusFunction", lambdaHandler: "WebCalculatorFunctions::WebCalculatorFunctions.Functions::MinusFunctionHandler");
var multiplyFunction = builder.AddAWSLambdaFunction<Projects.WebCalculatorFunctions>("MultiplyFunction", lambdaHandler: "WebCalculatorFunctions::WebCalculatorFunctions.Functions::MultiplyFunctionHandler");
var divideFunction = builder.AddAWSLambdaFunction<Projects.WebCalculatorFunctions>("DivideFunction", lambdaHandler: "WebCalculatorFunctions::WebCalculatorFunctions.Functions::DivideFunctionHandler");
builder.AddAWSAPIGatewayEmulator("APIGatewayEmulator", Aspire.Hosting.AWS.Lambda.APIGatewayType.HttpV2)
.WithReference(defaultRouteLambda, Method.Get, "/")
// Add route demonstrating making AWS servic calls
.WithReference(listAwsResourcesRouteLambda, Method.Get, "/aws/{service}")
// Add the Web API calculator routes
.WithReference(addFunction, Method.Get, "/add/{x}/{y}")
.WithReference(minusFunction, Method.Get, "/minus/{x}/{y}")
.WithReference(multiplyFunction, Method.Get, "/multiply/{x}/{y}")
.WithReference(divideFunction, Method.Get, "/divide/{x}/{y}");
builder.AddAWSLambdaFunction<Projects.SQSProcessorFunction>("SQSProcessorFunction", "SQSProcessorFunction::SQSProcessorFunction.Function::FunctionHandler")
.WithReference(awsSdkConfig)
.WithSQSEventSource(sqsDemoQueue1)
// These references are not necessary. It is added to confirm duplicate
// CDK output parameters are not attempted to be added.
.WithReference(sqsDemoQueue1)
.WithReference(sqsDemoQueue2);
builder.Build().Run();