【问题标题】:How to configure Alexa Skills Kit trigger for a lambda function via CloudFormation?如何通过 CloudFormation 为 lambda 函数配置 Alexa Skills Kit 触发器?
【发布时间】:2023-04-10 20:09:02
【问题描述】:

我正在开发一项 Alexa 技能,并希望使用 CloudFormation 为我的技能部署基础架构。

到目前为止,IAM 角色、策略和 lambda 函数部署工作正常。我缺少的是 Alexa Skill Kit 中用于我的 lambda 函数的触发器。

目前我必须在 AWS 控制台中手动创建此触发器:

或通过 CLI:

aws lambda add-permission --function-name DeutscheDeklinationLambdaFunction --statement-id 1 --action lambda:invokeFunction --principal alexa-appkit.amazon.com --region eu-west-1

但我更喜欢通过 CloudFormation 配置此触发器。我认为应该是https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventsourcemapping.html,但我找不到如何为 Alexa Skills Kit 实现此功能。

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation alexa alexa-skills-kit


    【解决方案1】:

    经典,发布问题三分钟后我自己找到了答案。

    在这种情况下,“触发器”似乎实际上是 Alexa Skills Kit 调用的函数的 lambda 权限。所以可以这样配置:

      DeutscheDeklinationLambdaFunctionPermission:
        Type: AWS::Lambda::Permission
        Properties: 
          Action: 'lambda:InvokeFunction'
          FunctionName: !GetAtt DeutscheDeklinationLambdaFunction.Arn
          Principal: alexa-appkit.amazon.com
          EventSourceToken: !Ref AppId
    

    FunctionsName是函数的ARN,EventSourceToken是技能的id。

    【讨论】:

    【解决方案2】:

    这是一个如何在 AWS CDK(云开发工具包)的 typescript 中执行此操作的示例。

    import { ServicePrincipal } from '@aws-cdk/aws-iam';
    ...
    MyLambda.addPermission('alexa-skills-kit-trigger', {
      principal: new ServicePrincipal('alexa-appkit.amazon.com'),
      action: 'lambda:invokeFunction',
    });
    

    文档:

    @aws-cdk/aws-iam

    @aws-cdk_aws-lambda.Permission

    【讨论】:

    • 最好在权限中添加eventSourceToken。否则,任何 Alexa 技能都可以调用此 Lambda 函数。
    猜你喜欢
    • 2016-04-01
    • 2019-02-10
    • 2017-02-15
    • 2018-01-05
    • 1970-01-01
    • 2023-03-06
    • 2019-04-05
    • 2016-12-25
    • 1970-01-01
    相关资源
    最近更新 更多