Javascript 无法获取从静态网页到Lambda函数正确输入数据的函数。始终返回状态代码300
我试图学习AWS,并练习使用静态网站通过Lambda函数查询Cloudtrail数据。但是,每当我从我的网站和GET API函数输入数据并进行查询时,它只返回状态代码300(这是一个故障警报)。我不确定这是否与我的API网关、HTML/AJAX或Lambda函数本身有关。我将Python用于我的Lambda函数和Boto3。在我陷入困境时,任何建议或帮助都将不胜感激。谢谢 AJAX代码Javascript 无法获取从静态网页到Lambda函数正确输入数据的函数。始终返回状态代码300,javascript,python,ajax,amazon-web-services,api,Javascript,Python,Ajax,Amazon Web Services,Api,我试图学习AWS,并练习使用静态网站通过Lambda函数查询Cloudtrail数据。但是,每当我从我的网站和GET API函数输入数据并进行查询时,它只返回状态代码300(这是一个故障警报)。我不确定这是否与我的API网关、HTML/AJAX或Lambda函数本身有关。我将Python用于我的Lambda函数和Boto3。在我陷入困境时,任何建议或帮助都将不胜感激。谢谢 AJAX代码 <script> function retrieveFromAPI(){
<script>
function retrieveFromAPI(){
var param1 = $("#EventName").val()
$.ajax({
type: "GET",
data: param1,
datatype: "json",
url: "GET API URL",
success: function(data){
console.log("Got it", param1)
$("#lbl").html(data)
},
error: function(data){
alert("Unsuccessful Search....Try Again Please. " + param1 +(" was not found") + JSON.stringify(data.responseText));
}
});
};
</script>
看起来它正在成功调用您的函数,但如果没有找到事件,您将返回300。是否可以添加一些调试以查看传递的事件名称,以及事件名称是否有效并返回结果?在lambda中添加一些日志,并查看cloudwatch中lambda的日志,以便更好地进行调试。@JDD关于如何进行调试,您有什么有用的信息吗?对于未找到,您确实应该返回404。您还可以在本地或AWS Lambda控制台中测试代码。
<form id="retrieve-form" method="GET">
<h2>Select a Service to Query From</h2>
<label for="CloudTrail">CloudTrail Name: </label>
<input type="text" id="EventName" placeholder="Enter Cloudtrail Name" name="EventName">
<button id="submit" type="button" Onclick="retrieveFromAPI(event)" value="submit">Submit</button>
<label id="lbl"></label>
</form>
import boto3
client = boto3.client('cloudtrail')
#If the event name is in the list then return event name, or return nothing
def lambda_handler(event, context):
if 'EventName' in event :
EventName = event['EventName']
response = client.lookup_events(
LookupAttributes=[
{
'AttributeKey': 'EventName',
'AttributeValue': EventName,
},
]
)
else :
EventName = '*';
response = client.lookup_events(
LookupAttributes=[
{
'AttributeKey': 'EventName',
'AttributeValue': EventName,
},
]
)
#If the length of the response is greater than zero, it will make a list of the events
if len(response['Events']) > 0 :
events = []
for event in response['Events']:
CloudTrailEvent = json.loads(event['CloudTrailEvent']);
events.append({ "awsRegion" : CloudTrailEvent['awsRegion'] , "EventId" : event['EventId'], "EventName" : event['EventName'] , "EventTime" : str(event['EventTime']), "requestID" : CloudTrailEvent['requestID']})
return {
'statusCode': 200,
'headers': {
'Content-Type': 'application/json',
'Access-Control-Allow-Methods': '*',
'Access-Control-Allow-Headers': 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token',
'Access-Control-Allow-Origin': '*'
},
'body': events
}
else :
return {
'statusCode': 300,
'headers': {
'Content-Type': 'application/json',
'Access-Control-Allow-Methods': '*',
'Access-Control-Allow-Headers': 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token',
'Access-Control-Allow-Origin': '*'
},
'body' : 'No record found.',
}
```s