examples icon indicating copy to clipboard operation
examples copied to clipboard

Value not found at "self" source

Open FelCer opened this issue 2 years ago • 8 comments

Hello good day, I am trying to implement 'aws-node-rest-api-with-dynamodb-and-offline' but when I run the command serverless dynamodb install it gives me the following errors:

Error:
Cannot resolve serverless.yml: Variables resolution errored with:
  - Cannot resolve variable at "provider.environment.DYNAMODB_TABLE": Value not found at "self" source,
  - Cannot resolve variable at "provider.iamRoleStatements.0.Resource": Value not found at "self" source

And I am executing as indicated in the guide(https://www.serverless.com/examples/aws-node-rest-api-with-dynamodb-and-offline, https://github.com/serverless/examples/tree/master/aws-node-rest-api-with-dynamodb-and-offline)

image image

FelCer avatar Mar 24 '22 17:03 FelCer

Hello @FelCer - in fact, this example has a bit of a bug when it comes to it's configuration.

The best way to address it would be to replace ${opt:stage, self:provider.stage} with ${sls:stage} variable and ${opt:region, self:provider.region} with ${aws:region} variables.

Introducing changes as proposed above should resolve the problem.

pgrzesik avatar Mar 25 '22 09:03 pgrzesik

Hello @pgrzesik, That's fine if it worked, but I think this template still contains errors, like: executing the serverless offline start command produces the following error. image

This error is treated here, https://github.com/99x/serverless-dynamodb-local/issues/194 but without any solution. By implementing that with the flag indicated here https://github.com/99x/serverless-dynamodb-local/issues/194#issuecomment-590883319 it runs correctly, but until the endpoint is consulted it generates an error. image image

FelCer avatar Mar 25 '22 13:03 FelCer

Hey @FelCer - it's very likely that this example might have additional errors, since it hasn't been actively maintained for a long time - unfortunatelly I don't know much about this specific example so I won't be able to help more there

pgrzesik avatar Mar 25 '22 14:03 pgrzesik

oh no, okey. Thanks anyway I'll wait for someone else who can help me

FelCer avatar Mar 25 '22 19:03 FelCer

@FelCer Actually, there is no value to satisfy the variable "stage" and "region". So you need to either pass it from command line as serverless deploy --stage dev --region us-east-1 or else define the variables in serverless.yml.

gsanjeev432 avatar Apr 14 '22 08:04 gsanjeev432

Yeah, maybe I'm a little too late, but appears to me that in "Provider" section should be a "region" element, dont?

eriklive avatar Dec 06 '22 13:12 eriklive

Yeah, maybe I'm a little too late, but appears to me that in "Provider" section should be a "region" element, dont?

That's right, I was facing the same issue. Here is an example that servers both ways:

image

The key is ${self:custom.integrarProdutoMLFunctionSQS.${opt:stage}} on lines 12 and 16.

The self:custom.integrarProdutoMLFunctionSQS will refeer to custom section, integrarProdutoMLFunctionSQS subsection.

But I need thoose variables being environment dependant, so I run my serverless by serverless offline start --stage local. To access my "stage" variable, set throught console, I need to use ${opt:stage}.

In conclusion:

  1. To use file values, use ${self:section.value} (like me, using self:custom.integrarProdutoMLFunctionSQS)
  2. To use varibles set throught console, use ${opt:stage}

So when I do use ${self:custom.integrarProdutoMLFunctionSQS.${opt:stage}}, running with serverless offline start --stage local, the final result will be ${self:custom.integrarProdutoMLFunctionSQS.local}, wich is what I need.

eriklive avatar Dec 06 '22 13:12 eriklive

is the ${self:someProperty} used in the rate(Value Unit), such as rate(${self:someProperty})? I found it doesn't work. But rate(${env:SOME_VAR}) will work. Why?

ChuhengH avatar Mar 26 '24 20:03 ChuhengH