Amazon web services 路径前的API网关云形成方法

Amazon web services 路径前的API网关云形成方法,amazon-web-services,amazon-cloudformation,Amazon Web Services,Amazon Cloudformation,我正在为api网关编写一个cloudformation,我得到了资源路径和方法的排序问题 我想要的是让path/hi在上面一级,而方法在下面一级 这是我编写的snipet of cloudformation脚本,用于生成此排除权限、lambda、策略等,我也知道一些用于执行此操作的工具,但它们不适用于我们的情况 MyAPI: Type: AWS::ApiGateway::RestApi Properties: Name: "TestAPI" Endpoi

我正在为api网关编写一个cloudformation,我得到了资源路径和方法的排序问题

我想要的是让path/hi在上面一级,而方法在下面一级

这是我编写的snipet of cloudformation脚本,用于生成此排除权限、lambda、策略等,我也知道一些用于执行此操作的工具,但它们不适用于我们的情况

MyAPI:
    Type: AWS::ApiGateway::RestApi
    Properties: 
      Name: "TestAPI"
      EndpointConfiguration:
        Types: 
          - REGIONAL

ApiGatewayResourceHi:
    Type: "AWS::ApiGateway::Resource"
    Properties: 
      ParentId:
        Fn::GetAtt: ["MyAPI", "RootResourceId"]
      PathPart: "hi"
      RestApiId:
        Ref: "MyAPI"

HiMethodGet:
    Type: "AWS::ApiGateway::Method"
    Properties:
      RestApiId: !Ref MyAPI
      ResourceId: !GetAtt
        - MyAPI
        - RootResourceId
      HttpMethod: GET
      AuthorizationType: NONE
      Integration: 
        IntegrationHttpMethod: "POST"
        Type: "AWS_PROXY"
        Uri: !Join ["", ["arn:", !Ref "AWS::Partition", ":apigateway:", !Ref "AWS::Region", ":lambda:path/2015-03-31/functions/", !GetAtt ["HiLambdaFunction", "Arn"], "/invocations"]]
    DependsOn:
      - ApiGatewayResourceHi

ApiGatewayDeployment1: 
    Type: "AWS::ApiGateway::Deployment"
    Properties: 
      RestApiId: 
        Ref: "MyAPI"
      StageName: "dev"
    DependsOn:
      - HiMethodGet
一切似乎都很好,我可以调用并点击端点,它的响应也很好。这只是排序问题,因为我们的一些其他api网关是使用path before方法构建的,尽管它们是手动创建的。也许这是正确的方法,而且很好?如果有人在我的脚本或两种布局之间的建议中发现问题,我将非常感激


谢谢。

您正在以图形方式描述希望API在控制台中的外观,因为GET位于/hi下方。控制台显示的是GET方法附加到根路径,并且根路径有一个名为hi的资源,该资源没有方法。我假设您希望hi资源有一个GET方法,它将按照您所描述的那样显示,并且看起来像是一个逻辑api设计

按原样创建它的原因是,您已将该方法的资源设置为RootResourceId


您想做的是将资源设置为Hi方法。

我让它以我想要的方式工作,使用@TheClassic建议它不工作,但它帮助确定了问题所在,这是我必须为它工作所做的更改

ApiGatewayResourceHi:
    Type: "AWS::ApiGateway::Resource"
    Properties: 
      ParentId:
        Fn::GetAtt: ["MyAPI", "RootResourceId"]
      PathPart: "hi"
      RestApiId:
        Ref: "MyAPI"

HiMethodGet:
    Type: "AWS::ApiGateway::Method"
    Properties:
      RestApiId: !Ref MyAPI
      ResourceId: !Ref ApiGatewayResourceHi

......

这不太管用,如果我将资源设置为Hi方法,则会出现错误,但这有助于确定问题所在。我要做的是引用我为该方法声明的资源。谢谢