Piszę cloudformation dla bramy interfejsu API, otrzymuję ten problem z porządkowaniem ze ścieżką i metodą zasobów.

path ordering issue

To, czego chcę, to mieć ścieżkę (/ hi) poziom powyżej i metodę GET, aby znajdować się poniżej tego.

To jest fragment skryptu cloudformation, który napisałem, aby to wygenerować (wykluczone zezwolenie, lambda, zasady itp.). Znam również niektóre narzędzia do tego, ale nie są one zatwierdzone do naszej sytuacji.

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

Wydaje się, że wszystko działa dobrze, mogę wywołać i trafić do punktu końcowego, a odpowiedź jest dobra. Chodzi tylko o problem z kolejnością, ponieważ niektóre z naszych innych bram interfejsu API mają strukturę ze ścieżką przed metodą (chociaż są tworzone ręcznie). Może to jest właściwa droga i jest w porządku? Jeśli ktoś zauważy problem w moim skrypcie lub sugestię między dwoma układami, byłbym naprawdę wdzięczny.

Dzięki.

0
noobius 19 grudzień 2019, 21:10

2 odpowiedzi

Opisujesz graficznie, jak ma wyglądać API w konsoli, jako że „GET” znajduje się poniżej „/ hi”. Konsola pokazuje, że metoda „GET” jest dołączona do ścieżki głównej, a ścieżka główna ma zasób o nazwie „hi”, który nie ma metody. Zakładam, że chcesz, aby zasób „hi” miał metodę GET, która będzie wyświetlana zgodnie z opisem, a także wygląda jak logiczny projekt interfejsu API.

Powodem, dla którego został utworzony bez zmian, jest to, że ustawiłeś zasób metody jako RootResourceId.

Zamiast tego chcesz ustawić zasób jako metodę „Cześć”.

1
TheClassic 20 grudzień 2019, 18:41
To nie do końca działało, powodowało błąd, jeśli ustawiłem zasób na metodę „Hi”, ale pomaga to określić problem. To, co musiałem zrobić, to odwołać się do zasobu, który zadeklarowałem dla metody. Dziękuję.
 – 
noobius
20 grudzień 2019, 18:31

Sprawiłem, że działa tak, jak chciałem, z sugestią @TheClassic nie zadziałało, ale pomogło wskazać problem, są to zmiany, które musiałem wprowadzić, aby działało.

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

......
0
noobius 20 grudzień 2019, 18:35