有一个名为 Portal 的 DynamoDB 表。从节点中编写的 Lambda 函数中,我想更新项目的status和字段(通过调用signalJobStart函数),并等待异步更新函数在继续之前以 Promise 完成。由于某种原因没有发生更新,但是在操作过程中没有出现错误。日志中没有错误,我可以在日志中看到“FINISHED”日志消息。ts
为什么表中的项目没有发生变化?为什么我在日志中既看不到错误消息也看不到成功消息?
(我也在没有承诺的情况下进行了尝试,得到了相同的结果。表项没有更新 - 即使是异步更新。)
以下是 Lambda 的代码:
const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region: 'eu-west-1'});
module.exports = {
signalJobStart: function(accountId, jobId) {
console.log("Signaling job start for account %s and job %s", accountId, jobId);
let table = "Portal";
let params = {
TableName: table,
Key:{
"accountid": accountId,
"entity": jobId
},
UpdateExpression: "SET status = :s, ts = :t",
ExpressionAttributeValues:{
":s": "running",
":t": Date.now()
},
ReturnValues:"UPDATED_NEW" …Run Code Online (Sandbox Code Playgroud) 我想在 DynamoDB 表中删除记录后进行一些清理。如果我可以使用触发器来做到这一点,那就太好了。不幸的是,OldImage 似乎没有传递到“REMOVE”事件中。问题是我需要一些键以外的记录属性来执行清理,并且一旦事件触发,我实际上无法再读取记录来获取这些属性。还有其他方法可以读取已在触发器中删除的记录的属性吗?
我目前正在开发一项技能,将成为股票投资组合经理。我希望表格有三个标题
UserID 是主键,目前我可以将股票数量添加到表中,然后在一个名为 GetPortfolioValue 的单独方法中查询数据库以返回特定 UserID 的股票名称和股票数量,然后我将执行一些操作计算返回投资组合值。
问题是,我无法在主键下添加另一个条目,因此投资组合中只能有一个股票期权,这很糟糕
我希望以后能够编辑投资组合,以防用户出售部分股票。
有没有办法使用 DynamoDB 来做到这一点?
amazon-web-services node.js amazon-dynamodb aws-sdk aws-lambda
我正在尝试创建 Lambda 并从 Cognito 预注册触发器触发它。lambda 应该保持注册正常工作,但它应该在 Cognito 中创建用户后立即禁用用户!
禁用用户的代码工作正常,但问题是我不能先创建用户然后再禁用!
在下面的代码中,Disableuser 函数出现错误,提示“用户不存在”!
PS:我不需要自动确认用户是真是假,我只需要用户以禁用状态存在于 Cognito 中!
请帮助!我已经被这个问题困扰三天了!!
谢谢
exports.handler = (event, context, callback) => {
// Confirm the user
event.response.autoConfirmUser = false;
// Set the email as verified if it is in the request
if (event.request.userAttributes.hasOwnProperty("email")) {
event.response.autoVerifyEmail = false;
event.request.userAttributes.adminDisableUser= false;
console.log('---------trying-222--------'+ event.request.userAttributes.adminDisableUser)
console.log('event.response= '+ JSON.stringify(event.response));
}
// Return to Amazon Cognito
callback(null, event);
/////Disable user code !!
var AWS = require('aws-sdk');
var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
AWS.config.update({
region: 'eu-west-1'
}); …Run Code Online (Sandbox Code Playgroud)我目前的任务是构建一个用于政府机构和公民之间通信的无服务器架构,主要组件是某种形式的队列,其中包含某种形式的指向每个公民请求的对象/指针,按优先级排序。然后,政府工作人员可以在可用时处理元素。由于 Lambda 是无状态的,我需要以某种方式将队列保存在外部。
为了保存状态,我收集到您可以使用 DynamoDB 或 S3 存储桶并使用事件触发器来调用相关的 Lambda 方法。有些还建议使用 Parameter Store 来保存一些状态变量。全局存储东西也出现了,尽管你不能保证 Lambda 不会终止,这似乎不是一个好主意。
最后,我还阅读了一些有关 SQS 的内容,尽管我不知道它是否适用于这种情况。
以这种方式使用 Lambda 时,最佳实践/建议方法是什么?由于事件触发,我倾向于 S3 Bucket,而不是使用 DynamoDB 作为我们的数据库。
state amazon-s3 amazon-web-services amazon-dynamodb aws-lambda
我正在尝试运行根据此答案改编的代码。
from datetime import datetime
from pytz import timezone
import pytz
def lambda_handler(event, context):
date_format='%m/%d/%Y %H:%M:%S %Z'
date = datetime.now(tz=pytz.utc)
print('Current date & time is:', date.strftime(date_format))
date = date.astimezone(timezone('US/Pacific'))
print('Local date & time is :', date.strftime(date_format))
Run Code Online (Sandbox Code Playgroud)
我在 AWS Lambda 上运行。我收到此错误:
Response:
{
"errorMessage": "Unable to import module 'lambda_function': No module named 'pytz'",
"errorType": "Runtime.ImportModuleError"
}
Run Code Online (Sandbox Code Playgroud)
如何仅使用 AWS Lambda 中可用的导入来解决此问题?我想让代码保持非常简约,以便可以将其直接复制粘贴到 AWS 控制台中,而无需添加有关如何设置包等的说明。
我正在尝试更新 DynamoDB 表中的项目。我编写的代码正在更新该项目,但是当我添加标题为“源/目标”的列时,它给出了“ValidationException”异常。
用于更新的代码 -
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table("test")
response = table.update_item(
Key={
'id': "test_id
},
UpdateExpression="set source/target= :st, user_name= :usr",
ExpressionAttributeValues={
':st' : event['source/target'],
':usr' : event['user_name']
},
ReturnValues="UPDATED_NEW"
)
Run Code Online (Sandbox Code Playgroud)
我得到的错误是 -
调用UpdateItem操作时发生错误(ValidationException):Invalid UpdateExpression:语法错误;标记:\"/\",附近:\"源/目标\""
怎么解决这个问题呢?
我正在关注一个演示,并使用 C# 创建了一个通过 AWSSDK 调用的 Lambda。函数处理程序如下所示:
public async Task<bool> FunctionHandler(string fileName, ILambdaContext context)
Run Code Online (Sandbox Code Playgroud)
这很好用。现在我想看看是否可以使用API网关调用它。我知道为了使其工作,我需要添加APIGatewayProxyRequest到函数签名中。我可以将其添加为参数还是必须替换变量“fileName”?
当我希望以两种方式调用该函数时,这是如何工作的?直接通过 SDK 还是通过 APIGateway?我可以让一个函数可以通过多种方式调用吗?
我试图在函数执行期间写入和读取 lambda 中的 /temp dir,我知道最好的方法是使用 S3,但对于这个项目,我必须使用节点文件系统
const fs = require('fs');
exports.handler = async (event) => {
const path = '/tem/hi.json';
const write = (file) => {
fs.writeFile(file, "Hello World!", function(err) {
if (err) return console.log(err);
return {
statusCode:200,
body:JSON.stringify('data was written')
};
});
};
return write(path);
};
Run Code Online (Sandbox Code Playgroud) 当我尝试使用“请求”访问外部 API 并在 AWS Lambda 中获取响应时,我不知道如何正确放置“返回”代码来返回响应。
\n\nNodeJs 8.10
\n\nvar request = require(\'request\');\n\nmodule.exports.sendcode = async (event) => {\n\n let options = {\n url: \'https://api.netease.im/sms/sendcode.action?\' + content, \n method: \'POST\'\n };\n\n return await request(options, function (error, response, body) {\n console.log(body); \n return {\n statusCode: 200,\n body: JSON.stringify({\n message: body,\n input: event,\n }),\n };\n });\n};\nRun Code Online (Sandbox Code Playgroud)\n\n当我在无服务器框架中运行此代码时,我得到一个空响应,主体中没有任何内容,实际上它至少应该具有“输入”属性。
\n\n但 console.log 已经记录了 API 的实际响应。
\n\n看起来我的“返回”代码根本没有执行。\n\xef\xbc\x88如果我删除 async 和await,那么程序将挂起直到超时)
\n\n任何人都可以帮助如何修改此代码以使其工作吗?
\naws-lambda ×10
node.js ×3
amazon-s3 ×1
aws-sdk ×1
c# ×1
javascript ×1
python ×1
python-3.7 ×1
state ×1