标签: aws-lambda

EventBridge 与 API 网关

最近几天我正在尝试学习如何使用AWS,因为我想部署一些API。

到目前为止,我正在学习如何将API GatewayLambda 函数结合使用,这似乎是一个不错的工作流程。但是,因为我使用Flask-restplus编写 API ,所以我尝试了Zappa框架,该框架使用EventBridge (CloudWatch Events)作为我创建的每个 Lambda 函数的触发器。

所以我的问题是:

  1. EventBridge 和 API Gateway 之间有什么区别?我何时应该使用它们?
  2. 在使用 API Gateway 时,我意识到最佳实践是为每个 API 创建不同的 Lambda 函数,然后将其连接到网关。那么,将整个 python 文件作为 Lambda 函数上传是一个好主意吗?(所有 API 路由都写在那里)或者我应该为每个 API 执行一个过程?

先感谢您。

zappa aws-lambda aws-api-gateway flask-restplus aws-event-bridge

0
推荐指数
1
解决办法
2730
查看次数

无效(或丢失)模板文件(路径必须是工作区相对路径或绝对路径):

我正在尝试使用 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 会抱怨。有什么提示吗?

谢谢,

python-3.x aws-lambda visual-studio-code

0
推荐指数
1
解决办法
1162
查看次数

AWS Lambda 在 VPC 中触发 SES

我有一个位于 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。

有人知道这里发生了什么事吗?

amazon-web-services amazon-vpc aws-lambda

0
推荐指数
1
解决办法
1510
查看次数

有没有办法压缩整个 s3 目录并将 zip 保留在那里而不下载它?

我是 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)

谁能帮我这个 ?提前致谢

javascript amazon-s3 amazon-web-services node.js aws-lambda

0
推荐指数
1
解决办法
1286
查看次数

AWS Lambda 无服务器项目的 NodeJS 版本 14 和 15 之间的斗争

我的节点版本是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的节点版本才能支持我的另一个项目中的??=运算符。现在我很困惑。

请教我如何解决这个问题,感谢您的关注。

node.js aws-lambda

0
推荐指数
1
解决办法
2646
查看次数

如何在无服务器配置中为 aws lambda 选择基于 arm64 的 graviton2?

如何配置 AWS Lambda 函数以在无服务器配置中在基于 arm64 的 AWS Graviton2 处理器上运行。

AWS Lambda 配置

amazon-web-services aws-lambda

0
推荐指数
1
解决办法
576
查看次数

AWS lambda (nodejs) 是否在不同的执行之间共享内存?

我有一个响应 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)

amazon-web-services node.js typescript aws-lambda

0
推荐指数
1
解决办法
1607
查看次数

lambda 创建事件事件的权限:PutEvents

我想要一个 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

0
推荐指数
1
解决办法
6860
查看次数

使用 Lambda 在 S3 中附加文件

如何使用 lambda 函数在 S3 中创建和附加文件?另外我想将文件大小限制为 5 MB,可以吗?

\n

假设我的 lambda 函数搜索文件,我想保留搜索到的文件的备份。所以我想在搜索某些内容时附加该文件。如果文件大小增加到 5 MB 以上,我想创建一个新文件,可以根据日期命名,然后开始追加到其中。我怎样才能做到这一点?我正在使用 python/boto3。\xe2\x80\x93

\n

amazon-s3 amazon-web-services aws-lambda

0
推荐指数
1
解决办法
1985
查看次数

如何将 Dynamodb 流 DynamoDBEvent 新图像或旧图像转换为我自己的具体对象类型 T,而无需手动映射?

我有一个从 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 …

c# amazon-dynamodb aws-lambda amazon-dynamodb-streams

0
推荐指数
1
解决办法
2891
查看次数