Как определить и одновременно использовать параметр SSM в CloudFormation?

Вот шаблон SAM (такой же, как шаблон CloudFormation):

Globals:
    Function:
        Environment:
            Variables:
                BAR: '{{resolve:ssm:myparam:1}}'
...
    MyParam:
        Type: "AWS::SSM::Parameter"
        Properties:
            Name: myparam
            Type: String
            Value: 'REPLACE_ME' # must be defined manually in the AWS Console

Я не могу развернуть этот стек, потому что:

FAILED. Reason: Parameters: [ssm:myparam:1] cannot be found.

Конечно, я создаю этот параметр в стеке…


Как я могу сослаться на параметр SSM, который я создаю в том же шаблоне?


person Matthieu Napoli    schedule 21.03.2019    source источник
comment
Я думаю, нет смысла использовать один и тот же шаблон для параметров SSM, потому что вы можете получить к ним доступ через !GetAtt (см. ниже).   -  person Sandro Keil    schedule 21.03.2019


Ответы (1)


Вы пытались получить доступ к переменной через Fn::GetAtt (!GetAtt MyParam.Value)?

Globals:
    Function:
        Environment:
            Variables:
                BAR: !GetAtt MyParam.Value
...
    MyParam:
        Type: "AWS::SSM::Parameter"
        Properties:
            Name: myparam
            Type: String
            Value: 'REPLACE_ME' # must be defined manually in the AWS Console
person Sandro Keil    schedule 21.03.2019
comment
Спасибо, дело в том, что я хочу хранить секретные ключи в параметре (и поэтому не хочу писать этот секрет в шаблоне). Поэтому я использую CloudFormation для создания параметра, но затем мне приходится вручную определять значение в консоли AWS. Поэтому я действительно хочу ссылаться на значение параметра, а не на начальное значение, которое я указал в шаблоне. - person Matthieu Napoli; 22.03.2019
comment
Матье, возможно, вы сможете сделать это с помощью параметров SSM, но на моей работе мы делаем что-то подобное, используя секреты SecretsManager. Мы передаем !Ref YourSecretName как переменную среды лямбда-функции в CF. Когда функция создается, Env Variable является ссылкой ARN, которая затем может быть разрешена во время выполнения. Подойдет ли это для вашей ситуации? - person Amos Long; 15.02.2021