Как мне сделать "/" для события API в моем шаблоне? - PullRequest
0 голосов
/ 19 сентября 2018

Это мой лямбда-ресурс:

Resources:

    myFunction:
        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:
            Description: Enter description of what this specific Lambda does
            CodeUri: hello_world/build/
            Handler: app.lambda_handler
            Runtime: python2.7

            Events:
                testMethod:
                    Type: Api
                    Properties:
                        RestApiId: !Ref ApiGatewayApi
                        Path: testMethod/
                        Method: POST

                /:
                    Type: Api
                    Properties:
                        RestApiId: !Ref ApiGatewayApi
                        Path: /
                        Method: ANY

testMethod и "/" соответствуют путям в документе swagger.Но, похоже, облачность победила, поэтому я буду использовать "/" в качестве события API:

Failed to create the changeset: Waiter ChangeSetCreateComplete failed: Waiter encountered a terminal failure state Status: FAILED. Reason: Transform AWS::Serverless-2016-10-31 failed with: Invalid Serverless Application Specification document. Number of errors found: 1. Resource with id [myFunction/] is invalid. Logical ids must be alphanumeric.

Это ресурс моего шлюза API:

ApiGatewayApi:
    Type: AWS::Serverless::Api
    Properties:
        DefinitionBody:
            swagger: "2.0"
            info:
                version: "2018-09-12T06:21:35Z"
                title: 'sdfsdfsd'
            schemes:
            - "https"
            paths:
                /:
                    x-amazon-apigateway-any-method:
                        produces:
                        - "application/json"
                        responses:
                            '200':
                                description: "200 response"
                                schema:
                                    $ref: "#/definitions/Empty"
                        security:
                        - sigv4: []
                        x-amazon-apigateway-integration:
                            type: "aws_proxy"
                            httpMethod: "POST"
                            passthroughBehavior: "when_no_match"
                            uri:
                              Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${myFunction}/invocations
                            responses:
                                default:
                                    statusCode: "200"
                            contentHandling: "CONVERT_TO_TEXT"

                /testMethod:
                    post:
                        produces:
                        - "application/json"
                        responses:
                            '200':
                                description: "200 response"
                                schema:
                                    $ref: "#/definitions/Empty"
                        security:
                        - sigv4: []
                        x-amazon-apigateway-integration:
                            type: "aws_proxy"
                            httpMethod: "POST"
                            passthroughBehavior: "when_no_match"
                            uri:
                              Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${myFunction}/invocations
                            responses:
                                default:
                                    statusCode: "200"
                            contentHandling: "CONVERT_TO_TEXT"

            securityDefinitions:
                sigv4:
                    type: "apiKey"
                    name: "Authorization"
                    in: "header"
                    x-amazon-apigateway-authtype: "awsSigv4"
            definitions:
                Empty:
                    type: "object"
                    title: "Empty Schema"

1 Ответ

0 голосов
/ 20 сентября 2018

Вы правы: вы не можете назвать событие"/", но вы все равно можете иметь это в качестве пути .

Попробуйте переименовать ваше событие "/" во что-то другое, использующее только буквенно-цифровые символы.Это не изменит поведение события и удовлетворит ограничения CloudFormation.Пример:

       Events:
         apiEvent:
           Type: Api
           Properties:
             RestApiId: !Ref ApiGatewayApi
             Path: /
             Method: ANY
...