首頁 >後端開發 >Python教學 >使用 Lambda 函數從 So DynamoDB 解析和載入數據

使用 Lambda 函數從 So DynamoDB 解析和載入數據

Susan Sarandon
Susan Sarandon原創
2025-01-06 06:24:47198瀏覽

許多場景需要您使用 JSON 格式的數據,並且您希望提取並處理數據,然後將其保存到表中以供將來使用

在本文中,我們將討論使用 Lambda 函數將 JSON 格式的資料從 S3 儲存桶載入到 DynamoDB 表

先決條件

  1. 有權利將物件上傳到 S3
  2. 具有 S3 和 DynamoDB 權限的 Lambda 執行角色

架構和組件

下面的架構顯示我們正在使用 3 個 AWS 服務

  1. S3 儲存桶
  2. Lambda 函數
  3. DynamoDB 表

Parsing & Loading Data from So DynamoDB with Lambda Function

以下服務的簡要說明作為茶點:

  • S3 Bucket:具有可擴充性、安全性和高效能的物件儲存服務將作為我們的資料儲存服務
  • Lambda 函數:無伺服器運算服務,讓您運行程式碼而無需擔心基礎設施,易於設定並支援多種程式語言,我們將利用它來運行我們的程式碼並部署我們的邏輯。
  • DynamoDB:無伺服器 NoSQL 資料庫,用於將我們的資料儲存在表中,我們將使用它來儲存 Lambda 函數處理後的資料

流動

  1. 使用者將透過後台 PutObject API 的控制台或 CLI 將 JSON 檔案上傳到 S3 儲存桶
  2. 物件上傳成功,將觸發S3事件呼叫lambda函數來載入和處理檔案
  3. Lambda 將處理資料並將其載入到 DynamoDB 表

實施步驟

我們將逐步完成部署上圖的步驟與設定

1-使用以下組態建立 Lambda 函數

從頭開始的作者
函式名稱:ParserDemo
運行時:Python 3.1x

其餘保留預設
建立 Lambda 後,您需要修改逾時設定和執行角色,如下所示:

Parsing & Loading Data from So DynamoDB with Lambda Function

Parsing & Loading Data from So DynamoDB with Lambda Function

我寫了這個Python程式碼來執行邏輯

import json
import boto3

s3_client = boto3.client('s3')
dynamodb = boto3.resource('dynamodb')

def lambda_handler(event, context):



    bucket_name = event['Records'][0]['s3']['bucket']['name'] # Getting the bucket name from the event triggered by S3
    object_key = event['Records'][0]['s3']['object']['key'] # Getting the Key of the item when the data is uploaded to S3
    print(f"Bucket: {bucket_name}, Key: {object_key}")


    response = s3_client.get_object(
    Bucket=bucket_name,
    Key=object_key
)


    # We will convert the streamed data into bytes
    json_data = response['Body'].read()
    string_formatted = json_data.decode('UTF-8') #Converting data into string

    dict_format_data = json.loads(string_formatted) #Converting Data into Dictionary 


    # Inserting Data Into DynamoDB

    table = dynamodb.Table('DemoTable')
    if isinstance(dict_format_data, list): #check if the file contains single record
        for record in dict_format_data:
            table.put_item(Item=record)

    elif isinstance(dict_format_data, dict): # check if the file contains multiple records 
        table.put_item(Item=data)

    else:  
        raise ValueError("Not Supported Format") # Raise error if nothing matched

2- 建立 S3 儲存桶

BucketName:用唯一的名稱

將其餘配置保留為預設值

將建立的 S3 儲存桶作為觸發器新增至 lambda 函數,如下所示:

Parsing & Loading Data from So DynamoDB with Lambda Function

Parsing & Loading Data from So DynamoDB with Lambda Function

3- 使用以下配置在 DynamoDB 中建立表格

表名稱:DemoTable
分區鍵:UserId
桌子設定:客製化
容量模式:已配置

為了節省成本,將預先配置容量單位配置為低值讀取/寫入(1 或 2 個單位)

Parsing & Loading Data from So DynamoDB with Lambda Function

Parsing & Loading Data from So DynamoDB with Lambda Function

現在設定已準備就緒,您可以透過將檔案上傳到 S3 來測試它,然後您將找到在 DynamoDB 表上建立的項目以及您上傳到檔案中的記錄。

Lambda 函數的 CloudWatch Logs

Parsing & Loading Data from So DynamoDB with Lambda Function

DynamoDB 專案

Parsing & Loading Data from So DynamoDB with Lambda Function

我希望您覺得這很有趣,如果您有任何意見,請告訴我。

參考

S3 API
DynamoDB API
AWS 服務的 boto3 實踐

以上是使用 Lambda 函數從 So DynamoDB 解析和載入數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn