Установка переменных среды с помощью! Ref в AWS SAM?

Я использую SAM CLI v0.8.1. Я пытаюсь установить переменную окружения MY_TABLE_VAR как имя таблицы в моих ресурсах (MyTableResource). Однако при локальном запуске моего приложения MY_TABLE_VAR не определен. Можете ли вы сказать мне, что не так в моем шаблоне и как я могу его правильно настроить? Ниже приведен мой шаблон SAM:

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

person Mahdi    schedule 09.12.2018    source источник


Ответы (1)


Насколько я понимаю, раздел Globals не может ссылаться на ресурсы в разделе Resources (зависимость находится в другом направлении, поскольку все, что добавляется в раздел Globals, добавляется для всех бессерверных функций и API в Resourcessection). Чтобы обойти это, я предлагаю вам использовать либо Mappings или Параметры, например

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....
person matsev    schedule 20.12.2018
comment
Это неверно, Globals CAN ссылается на ресурсы в разделе Resources, но (вероятно) не на все типы. Мне удалось объявить объект ресурса AWS::Serverless::LayerVersion и установить свойство Layers в области Globals: Function, несмотря на то, что слой был создан внутри раздела Resources. - person Samuel Prevost; 10.05.2019