需要从JavaScript调用AWS Lambda的示例吗
只需要一个例子,说明如何从浏览器中运行的JavaScript调用AWS Lambda,并在JavaScript控制台中显示函数结果。令人难以置信的是,我在谷歌或AWS文档中找不到任何例子 我的用例是我有一个HTML表单。提交表单时,我希望使用Lambda处理表单输入。假设Lambda函数完成时没有错误,那么我想让用户进入一个感谢页面需要从JavaScript调用AWS Lambda的示例吗,javascript,aws-lambda,Javascript,Aws Lambda,只需要一个例子,说明如何从浏览器中运行的JavaScript调用AWS Lambda,并在JavaScript控制台中显示函数结果。令人难以置信的是,我在谷歌或AWS文档中找不到任何例子 我的用例是我有一个HTML表单。提交表单时,我希望使用Lambda处理表单输入。假设Lambda函数完成时没有错误,那么我想让用户进入一个感谢页面 请包括一个完整的HTML示例,而不仅仅是一个代码片段。由于您需要从浏览器运行Lambda,您有两个选项可以实现它 使用AWS Javascript SDK,通过静态
请包括一个完整的HTML示例,而不仅仅是一个代码片段。由于您需要从浏览器运行
Lambda
,您有两个选项可以实现它
AWS Javascript SDK
,通过静态配置或Cognito
使用IAM权限对Lambda
进行设置。您还可以考虑将您的<代码> lambda < /代码>函数定义为<代码> SNS主题,并通过向主题发送消息来运行<代码> lambda < /Cord>。这种SNS方法还需要您通过单独的调用来存储和检索提交状态
这两种选择各有利弊。关于您的用例的更多信息对于正确评估哪一个最适合您是必要的。我将使用AWS SDK for Javascript,步骤如下
AWS.config.update({region:'region'});
AWS.config.credentials=new AWS.CognitoIdentityCredentials({IdentityPoolId:'IdentityPool'})代码>
我看到有人使用AWS SDK来编写Javascript,但这并不是特别需要的,因为您需要创建Amazon Cognito身份池,并为未经身份验证的身份启用访问权限(至少对于像我这样的初学者)。下面的代码对我来说很好-
<html>
<head>
<script>
function callAwsLambdaFunction() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("myDiv").innerHTML = this.responseText;
}
};
xhttp.open("GET", "https://test123.ap-south-1.amazonaws.com/dev", true);
xhttp.send();
}
</script>
<title>Hello World!</title>
</head>
<body>
<h1>Hello world!</h1>
<h1>Click below button to call API gatway and display result below!</h1>
<h1><div id="myDiv"></div></h1>
<button onclick="callAwsLambdaFunction()">Click me!</button><br>
Regards,<br/>
Aniket
</body>
</html>
函数callAwsLambdaFunction(){
var xhttp=newXMLHttpRequest();
xhttp.onreadystatechange=函数(){
if(this.readyState==4&&this.status==200){
document.getElementById(“myDiv”).innerHTML=this.responseText;
}
};
xhttp.open(“GET”https://test123.ap-south-1.amazonaws.com/dev“,对);
xhttp.send();
}
你好,世界!
你好,世界!
单击下面的按钮调用API gatway并在下面显示结果!
点击我
问候,
安妮特
上面是示例index.html,我已经添加到我的S3 bucket中,并创建了一个静态站点。需要注意的几点-
跨源请求被阻止:同一源策略不允许读取远程资源https://test123.ap-south-1.amazonaws.com/dev. (原因:CORS标题“Access Control Allow Origin”丢失)。
对于2017年后看到此消息的人,您可以签出。示例代码取自Amplify API文档
请注意1) 必须使用POST方法调用lambda函数。
2) 确保添加策略,以便为未经身份验证(如果需要)和身份验证的角色调用lambda权限。
3) 如果授予了权限策略,则用户无需登录即可调用lambda
import Amplify, { API } from 'aws-amplify';
Amplify.configure({
Auth: {
// REQUIRED - Amazon Cognito Identity Pool ID
identityPoolId: 'XX-XXXX-X:XXXXXXXX-XXXX-1234-abcd-1234567890ab',
// REQUIRED - Amazon Cognito Region
region: 'XX-XXXX-X',
// OPTIONAL - Amazon Cognito User Pool ID
userPoolId: 'XX-XXXX-X_abcd1234',
// OPTIONAL - Amazon Cognito Web Client ID
userPoolWebClientId: 'XX-XXXX-X_abcd1234',
},
API: {
endpoints: [
{
name: "MyCustomLambdaApi",
endpoint: "https://lambda.us-east-1.amazonaws.com/2015-03-31/functions/yourFuncName/invocations",
service: "lambda",
region: "us-east-1"
}
]
}
});
这就是如何调用lambda函数
let apiName = 'MyApiName'; // replace this with your api name.
let path = '/path'; //replace this with the path you have configured on your API
let myInit = {
body: {}, // replace this with attributes you need
headers: {} // OPTIONAL
}
API.post(apiName, path, myInit).then(response => {
// Add your code here
});
我困惑的一部分是我不知道是“invoke”还是“invoke”(大写“I”)。文档显示小写,但JavaScript库显示大写I。我尝试了两种方法,但结果不一致。您是指从客户端还是从服务器?从浏览器中选择Browser或Node.js。我将对问题进行编辑以澄清。我没有将其标记为已接受,因为我要求的是一个独立的示例,而不是概念大纲。@JesseBarnum您解决了这个问题吗?如果是,如何。。你能把它作为一个答案吗?我正试着用IAM权限做1。我没有调用SNS,我尝试直接调用Lambda(在RequestResponse模式下使用invoke函数),但它不起作用。当我说“不工作”时,我的意思是我在表单中单击submit按钮,什么也没有发生,Java错误控制台中没有任何内容,所以我希望看到某人的工作示例。你所说的“直接”方式是什么意思?这不,这个:是的,这也是可能的。我更新了我的答案。你关于使用SNS的建议对他的用例无效,因为他想知道这个功能是否成功。如果您使用SNS,它将返回向主题发送消息的结果,而不是Lambda执行的结果。API网关额外收费,每百万请求3.5美元扫描我们使用AWS Amplify调用步骤函数?