我试图在dynamoDB中使用batchWriteItem来执行多个put请求.我使用v2.6.8的AWS-SDK lambda函数内.它给了我一个奇怪的错误:batchWriteItem不是一个函数.说完了,把它搞定了!知道我错过了什么吗?
当我尝试连接到AWS RDS(MySQL)时,我收到的大部分时间都是InterfaceError.当我编辑Lambda代码并重新运行时,它将在第一次正常工作,但随后会出现相同的错误.
我的代码:
import sys
import logging
import pymysql
import json
import traceback
rds_host = "*****.rds.amazonaws.com"
name = "*****"
password = "****"
db_name = "myDB"
logger = logging.getLogger()
logger.setLevel(logging.INFO)
try:
conn = pymysql.connect(rds_host, user=name, passwd=password, db=db_name, connect_timeout=5)
except:
logger.error("ERROR: Unexpected error: Could not connect to MySql instance.")
sys.exit()
logger.info("SUCCESS: Connection to RDS mysql instance succeeded")
def handler(event, context):
sub = event['sub']
username = event['username']
givenname = event['givenname']
isAdmin = event['isAdmin']
print (sub)
print (username)
print (givenname)
print (isAdmin) …Run Code Online (Sandbox Code Playgroud) 这是交易:
我无法将数据添加到DynamoDB.JS文件在S3中,这是代码:
var date = new Date(),
item = {
'id': {N: date.getTime()},
'user': {S: "Sam"}
},
params = {
TableName: 'users',
Item: item
};
dynamodb.putItem(params,function(err,data){
if (err) {
console.log(err);
} else {
console.log("user added to DynamoDB");
}
});
Run Code Online (Sandbox Code Playgroud)
这是来自DB的截图,这意味着id应该是一个数字,而不是字符串:
我得到的错误:
错误:预期params.Item ['id'].N是一个字符串
Run Code Online (Sandbox Code Playgroud)at ParamValidator.fail (aws-sdk.js:96666) at ParamValidator.validateType (aws-sdk.js:96827) at ParamValidator.validateString (aws-sdk.js:96762) at ParamValidator.validateScalar (aws-sdk.js:96742) at ParamValidator.validateMember (aws-sdk.js:96709) at ParamValidator.validateStructure (aws-sdk.js:96690) at ParamValidator.validateMember (aws-sdk.js:96703) at ParamValidator.validateMap (aws-sdk.js:96729) at ParamValidator.validateMember (aws-sdk.js:96707) at ParamValidator.validateStructure (aws-sdk.js:96690)
下面的代码在Lambda中返回"得到响应:301".我在php,python和现在的Node中尝试过这段代码.将此链接粘贴到浏览器中会返回此图片中的JSON数据.如何获取打印出相同数据的代码?我需要最终将数据放入Mongo.我可以让php和python在本地打印数据但不能在Lambda中打印.
我认为它与这里显示的callback()有关,我正在尝试实现它.
var http = require('http');
var url = 'http://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=MSFT&interval=1min&apikey=demo';
exports.handler = function (event, context) {
http.get(url, function(res) {
console.log("Got response: " + res.statusCode);
res.on("data", function(chunk) {
console.log("BODY: " + chunk);
});
}).on('error', function(e) {
console.log("Got error: " + e.message);
});
};
Run Code Online (Sandbox Code Playgroud)
我将代码更新为:
var http = require('http');
var url = 'http://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=MSFT&interval=1min&apikey=demo';
exports.handler = function (event, context) {
http.get(url, function(res) {
var data = '';
res.on('data', (chunk) => { data += chunk; });
res.on('end', () => { console.log("BODY: " …Run Code Online (Sandbox Code Playgroud) 我正在研究aws lambda-lex,我发现用node.js编写了咖啡机器人示例代码。
// --------------- Main handler -----------------------
// --------------- in node.js -----------------------
// Route the incoming request based on intent.
// The JSON body of the request is provided in the event slot.
exports.handler = (event, context, callback) => {
try {
dispatch(event, (response) => callback(null, response));
} catch (err) {
callback(err);
}
};
Run Code Online (Sandbox Code Playgroud)
我想使用回调参数,但在python中找不到
// --------------- Main handler -----------------------
// --------------- in python -----------------------
def lambda_handler(event, context):
dispatch(event)
# >>> this handler doesn't include callback <<<
Run Code Online (Sandbox Code Playgroud)
如果需要,将两者进行比较
python文档 vs …
我正在尝试使用以下代码,但无法使其正常工作。即使我完全按照文档中的说明进行操作,也会不断给我关于过滤器表达式类型错误的错误消息。我该怎么做才能解决此问题?
def EndpointDeleted(event):
endpoint = event['Attributes']['EndpointArn']
if('EndpointArn' in event['Attributes']):
client = boto3.client('dynamodb')
response = client.scan(
TableName='sniffergps-mobilehub-812282467-Users',
Select='ALL_ATTRIBUTES',
FilterExpression=Attr('Endpoints').contains(endpoint)
)
return responseRun Code Online (Sandbox Code Playgroud)
但是我收到一个错误消息,说过滤器表达式是错误的类型。我有以下导入消息:
import boto3
from boto3.dynamodb.conditions import Key
from boto3.dynamodb.conditions import Attr
错误信息:
{
"errorMessage": "Parameter validation failed:\nInvalid type for parameter FilterExpression, value: <boto3.dynamodb.conditions.Contains object at 0x7fdca25e0b38>, type: <class 'boto3.dynamodb.conditions.Contains'>, valid types: <class 'str'>",
"errorType": "ParamValidationError",
"stackTrace": [
[
"/var/task/lambda_function.py",
13,
"lambda_handler",
"return EndpointDeleted(event)"
],
[
"/var/task/lambda_function.py",
24,
"EndpointDeleted",
"FilterExpression=Attr('Endpoints').contains(endpoint)"
],
[
"/var/runtime/botocore/client.py",
312,
"_api_call",
"return …Run Code Online (Sandbox Code Playgroud)我需要每周发送大约200-300k的电子邮件,用于我们的每周时事通讯.这个数字预计会随着时间的推移而增加,这就是为什么我想让lambda为我们处理缩放的原因.
员工将有一个UI来触发这些电子邮件的发送.我最初的想法是将电子邮件地址列表添加到SNS主题并让lambda函数订阅它以触发实际发送电子邮件.我读过这可能会导致一些意想不到的行为,并不是最好的追踪错误.
我们目前的限制是每秒90封电子邮件.这与5分钟执行lambda函数的最大时间相结合,让我想知道如何拆分它.我是否需要将这些批量发送到SNS,以便可以均匀地旋转多个lambda容器来完成工作?我知道lambda可以扩展为诸如向S3添加文件之类的事件但是我如何明确地告诉lambda旋转多个来处理所有需要发送的电子邮件?这有更好的设计模式吗?
我的另一个想法是将电子邮件添加到SQS队列中,以便电子邮件可以保持不变,但需要做一些解决方法,以便与lambda很好地协作.
我希望为AWS Lambda/zappa使用一些"无服务器api服务器",它使用自定义API网关授权程序进行用户身份验证.在无服务器的AWS lambda服务中,使用自定义授权器而不是直接在代码控制器中检查已发布的JWT令牌是否具有相当大的安全性或成本优势?对我来说,检查代码可能更方便.
更新我去了pre请求钩子,但是有头级别的授权器,它更容易用于CORS,但我认为zappa不支持它.也可以通过swagger上传为Options设置模拟API,如果成功则会更新.
我想在一个lambda函数中使用托管在'us-west-2'区域中的"Dynamodb DocumentClient"和托管在'us-west-1'区域中的SES.我该怎么做?
amazon-web-services node.js amazon-dynamodb aws-sdk aws-lambda
我有一个lambda,它在S3中创建一个对象时运行,在某些情况下我需要重新安排这个lambda,让我们说15分钟后.
当我的lambda第二次运行时,我需要有相同的事件参数,我不介意其他字段而不是桶和路径.
event.Records[0].s3.bucket.name event.Records[0].s3.object.key.但很容易有相同的event
我的另一种方法是将这些数据保存在发电机中并使用另一个lambda,每隔15分钟从那里读取一次(糟糕).
但是重新安排我当前的函数并将相同的参数传递给它会更好.像这样的东西:
exports.handler = (event, context, callback) => {
if(xyz)
reschedule(15 * 1000 * 60, 'ThisLambdaName', event, context);
}
Run Code Online (Sandbox Code Playgroud)
像setTimeout这样的东西,但没有AWS为我充电15分钟lol.
aws-lambda ×10
node.js ×3
aws-sdk ×2
python ×2
amazon-rds ×1
amazon-s3 ×1
amazon-ses ×1
boto3 ×1
lambda ×1
mysql ×1