Recuperare dati sulle funzioni Lambda che utilizzano un runtime obsoleto - AWS Lambda

Recuperare dati sulle funzioni Lambda che utilizzano un runtime obsoleto

Quando un runtime Lambda sta per diventare obsoleto, Lambda ti avvisa tramite e-mail e fornisce notifiche in AWS Health Dashboard e in Trusted Advisor. Queste e-mail e notifiche elencano le versioni $LATEST delle funzioni che utilizzano il runtime. Per visualizzare tutte le versioni delle funzioni che utilizzano un determinato runtime, puoi utilizzare AWS Command Line Interface (AWS CLI) o uno degli SDK AWS.

Se disponi di un gran numero di funzioni che utilizzano un runtime destinato a diventare obsoleto, per assegnare priorità agli aggiornamenti delle funzioni richiamate più di frequente puoi anche utilizzare la AWS CLI o gli SDK AWS.

Fai riferimento alle sezioni seguenti per imparare a utilizzare la AWS CLI e gli SDK AWS per raccogliere dati sulle funzioni che utilizzano un determinato runtime.

Elenco delle versioni delle funzioni che utilizzano un determinato runtime

Per utilizzare la AWS CLI per visualizzare tutte le versioni delle funzioni che utilizzano un determinato runtime, esegui il comando seguente. Sostituisci RUNTIME_IDENTIFIER con il nome del runtime soggetto al ritiro e scegli la tua Regione AWS. Per elencare solo le versioni della funzione $LATEST, ometti --function-version ALL dal comando.

aws lambda list-functions --function-version ALL --region us-east-1 --output text --query "Functions[?Runtime=='RUNTIME_IDENTIFIER'].FunctionArn"
Suggerimento

Il comando di esempio elenca le funzioni nella regione us-east-1 per un particolare Account AWS. Dovrai ripetere questo comando per ogni regione in cui l'account dispone di funzioni e per ciascuno dei tuoi Account AWS.

Puoi visualizzare le funzioni che utilizzano un determinato runtime anche utilizzando uno degli SDK AWS. Il codice di esempio seguente utilizza V3 AWS SDK per JavaScript e AWS SDK per Python (Boto3) per restituire un elenco degli ARN della funzione per le funzioni che utilizzano un determinato runtime. Il codice di esempio restituisce anche il gruppo di log CloudWatch per ciascuna delle funzioni elencate. È possibile utilizzare questo gruppo di log per trovare la data dell'ultima invocazione per la funzione. Per ulteriori informazioni, consulta la sezione Identificazione delle funzioni richiamate più di frequente e più di recente seguente.

Node.js
Esempio Codice JavaScript per elencare le funzioni utilizzando un particolare runtime
import { LambdaClient, ListFunctionsCommand } from "@aws-sdk/client-lambda"; const lambdaClient = new LambdaClient(); const command = new ListFunctionsCommand({ FunctionVersion: "ALL", MaxItems: 50 }); const response = await lambdaClient.send(command); for (const f of response.Functions){ if (f.Runtime == '<your_runtime>'){ // Use the runtime id, e.g. 'nodejs22.x' or 'python3.13' console.log(f.FunctionArn); // get the CloudWatch log group of the function to // use later for finding the last invocation date console.log(f.LoggingConfig.LogGroup); } } // If your account has more functions than the specified // MaxItems, use the returned pagination token in the // next request with the 'Marker' parameter if ('NextMarker' in response){ let paginationToken = response.NextMarker; }
Python
Esempio Codice Python per elencare le funzioni utilizzando un particolare runtime
import boto3 from botocore.exceptions import ClientError def list_lambda_functions(target_runtime): lambda_client = boto3.client('lambda') response = lambda_client.list_functions( FunctionVersion='ALL', MaxItems=50 ) if not response['Functions']: print("No Lambda functions found") else: for function in response['Functions']: if function['PackageType']=='Zip' and function['Runtime'] == target_runtime: print(function['FunctionArn']) # Print the CloudWatch log group of the function # to use later for finding last invocation date print(function['LoggingConfig']['LogGroup']) if 'NextMarker' in response: pagination_token = response['NextMarker'] if __name__ == "__main__": # Replace python3.12 with the appropriate runtime ID for your Lambda functions list_lambda_functions('python3.12')

Per ulteriori informazioni sull'utilizzo di un SDK AWS per elencare le funzioni utilizzando l'azione ListFunctions, consulta la documentazione dell'SDK per il linguaggio di programmazione preferito.

Puoi inoltre utilizzare la funzionalità di query avanzata AWS Config per elencare tutte le funzioni che utilizzano un runtime interessato. Questa query restituisce solo le versioni $LATEST delle funzioni, ma è possibile aggregare le query per elencare le funzioni in tutte le regioni e in più Account AWS con un solo comando. Per ulteriori informazioni, consulta Invio di query allo stato di configurazione corrente delle risorse AWS Auto Scaling nella Guida per gli sviluppatori di AWS Config.

Identificazione delle funzioni richiamate più di frequente e più di recente

Se il tuo Account AWS contiene funzioni che utilizzano un runtime che sta per diventare obsoleto, è consigliabile dare priorità all'aggiornamento delle funzioni che vengono richiamate di frequente o delle funzioni che sono state richiamate di recente.

Se disponi solo di poche funzioni, puoi utilizzare la console CloudWatch Logs per raccogliere queste informazioni esaminando i flussi di log delle tue funzioni. Per ulteriori informazioni, consulta Visualizzare i dati di log inviati a CloudWatch Logs.

Per vedere il numero di invocazioni di funzioni recenti, puoi anche utilizzare le informazioni sui parametri di CloudWatch mostrate nella console Lambda. Per visualizzare queste informazioni, completa le seguenti operazioni:

  1. Aprire la pagina Funzioni della console Lambda.

  2. Seleziona la funzione per la quale desideri visualizzare le statistiche sull'invocazione.

  3. Selezionare la scheda Monitor (Monitora).

  4. Imposta il periodo di tempo per cui desideri visualizzare le statistiche utilizzando il selettore dell'intervallo di date. Le invocazioni recenti vengono visualizzate nel riquadro Invocazioni.

Per gli account con un numero maggiore di funzioni, può essere più efficiente raccogliere questi dati a livello di codice utilizzando la AWS CLI o uno degli SDK AWS utilizzando le operazioni API DescribeLogStreams e GetMetricStatistics.

Gli esempi seguenti forniscono frammenti di codice che utilizzano V3 AWS SDK per JavaScript e AWS SDK per Python (Boto3) per identificare la data dell'ultima invocazione per una particolare funzione e per determinare il numero di invocazioni per una particolare funzione negli ultimi 14 giorni.

Node.js
Esempio Codice JavaScript per trovare l'ora dell'ultima invocazione per una funzione
import { CloudWatchLogsClient, DescribeLogStreamsCommand } from "@aws-sdk/client-cloudwatch-logs"; const cloudWatchLogsClient = new CloudWatchLogsClient(); const command = new DescribeLogStreamsCommand({ logGroupName: '<your_log_group_name>', orderBy: 'LastEventTime', descending: true, limit: 1 }); try { const response = await cloudWatchLogsClient.send(command); const lastEventTimestamp = response.logStreams.length > 0 ? response.logStreams[0].lastEventTimestamp : null; // Convert the UNIX timestamp to a human-readable format for display const date = new Date(lastEventTimestamp).toLocaleDateString(); const time = new Date(lastEventTimestamp).toLocaleTimeString(); console.log(`${date} ${time}`); } catch (e){ console.error('Log group not found.') }
Python
Esempio Codice Python per trovare l'ora dell'ultima invocazione per una funzione
import boto3 from datetime import datetime cloudwatch_logs_client = boto3.client('logs') response = cloudwatch_logs_client.describe_log_streams( logGroupName='<your_log_group_name>', orderBy='LastEventTime', descending=True, limit=1 ) try: if len(response['logStreams']) > 0: last_event_timestamp = response['logStreams'][0]['lastEventTimestamp'] print(datetime.fromtimestamp(last_event_timestamp/1000)) # Convert timestamp from ms to seconds else: last_event_timestamp = None except: print('Log group not found')
Suggerimento

Puoi trovare il nome del gruppo di log della tua funzione utilizzando l'operazione API ListFunctions. Per un esempio su come eseguire questa operazione, consulta Elenco delle versioni delle funzioni che utilizzano un determinato runtime.

Node.js
Esempio Codice JavaScript per trovare il numero di invocazioni negli ultimi 14 giorni
import { CloudWatchClient, GetMetricStatisticsCommand } from "@aws-sdk/client-cloudwatch"; const cloudWatchClient = new CloudWatchClient(); const command = new GetMetricStatisticsCommand({ Namespace: 'AWS/Lambda', MetricName: 'Invocations', StartTime: new Date(Date.now()-86400*1000*14), // 14 days ago EndTime: new Date(Date.now()), Period: 86400 * 14, // 14 days. Statistics: ['Sum'], Dimensions: [{ Name: 'FunctionName', Value: '<your_function_name>' }] }); const response = await cloudWatchClient.send(command); const invokesInLast14Days = response.Datapoints.length > 0 ? response.Datapoints[0].Sum : 0; console.log('Number of invocations: ' + invokesInLast14Days);
Python
Esempio Codice Python per trovare il numero di invocazioni negli ultimi 14 giorni
import boto3 from datetime import datetime, timedelta cloudwatch_client = boto3.client('cloudwatch') response = cloudwatch_client.get_metric_statistics( Namespace='AWS/Lambda', MetricName='Invocations', Dimensions=[ { 'Name': 'FunctionName', 'Value': '<your_function_name>' }, ], StartTime=datetime.now() - timedelta(days=14), EndTime=datetime.now(), Period=86400 * 14, # 14 days Statistics=[ 'Sum' ] ) if len(response['Datapoints']) > 0: invokes_in_last_14_days = int(response['Datapoints'][0]['Sum']) else: invokes_in_last_14_days = 0 print(f'Number of invocations: {invokes_in_last_14_days}')