許多場景需要您使用 JSON 格式的數據,並且您希望提取並處理數據,然後將其保存到表中以供將來使用
在本文中,我們將討論使用 Lambda 函數將 JSON 格式的資料從 S3 儲存桶載入到 DynamoDB 表
下面的架構顯示我們正在使用 3 個 AWS 服務
以下服務的簡要說明作為茶點:
我們將逐步完成部署上圖的步驟與設定
1-使用以下組態建立 Lambda 函數
從頭開始的作者
函式名稱:ParserDemo
運行時:Python 3.1x
其餘保留預設
建立 Lambda 後,您需要修改逾時設定和執行角色,如下所示:
我寫了這個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 函數,如下所示:
3- 使用以下配置在 DynamoDB 中建立表格
表名稱:DemoTable
分區鍵:UserId
桌子設定:客製化
容量模式:已配置
為了節省成本,將預先配置容量單位配置為低值讀取/寫入(1 或 2 個單位)
現在設定已準備就緒,您可以透過將檔案上傳到 S3 來測試它,然後您將找到在 DynamoDB 表上建立的項目以及您上傳到檔案中的記錄。
Lambda 函數的 CloudWatch Logs
DynamoDB 專案
我希望您覺得這很有趣,如果您有任何意見,請告訴我。
S3 API
DynamoDB API
AWS 服務的 boto3 實踐
以上是使用 Lambda 函數從 So DynamoDB 解析和載入數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!