

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 擷取使用已棄用執行時期之 Lambda 函數的資料
<a name="runtimes-list-deprecated"></a>

當 Lambda 執行時間即將棄用時，Lambda 會透過電子郵件提醒您，並在 Health 儀板表 和 中提供通知 Trusted Advisor。這些電子郵件和通知會列出使用執行時期的 $LATEST 函數版本。若要列出使用特定執行時間的所有函數版本，您可以使用 AWS Command Line Interface (AWS CLI) 或其中一個 AWS SDKs。

如果您有大量函數使用由於已棄用而產生的執行時間，您也可以使用 AWS CLI AWS SDKs 來協助您排定最常調用函數的更新優先順序。

請參閱下列各節，了解如何使用 AWS CLI 和 AWS SDKs來收集使用特定執行時間之函數的資料。

## 列出使用特定執行時期的函數版本
<a name="runtimes-list-deprecated-versions"></a>

若要使用 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 適用於 JavaScript 的 AWS SDK 和 適用於 Python (Boto3) 的 AWS SDK 來傳回使用特定執行時期之函數的函數 ARN 清單。範例程式碼也會傳回每個所列函數的 CloudWatch 日誌群組。您可以使用此日誌群組來尋找函數的上次調用日期。如需詳細資訊，請參閱下一節[識別最常調用和最近調用的函數](#runtimes-list-deprecated-statistics)。

------
#### [ Node.js ]

**Example 列出使用特定執行時期之函數的 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. 'nodejs24.x' or 'python3.14'
        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 ]

**Example 列出使用特定執行時期之函數的 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](https://docs.aws.amazon.com/lambda/latest/api/API_ListFunctions.html) 動作的函數，請參閱您偏好程式設計語言的 [SDK 文件](https://aws.amazon.com/developer/tools/)。

您也可以使用 AWS Config 進階查詢功能，列出所有使用受影響執行時間的函數。此查詢只會傳回函數 $LATEST 版本，但您可以使用 AWS 帳戶 單一命令彙總查詢以列出所有區域和多個區域的函數。若要進一步了解，請參閱《 *AWS Config 開發人員指南*》中的[查詢 AWS Auto Scaling 資源的目前組態狀態](https://docs.aws.amazon.com/config/latest/developerguide/querying-AWS-resources.html)。

## 識別最常調用和最近調用的函數
<a name="runtimes-list-deprecated-statistics"></a>

如果您的 AWS 帳戶 包含使用由於已棄用之執行時間的函數，建議您優先更新經常調用的函數或最近調用的函數。

如果您只有幾個函數，您可以使用 CloudWatch Logs 主控台查看函數的日誌串流以收集此資訊。如需詳細資訊，請參閱[檢視傳送至 CloudWatch Logs 的日誌資料](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#ViewingLogData)。

若要查看最近的函數調用次數，您也可以使用 Lambda 主控台中顯示的 CloudWatch 指標資訊。若要檢視此資訊，請執行下列步驟：

1. 開啟 Lambda 主控台中的[函數頁面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 選取您要查看調用統計資料的函數。

1. 選擇 **Monitor** (監控) 索引標籤。

1. 使用日期範圍選擇器設定您希望檢視統計資料的期間。最近調用會顯示在**調用**窗格中。

對於具有較多函數的帳戶，使用 [DescribeLogStreams](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeLogStreams.html) 和 [GetMetricStatistics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricStatistics.html) API 動作，以程式設計方式使用 AWS CLI 或其中一個 AWS SDKs 收集此資料會更有效率。

下列範例提供使用 V3 適用於 JavaScript 的 AWS SDK 和 的程式碼片段 適用於 Python (Boto3) 的 AWS SDK ，以識別特定函數的上次調用日期，並判斷過去 14 天內特定函數的調用次數。

------
#### [ Node.js ]

**Example 用於尋找函數上次調用時間的 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 ]

**Example 用於尋找函數上次調用時間的 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')
```

------

**提示**  
您可以使用 [ListFunctions](https://docs.aws.amazon.com/lambda/latest/api/API_ListFunctions.html) API 作業來尋找函數的日誌群組名稱。如需如何執行此作業的範例，請參閱[列出使用特定執行時期的函數版本](#runtimes-list-deprecated-versions)。

------
#### [ Node.js ]

**Example 用於尋找過去 14 天內調用次數的 JavaScript 程式碼**  

```
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 ]

**Example 用於尋找過去 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}')
```

------