serverless / examples

Serverless Examples – A collection of boilerplates and examples of serverless architectures built with the Serverless Framework on AWS Lambda, Microsoft Azure, Google Cloud Functions, and more.
https://www.serverless.com/examples/
Other
11.41k stars 4.46k forks source link

Value not found at "self" source #689

Open FelCer opened 2 years ago

FelCer commented 2 years ago

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

pgrzesik commented 2 years ago

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.

FelCer commented 2 years ago

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

pgrzesik commented 2 years ago

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

FelCer commented 2 years ago

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

gsanjeev432 commented 2 years ago

@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.

eriklive commented 1 year ago

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

eriklive commented 1 year ago

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.

ChuhengH commented 5 months ago

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?