问题描述: 在使用API网关调用Lambda函数并与DynamoDB进行交互时,通过Cognito进行身份验证。使用HTTP POST请求时,无法读取响应,但返回代码为200。
解决方法: 以下是一个可能的解决方法,其中包含使用Python编写的代码示例。
确保正确配置API网关、Lambda函数和DynamoDB,并已启用Cognito身份验证。
在Lambda函数中,确保在处理请求时使用正确的身份验证凭据。可以使用以下代码示例:
import boto3
def lambda_handler(event, context):
# 使用Cognito提供的凭据初始化DynamoDB客户端
client = boto3.client('dynamodb', region_name='your-region', aws_access_key_id='your-access-key', aws_secret_access_key='your-secret-key', aws_session_token='your-session-token')
# 处理HTTP POST请求
if event['httpMethod'] == 'POST':
# 从API网关的请求中获取数据
request_data = event['body']
# 在DynamoDB中进行写操作
response = client.put_item(
TableName='your-dynamodb-table',
Item={
'id': {'S': 'your-item-id'},
'data': {'S': request_data}
}
)
# 返回响应
return {
'statusCode': 200,
'body': 'Success'
}
import json
def lambda_handler(event, context):
# 处理HTTP POST请求
if event['httpMethod'] == 'POST':
# 在DynamoDB中进行读操作
# ...
# 构建响应
response_body = {
'message': 'Success'
}
# 返回响应
return {
'statusCode': 200,
'body': json.dumps(response_body)
}
{
"statusCode": "200",
"responseTemplates": {
"application/json": ""
},
"responseParameters": {
"method.response.header.Access-Control-Allow-Origin": "'*'"
}
}
请注意,这只是一个简单的示例,实际情况可能会有所不同。根据您的需求和环境进行适当调整。