最近几天我正在尝试学习如何使用AWS,因为我想部署一些API。
到目前为止,我正在学习如何将API Gateway与Lambda 函数结合使用,这似乎是一个不错的工作流程。但是,因为我使用Flask-restplus编写 API ,所以我尝试了Zappa框架,该框架使用EventBridge (CloudWatch Events)作为我创建的每个 Lambda 函数的触发器。
所以我的问题是:
先感谢您。
zappa aws-lambda aws-api-gateway flask-restplus aws-event-bridge
我正在尝试使用 VSC 在本地调试 python 函数,但收到以下错误消息:
模板文件无效(或丢失)(路径必须是工作区相对路径或绝对路径):/Volumes/ExtremeSSD/Amazon/SalesForce/amazon-connect-salesforce-lambda/sam-app/lambda_functions
launch.json 设置如下:
{
"type": "aws-sam",
"request": "direct-invoke",
"name": "lambda_functions:sfInvokeAPI",
"invokeTarget": {
"target": "template",
"templatePath": "/Volumes/ExtremeSSD/Amazon/SalesForce/amazon-connect-salesforce-lambda/sam-app/lambda_functions",
"logicalId": "sfInvokeAPI"
},
Run Code Online (Sandbox Code Playgroud)
如果我设置了正确的路径,我无法理解为什么 VSC 会抱怨。有什么提示吗?
谢谢,
我有一个位于 VPC 中的 lambda 函数,具有以下输入/输出绑定规则。

在函数内部,目标是触发电子邮件,因此如下所示:
const aws = require('aws-sdk');
const ses = new aws.SES({ region: 'us-west-2' });
ses.sendEmail(params, function (err, data) {
if (err) {
console.log(err);
}
});
Run Code Online (Sandbox Code Playgroud)
然而; 当我触发该函数时,没有打印错误,并且任务超时。
原本该函数位于VPC之外,并且可以成功发送电子邮件。
我已经仔细检查了该函数的权限,其中包括 AWSLambdaVPCAccessExecutionRole。
有人知道这里发生了什么事吗?
我是 aws 新手,我想在 aws 中压缩一个目录并在 lambda 中获取压缩的 s3 URL。目前我正在使用 s3-zip 模块。但它直接下载zip。其实我不想下载。我希望它能用拉链装在桶里。有办法吗?我在下面分享了我的代码
const params = {
Bucket: S3BucketConfig.bucket,
Prefix: folder
}
const filesArray = []
const files = s3.listObjects(params).createReadStream()
const xml = new XmlStream(files)
xml.collect('Key')
xml.on('endElement: Key', function(item) {
filesArray.push(item['$text'].substr(folder.length))
})
xml
.on('end', function () {
zip(filesArray)
})
function zip(files) {
const output = fs.createWriteStream(join(__dirname, fileName))
s3Zip
.archive({ region: "eu-west-1", bucket: S3BucketConfig.bucket, preserveFolderStructure: true }, folder, files)
.pipe(output)
}
Run Code Online (Sandbox Code Playgroud)
谁能帮我这个 ?提前致谢
我的节点版本是16,但是当我开始创建AWS项目并部署它时,出现错误。
An error occurred: HelloLambdaFunction - Resource handler returned message: "Uploaded file must be a non-empty zip )
Run Code Online (Sandbox Code Playgroud)
解决方案是将我的节点版本降级到14(我在互联网上搜索),但只有高于15的节点版本才能支持我的另一个项目中的??=运算符。现在我很困惑。
请教我如何解决这个问题,感谢您的关注。
我有一个响应 Http 事件 (get) 的 lambda 函数,发送请求,我接受一对标头 headerA 和 headerB。
Lambda是用nodejs / typescript编写的
在实现上,我有一个定义为对象集合的全局变量:
let storage:{[myIndex :typeofHeaderA]? : storageDrivers } = {}
Run Code Online (Sandbox Code Playgroud)
当我收到请求时,我将类的新实例存储到上述全局变量中的“预期”索引上(如果尚未存在):
if(!storage[headerA]){
storage[headerA] = new MyStorageDriver(headerB)
}
Run Code Online (Sandbox Code Playgroud)
我所经历的是,如果考虑两个不同的请求,彼此接近:
第一个请求标头A1标头B1
第二个请求标头A1标头B2
在第二次请求之后,存储[headerA1]将包含 MyStorageDriver(headerB1) 的实例,而不是 MyStorageDriver(headerB2)
就像在不同的请求 lambda 执行中一样,全局范围内存在请求之间共享或重用。
这是 AWS lambda 的预期结果还是其他原因导致我出现这种意外行为?
我当前的解决方案(并仔细检查此行为,是更改全局变量,如下所示:
let storage:{[myIndex :typeofHeaderB]? :{
[myIndex :typeofHeaderA]? : storageDrivers }
} = {}
Run Code Online (Sandbox Code Playgroud)
然后根据请求这样分配:
if(!storage[headerB]){storage[headerB]={}
if(!storage[headerB][headerA]){
storage[headerB][headerA] = new MyStorageDriver(headerB)
}
Run Code Online (Sandbox Code Playgroud) 我想要一个 lambda 创建 EventBridge 事件,但在调用 lambda 时出现此错误:
User: arn:aws:sts::120293923901:assumed-role/MyApiOrdersPostFunct-I1QOYC7P1R0Z/MyApiOrdersPostFunct-SJtAeYoiaguW is not authorized to perform: events:PutEvents on resource: arn:aws:events:eu-north-1:120293923901:event-bus/MyApiEventBus because no identity-based policy allows the events:PutEvents action
Run Code Online (Sandbox Code Playgroud)
我添加了政策但没有改变。
这是 lambda 调用 eventbridge。
User: arn:aws:sts::120293923901:assumed-role/MyApiOrdersPostFunct-I1QOYC7P1R0Z/MyApiOrdersPostFunct-SJtAeYoiaguW is not authorized to perform: events:PutEvents on resource: arn:aws:events:eu-north-1:120293923901:event-bus/MyApiEventBus because no identity-based policy allows the events:PutEvents action
Run Code Online (Sandbox Code Playgroud)
这是 CDK 配置。有两个策略(attachInlinePolicy、addToRolePolicy),因为我测试了这两个策略。
import { APIGatewayProxyHandler, APIGatewayProxyResult } from 'aws-lambda';
import { EventBridgeClient, PutEventsCommand } from '@aws-sdk/client-eventbridge';
const eventBridge = new EventBridgeClient({ region: 'eu-north-1' });
export const post: APIGatewayProxyHandler = …Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-iam aws-lambda aws-cdk aws-event-bridge
如何使用 lambda 函数在 S3 中创建和附加文件?另外我想将文件大小限制为 5 MB,可以吗?
\n假设我的 lambda 函数搜索文件,我想保留搜索到的文件的备份。所以我想在搜索某些内容时附加该文件。如果文件大小增加到 5 MB 以上,我想创建一个新文件,可以根据日期命名,然后开始追加到其中。我怎样才能做到这一点?我正在使用 python/boto3。\xe2\x80\x93
\n我有一个从 DynamoDB 流事件触发的 lambda 函数。它接受的对象来自DynamoDBEventNugetAmazon.Lambda.DynamoDBEvents包。
public async Task FunctionHandler(DynamoDBEvent event, ILambdaContext context)
{
foreach (var record in event.Records)
{
var newImage = event.Dynamodb.NewImage; // Or "OldImage" property
var myObject = new MyObject();
myObject.ItemId = newImage["ItemId"].N;
myObject.IdList = newImage["IdList"].NS;
myObject.CustomerName = newImage["CustomerName"].S;
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以轻松地将此事件转换为我自己的类,如下所示,例如:
public class MyObject
{
public int ItemId { get; set; }
public List<int> IdList { get; set; }
public string CustomerName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
无需创建自己的映射器来操作每种类型的每个单独属性的 DynamoDBEvent 对象?
该类AttributeValue包含许多不同的属性,DynamoDb …
aws-lambda ×10
node.js ×3
amazon-s3 ×2
amazon-iam ×1
amazon-vpc ×1
aws-cdk ×1
c# ×1
javascript ×1
python-3.x ×1
typescript ×1
zappa ×1