amazon-web-services - 如何架构文件的无服务器转换

标签 amazon-web-services amazon-s3 error-handling aws-lambda status

我正在设计一个要使用AWS和S3存储桶的无服务器功能的系统。

我在S3存储桶中有一些Word文件,并希望对文件进行一些转换(此代码将由我编写,我想使用无服务器功能将其托管,假设此服务的名称为FileTransformation服务)并生成新文件。

假设用户发送了一个转换文件的请求,并且该请求包含了文件名。

现在我有以下问题:

  • 我不希望服务执行顺序顺序的操作,例如,如果user1在请求中指定了10个文件名,而另一个user2也给出了另外15个文件的请求。我不希望出现类似“一旦完成user1请求,然后就应该开始user2请求”的问题。我该如何处理?
  • 假设user1user2询问了他们的请求状态,如何报告?这需要在FileTransformation服务中完成一些额外的工作吗?
  • 如果请求失败,如何通知用户?

  • 开发上述服务时,我应该考虑任何AWS服务吗?

    我认为我们可以使用消息代理将请求发送到服务。 CloudWatch用于错误报告等。

    最佳答案

    您的设计可能如下所示:

  • S3存储桶具有一个objectCreated事件触发器(在S3存储桶通知部分中设置),该事件触发器将触发Lambda以处理
  • 文件上载到S3存储桶
  • 每个文件都会触发一个Lambda来处理它(并发Lambdas,所以这是而不是顺序
  • 如果Lambda遇到错误,它可以通知用户(请参见下面的注释来解决此问题)
  • Lambda完成处理后,可以执行您希望执行的任何操作(例如,通过SES通过电子邮件发送结果,或将结果文件存储在S3中)

  • I don't want the services to do sequential stuff



    当您使用无服务器的AWS Lambda时,您的Lambda将运行多个并发实例(您可以使用保留的并发执行值限制和/或保留)。

    Suppose the user1 and user2 asked for status of their request



    为此,您可能需要实现一个DynamoDB来保存每个请求的状态。触发Lambda时,它可以状态为“进行中”的状态写入DynamoDB,然后可以将其相应更新为“完成”或“失败”。然后,您将拥有一个单独的API,该API在用户请求更新时都会读取该表

    How can i notify user if request fails in between?



    您可以上传包含用户电子邮件或任何其他通知媒体的前缀的文件,例如files/userA/userA@test.com/file.doc。这样,当Lambda触发并开始处理时,如果处理失败,它将知道将结果发送到的电子邮件。

    编辑:
    根据注释,如果您想要一种方法,其中文件已存在于S3中,并且用户请求处理,则只需将用户的消息发送到SQS队列,然后为其使用Lambda触发器(它将触发并发执行)。 Lambda处理队列,而不是顺序的。或者,您可以让API直接调用Lambda,然后让用户等待(如果处理相对较快,这也应该很好)

    关于amazon-web-services - 如何架构文件的无服务器转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56422774/

    相关文章:

    search - 向 AWS S3 存储桶添加适当的权限以允许 SEO

    mongodb - DynamoDB 相对于其他 NoSQL 数据库的优缺点是什么?

    amazon-web-services - Amazon CloudFront 与 S3 --> 按域限制访问?

    amazon-web-services - 如何避免 AWS S3 节流问题?

    php - 如何从Chrome浏览器找到空白屏幕的PHP错误?

    php - PHP登录文件不起作用。继续返回登录页面而不是用户个人资料

    php - 警告 : implode() [function. 内爆]:传递的参数无效

    amazon-web-services - 使用 Bucketname 时的 S3 静态网站托管?

    mysql - 尽管我在RDS实例的安全组中指定了入站规则,但登录失败

    python - 根据标签获取快照成本