AWS启用我的API触发lambda的CORS

发布于 2025-02-08 22:34:16 字数 2359 浏览 1 评论 0原文

我设法创建了一个做两件事的AWS lambda:在Dynamo DB上写入并将SMS发送到手机号码。然后,我通过API Gateway Post Call调用此lambda,它在AWS控制台的测试部分中效果很好,但它在Postman和我自己的网站上都会出现错误。 以在Lambda上处理CORS,并通过控制台在我的API上部署 +已启用的CORS并部署了COR

我插入了一个回调, “消息”:“内部服务器错误” }

通过我的网站(jQuery ajax post呼叫)错误:lambda呼叫失败:{“ readystate”:4,“ ponsponseText”:“ {” severse':“ nestern Server error”}“}”,“ Responsejson”:“ wendmentjson”:{“ message”:{“ message”:': “内部服务器错误”},“状态”:500,“ statustext”:“错误”}

这是我的lambda代码

const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB();
const SNS = new AWS.SNS();
const tableName = "#####";  
let params = {
                PhoneNumber: 'mynumber####',
                Message: 'Someone wrote!'
             };

exports.handler = (event, context, callback) => {

    dynamodb.putItem({
        "TableName": tableName,
        "Item" : {
            "Id": {
                N: event.Id
            },
            "Type": {
                S: event.Type
            }
        }
    }, function(err, data) {
        if (err) {
            console.log('Error putting item into dynamodb failed: '+err);
        }
        else {
            console.log('Success in writing, now starting to send SMS');
            return new Promise((resolve, reject) => {
                SNS.publish(params, function(err, data) {
                    if(err) {
                        console.log("Error in sending sms alarm");
                        reject(err);
                    }
                    else {
                        console.log("SMS alarm sent!");
                        resolve(data);
                    }
                })
            })
        }
    });
    callback(null, {
        statusCode: 200,
        headers: {
            "Access-Control-Allow-Headers" : "Content-Type",
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Methods": "OPTIONS,POST,GET"
        },
        body: JSON.stringify('Hello from Lambda!'),
    });
};

    
    

我在做什么错?我认为Lambda上的权限不是这里的问题,因为在游戏机上对其进行测试既可以在Dynamo上都将SMS发送到我的手机上。

如果我在API端点上单击此处,我​​会得到相同的错误{“消息”:“内部服务器错误”}

I managed to create an AWS Lambda that does two things: writes on a dynamo DB and sends an SMS to a mobile number. Then I call this Lambda through a API Gateway POST call, and it works great from the Test section on AWS console but it gives error both on Postman and my own website. I inserted a callback to handle CORS on Lambda and deployed + enabled CORS on my API via console and deployed it but still get errors:

Errors via postman call: {
"message": "Internal server error"
}

Errors via my website (jquery ajax POST call): Lambda calling failed: {"readyState":4,"responseText":"{"message": "Internal server error"}","responseJSON":{"message":"Internal server error"},"status":500,"statusText":"error"}

This is my lambda code

const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB();
const SNS = new AWS.SNS();
const tableName = "#####";  
let params = {
                PhoneNumber: 'mynumber####',
                Message: 'Someone wrote!'
             };

exports.handler = (event, context, callback) => {

    dynamodb.putItem({
        "TableName": tableName,
        "Item" : {
            "Id": {
                N: event.Id
            },
            "Type": {
                S: event.Type
            }
        }
    }, function(err, data) {
        if (err) {
            console.log('Error putting item into dynamodb failed: '+err);
        }
        else {
            console.log('Success in writing, now starting to send SMS');
            return new Promise((resolve, reject) => {
                SNS.publish(params, function(err, data) {
                    if(err) {
                        console.log("Error in sending sms alarm");
                        reject(err);
                    }
                    else {
                        console.log("SMS alarm sent!");
                        resolve(data);
                    }
                })
            })
        }
    });
    callback(null, {
        statusCode: 200,
        headers: {
            "Access-Control-Allow-Headers" : "Content-Type",
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Methods": "OPTIONS,POST,GET"
        },
        body: JSON.stringify('Hello from Lambda!'),
    });
};

    
    

What am I doing wrong? I don't think permissions on lambda are the problem here, since testing it on console works both on writing on dynamo both sending the sms to my cellphone.

If I click from here on API Endpoint I get the same error {"message": "Internal server error"}
enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

叹沉浮 2025-02-15 22:34:16

解决方案:与其制作AWS HTTP API,不如制作AWS REST API,它更为复杂,可以为CORS提供更多个性化,让您设置它们和标题。

SOLUTION: instead of making an AWS HTTP API, make a AWS REST API, that is much more complex and offers more personalization for CORS, letting you set them and headers.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文