缺少事件对象body和isBase64Encoded属性。但是根据文档,它们应该在那里完整的结构如下:
{
"type": "REQUEST",
"methodArn": "arn:aws:execute-api:us-west-2:*******:*******/development/POST/auth/login",
"resource": "/{proxy+}",
"path": "/auth/login",
"httpMethod": "ANY",
"headers": {
.....
},
"queryStringParameters": {
"test": "123"
},
"pathParameters": {
"proxy": "auth/login"
},
"stageVariables": {
"lambdaVersion": "development"
},
"requestContext": {
"path": "/development/auth/login",
"accountId": "*****",
"resourceId": "f8wvnk",
"stage": "development",
"requestId": "****",
"identity": {
....
},
"resourcePath": "/{proxy+}",
"httpMethod": "POST",
"apiId": "********"
}
}
Run Code Online (Sandbox Code Playgroud)
有没有人有类似的问题?
我正在构建一个 React 应用程序,使用 API Gateway、lambda 和 cognito(基本上从https://serverless-stack.com教程开始)。我想为我的 DynamoDb 设置细粒度的访问控制(即通过基于登录用户限制对 DynamoDb 表的访问的 IAM 策略 - 如https://docs.aws.amazon.com/IAM/latest/UserGuide/ reference_policies_examples_dynamodb_rows.html )
AFAIK,一个 lambda 函数承担一个服务角色,如 serverless.yml 文件中定义的那样,它本身与附加到登录的 cognito 用户的 AIM 策略无关。我知道使用aim_authorizer,我可以获得登录用户的信息。
我的问题:是否可以让 lambda 代表给定的认知用户执行 AWS 调用,从而遵守附加到该用户的 IAM 策略?(有点类似于 serverless-stack 教程如何与 S3 交互)
欢迎所有建议。
我遇到了Lambda 函数的问题,由于某种原因它超时了。
我尝试添加一些 console.log 以了解发生了什么,并且 一切正常,直到外部 http 请求。
我使用npm 模块请求
我可以在请求之前看到日志,但回调中的日志永远不会出现,就像端点没有响应一样。
我错过了什么吗?提前致谢!
var mysql = require('mysql');
var request = require('request');
var config = require('./config.json');
var pool = mysql.createPool({
host: config.dbhost,
user: config.dbuser,
password: config.dbpassword,
database: config.dbname
});
var openWeatherOptions = (device) => {
let domain = 'https://api.openweathermap.org/data/2.5/';
let apiEndpoint = 'weather?';
let params = `lat=${device.lat}&lon=${device.lng}&APPID=${process.env.WEATHER_APP_ID}&units=metric`;
let url = [domain, apiEndpoint, params].join('').toString();
return {
url: url,
method: 'GET',
headers: { 'Content-Type': 'application/json'},
};
}; …Run Code Online (Sandbox Code Playgroud) 我有一个非常大的 python 文件,它由多个定义的函数组成。如果您熟悉 AWS Lambda,当您创建 lambda 函数时,您会指定一个处理程序,它是代码中的一个函数,AWS Lambda 在服务执行我的代码时可以调用它,在下面的 my_handler.py 文件中表示:
def handler_name(event, context):
...
return some_value
Run Code Online (Sandbox Code Playgroud)
链接来源:https : //docs.aws.amazon.com/lambda/latest/dg/python-programming-model-handler-types.html
然而,正如我上面提到的,我在 my_handler.py 中有多个定义的函数,它们有自己的事件和上下文。因此,这将导致错误。在python3.6中有什么方法可以解决这个问题吗?
我正在尝试在 AWS Lambda 中安装/运行 Head-Less Chrome,但是当我通过 Lambda 对其进行测试时出现以下错误。
"errorMessage": "消息:服务 /tmp/bin/chromedriver 意外退出。状态代码为:127\n", "errorType": "WebDriverException"
我在 Linux 上使用 ChromeDriver 83.0.4103.39。
在 Python 中执行的步骤:
蟒蛇代码:
在以下行上抛出错误 -
driver = webdriver.Chrome(chrome_options=chrome_options, executable_path = "/tmp/bin/" + chrome_linux_driver)
当我在具有相同 Windows Chrome 驱动程序的 Windows 下运行时,代码工作正常。
任何帮助都非常感谢。
免责声明:我承认这更像是一个广泛的最佳实践问题,而不是一个特定的编程问题,但是,我相信 SO 群是它的最佳受众。我知道这个类似的问题(我应该在无服务器应用程序中使用 Express.js 吗?),但答案似乎没有回答我的问题。
出于典型原因,我想将 Express.js 从 AWS Lightsail/EC2 迁移到无服务器,而 Lambda 是我的首选武器。但是,将整个框架连同其上的应用程序一起视为函数可能有点笨重,因此可能不适合在 AWS Lambda 或 Google/Azure Functions 上运行。虽然我确信这是可行的,但这是个好主意吗?这种设置不会降低效率并使处理诸如会话状态之类的事情变得复杂,最终会破坏无服务器功能的目的吗?
express aws-lambda azure-functions serverless aws-serverless
我有一个简单的 Express/Node.js 应用程序,其中包含以下没有子目录的文件(除了 .serverless 和 node_modules)。
AWS 抛出此错误 -发生错误:ApiLambdaFunction - 上传的文件必须是非空 zip(服务:AWSLambdaInternal;状态代码:400;错误代码:InvalidParameterValueException;请求 ID:5779d4c3-beaa-4bc2-b525-c1e89a82635a;空值)。
当我访问代码上传到的 S3 存储桶时,.zip 文件不是空的。我能够看到 .zip 文件夹及其所有内容,但是,serverless deployAWS CLI的操作失败,引发上述异常。任何帮助将问题归零将不胜感激。谢谢!
以下是代码。
const express = require("express")
const app = express();
app.use(express.json());
app.use(express.urlencoded({extended: false}));
app.get("/", (req, res) => {
res.status(200).send("Root endpoint")
})
app.post("/postReq", (req, res) => {
res.status(200).send(req.body);
})
app.listen(8080, () => console.log("App started."))
Run Code Online (Sandbox Code Playgroud)
'use strict'
const awsServerlessExpress = require('aws-serverless-express')
const app = require('./app')
const server = awsServerlessExpress.createServer(app)
exports.handler …Run Code Online (Sandbox Code Playgroud) 我正在使用 aws lambdas、dynamodb 和 cognito 构建身份验证系统。
坚持比较 getOpenIdTokenForDeveloperIdentity() 提供的令牌;调用来自服务器的特定身份。
我正在通过以下方式获取令牌和身份:
function getToken(email, fn) {
var param = {
IdentityPoolId: cognitoIdentityPoolId,
Logins: {} // To have provider name in a variable
};
param.Logins[cognitoDeveloperProvidedName] = email;
cognitoidentity.getOpenIdTokenForDeveloperIdentity(param,
function(err, data) {
if (err) return fn(err); // an error occurred
else fn(null, data.IdentityId, data.Token); // successful response
});
}
Run Code Online (Sandbox Code Playgroud)
然后据我所知,我可以从 cognito 中获取已经生成的令牌(而不是创建一个新令牌),如下所示:
function checkToken(IdentityId, email, fn){
var param = {
IdentityPoolId: cognitoIdentityPoolId,
IdentityId: IdentityId,
Logins: {}
};
param.Logins[cognitoDeveloperProvidedName] = email;
cognitoidentity.getCredentialsForIdentity(param,
function(err, data) { …Run Code Online (Sandbox Code Playgroud) 如果出现错误或异常,Java AWS Lambda 最多会尝试重新调用该函数 3 次。有没有办法跟踪当前的调用计数,即知道它是第一次、第二次还是第三次调用?谢谢
我正在尝试在 ViewerResponse 事件上使用 Lambda@Edge 从 Cloudfront 响应中删除一些标头。源是一个 S3 存储桶。
我已经成功地改变了这样的标题:
exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;
response.headers.server = [{'key': 'server', 'value': 'bunny'}];
callback(null, response);
};
Run Code Online (Sandbox Code Playgroud)
但是,将所有标题一起删除似乎不起作用,例如像这样。
exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;
delete response.headers.server;
// or response.header.server = null;
// or response.headers.server = [{'key': 'server', 'value': null}];
callback(null, response);
};
Run Code Online (Sandbox Code Playgroud)
此代码段不会删除但将服务器标头从 更改server: AmazonS3为server: CloudFront。所以我假设服务器标头可能是强制性的并且会自动填充。但我也无法删除 CloudFront 生成的其他标头。在 lambda 测试窗格中,该函数按预期工作。所以在 Lambda 函数完成后会发生一些事情。
作为背景,我想更改标题,因为该站点在重要客户的网络中被阻止,并显示它是在线存储或备份位置的消息。
我错过了什么?
aws-lambda ×10
javascript ×2
node.js ×2
serverless ×2
amazon-s3 ×1
express ×1
npm-request ×1
python ×1
python-3.6 ×1
python-3.x ×1
selenium ×1