From 69bc8761b89c3a4913a2e9010d4d0bdcbd5ee490 Mon Sep 17 00:00:00 2001 From: Nicholas Hulston Date: Mon, 12 May 2025 13:07:22 -0400 Subject: [PATCH 1/2] update listener.ts --- src/metrics/listener.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/metrics/listener.ts b/src/metrics/listener.ts index 26c60d2b..5d72cf51 100644 --- a/src/metrics/listener.ts +++ b/src/metrics/listener.ts @@ -63,18 +63,24 @@ export interface MetricsConfig { export class MetricsListener { private currentProcessor?: Promise; - private apiKey: Promise; + private apiKey: Promise | undefined; private statsDClient: LambdaDogStatsD; private isExtensionRunning?: boolean = undefined; private globalTags?: string[] = []; constructor(private kmsClient: KMSService, private config: MetricsConfig) { - this.apiKey = this.getAPIKey(config); this.config = config; this.statsDClient = new LambdaDogStatsD(); } public async onStartInvocation(_: any, context?: Context) { + // We get the API key in onStartInvocation rather than in the constructor because in busy functions, + // initialization may occur more than 5 minutes before the first invocation (due to proactive initialization), + // resulting in AWS errors: https://github.com/aws/aws-sdk-js-v3/issues/5192#issuecomment-2073243617 + if (!this.apiKey) { + this.apiKey = this.getAPIKey(this.config); + } + if (this.isExtensionRunning === undefined) { this.isExtensionRunning = await isExtensionRunning(); logDebug(`Extension present: ${this.isExtensionRunning}`); From 014944d74f5ee3f818f57b1951adf5561b959af0 Mon Sep 17 00:00:00 2001 From: Nicholas Hulston Date: Mon, 12 May 2025 13:17:40 -0400 Subject: [PATCH 2/2] nit --- src/metrics/listener.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/metrics/listener.ts b/src/metrics/listener.ts index 5d72cf51..60cf0ded 100644 --- a/src/metrics/listener.ts +++ b/src/metrics/listener.ts @@ -63,7 +63,7 @@ export interface MetricsConfig { export class MetricsListener { private currentProcessor?: Promise; - private apiKey: Promise | undefined; + private apiKey?: Promise; private statsDClient: LambdaDogStatsD; private isExtensionRunning?: boolean = undefined; private globalTags?: string[] = [];