AWS Lambda – Python 函式



本章將建立一個簡單的 Python AWS Lambda 函式,並詳細瞭解其工作原理。

在開始在 AWS 中建立 Lambda 函式之前,我們需要 Python 的 AWS 工具包支援。為此,請按照以下步驟操作,並觀察相應的附加螢幕截圖:

步驟 1

登入 AWS 控制檯並建立 Lambda 函式,選擇 Python 作為語言。

Lambda Function Python

步驟 2

現在,單擊建立函式按鈕並輸入建立簡單的 Python AWS Lambda 的詳細資訊。此程式碼返回訊息Hello from Lambda using Python,如下所示:

Create Function Python

步驟 3

現在,儲存更改並測試程式碼以檢視輸出。當您使用 UI 中的測試按鈕在 AWS 控制檯中對其進行測試時,您應該會看到以下輸出和日誌。

AWS_console_Python

步驟 4

現在,您可以在任何 Python 編輯器或 IDE 中編寫程式碼。在這裡,我們使用 Visual Studio Code 編寫程式碼。您稍後應壓縮檔案並將其上傳到 AWS 控制檯。

IDE for Python.

在這裡,我們壓縮了程式碼並使用 AWS 控制檯。

步驟 5

現在,選擇上傳 .ZIP 檔案選項,如下所示:

Upload File

Python 的處理程式詳細資訊

請注意,處理程式必須是檔名後跟函式名。在上述情況下,我們的檔名是hellopython.py,函式名是my_handler;因此,處理程式將是hellopython.my_handler

上傳完成後並儲存更改後,它實際上會在 AWS Lambda 控制檯的線上編輯器中顯示 zip 檔案的詳細資訊。現在,讓我們測試程式碼以檢視輸出和日誌。

Handler Details Python

現在,讓我們使用以下示例程式碼瞭解 Lambda 函式的詳細資訊:

def my_handler(event, context):
   return "aws lambda in python using zip file"

在上面的程式碼中,函式名 my_handler 有兩個引數,event 和 context。

Python 中的 Context 物件

Context 物件提供諸如 Lambda 函式名稱、剩餘時間(毫秒)、請求 ID、CloudWatch 組名稱、超時詳細資訊等詳細資訊。

下表顯示了 context 物件上可用的方法和屬性:

序號 方法名稱和說明
1

get_remaining_time_in_millis()

此方法以毫秒為單位提供 Lambda 函式終止函式之前的剩餘時間

序號 屬性和說明
1

function_name

這將提供 AWS Lambda 函式名稱

2

function_version

這將提供正在執行的 AWS Lambda 函式的版本

3

invoked_function_arn

這將提供 ARN 詳細資訊。

4

memory_limit_in_mb

這顯示了建立 Lambda 函式時新增的記憶體限制

5

aws_request_id

這將提供 AWS 請求 ID。

6

log_group_name

這將提供 CloudWatch 組名稱。

7

log_stream_name

這將提供寫入日誌的 CloudWatch 日誌流名稱。

8

identity

當與 AWS Mobile SDK 一起使用時,這將提供有關 Amazon Cognito 身份提供程式的詳細資訊。提供的詳細資訊如下:

  • identity.cognito_identity_id
  • identity.cognito_identity_pool_id
9

client_context

當與 AWS Mobile SDK 一起使用時,這將提供客戶端應用程式的詳細資訊。提供的詳細資訊如下:

  • client_context.client.installation_id
  • client_context.client.app_title
  • client_context.client.app_version_name
  • client_context.client.app_version_code
  • client_context.client.app_package_name
  • client_context.custom - 它包含來自移動客戶端應用程式的自定義值的字典
  • client_context.env - 它包含來自 AWS Mobile SDK 的環境詳細資訊的字典

讓我們看看 Python 中一個有效的示例,它輸出上下文詳細資訊。請觀察以下程式碼:

def my_handler(event, context):
   print("Log stream name:", context.log_stream_name)
   print("Log group name:",  context.log_group_name)
   print("Request ID:",context.aws_request_id)
   print("Mem. limits(MB):", context.memory_limit_in_mb)
   print("Time remaining (MS):", context.get_remaining_time_in_millis())
   return "aws lambda in python using zip file"

上面顯示的程式碼的相應輸出如下所示:

Corresponding Output

使用 Python 進行日誌記錄

要使用 Python 記錄資訊,我們可以使用可用的 print 或 logger 函式。讓我們使用上面關於上下文的示例,並在 CloudWatch 中檢查是否列印了日誌。請觀察以下程式碼:

def my_handler(event, context):
   print("Log stream name:", context.log_stream_name)
   print("Log group name:",  context.log_group_name)
   print("Request ID:",context.aws_request_id)
   print("Mem. limits(MB):", context.memory_limit_in_mb)
   print("Time remaining (MS):", context.get_remaining_time_in_millis())
   return "aws lambda in python using zip file"

此程式碼在 CloudWatch 中的輸出如下所示:

Logging using Python

請觀察以下示例,以瞭解有關使用 logger 將日誌列印到 CloudWatch 的資訊:

import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def my_handler(event, context):
   logger.info('Using logger to print messages to cloudwatch logs')
   return "aws lambda in python using zip file"

此程式碼的輸出將如以下螢幕截圖所示:

Cloudwatch Python

Python 中的 Lambda 函式錯誤處理

在本節中,讓我們來看一個有效的示例,該示例顯示如何在 Python 中處理錯誤。請觀察此處提供的程式碼段:

def error_handler(event, context):
   raise Exception('Error Occured!')

Error Handling in Python

日誌顯示如下圖所示:

Error Handling in Python Output
廣告