我正在尝试使用使用随机数生成的 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'])
这部分代码毫无意义:
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...