本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
擷取使用已棄用執行時間之 Lambda 函數的資料
當 Lambda 執行期即將取代時,Lambda 會透過電子郵件提醒您,並在 AWS Health Dashboard 和 中提供通知 Trusted Advisor。這些電子郵件和通知會列出使用執行期的 $LATEST 版本函數。若要列出使用特定執行時間的所有函數版本,您可以使用 AWS Command Line Interface (AWS CLI) 或其中一個 AWS SDKs。
如果您有大量函數使用即將取代的執行期,您也可以使用 AWS CLI 或 AWS SDKs 來協助您排定最常調用函數的更新優先順序。
請參閱下列各節,了解如何使用 AWS CLI 和 AWS SDKs 來收集使用特定執行時間之函數的資料。
列出使用特定執行時間的函數版本
若要使用 AWS CLI 列出使用特定執行時間的所有函數版本,請執行下列命令。RUNTIME_IDENTIFIER
將 取代為已棄用之執行時間的名稱,然後選擇您自己的 AWS 區域。若要僅列出 $LATEST 函數版本,--function-version ALL
請從命令中省略 。
aws lambda list-functions --function-version ALL --region us-east-1
--output text --query "Functions[?Runtime=='RUNTIME_IDENTIFIER
'].FunctionArn"
範例命令會列出特定 us-east-1
區域中的函數 AWS 帳戶 。您需要針對帳戶具有函數的每個區域和每個 重複此命令 AWS 帳戶。
您也可以使用其中一個 列出使用特定執行期的函數 AWS SDKs。下列範例程式碼使用 V3 AWS SDK for JavaScript 和 AWS SDK for Python (Boto3) 來傳回使用特定執行時間ARNs的函數清單。範例程式碼也會傳回每個所列函數的 CloudWatch 日誌群組。您可以使用此日誌群組來尋找函數的上次調用日期。如需詳細資訊,識別最常用和最近調用的函數請參閱下一節。
- Node.js
-
範例 JavaScript 使用特定執行時間列出函數的程式碼
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
-
範例 使用特定執行期列出函數的 Python 程式碼
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
')
若要進一步了解如何使用 AWS SDK來使用 ListFunctions動作列出函數,請參閱您偏好的程式設計語言SDK文件。
您也可以使用 AWS Config 進階查詢功能,列出使用受影響執行時間的所有函數。此查詢只會傳回函數 $LATEST 版本,但您可以使用 AWS 帳戶 單一命令彙總查詢,列出所有區域和多個區域的函數。若要進一步了解,請參閱 AWS Config 開發人員指南 中的查詢 AWS Auto Scaling 資源的目前組態狀態。
識別最常用和最近調用的函數
如果您的 AWS 帳戶 包含使用由於已棄用之執行期的函數,您可能想要優先更新經常調用的函數或最近調用的函數。
如果您只有幾個函數,您可以使用 CloudWatch Logs 主控台,查看函數的日誌串流來收集此資訊。如需詳細資訊,請參閱檢視傳送至日誌的 CloudWatch 日誌資料。
若要查看最近的函數叫用次數,您也可以使用 Lambda 主控台中顯示的 CloudWatch 指標資訊。若要檢視此資訊,請執行下列動作:
-
開啟 Lambda 主控台中的函數頁面。
-
選取您要查看調用統計資料的函數。
-
選擇 監控 索引標籤。
-
設定您希望使用日期範圍選取器檢視 統計資料的時段。最近調用會顯示在調用窗格中。
對於具有大量函數的帳戶,使用 AWS CLI 或其中一個使用 DescribeLogStreams和 AWS SDKsGetMetricStatisticsAPI動作以程式設計方式收集此資料會更有效率。
下列範例提供使用 V3 AWS SDK for JavaScript 和 的程式碼片段 AWS SDK for Python (Boto3) ,以識別特定函數的上次調用日期,並判斷過去 14 天內特定函數的調用次數。
- Node.js
-
範例 JavaScript 尋找函數上次調用時間的程式碼
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
-
範例 用於尋找函數上次調用時間的 Python 程式碼
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')
- Node.js
-
範例 JavaScript 尋找過去 14 天內叫用次數的程式碼
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
-
範例 用於尋找過去 14 天內叫用次數的 Python 程式碼
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}')