无服务器框架、yaml 和 AWS lambda/DynamoDB 概念

时间:2021-03-04 23:24:02

标签: amazon-web-services aws-lambda amazon-dynamodb serverless-framework serverless

我最近探索了无服务器,我想为我的应用程序创建一个“简单”的后端。它应该像 CRUD 连接到 DynamoDB 就像它很好地显示 here。然后后来转换为使用 Cognito 登录的用户。 Link1link2 (

在我的实施过程中,我遇到了一些问题,想向您寻求帮助,因为我不喜欢使用我只复制的东西并且不完全知道它是如何工作的:

  1. 在 lambda 函数中使用回调与返回 请您能描述一下这两者之间的区别吗? 我已经找到了一些关于此的资源,但是,他们不会为我清除。在 Amazon Docshere Stack overflow

  2. 为什么我在使用无服务器初始化 lambda 时不需要设置 CORS(标头),而不是在亚马逊控制台中创建的 lambda 函数(如 here)?< /p>

  3. 在无服务器框架中,functions.events.httpfunctions.events.httpapi 之间有什么区别?

  4. Serverless.yml 是否有 YAML 指南?我了解亚马逊编写用户指南和模板,例如 AWS::IAM::RoleDynamo Tables 和所有其他人。而且这些资源构成了一个 cloudformation,但是当我创建/编码它们时,例如列出其中的 Lambda 函数的目的是什么?参考它们?添加他们的权限?

还有参考如何在那里工作?我是只指定应该创建的资源还是我也可以通过 ARN 引用已经存在的资源?如果是这样怎么办?

政策是否仅像 documentation showing 那样全局设置,还是唯一的其他选择是使用插件 serverless-iam-roles-per-function?同样的问题也适用于资源中的角色和策略。

我对文档和所有不同的指南感到不知所措,有时找不到正确的答案。我感谢对我的任何问题的任何回答!我喜欢无服务器功能并看到它的巨大潜力,因此想获得更多关于它的知识并开始更多地使用它:)

干杯并提前致谢 卢卡斯!

1 个答案:

答案 0 :(得分:1)

这里有很多问题,但我会尝试在高层次上解决这些问题。如果您有后续问题或想要更深入的答案,我建议您发布一个不同的 StackOverflow 问题,重点关注具体细节。如果您的问题有针对性且简洁,则更有可能获得更多社区参与。

<块引用>

在 lambda 函数中使用回调 vs 返回请你能描述一下 这两者之间的区别?我在这方面找到了一些资源, 但是,他们不会为我清除它。在 Amazon Docs 和此处 Stack 溢出。

区别归结为异步处理程序与同步处理程序。我认为我无法比您链接的资源更好地解释这种差异。不过,我会说这归结为个人喜好。

您可以使用任何一种方法来实现您的 lambda,这取决于您的个人喜好。你喜欢管理回调还是喜欢使用 async/await?

<块引用>

为什么我在初始化 lambdas 时不需要设置 CORS(标头) 无服务器而不是在亚马逊中创建的 lambda 函数 控制台(就像这里)?

serverless-stack 演示将 CORS 响应巧妙地放入辅助方法中。看起来你是using it here。当您在 lambda 表达式中调用此方法时,您正在设置 CORS 标头。

<块引用>

在无服务器框架中,它们之间的区别是什么 functions.events.http 和functions.events.httpapi?

functions.events.http 指的是 API Gateway 的 REST API 产品 (APIG v1)。 functions.events.httpapi 指的是 API Gateways HTTP API 产品 (APIG v2)。

您可以阅读 REST API and HTTP API offerings here 之间的差异。

<块引用>

Serverless.yml 有 YAML 指南吗?我了解亚马逊 为 AWS::IAM::Role 或 Dynamo 编写用户指南和模板 表和所有其他。而且这些资源构成了云形成 但是例如在那里列出的 Lambda 函数的目的是什么 当我创建/编码它们时?参考它们?添加他们的权限?

当您将提供程序设置为 aws 时,无服务器框架文档有一个 guide to the serverless.yml options。 serverless.yml 文件是对 Cloudformation 的抽象。这个想法是 serverless.yml 比冗长的 Cloudformation 更容易编写。您将在 serverless.yml 中定义函数以在 AWS 中创建/配置您的 lambda。例如,这是您 serverless.yml 中的一个片段

functions:
  login:
    handler: login.login
    name: my-login-function
    memorySize: 128
    description: Function that log user.
    events:
    - httpApi: 
        path: /login
        method: post

这将使用您在 login.js 文件中编写的代码在 AWS 中创建一个 lambda。它还设置内存大小并在 /login 后面设置一个 API Gateway HTTP API 端点。您可以查看从 .serverless 目录中的 serverless.yml 文件创建的 Cloudformation 模板。这是......很多。

<块引用>

我是只指定应该创建的资源还是我也可以 通过 ARN 引用现有的?如果是这样怎么办?

serverless docs 给出了如何指向现有 API 端点的示例。

 apiGateway: # Optional API Gateway global config
    restApiResources: # List of existing resources that were created in the REST API. This is required or the stack will be conflicted
      '/users': xxxxxxxxxx
      '/users/create': xxxxxxxxxx
<块引用>

政策是否仅像显示的文档那样全局设置或 唯一的其他选择是使用插件 serverless-iam-roles-per-function?可以应用同样的问题 资源中的角色和政策。

我不确定我是否理解这个问题。一般来说,我建议花一些时间从无服务器堆栈网站上阅读 What is IAM?。它在涵盖 IAM 用户/角色/策略/组/等方面做得非常出色。

相关问题