Skip to content

Commit 44f4cdb

Browse files
Merge pull request #9 from localstack-dotnet/feature/full-release-preparations
Fix SQS Event Source LocalStack Integration
2 parents 7b56cf1 + 79edb2e commit 44f4cdb

File tree

41 files changed

+1461
-298
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1461
-298
lines changed

.github/workflows/ci-cd.yml

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -203,22 +203,26 @@ jobs:
203203
echo "📦 Base Version: $BASE_VERSION"
204204
205205
# Generate build metadata
206-
BUILD_DATE=$(date -u '+%Y%m%d')
207206
RUN_NUMBER="${{ github.run_number }}" # monotonic
208207
COMMIT_SHA=$(echo "${{ github.sha }}" | cut -c1-8)
209208
210209
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
211-
# Feature branches: 9.2.0-feature-name.20250804.abc12345
210+
# Feature branches: 9.5.0-feature-name.buildnumber (NuGet SemVer 2.0.0)
212211
BRANCH_NAME="${{ github.head_ref }}"
212+
# Sanitize branch name for use in version and artifact names
213213
SAFE_BRANCH=$(echo "$BRANCH_NAME" | sed 's/[^a-zA-Z0-9]/-/g' | tr '[:upper:]' '[:lower:]')
214214
VERSION="${BASE_VERSION}-${SAFE_BRANCH}.${RUN_NUMBER}"
215+
ARTIFACT_SUFFIX="${SAFE_BRANCH}-${RUN_NUMBER}"
215216
else
216-
# Master nightlies: 9.2.0.20250804.abc12345
217-
VERSION="${BASE_VERSION}.${RUN_NUMBER}"
217+
# Master CI builds: 9.5.0-ci.buildnumber (NuGet SemVer 2.0.0 pre-release)
218+
VERSION="${BASE_VERSION}-ci.${RUN_NUMBER}"
219+
ARTIFACT_SUFFIX="ci-${RUN_NUMBER}"
218220
fi
219221
220222
echo "version=${VERSION}" >> $GITHUB_OUTPUT
223+
echo "artifact_suffix=${ARTIFACT_SUFFIX}" >> $GITHUB_OUTPUT
221224
echo "📦 Final Package Version: ${VERSION}"
225+
echo "📦 Artifact Suffix: ${ARTIFACT_SUFFIX}"
222226
223227
- name: "Pack NuGet Package"
224228
run: |
@@ -241,7 +245,7 @@ jobs:
241245
- name: "Upload Package Artifacts"
242246
uses: actions/upload-artifact@v4
243247
with:
244-
name: "packages-${{ github.event_name == 'pull_request' && github.head_ref || github.ref_name }}-${{ github.run_number }}"
248+
name: "packages-${{ steps.version.outputs.artifact_suffix }}"
245249
path: |
246250
artifacts/*.nupkg
247251
artifacts/*.snupkg
@@ -252,7 +256,8 @@ jobs:
252256
echo "📦 Generating build summary..."
253257
echo "## 📦 Package Build Summary" >> $GITHUB_STEP_SUMMARY
254258
echo "- **Package**: LocalStack.Aspire.Hosting" >> $GITHUB_STEP_SUMMARY
255-
echo "- **Version**: ${{ steps.version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
256-
echo "- **Branch**: ${{ github.event_name == 'pull_request' && github.head_ref || github.ref_name }}" >> $GITHUB_STEP_SUMMARY
259+
echo "- **Version**: ${{ steps.version.outputs.version }} (NuGet SemVer 2.0.0)" >> $GITHUB_STEP_SUMMARY
260+
echo "- **Branch/Ref**: ${{ github.event_name == 'pull_request' && github.head_ref || github.ref_name }}" >> $GITHUB_STEP_SUMMARY
257261
echo "- **Commit**: ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
258262
echo "- **Published to**: GitHub Packages" >> $GITHUB_STEP_SUMMARY
263+
echo "- **Artifact**: packages-${{ steps.version.outputs.artifact_suffix }}" >> $GITHUB_STEP_SUMMARY

Directory.Packages.props

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project>
22
<ItemGroup>
33
<!-- third-party analyzers -->
4-
<PackageVersion Include="Meziantou.Analyzer" Version="2.0.210"/>
4+
<PackageVersion Include="Meziantou.Analyzer" Version="2.0.211"/>
55
<PackageVersion Include="Microsoft.CodeAnalysis.BannedApiAnalyzers" Version="4.14.0"/>
66
<PackageVersion Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="9.0.0"/>
77
<PackageVersion Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.14.15"/>
@@ -10,49 +10,51 @@
1010
<PackageVersion Include="Roslynator.Formatting.Analyzers" Version="4.14.0"/>
1111
<PackageVersion Include="SecurityCodeScan.VS2019" Version="5.6.7"/>
1212
<PackageVersion Include="SonarAnalyzer.CSharp" Version="10.15.0.120848"/>
13-
<PackageVersion Include="xunit.analyzers" Version="1.23.0"/>
13+
<PackageVersion Include="xunit.analyzers" Version="1.24.0"/>
1414
<PackageVersion Include="NSubstitute.Analyzers.CSharp" Version="1.0.17"/>
1515
<!-- aspire packages -->
16-
<PackageVersion Include="Aspire.Hosting" Version="9.4.0"/>
17-
<PackageVersion Include="Aspire.Hosting.AppHost" Version="9.4.0"/>
16+
<PackageVersion Include="Aspire.Hosting" Version="9.5.0"/>
17+
<PackageVersion Include="Aspire.Hosting.AppHost" Version="9.5.0"/>
1818
<PackageVersion Include="Aspire.Hosting.AWS" Version="9.2.6"/>
1919
<!-- aws packages -->
20-
<PackageVersion Include="AWSSDK.Core" Version="4.0.0.20"/>
21-
<PackageVersion Include="AWSSDK.DynamoDBv2" Version="4.0.3.3"/>
22-
<PackageVersion Include="AWSSDK.SQS" Version="4.0.0.18"/>
23-
<PackageVersion Include="AWSSDK.SimpleNotificationService" Version="4.0.0.17"/>
24-
<PackageVersion Include="AWSSDK.S3" Version="4.0.6.3"/>
25-
<PackageVersion Include="AWSSDK.Extensions.NETCore.Setup" Version="4.0.2.1"/>
20+
<PackageVersion Include="AWSSDK.Core" Version="4.0.0.29"/>
21+
<PackageVersion Include="AWSSDK.DynamoDBv2" Version="4.0.6.3"/>
22+
<PackageVersion Include="AWSSDK.SQS" Version="4.0.1.5"/>
23+
<PackageVersion Include="AWSSDK.SimpleNotificationService" Version="4.0.1.3"/>
24+
<PackageVersion Include="AWSSDK.S3" Version="4.0.7.4"/>
25+
<PackageVersion Include="AWSSDK.Extensions.NETCore.Setup" Version="4.0.3.1"/>
2626
<PackageVersion Include="AWS.Messaging" Version="1.0.1"/>
2727
<PackageVersion Include="AWS.Messaging.Telemetry.OpenTelemetry" Version="1.0.0"/>
28-
<PackageVersion Include="Amazon.Lambda.Core" Version="2.7.0"/>
28+
<PackageVersion Include="Amazon.Lambda.Core" Version="2.7.1"/>
2929
<PackageVersion Include="Amazon.Lambda.APIGatewayEvents" Version="2.7.1"/>
30+
<PackageVersion Include="Amazon.Lambda.SQSEvents" Version="2.2.0"/>
3031
<PackageVersion Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.4.4"/>
3132
<!-- localstack packages -->
3233
<PackageVersion Include="LocalStack.Client" Version="2.0.0"/>
3334
<PackageVersion Include="LocalStack.Client.Extensions" Version="2.0.0"/>
3435
<!-- microsoft packages -->
3536
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0"/>
36-
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="9.7.0"/>
37-
<PackageVersion Include="Microsoft.Extensions.ServiceDiscovery.Dns" Version="9.4.0"/>
37+
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="9.9.0"/>
38+
<PackageVersion Include="Microsoft.Extensions.ServiceDiscovery.Dns" Version="9.5.0"/>
3839
<!-- opentelemetry packages -->
3940
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.12.0"/>
4041
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.12.0"/>
4142
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.12.0"/>
42-
<PackageVersion Include="OpenTelemetry.Instrumentation.AWS" Version="1.12.0"/>
43-
<PackageVersion Include="OpenTelemetry.Instrumentation.AWSLambda" Version="1.12.0"/>
43+
<PackageVersion Include="OpenTelemetry.Instrumentation.AWS" Version="1.12.1"/>
44+
<PackageVersion Include="OpenTelemetry.Instrumentation.AWSLambda" Version="1.12.1"/>
4445
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.12.0"/>
4546
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.12.0"/>
4647
<!-- third-party packages -->
47-
<PackageVersion Include="Net.Codecrete.QrCodeGenerator" Version="2.0.7" />
48-
<PackageVersion Include="SkiaSharp" Version="3.119.0" />
49-
<PackageVersion Include="SkiaSharp.NativeAssets.Linux" Version="3.119.0" />
48+
<PackageVersion Include="Net.Codecrete.QrCodeGenerator" Version="2.0.7"/>
49+
<PackageVersion Include="SkiaSharp" Version="3.119.1"/>
50+
<PackageVersion Include="SkiaSharp.NativeAssets.Linux" Version="3.119.1"/>
5051
<!-- test packages -->
51-
<PackageVersion Include="Aspire.Hosting.Testing" Version="9.4.0"/>
52+
<PackageVersion Include="Aspire.Hosting.Testing" Version="9.5.0"/>
5253
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.14.1"/>
54+
<PackageVersion Include="MartinCostello.Logging.XUnit.v3" Version="0.6.0" />
5355
<PackageVersion Include="NSubstitute" Version="5.3.0"/>
54-
<PackageVersion Include="xunit.v3" Version="3.0.0"/>
55-
<PackageVersion Include="xunit.v3.runner.console" Version="3.0.0"/>
56-
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.3"/>
56+
<PackageVersion Include="xunit.v3" Version="3.0.1"/>
57+
<PackageVersion Include="xunit.v3.runner.console" Version="3.0.1"/>
58+
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.4"/>
5759
</ItemGroup>
5860
</Project>

LocalStack.sln

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LocalStack.Lambda.UrlShorte
3333
EndProject
3434
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LocalStack.Lambda.Redirector", "playground\lambda\LocalStack.Lambda.Redirector\LocalStack.Lambda.Redirector.csproj", "{84F96D01-34AB-4C73-96DB-CEC3F03EC192}"
3535
EndProject
36+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LocalStack.Lambda.Analyzer", "playground\lambda\LocalStack.Lambda.Analyzer\LocalStack.Lambda.Analyzer.csproj", "{46EBB86A-AE24-4A13-BFAE-475727DFDE57}"
37+
EndProject
3638
Global
3739
GlobalSection(SolutionConfigurationPlatforms) = preSolution
3840
Debug|Any CPU = Debug|Any CPU
@@ -82,6 +84,10 @@ Global
8284
{84F96D01-34AB-4C73-96DB-CEC3F03EC192}.Debug|Any CPU.Build.0 = Debug|Any CPU
8385
{84F96D01-34AB-4C73-96DB-CEC3F03EC192}.Release|Any CPU.ActiveCfg = Release|Any CPU
8486
{84F96D01-34AB-4C73-96DB-CEC3F03EC192}.Release|Any CPU.Build.0 = Release|Any CPU
87+
{46EBB86A-AE24-4A13-BFAE-475727DFDE57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
88+
{46EBB86A-AE24-4A13-BFAE-475727DFDE57}.Debug|Any CPU.Build.0 = Debug|Any CPU
89+
{46EBB86A-AE24-4A13-BFAE-475727DFDE57}.Release|Any CPU.ActiveCfg = Release|Any CPU
90+
{46EBB86A-AE24-4A13-BFAE-475727DFDE57}.Release|Any CPU.Build.0 = Release|Any CPU
8591
EndGlobalSection
8692
GlobalSection(NestedProjects) = preSolution
8793
{1D6CF6B7-D87E-4E3C-A7AD-E2B000642F47} = {7FF6089A-D52B-438B-870A-69D1A9D4ECB5}
@@ -96,5 +102,6 @@ Global
96102
{BFD7D3ED-B36A-4247-9F0C-5677F07C57D5} = {7E4F6513-FC4D-45F3-8A8D-348156DDD6B6}
97103
{BDC4A1A1-F9AA-470E-A416-577D319BEAED} = {7E4F6513-FC4D-45F3-8A8D-348156DDD6B6}
98104
{84F96D01-34AB-4C73-96DB-CEC3F03EC192} = {7E4F6513-FC4D-45F3-8A8D-348156DDD6B6}
105+
{46EBB86A-AE24-4A13-BFAE-475727DFDE57} = {7E4F6513-FC4D-45F3-8A8D-348156DDD6B6}
99106
EndGlobalSection
100107
EndGlobal

playground/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ Demonstrates AWS resource provisioning using CloudFormation templates and CDK st
1919

2020
Serverless development with hybrid emulators
2121

22-
Shows how LocalStack integrates with AWS Lambda and API Gateway emulators for serverless development. Builds a URL shortener service with QR code generation.
22+
Shows how LocalStack integrates with AWS Lambda and API Gateway emulators for serverless development. Builds a URL shortener service with QR code generation and analytics processing.
2323

24-
- **Technologies**: Lambda, API Gateway, DynamoDB, S3
24+
- **Technologies**: Lambda, API Gateway, DynamoDB, S3, SQS
2525
- **Architecture**: Hybrid (AWS emulators + LocalStack services)
2626
- **Configuration**: Auto-configure approach (recommended)
27-
- **Demo**: Complete URL shortener with QR codes
27+
- **Demo**: Complete URL shortener with QR codes and event-driven analytics
2828

2929
## Choose Your Path
3030

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
#pragma warning disable CA1822 // Member 'FunctionHandler' does not access instance data and can be marked as static
2+
#pragma warning disable S2325 // Make 'FunctionHandler' a static method.
3+
#pragma warning disable CA1812 // Error CA1812 : 'Function.ShortenRequest' is an internal class that is apparently never instantiated.
4+
#pragma warning disable CA1031 // Modify 'FunctionHandler' to catch a more specific allowed exception type, or rethrow the exception
5+
6+
using System.Diagnostics;
7+
using System.Globalization;
8+
using System.Text.Json;
9+
using Amazon.DynamoDBv2;
10+
using Amazon.DynamoDBv2.Model;
11+
using Amazon.Lambda.Core;
12+
using Amazon.Lambda.SQSEvents;
13+
using LocalStack.Client.Extensions;
14+
using LocalStack.Playground.ServiceDefaults.ActivitySources;
15+
using Microsoft.Extensions.DependencyInjection;
16+
using Microsoft.Extensions.Hosting;
17+
using OpenTelemetry.Instrumentation.AWSLambda;
18+
using OpenTelemetry.Trace;
19+
20+
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
21+
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]
22+
23+
namespace LocalStack.Lambda.Analyzer;
24+
25+
public class Function
26+
{
27+
private readonly TracerProvider _traceProvider;
28+
29+
private readonly IAmazonDynamoDB _amazonDynamoDb;
30+
31+
private readonly string _analyticsTable;
32+
33+
public Function()
34+
{
35+
var builder = new HostApplicationBuilder();
36+
37+
builder.AddServiceDefaults();
38+
39+
builder.Services.AddLocalStack(builder.Configuration);
40+
builder.Services.AddAwsService<IAmazonDynamoDB>();
41+
42+
var host = builder.Build();
43+
44+
_traceProvider = host.Services.GetRequiredService<TracerProvider>();
45+
_amazonDynamoDb = host.Services.GetRequiredService<IAmazonDynamoDB>();
46+
47+
_analyticsTable = builder.Configuration["AWS:Resources:AnalyticsTableName"] ?? throw new InvalidOperationException("Missing AWS:Resources:AnalyticsTableName");
48+
}
49+
50+
public Task FunctionHandler(SQSEvent sqsEvent, ILambdaContext context)
51+
{
52+
return AWSLambdaWrapper.TraceAsync(_traceProvider, async (proxyRequest, lambdaContext) =>
53+
{
54+
using var activity = RedirectorActivitySource.ActivitySource.StartActivity(nameof(FunctionHandler));
55+
56+
lambdaContext.Logger.LogInformation($"Processing {proxyRequest.Records.Count} analytics events");
57+
58+
foreach (var record in proxyRequest.Records)
59+
{
60+
try
61+
{
62+
var analyticsEvent = JsonSerializer.Deserialize<AnalyticsEvent>(record.Body);
63+
if (analyticsEvent != null)
64+
{
65+
await ProcessAnalyticsEventAsync(analyticsEvent, lambdaContext).ConfigureAwait(false);
66+
}
67+
}
68+
catch (Exception ex)
69+
{
70+
lambdaContext.Logger.LogError($"Error processing analytics event: {ex.Message}");
71+
activity?.SetStatus(ActivityStatusCode.Error, ex.Message);
72+
}
73+
}
74+
}, sqsEvent, context);
75+
}
76+
77+
private async Task ProcessAnalyticsEventAsync(AnalyticsEvent analyticsEvent, ILambdaContext context)
78+
{
79+
using var activity = RedirectorActivitySource.ActivitySource.StartActivity(nameof(ProcessAnalyticsEventAsync));
80+
81+
activity?.AddTag("eventType", analyticsEvent.EventType);
82+
activity?.AddTag("slug", analyticsEvent.Slug);
83+
84+
var item = new Dictionary<string, AttributeValue>(StringComparer.Ordinal)
85+
{
86+
["EventId"] = new() { S = Guid.NewGuid().ToString() },
87+
["Timestamp"] = new() { S = DateTime.UtcNow.ToString("O", CultureInfo.InvariantCulture) },
88+
["EventType"] = new() { S = analyticsEvent.EventType },
89+
["Slug"] = new() { S = analyticsEvent.Slug },
90+
["OriginalUrl"] = new() { S = analyticsEvent.OriginalUrl },
91+
["UserAgent"] = new() { S = analyticsEvent.UserAgent ?? "unknown" },
92+
["IpAddress"] = new() { S = analyticsEvent.IpAddress ?? "unknown" },
93+
};
94+
95+
await _amazonDynamoDb.PutItemAsync(new PutItemRequest
96+
{
97+
TableName = _analyticsTable,
98+
Item = item,
99+
}).ConfigureAwait(false);
100+
101+
context.Logger.LogInformation($"Processed {analyticsEvent.EventType} event for slug: {analyticsEvent.Slug}");
102+
}
103+
}
104+
105+
public sealed record AnalyticsEvent(
106+
string EventType, // "url_created" or "url_accessed"
107+
string Slug,
108+
string OriginalUrl,
109+
string? UserAgent = null,
110+
string? IpAddress = null);
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
<PropertyGroup>
3+
<TargetFramework>$(DefaultTargetFramework)</TargetFramework>
4+
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
5+
<AWSProjectType>Lambda</AWSProjectType>
6+
<!-- This property makes the build directory similar to a publish directory and helps the AWS .NET Lambda Mock Test Tool find project dependencies. -->
7+
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
8+
<!-- Generate ready to run images during publishing to improve cold start time. -->
9+
<PublishReadyToRun>true</PublishReadyToRun>
10+
<IsPackable>false</IsPackable>
11+
</PropertyGroup>
12+
13+
<ItemGroup>
14+
<PackageReference Include="AWSSDK.Core"/>
15+
<PackageReference Include="AWSSDK.DynamoDBv2"/>
16+
<PackageReference Include="Amazon.Lambda.Core"/>
17+
<PackageReference Include="Amazon.Lambda.SQSEvents"/>
18+
<PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson"/>
19+
20+
<PackageReference Include="LocalStack.Client"/>
21+
<PackageReference Include="LocalStack.Client.Extensions"/>
22+
</ItemGroup>
23+
24+
<ItemGroup>
25+
<ProjectReference Include="..\..\LocalStack.Playground.ServiceDefaults\LocalStack.Playground.ServiceDefaults.csproj"/>
26+
</ItemGroup>
27+
28+
<ItemGroup>
29+
<Content Update="appsettings.json">
30+
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
31+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
32+
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
33+
</Content>
34+
<Content Update="appsettings.Development.json">
35+
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
36+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
37+
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
38+
<DependentUpon>appsettings.json</DependentUpon>
39+
</Content>
40+
</ItemGroup>
41+
</Project>
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"$schema": "http://json.schemastore.org/launchsettings.json",
3+
"profiles": {
4+
"https": {
5+
"commandName": "Project",
6+
"dotnetRunMessages": true,
7+
"launchBrowser": true,
8+
"applicationUrl": "http://localhost:5366",
9+
"environmentVariables": {
10+
"ASPNETCORE_ENVIRONMENT": "Development"
11+
}
12+
},
13+
"http": {
14+
"commandName": "Project",
15+
"dotnetRunMessages": true,
16+
"launchBrowser": true,
17+
"applicationUrl": "https://localhost:7330;http://localhost:5366",
18+
"environmentVariables": {
19+
"ASPNETCORE_ENVIRONMENT": "Development"
20+
}
21+
},
22+
"Aspire_AnalyzerLambda": {
23+
"commandName": "Executable",
24+
"executablePath": "dotnet",
25+
"commandLineArgs": "exec --depsfile ./LocalStack.Lambda.Analyzer.deps.json --runtimeconfig ./LocalStack.Lambda.Analyzer.runtimeconfig.json $(HOME)/.dotnet/tools/.store/amazon.lambda.testtool/0.11.0/amazon.lambda.testtool/0.11.0/content/Amazon.Lambda.RuntimeSupport/net8.0/Amazon.Lambda.RuntimeSupport.dll LocalStack.Lambda.Analyzer::LocalStack.Lambda.Analyzer.Function::FunctionHandler",
26+
"workingDirectory": "./bin/$(Configuration)/net8.0"
27+
}
28+
}
29+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"Logging": {
3+
"LogLevel": {
4+
"Default": "Information",
5+
"Microsoft.AspNetCore": "Warning"
6+
}
7+
},
8+
"LocalStack": {
9+
"UseLocalStack": true
10+
}
11+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"Logging": {
3+
"LogLevel": {
4+
"Default": "Information",
5+
"Microsoft.AspNetCore": "Warning"
6+
}
7+
},
8+
"AllowedHosts": "*",
9+
"LocalStack": {
10+
"UseLocalStack": false
11+
}
12+
}

0 commit comments

Comments
 (0)