在静态网页上从 aws sdk javascript 调用 Hello Lambda 函数是否需要 CORS 配置?
Is CORS configuration needed for invoking Hello Lambda function from aws sdk javascript on static web page?
谁能指导一下。我是 AWS Lambda 的新手。
我正在尝试使用 aws sdk 从普通 html 页面访问 Lambda 函数,但出现 CORS 错误。是否需要 Cors 配置,因为我的 html 只是我的桌面,我没有从服务器或 s3 存储桶访问任何内容。
浏览器错误:
跨源请求被阻止:同源策略不允许读取位于 https://lambda.us-west-2.amazonaws.com/2015-03-31/functions/TestHandler/invocations 的远程资源。 (原因:CORS 请求失败)。
我的 Lambda 函数:
- 使用 Java 8.
使用 Hello world 模板创建
public class TestLambda {
public String myHandler(int myCount, Context context) {
LambdaLogger logger = context.getLogger();
logger.log("received:" + myCount);
return String.valueOf(myCount);
}
}
我的Java脚本
var lambda = new AWS.Lambda({apiVersion: '2015-03-31', region:'us-west-2', accessKeyId: "xxx",
secretAccessKey: 'xxx/xxx'} ;
lambda.invoke({
FunctionName: 'TestHandler',
Payload: JSON.stringify('111111')
}, function(err, data){
alert("function returned");
if(err) {
alert("It was an error" + err.stack);
} else {
alert("it was success");
alert("result is " + data);
}
});
我收到警报这是一个错误。
提前致谢。
我认为 javascript SDK 不适用于客户端(在浏览器中)。我认为它的目的是与 node.js 应用程序一起使用——在那里你不会得到 CORS 错误。您绝对不希望您的 accessKey 和 secretAccessKey 暴露在 HTML 中。无论如何,将 Lambda 暴露给浏览器的典型方法是使用 API 网关。基本设置在这里完成:http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started.html
您还需要按照以下步骤为 api 设置 CORS:http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html
我创建了一个博客 post,其中展示了如何使用 API 网关设置 Lambda 以创建 Slack-Bot 样式集成:http://www.ryanray.me/serverless-slack-integrations
CORS 是跨源资源共享。由于您的 html 在本地计算机 (localhost) 上并且 Lambda 具有不同的域 https://lambda.us-west-2.amazonaws.com,因此它会抛出 CORS 错误。 API 网关也是如此(如果您的 lambda 在 API 网关后面)。你会得到一些错误,比如 -
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://test123.us-west-2.amazonaws.com/dev. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
所以规则是,如果您的网站 domain/hostname 与您从 javascript 调用的 API 不同,您需要上交 CORS。
谁能指导一下。我是 AWS Lambda 的新手。 我正在尝试使用 aws sdk 从普通 html 页面访问 Lambda 函数,但出现 CORS 错误。是否需要 Cors 配置,因为我的 html 只是我的桌面,我没有从服务器或 s3 存储桶访问任何内容。
浏览器错误: 跨源请求被阻止:同源策略不允许读取位于 https://lambda.us-west-2.amazonaws.com/2015-03-31/functions/TestHandler/invocations 的远程资源。 (原因:CORS 请求失败)。
我的 Lambda 函数: - 使用 Java 8.
使用 Hello world 模板创建public class TestLambda {
public String myHandler(int myCount, Context context) {
LambdaLogger logger = context.getLogger();
logger.log("received:" + myCount);
return String.valueOf(myCount);
}
}
我的Java脚本
var lambda = new AWS.Lambda({apiVersion: '2015-03-31', region:'us-west-2', accessKeyId: "xxx",
secretAccessKey: 'xxx/xxx'} ;
lambda.invoke({
FunctionName: 'TestHandler',
Payload: JSON.stringify('111111')
}, function(err, data){
alert("function returned");
if(err) {
alert("It was an error" + err.stack);
} else {
alert("it was success");
alert("result is " + data);
}
});
我收到警报这是一个错误。
提前致谢。
我认为 javascript SDK 不适用于客户端(在浏览器中)。我认为它的目的是与 node.js 应用程序一起使用——在那里你不会得到 CORS 错误。您绝对不希望您的 accessKey 和 secretAccessKey 暴露在 HTML 中。无论如何,将 Lambda 暴露给浏览器的典型方法是使用 API 网关。基本设置在这里完成:http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started.html
您还需要按照以下步骤为 api 设置 CORS:http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html
我创建了一个博客 post,其中展示了如何使用 API 网关设置 Lambda 以创建 Slack-Bot 样式集成:http://www.ryanray.me/serverless-slack-integrations
CORS 是跨源资源共享。由于您的 html 在本地计算机 (localhost) 上并且 Lambda 具有不同的域 https://lambda.us-west-2.amazonaws.com,因此它会抛出 CORS 错误。 API 网关也是如此(如果您的 lambda 在 API 网关后面)。你会得到一些错误,比如 -
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://test123.us-west-2.amazonaws.com/dev. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
所以规则是,如果您的网站 domain/hostname 与您从 javascript 调用的 API 不同,您需要上交 CORS。