Define explicitly resource method for lambda


#1

Hi,

I want to add authorization to endpoints used for lambda.
Since I can not set up this in Lambda definition, I create methods explicitly.

 LambdaName:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ./lambdaDir
      FunctionName: LambdaName
      Events:
        APIEvent:
          Type: Api
          Properties:
            RestApiId: !Ref MyApi
            Path: /products
            Method: POST

    
  MyApi:
    Type: AWS::Serverless::Api
    Properties:
      Name: MyApi
      StageName: dev

      ProductsResource:
    Type: AWS::ApiGateway::Resource
    Properties:
      ParentId:
          Fn::GetAtt:
            - "MyApi"
            - "RootResourceId"
      PathPart: products
      RestApiId: !Ref MyApi

  ProductsCreateApiMethod:
    Type: AWS::ApiGateway::Method
    Properties:
      AuthorizationType: NONE
      AuthorizerId: !Ref Authorizer
      AuthorizationScopes:
        - someScope
      RestApiId: !Ref MyApi
      HttpMethod: POST
      ResourceId: !Ref ProductsResource

Unfortunately I get error:

Another resource with the same parent already has this name: products (Service: AmazonApiGateway; Status Code: 409; Error Code: ConflictException; Request ID: 03ca26de-27be-11e9-82bb-536e557773f3)

It seems like when Cloud Formation tries to create explicitly products resource, it is already there created implicitly by lambda definition,