首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是什么导致我的SAM模板产生了这么多错误?

是什么导致我的SAM模板产生了这么多错误?
EN

Stack Overflow用户
提问于 2021-01-08 10:53:40
回答 1查看 471关注 0票数 0

我一直在努力让我的SAM模板正常工作。我有一个SAM模板的基本概念,但我不明白我从CloudFormation中得到的错误背后的逻辑,我的输出是否正确?我只使用API(不使用函数?)。我能够获得请求,但是CORS阻止我执行PUT和POST请求。什么是多余的,我遗漏了什么?

错误:“模板的输出块中未解析的资源依赖项状态原因ServerlessRestApi”

我也得到了以下错误:“REST不包含任何方法(服务: AmazonApiGateway;状态代码: 400;错误代码: BadRequestException;请求ID: abad588e-02ee-4fc6-A668-43b306af;代理: null)”

Template.yaml:

代码语言:javascript
复制
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  SAM Template

# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
  Function:
    Timeout: 10

Resources:
  ApiGatewayApi:
    Type: AWS::Serverless::Api
    Properties:
      Name: ApiGatewayApi
      StageName: Prod
      Cors:
        AllowMethods: "'OPTIONS,POST,GET,PUT,PATCH,DELETE'"
        AllowHeaders: "'Content-Type'"
        AllowOrigin: "'*'"
  DeclineSituationFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      FunctionName: DeclineSituation
      CodeUri: decline-situation/
      Handler: app.lambda_handler
      Runtime: python3.8
      Events:
        DeclineSituationAPI:
          Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
          Properties:
            Path: /decline-situation
            Method: put
            RestApiId: !Ref ApiGatewayApi
  AcceptSituationFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      FunctionName: AcceptSituation
      CodeUri: accept-situation/
      Handler: app.lambda_handler
      Runtime: python3.8
      Events:
        AcceptSituationAPI:
          Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
          Properties:
            Path: /accept-situation
            Method: post
            RestApiId: !Ref ApiGatewayApi
  GetIncidentsFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      FunctionName: GetIncidents
      CodeUri: get-incidents/
      Handler: app.lambda_handler
      Runtime: python3.8
      Events:
        GetIncidentsAPI:
          Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
          Properties:
            Path: /incidents
            Method: get
            RestApiId: !Ref ApiGatewayApi
  GetSituationsFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      FunctionName: GetSituations
      CodeUri: get-situations/
      Handler: app.lambda_handler
      Runtime: python3.8
      Policies: AWSLambdaDynamoDBExecutionRole
      Events:
        GetSituationsAPI:
          Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
          Properties:
            Path: /situations
            Method: get
            RestApiId: !Ref ApiGatewayApi
  GetRecoveriesFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      FunctionName: GetRecoveries
      CodeUri: get-recoveries/
      Handler: app.lambda_handler
      Runtime: python3.8
      Policies: AWSLambdaDynamoDBExecutionRole
      Events:
        GetRecoveriesAPI:
          Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
          Properties:
            Path: /recoveries
            Method: get
            RestApiId: !Ref ApiGatewayApi
  ReadNotificationFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: ReadNotification
      CodeUri: read-notification/
      Handler: app.lambda_handler
      Runtime: python3.8
      Policies:
        - DynamoDBCrudPolicy:
            TableName: Situations
  Incidents:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: AIMAS-Incidents
      AttributeDefinitions:
        - AttributeName: incidentId
          AttributeType: S
        - AttributeName: situationId
          AttributeType: S
      KeySchema:
        - AttributeName: incidentId
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: 5
        WriteCapacityUnits: 5
  Situations:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: AIMAS-Situations
      AttributeDefinitions:
        - AttributeName: situationId
          AttributeType: S
      KeySchema:
        - AttributeName: situationId
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: 5
        WriteCapacityUnits: 5
  Recoveries:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: AIMAS-Recoveries
      AttributeDefinitions:
        - AttributeName: recoveryId
          AttributeType: S
        - AttributeName: situationId
          AttributeType: S
        - AttributeName: incidentId
          AttributeType: S
      KeySchema:
        - AttributeName: recoveryId
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: 5
        WriteCapacityUnits: 5
Outputs:
  # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function
  # Find out more about other implicit resources you can reference within SAM
  # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api
  #Incidents
  GetIncidentsAPI:
    Description: "API Gateway endpoint URL for Prod stage for GetIncidentsAPI"
    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/incidents/"
  GetIncidentsFunction:
    Description: "GetIncidents Lambda Function ARN"
    Value: !GetAtt GetIncidentsFunction.Arn
  #Recoveries
  GetRecoveriesAPI:
    Description: "API Gateway endpoint URL for Prod stage for GetRecoveriesAPI"
    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/recoveries/"
  GetRecoveriesFunction:
    Description: "GetRecoveries Lambda Function ARN"
    Value: !GetAtt GetRecoveriesFunction.Arn
  #Situations
  AcceptSituationFunction:
    Description: "AcceptSituationFunction Lambda Function ARN"
    Value: !GetAtt AcceptSituationFunction.Arn
  AcceptSituationAPI:
    Description: "API Gateway endpoint URL for GetSituationsAPI"
    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/accept-situation/"
  DeclineSituationFunction:
    Description: "DeclineSituationFunction Lambda Function ARN"
    Value: !GetAtt DeclineSituationFunction.Arn
  DeclineSituationAPI:
    Description: "API Gateway endpoint URL for GetSituationsAPI"
    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/decline-situation/"
  GetSituationsAPI:
    Description: "API Gateway endpoint URL for GetSituationsAPI"
    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/situations/"
  GetSituationsFunction:
    Description: "GetSituations Lambda Function ARN"
    Value: !GetAtt GetSituationsFunction.Arn
  #Read Notifications
  ReadNotificationFunction:
    Description: "ReadNotification Lambda Function ARN"
    Value: !GetAtt ReadNotificationFunction.Arn
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-08 11:29:33

模板中有多个错误。

代码语言:javascript
复制
    E3039 The set of Attributes in AttributeDefinitions: ['incidentId', 'situationId'] and KeySchemas: ['incidentId'] must match at Resources/Incidents/Properties

    E3039 The set of Attributes in AttributeDefinitions: ['incidentId', 'recoveryId', 'situationId'] and KeySchemas: ['recoveryId'] must match at Resources/Recoveries/Properties

    E1019 Parameter ServerlessRestApi for Fn::Sub not found at Outputs/GetIncidentsAPI/Value/Fn::Sub
    x.yml:156:5

    E1019 Parameter ServerlessRestApi for Fn::Sub not found at Outputs/GetRecoveriesAPI/Value/Fn::Sub
    x.yml:163:5

    E1019 Parameter ServerlessRestApi for Fn::Sub not found at Outputs/AcceptSituationAPI/Value/Fn::Sub
    x.yml:173:5

    E1019 Parameter ServerlessRestApi for Fn::Sub not found at Outputs/DeclineSituationAPI/Value/Fn::Sub
    x.yml:179:5

    E1019 Parameter ServerlessRestApi for Fn::Sub not found at Outputs/GetSituationsAPI/Value/Fn::Sub
    x.yml:182:5

使用cfn-linter文档生成模板,文档中也有很多好的例子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65627672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档