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

Cannot add multiple reference variables to AWS::Serverless::Api #20

Closed
JasonQuinn opened this issue Nov 23, 2016 · 18 comments
Closed

Cannot add multiple reference variables to AWS::Serverless::Api #20

JasonQuinn opened this issue Nov 23, 2016 · 18 comments

Comments

@JasonQuinn
Copy link

JasonQuinn commented Nov 23, 2016

When adding a AWS::Serverless::Api specifying multiple reference variables causes the message "Number of errors found: 1. Resource with id [TestUploadtestStage] is invalid. Type of property 'Variables' is invalid." when deploying with "aws cloudformation deploy".
I can add either of the variables but cannot add both

  TestUpload:
     Type: AWS::Serverless::Api
     Properties:
        StageName: test
        DefinitionUri: swagger.json
        Variables:
          DeleteFunctionArn: !Ref DeleteFunction
          PutFunctionArn: !Ref PutFunction

Have I just got the syntax incorrect?

@johanglarsson
Copy link

I also experienced the same thing with above syntax.

@dinvlad
Copy link

dinvlad commented Nov 23, 2016

This could be related to #19. It seems that the way Transform processes references for the API resource may be incorrect. Perhaps it doesn't expand all of them before trying to create the resource, or something along those lines.

@sanathkr
Copy link
Contributor

This is a bug in the transform, which fails when validating the structure of Variables property. We are working on fixing it.

@JasonQuinn
Copy link
Author

Good to know. Any eta on when a fix will be available?

@sanathkr
Copy link
Contributor

No concrete ETA yet. It is in the order of a few days. Will reply back once it done

Sorry to keep you folks waiting

@ahausamm
Copy link

ahausamm commented Dec 1, 2016

@sanathkr Hi, any news in there. Thank you for the extended example with swagger.

@sanathkr
Copy link
Contributor

sanathkr commented Dec 1, 2016

Yeah, early next week we should have this fixed

@sanathkr
Copy link
Contributor

sanathkr commented Dec 5, 2016

This should be fixed now. Can you verify it works?

@mparaz
Copy link

mparaz commented Dec 6, 2016

It no longer has the "Type of property 'Variables' is invalid." error, but now variables are not expanded at all, which I describe in #34 .

@JasonQuinn
Copy link
Author

Yeah it works perfectly for me, thanks.

@schakkis
Copy link

schakkis commented Dec 6, 2016

It works for me now, thanks.

@davidsulpy
Copy link

davidsulpy commented Jan 4, 2017

@sanathkr this is still failing for me. Is there something special that I need to do in order to realize the fix? I'm currently using AWS::Serverless-2016-10-31 which looks like it's the latest.

Although, it may be possible that my issue is not the same as just multi environment variables, as I seem to be experiencing it even with just a single environment variable. When I attempt to do aws cloudformation validate-template --template-body ./sam.yaml I get the following error:

An error occurred (ValidationError) when calling the ValidateTemplate operation: Template format error: unsupported structure.

But no clue what the unsupported structure may be

@sanathkr
Copy link
Contributor

sanathkr commented Jan 4, 2017

validate-template API currently does NOT support SAM. Are you able to deploy using aws cloudformation deploy?

@davidsulpy
Copy link

Ah, I see. I came to that realization myself after going backwards in my changes quite a lot to a known good SAM template. It would be fantastic if I could validate more quickly than going through a full deploy.

I'm currently attempting to do this all through CodePipeline, which worked previously until my SAM template started getting more complex (added an AWS::Serverless::SimpleTable resource, then added an AWS::DynamoDB::Table resource for a more complex table, then added some environment variables to my functions to reference these table names). So, now I'm attempting to peel everything back one at a time since I can't seem to get an error message that can give me a hint at what may be the problem.

Thanks for the quick reply @sanathkr! Any other suggestions on debugging SAM templates?

@sanathkr
Copy link
Contributor

sanathkr commented Jan 4, 2017

At the moment, quickest way to validate is to call aws cloudformation create-change-set on the SAM template. This will trigger SAM -> CloudFormation translation that does syntactical validation. If you have a bug your resource definition, like a bad permission configuration, you have to deploy to get it validated.

I understand this isn't the easiest approach, but it is the quickest at the moment. I am planning on writing a DEBUGGING guide to share this knowledge

@davidsulpy
Copy link

Awesome, a debugging guide would be fantastic! And thanks for all the hard work on this, SAM coupled with CodePipeline and the new CodeBuild functionality fills a huge gap for me! It's great stuff!

Also, for what it's worth (and just in case anyone else runs into my same issue), I found what the issue was by small re-additions. It turns out I was thinking I could cleverly name the table in the AWS::Serverless::SimpleTable resource like I can in the AWS::DynamoDB::Table resource, however, removing the TableName definition from the AWS::Serverless::SimpleTable resource seems to have fixed my deployment issue and everything seems to be humming along now!

@SvenWalter
Copy link

Hi,
I'm trying to set the stage from outside with a cli parameter:
--parameter-overrides DeployStage=prod

Doing this the deployment ends up with a transformation error (similar as dinvlad described) if the parameter is used in the scope of AWS::Serverless::Api:
AddonApi:
Type: AWS::Serverless::Api
Properties:
StageName: !Ref DeployStage
The deployment works if I enter the stage name directly (no by using !Ref).
Should this work now or is a fix in progress? Currently, I'm using the following versions for Cloudformation:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31

@sanathkr
Copy link
Contributor

This won't work now. #22 will fix the problem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants