annedroiid
annedroiid

Reputation: 6667

Serverless CloudFormation template error instance of Fn::GetAtt references undefined resource

I'm trying to setup a new repo and I keep getting the error

The CloudFormation template is invalid: Template error: instance of Fn::GetAtt 
references undefined resource uatLambdaRole

in my uat stage, however the dev stage with the exact same format works fine.

I have a resource file for each of these environments.

dev

devLambdaRole:
  Type: AWS::IAM::Role
  Properties:
    RoleName: dev-lambda-role # The name of the role to be created in aws
    AssumeRolePolicyDocument:
      Version: '2012-10-17'
      Statement:
        - Effect: Allow
          Principal:
            Service:
              - lambda.amazonaws.com
          Action: sts:AssumeRole
    ManagedPolicyArns:
      - arn:aws:iam::aws:policy/AWSLambdaFullAccess
      #Documentation states the below policy is included automatically when you add VPC configuration but it is currently bugged.
      - arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole

uat

uatLambdaRole:
  Type: AWS::IAM::Role
  Properties:
    RoleName: uat-lambda-role # The name of the role to be created in aws
    AssumeRolePolicyDocument:
      Version: '2012-10-17'
      Statement:
        - Effect: Allow
          Principal:
            Service:
              - lambda.amazonaws.com
          Action: sts:AssumeRole
    ManagedPolicyArns:
      - arn:aws:iam::aws:policy/AWSLambdaFullAccess
      #Documentation states the below policy is included automatically when you add VPC configuration but it is currently bugged.
      - arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole

In my serverless.yml my role is defined as

role: ${self:custom.stage}LambdaRole

and the stage is set as

custom:
  stage: ${opt:stage, self:provider.stage}

Running serverless deploy --stage dev --verbose succeeds, but running serverless deploy --stage uat --verbose fails with the error. Can anyone see what I'm doing wrong? The uat resource was copied directly from the dev one with only the stage name change.

Here is a screenshot of the directory the resource files are in Serverless-resources folder

Upvotes: 5

Views: 14793

Answers (4)

Mercury
Mercury

Reputation: 8008

I had the same issue, eventually I discovered that my SQS queue name wasn't the same in all 3 places. The following 3 places that the SQS name should match are shown below:

...
functions:
  mylambda:
    handler: sqsHandler.handler
    events:
      - sqs:
          arn:
            Fn::GetAtt:
              - mySqsName       #  <= Make sure that these match
              - Arn

resources:
  Resources:
    mySqsName:                  #  <= Make sure that these match
      Type: "AWS::SQS::Queue"
      Properties:
        QueueName: "mySqsName"    #  <= Make sure that these match
        FifoQueue: true

Upvotes: 8

Ali Fensome
Ali Fensome

Reputation: 610

Indentation Issue

In general, when YAML isn't working I start by checking the indentation.

I hit this issue in my case one of my resources was indented too much, therefore, putting the resource in the wrong node/object. The resources should be two indents in as they're in node resources sub-node Resources

For more info on this see yaml docs

Upvotes: 0

Marco L&#252;thy
Marco L&#252;thy

Reputation: 1309

Ended up here with the same error message. My issue ended up being that I got the "resource" and "Resource" keys in serverless.yml backwards.

Correct:


resources:       # <-- lowercase "r" first
  Resources:     # <-- uppercase "R" second
    LambdaRole:
      Type: AWS::IAM::Role
      Properties:
         ...

🤦‍♂️

Upvotes: 1

annedroiid
annedroiid

Reputation: 6667

I missed copying a key part of my config here, the actual reference to my Resources file

resources:
  Resources: ${file(./serverless-resources/${self:provider.stage}-resources.yml)}

The issue was that I had copied this from a guide and had accientally used self:provider.stage rather than self:custom.stage. When I changed this, it could then deploy.

Upvotes: 0

Related Questions