Recuperar datos sobre las funciones de Lambda que utilizan un tiempo de ejecución obsoleto - AWS Lambda

Recuperar datos sobre las funciones de Lambda que utilizan un tiempo de ejecución obsoleto

Cuando un tiempo de ejecución de Lambda está a punto de quedar obsoleto, Lambda lo informa por correo electrónico y envía notificaciones en AWS Health Dashboard y Trusted Advisor. En estos correos electrónicos y notificaciones se enumeran las versiones $LATEST de las funciones que utilizan el tiempo de ejecución. Para enumerar todas las versiones de las funciones que utilizan un tiempo de ejecución determinado, puede usar la AWS Command Line Interface (AWS CLI) o uno de los AWS SDK.

Si tiene una gran cantidad de funciones que utilizan un tiempo de ejecución obsoleto, también puede utilizar la AWS CLI o los AWS SDK como ayuda para priorizar las actualizaciones de las funciones que más se invocan.

Consulte las siguientes secciones para aprender a usar la AWS CLI y los AWS SDK para recopilar datos sobre las funciones que utilizan un tiempo de ejecución determinado.

Lista de las versiones de funciones que utilizan un tiempo de ejecución determinado

Para usar la AWS CLI para obtener una lista de todas las versiones de las funciones que utilizan un tiempo de ejecución determinado, ejecute el siguiente comando: Reemplace RUNTIME_IDENTIFIER por el nombre del tiempo de ejecución que está por caducar y elija su propio Región de AWS. Para mostrar solo las versiones de la función $LATEST, omita --function-version ALL en el comando.

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

El comando de ejemplo muestra las funciones de la región us-east-1 para un determinado Cuenta de AWS. Deberá repetir este comando para cada región en la que su cuenta tenga funciones y para cada uno de sus Cuentas de AWS.

También puede obtener una lista de las funciones que utilizan un tiempo de ejecución determinado mediante uno de los AWS SDK. El siguiente código de ejemplo utiliza la V3 del AWS SDK for JavaScript y el AWS SDK for Python (Boto3) para devolver una lista de los ARN de funciones de las funciones que utilizan un tiempo de ejecución determinado. El código de ejemplo también devuelve el grupo de registro de CloudWatch para cada una de las funciones de la lista. Puede usar este grupo de registro para buscar la fecha de la última invocación de la función. Consulte la siguiente sección Identificación de las funciones invocadas más recientemente y con mayor frecuencia para obtener más información.

Node.js
ejemplo Código JavaScript para obtener una lista de las funciones que utilizan un tiempo de ejecución determinado
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. 'nodejs18.x' or 'python3.9' 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
ejemplo Código Python para obtener una lista de las funciones que utilizan un tiempo de ejecución determinado
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')

Para obtener más información sobre el uso de un AWS SDK para enumerar las funciones mediante la acción ListFunctions, consulte la documentación del SDK del lenguaje de programación que prefiera.

También puede utilizar la característica Consultas avanzadas del AWS Config para enumerar todas las funciones que utilizan un tiempo de ejecución afectado. Esta consulta solo devuelve las versiones $LATEST de la función, pero puede agregar consultas para enumerar funciones en todas las regiones y en varios Cuentas de AWS con un solo comando. Para obtener más información, lea Consulta sobre el estado de la configuración actual de los recursos del AWS Auto Scaling en la Guía del AWS Config para desarrolladores.

Identificación de las funciones invocadas más recientemente y con mayor frecuencia

Si su Cuenta de AWS incluye funciones que utilizan un tiempo de ejecución que está por quedar obsoleto, quizá desee priorizar la actualización de las funciones que se invocan con frecuencia o que se invocaron recientemente.

Si solo dispone de unas pocas funciones, puede utilizar la consola de los registros de CloudWatch para recopilar esta información consultando los flujos de registro de sus funciones. Para obtener más información, consulte Ver datos de registro enviados a los registros de CloudWatch.

Para ver la cantidad de invocaciones de funciones recientes, también puede utilizar la información de métricas de CloudWatch que se muestra en la consola de Lambda. Para ver esta información, siga estas instrucciones:

  1. Abra la página de Funciones en la consola de Lambda.

  2. Seleccione la función de la que desee consultar las estadísticas de invocación.

  3. Elija la pestaña Monitor (Monitorear).

  4. Establezca el periodo del que desea ver las estadísticas utilizando el selector de rango de fechas. Las invocaciones recientes se muestran en el panel Invocaciones.

Para las cuentas con una mayor cantidad de funciones, puede ser más eficiente recopilar estos datos mediante programación con la AWS CLI o uno de los AWS SDK mediante las acciones de la API DescribelogStreams y GetMetricStatistics.

En los siguientes ejemplos, se proporcionan fragmentos de código que utilizan la V3 del AWS SDK for JavaScript y el AWS SDK for Python (Boto3) para identificar la fecha de la última invocación de una función determinada y establecer la cantidad de invocaciones de una función determinada en los últimos 14 días.

Node.js
ejemplo Código JavaScript para encontrar la hora de la última invocación de una función
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
ejemplo Código Python para encontrar la hora de la última invocación de una función
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')
sugerencia

Puede encontrar el nombre del grupo de registro de la función mediante la operación de la API ListFunctions. Para ver ejemplos de cómo hacerlo, consulte el código en Lista de las versiones de funciones que utilizan un tiempo de ejecución determinado.

Node.js
ejemplo Código JavaScript para encontrar la cantidad de invocaciones en los últimos 14 días
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
ejemplo Código Python para encontrar la cantidad de invocaciones en los últimos 14 días
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}')