Question:
I’m using SAM CLI v0.8.1. I’m trying to set environmental variable MY_TABLE_VAR as name of the table in my resources (MyTableResource). However, while running my app locally, the MY_TABLE_VAR is undefined. Can you tell me what’s wrong in my template and how can I set it properly? Following is my SAM template:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Globals: Function: Timeout: 30 Runtime: nodejs8.10 Environment: Variables: MY_TABLE_VAR: !Ref MyTableResource Resources: MyTableResource: Type: AWS::Serverless::SimpleTable Properties: TableName: table1 PrimaryKey: Name: id Type: String ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 5 |
Answer:
From my understanding, the Globals
section cannot reference resources in the Resources
section (the dependency is in the other direction, since whatever is added to the Globals
section is added to all Serverless Functions and APIs in the Resources
section). To work around this, I suggest that you use either Mappings or Parameters, e.g.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Parameters: TableName: Type: String Default: table1 Globals: Function: Timeout: 30 Runtime: nodejs8.10 Environment: Variables: MY_TABLE_VAR: !Ref TableName Resources: MyTableResource: Type: AWS::Serverless::SimpleTable Properties: TableName: !Ref TableName # more table config.... |