0
votes

I have a working stack built with servereless framework which includes a dynamodb table (stack was already deployed successfully). I am trying to export the dynamo table's variables (name and arn basically) so these could be used in another stack I have deployed.

To achieve this I have the following:

in serverless.yml:

resources:
  Resources:
    AqDataTable: ${file(resources/AqDataTable.yml):AqDataTable}
  Outputs:
    AqDataTableName: ${file(resources/AqDataTable.yml):Outputs.AqDataTableName}
    AqDataTableArn: ${file(resources/AqDataTable.yml):Outputs.AqDataTableArn}

(...)

custom:
  AqDataTable:
    name: !Ref AqDataTable
    arn: !GetAtt AqDataTable.Arn
    stream_arn: !GetAtt AqDataTable.StreamArn

in resources/AqDataTable.yml:

Outputs:
  AqDataTableName:
    Value: ${self:custom.AqDataTable.name}
    Export:
      Name: ${self:custom.AqDataTable.name}-Name
  AqDataTableArn:
    Value: ${self:custom.AqDataTable.arn}
    Export:
      Name: ${self:custom.AqDataTable.name}-Arn

When trying to deploy I get the following error:

Serverless Error ---------------------------------------
 
  Trying to populate non string value into a string for variable ${self:custom.AqDataTable.name}. Please make sure the value of the property is a string.

The way I worked around this is by replacing AqDataTable.name value in the serverless.yml custom section from !Ref AqDataTable to a "harder-coded" value: AqDataTable-${self:provider.stage} but obviously this is a bad practice which I would like to avoid.

I'd appreciate any inputs on why this stack format invalidates the !Ref intrinsic function, or better ways to achieve what I am after here.

Many thanks!

1

1 Answers

0
votes

In case anyone ever faces this issue:

After going over the docs one more time, apparently what I initially tried to do is not possible. According to CF docs:

For outputs, the value of the Name property of an Export can't use Ref or GetAtt functions that depend on a resource.

Similarly, the ImportValue function can't include Ref or GetAtt functions that depend on a resource.