使用 Lambda 函数在 DyanmoDB 表中创建项目时出现问题

问题描述 投票:0回答:1

我正在尝试使用使用随机数生成的 Lambda 函数在 DynamoDB 表中创建一个项目。我无法使用 Put-Item 函数,它必须使用 random_number 生成来生成。 `

import json
import boto3
import os
import logging
import random

def generate_random_number():
    return random.randint(1, 1000000)

thingName = 'abc'

logger = logging.getLogger()
logger.setLevel(logging.INFO)

iot_client = boto3.client('iot', region_name=os.environ['AWS_REGION'])

endpoint_response = iot_client.describe_endpoint(endpointType='iot:Data-ATS')
endpoint_url = f"https://{endpoint_response['endpointAddress']}"

iot_shadow_client = boto3.client('iot-data', region_name=os.environ['AWS_REGION'], endpoint_url=endpoint_url)

def lambda_handler(event, context):
    payload_data = json.loads(event['body'])
    data = payload_data.get('inputs')
    payload_str = json.dumps(data)
    payload_bytes = payload_str.encode('utf-8')
    logger.info(payload_bytes)
    update_response = iot_shadow_client.update_thing_shadow(
        thingName=thingName,
        payload=payload_bytes
    )
    output = update_response.get('payload').read().decode("utf-8")
    print(output)
    logger.info(output)
    dynamodb = boto3.resource('dynamodb')
    tables = dynamodb.tables.all()
    for tbl in tables:
        table = dynamodb.Table(xxxx)

    id = generate_random_number()
    print("id", id)

    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers': 'Content-Type',
            'Access-Control-Allow-Origin': '*',
            'Access-Control-Allow-Methods': 'OPTIONS,POST'
        },
        'body': output
    }
`

它始终无法生成有效负载 Payload_data = json.loads(event['body'])

aws-lambda amazon-dynamodb aws-api-gateway dynamodb-queries
1个回答
0
投票

这部分代码毫无意义:

dynamodb = boto3.resource('dynamodb')
    tables = dynamodb.tables.all()
    for tbl in tables:
        table = dynamodb.Table(xxxx)

    id = generate_random_number()
    print("id", id)

本质上,您调用 ListTables,然后在循环中将表分配给资源。但您实际上并没有尝试添加任何数据。

然后打印一个 ID。

您不能期望在不使用 PutItem 或 UpdateItem 等的情况下将数据放入 DynamoDB...

© www.soinside.com 2019 - 2024. All rights reserved.