AWS IoT 1 单击项目 SAM - 400 InvalidRequestException 错误

AWS IoT 1 Click Project SAM - 400 InvalidRequestException error

您好,我正在使用 AWS SAM 部署无服务器应用程序,该应用程序也依赖于 1Click 设备我可以很好地部署模板,但我必须排除此值:

CallbackOverrides:
              onClickCallback:

这是模板文件

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: securitybutton
Globals:
  Function:
    Timeout: 10
Resources:
  SecurityButtonFunction:
    Type: AWS::Serverless::Function
    Policies:
      - AmazonSNSFullAccess
    Properties:
      CodeUri: src
      Handler: index.lambdaHandler,
      Runtime: nodejs12.x
      MemorySize: 512
      Events:
        IoTRule:
          Type: IoTRule
          Properties:
            Sql: SELECT * FROM 'iotbutton/*'
 #TOPICS
  BRSecurityButtonTopic:
    Type: AWS::SNS::Topic

#IoT
#project
  BRSecurityButtonProject:
    Type: "AWS::IoT1Click::Project"
    Properties:
      ProjectName: "BRSecurityButton"
      Description: "BRSecurityButton"
      PlacementTemplate:
        DefaultAttributes:
          SNSTopic: Changeme
          Location: Changeme
          Theatre: Changeme
        DeviceTemplates:
          SecuityButtonTemplate:
            DeviceType: "button"
            CallbackOverrides:
              onClickCallback: !GetAtt 
                - SecurityButtonFunction
                - Arn
Outputs:
  SecurityButtonFunction:
    Description: "Security Button Lambda Function ARN"
    Value: !GetAtt SecurityButtonFunction.Arn

这是生成的 cloudFormation 错误:

Lambda function arn:aws:lambda:us-east-1:LALALALALALA:function:securitybutton-prod-SecurityButtonFunction-6OB47JEIU192 cannot be invoked. (Service: AWSIoT1ClickProjects; Status Code: 400; Error Code: InvalidRequestException; Request ID: f0e94cd5-0310-4dcf-8d4a-a5ee8b102590; Proxy: null)

关于 BRSecurityButtonProject 的逻辑 ID

任何帮助将不胜感激

我发现问题与 IAM 有关。将此添加到 SAM 模板,该模板授予帐户中任何 IoT 一键式项目的访问权限以调用 Lambda 函数。

  SecurityButtonFunctionIoTPermission:
    Type: AWS::Lambda::Permission
    Properties:
      FunctionName: !GetAtt SecurityButtonFunction.Arn
      Action: lambda:InvokeFunction
      Principal: iot1click.amazonaws.com
      SourceAccount: !Ref "AWS::AccountId"