From 30f18311f44973e8b48c70ae4a5ebf52d0549603 Mon Sep 17 00:00:00 2001 From: Felipe Cotti Date: Tue, 12 May 2026 18:11:01 -0300 Subject: [PATCH 1/2] Add tighter and explicit timeout to S3 Client acquisition --- docs-builder.slnx | 3 ++- src/infra/docs-lambda-changelog-scrubber/Program.cs | 12 +++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/docs-builder.slnx b/docs-builder.slnx index acbab48b36..5704389aeb 100644 --- a/docs-builder.slnx +++ b/docs-builder.slnx @@ -65,7 +65,8 @@ - + + diff --git a/src/infra/docs-lambda-changelog-scrubber/Program.cs b/src/infra/docs-lambda-changelog-scrubber/Program.cs index 5da56e5125..47adb0bf68 100644 --- a/src/infra/docs-lambda-changelog-scrubber/Program.cs +++ b/src/infra/docs-lambda-changelog-scrubber/Program.cs @@ -43,7 +43,17 @@ IReadOnlyList BuildAllowlist() async Task Handler(SQSEvent ev, ILambdaContext context) { - using var s3Client = new AmazonS3Client(); + var region = Amazon.RegionEndpoint.GetBySystemName( + Environment.GetEnvironmentVariable("AWS_REGION") ?? "us-east-1"); + var credentials = new Amazon.Runtime.EnvironmentVariablesAWSCredentials(); + + using var s3Client = new AmazonS3Client(credentials, new AmazonS3Config + { + RegionEndpoint = region, + Timeout = TimeSpan.FromSeconds(10), + MaxErrorRetry = 2 + }); + var batchItemFailures = new List(); foreach (var message in ev.Records) From 2dff8f8d2adac9bcac11db305b0b0729ea2fb8b8 Mon Sep 17 00:00:00 2001 From: Felipe Cotti Date: Tue, 12 May 2026 18:19:49 -0300 Subject: [PATCH 2/2] Add intermediary logs --- src/infra/docs-lambda-changelog-scrubber/Program.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/infra/docs-lambda-changelog-scrubber/Program.cs b/src/infra/docs-lambda-changelog-scrubber/Program.cs index 47adb0bf68..58370a8bc3 100644 --- a/src/infra/docs-lambda-changelog-scrubber/Program.cs +++ b/src/infra/docs-lambda-changelog-scrubber/Program.cs @@ -101,6 +101,7 @@ async Task Handler(SQSEvent ev, ILambdaContext context) async Task DeleteFromPublicBucket(IAmazonS3 s3Client, string key, ILambdaContext context) { + context.Logger.LogDebug($"Removing {key} from the public bucket", key); try { _ = await s3Client.DeleteObjectAsync(new DeleteObjectRequest @@ -118,6 +119,8 @@ async Task DeleteFromPublicBucket(IAmazonS3 s3Client, string key, ILambdaContext async Task ScrubAndCopyToPublicBucket(IAmazonS3 s3Client, string sourceBucket, string key, ILambdaContext context) { + context.Logger.LogDebug("Scrubbing {Key} to public bucket", key); + var fileName = Path.GetFileName(key); if (string.Equals(fileName, "registry-index.json", StringComparison.OrdinalIgnoreCase)) { @@ -138,6 +141,7 @@ async Task ScrubAndCopyToPublicBucket(IAmazonS3 s3Client, string sourceBucket, s return; } + context.Logger.LogInformation("Getting {Key} from private bucket", key); var getResponse = await s3Client.GetObjectAsync(new GetObjectRequest { BucketName = sourceBucket, @@ -148,8 +152,10 @@ async Task ScrubAndCopyToPublicBucket(IAmazonS3 s3Client, string sourceBucket, s using (var reader = new StreamReader(getResponse.ResponseStream)) content = await reader.ReadToEndAsync(); + context.Logger.LogInformation("Performing scrub pass for {Key}", key); var scrubbed = await ScrubContent(key, content, context); + context.Logger.LogInformation("Putting scrubbed {Key} on public bucket", key); _ = await s3Client.PutObjectAsync(new PutObjectRequest { BucketName = publicBucketName,