3

这里的放大码头说我们可以通过运行**amplify add function**并选择“ Lambda Trigger ”选项将 lambda 函数配置为 dynamodb 触发器,但是当我运行"amplify add api"(选择 Python 作为运行时语言)时,我没有得到 lambda 触发器选项,我m 只获得“无服务器功能”和“lambda 层”选项。

请帮助我解决此问题以访问该功能。

文档快照 - 显示 4 个选项 在此处输入图像描述

我的 CLI 快照 - 仅显示 2 个选项 在此处输入图像描述

我知道它适用于 nodejs 运行时 lambda,但我也希望这个选项适用于 Python Lambda。

4

4 回答 4

3

只需按照这些步骤放大 CLI 版本4.50.2

要创建由对 DynamoDB 表的更改触发的 lambda 函数,您可以使用以下命令行操作,这些操作在输入以下命令后在 CLI 内部进行演练:

amplify add function

选择要添加的功能:

  • ❯ Lambda 函数(无服务器函数)

提供 AWS Lambda 函数名称:

  • <你的函数名>

选择您要使用的运行时:

  • > NodeJS # 重要提示:现在必须是 NodeJS,您可以稍后通过手动编辑函数目录中的 ...-cloudformation-template.json 文件来更改它

选择您要使用的函数模板

  • > Lambda 触发器

您想将什么事件源与 lambda 触发器关联

  • > 亚马逊 DynamoDB 流

选择 DynamoDB 事件源选项

  • >在当前 Amplify 项目中使用 API 类别 graphql @model 后端 DynamoDB 表

选择 graphql @model(s)

  • <编辑后选择要触发功能的任何模型(使用空格键)>

是否要触发高级设置

  • Y # 重要提示:如果您使用的是基于 graphql 模式定义的表的 dynamodb 事件源,则需要授予此函数对api包含 graphql 模式的资源的读取权限,该模式定义了驱动事件的表

您想从您的 Lambda 函数访问此项目中的其他资源吗?

  • y # 见上文,选择包含数据模型的 api 并确保该函数至少具有读取权限。

在此之后,其他选项(层、呼叫调度)由您决定。

通过上述 CLI 选项创建函数后,您可以更改"Runtime"函数目录中的 -cloudformation-template.json 文件中的字段,例如,如果您想要一个 python lambda 函数,请将运行时更改为“python3.8”。您还需要在函数目录中创建一个名为的文件,该文件index.py具有handler(event, context)函数。请参见下面的示例:

import json

def handler(event, context):
    print("Triggered via DynamoDB")
    print(event)
    return json.dumps({'status_code': 200, "message": "Received from DynamoDB"})

进行这些编辑后,您可以运行amplify push,如果您在管理控制台在线打开您的 fxn,它应该会显示一个附加的 dynamoDB 流。

于 2021-05-24T23:40:42.920 回答
0

只需将以下内容添加到{YOUR_FUNCTION_NAME}-cloudformation-template.json,请记住将 (YOUR_TABLE_NAME) 替换为您的表名。

"LambdaTriggerPolicyPurchase": {
  "DependsOn": [
    "LambdaExecutionRole"
  ],
  "Type": "AWS::IAM::Policy",
  "Properties": {
    "PolicyName": "amplify-lambda-execution-policy-Purchase",
    "Roles": [
      {
        "Ref": "LambdaExecutionRole"
      }
    ],
    "PolicyDocument": {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "dynamodb:DescribeStream",
            "dynamodb:GetRecords",
            "dynamodb:GetShardIterator",
            "dynamodb:ListStreams"
          ],
          "Resource": {
            "Fn::ImportValue": {
              "Fn::Sub": "${apilanguageGraphQLAPIIdOutput}:GetAtt:(YOUR_TABLE_NAME):StreamArn"
            }
          }
        }
      ]
    }
  }
},
"LambdaEventSourceMappingPurchase": {
  "Type": "AWS::Lambda::EventSourceMapping",
  "DependsOn": [
    "LambdaTriggerPolicyPurchase",
    "LambdaExecutionRole"
  ],
  "Properties": {
    "BatchSize": 100,
    "Enabled": true,
    "EventSourceArn": {
      "Fn::ImportValue": {
        "Fn::Sub": "${apilanguageGraphQLAPIIdOutput}:GetAtt:(YOUR_TABLE_NAME):StreamArn"
      }
    },
    "FunctionName": {
      "Fn::GetAtt": [
        "LambdaFunction",
        "Arn"
      ]
    },
    "StartingPosition": "LATEST"
  }
},

我通过使用在您选择 nodejs 后显示的模板创建一个虚拟函数并检查它-cloudformation-template.json与我自己的函数比较来获得它们

于 2021-09-18T15:16:33.677 回答
0

选择nodejs,您将能够查看lambda触发器

于 2021-05-13T15:02:16.113 回答