Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Models Validation doesn't check the implicitly created AWS::Serverless::Api resource #2209

Open
stevehogdahl opened this issue Nov 5, 2021 · 5 comments

Comments

@stevehogdahl
Copy link

Description:

The Models Validation doesn't check the implicitly created AWS::Serverless::Api resource. When creating a new model there's no way to set it to the implicitly AWS::Serverless::Api resource without sam validate failing. Models isn't a valid global parameter so it can't be set there. Creating a AWS::ApiGateway::Model resource setting RestApiId to ServerlessRestApi the following validation error is thrown ...the related API does not define any Models. This means the only way to add a Model is to explicitly create the Api resource, add the Models to it, and then set RestApiId on the other resources. This is a pain point for us because we have 75 Function resources in the template that now need to explicitly set RestApiId.

Steps to reproduce:

Account:
  Type: 'AWS::ApiGateway::Model'
  Properties:
    RestApiId: !Ref ServerlessRestApi
    ContentType: application/json
    Name: Account
    Schema:
      $schema: 'http://json-schema.org/draft-04/schema#'
      title: Account
      type: array
      items:
        type: object
        properties:
          name:
            type: string
          status:
            type: string
CreateAccountFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: controllers/accounts.create
      Events:
        CreateAccount:
          Type: Api
          Properties:
            Path: /accounts
            Method: post
            RequestModel:
              Model: Account
              Required: true
              ValidateBody: true
      Role: !GetAtt LambdaRole.Arn

Observed result:

Error: [InvalidResourceException('CreateAccountFunction', 'Event with id [CreateAccount] is invalid. Unable to set RequestModel [CreateAccountsModel] on API method [post] for path [/accounts] because the related API does not define any Models.')] ('CreateAccountFunction', 'Event with id [CreateAccount] is invalid. Unable to set RequestModel [CreateAccountsModel] on API method [post] for path [/accounts] because the related API does not define any Models.')

Expected result:

I would expect the validation to check if any models exist on the implicitly created Api resource.

@qingchm
Copy link
Contributor

qingchm commented Apr 6, 2022

Thanks for reporting this in! Please allow us some time to investigate the feasibility of the request! Again thanks for the input!

@nirajmchauhan
Copy link

Facing the same issue

@thimmareddykovvuri
Copy link

Facing Same Issue, Any update on above request.

@GavinZZ
Copy link
Contributor

GavinZZ commented Oct 20, 2023

Marking this as type/bug as users are having issues with defining API models for implicit API resource generated by SAM Function.

@GavinZZ GavinZZ removed the type/bug label Oct 25, 2023
@GavinZZ
Copy link
Contributor

GavinZZ commented Oct 25, 2023

I took a deep dive into this problem. Unfortunately I believe this is expected behaviour and we've clearly documented this behaviour here.

The workaround would have to define an explicit AWS::Serverless::Api resource that specifies the Models property. Explicitly set the RestApiId field. We apologize for any inconvenience. Leaving this issue open as a feature request.

@GavinZZ GavinZZ closed this as completed Oct 25, 2023
@GavinZZ GavinZZ reopened this Oct 25, 2023
@GavinZZ GavinZZ removed the stage/needs-investigation Requires a deeper investigation label Oct 25, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

7 participants