Доступ к параметрам SSM из хранилища параметров

У меня есть шаблон SAM, который развертывает несколько лямбд, и я хотел бы использовать некоторые параметры, которые я создал в хранилище параметров SSM.

Я создал 2 параметра для своих тестов:

  • /test/param которая является простой строкой
  • /test/param/encrypt который содержит ту же строку, что и /test/param но зашифрован ключом KMS

В моем шаблоне SAM я пытаюсь получить значение /test/params следуя этому сообщению в блоге. Вот снимок моего шаблона:

Parameters:
  AuthPasswordPublic:
    Type: AWS::SSM::Parameter::Value<String>
    NoEcho: true
    MinLength: 8
    Description: Password for the "public" part of the website
    Default: /test/param

...

Resources:
  Auth:
    Type: AWS::Serverless::Function
    Properties:
      Runtime: nodejs8.10
      Handler: auth.handler
      CodeUri: ./dist
      Environment:
        Variables:
          PASSWORD_PUBLIC: !Ref AuthPasswordPublic
          SEED: !Ref AuthSeed
      Events:
        GetResource:
          Type: Api
          Properties:
            Path: /auth
            Method: post

Теоретически это должно работать при развертывании на AWS. Тем не менее, я хотел бы сначала проверить его на месте. Я уже aws-sam-local и мои учетные данные правильно настроены на моем локальном компьютере, так как я могу использовать интерфейс командной строки AWS. Но при запуске этого локально, значение envvar PASSWORD_PUBLIC пустой. Я протестировал оба параметра SSM в простом текстовом и зашифрованном виде, но результаты совпадают.

Я подозреваю, что aws-sam-cli пока не поддерживает параметры SSM, но не может найти никакой информации ни об этом в сети, ни о проблемах с GitHub /PR. Есть идеи о том, что здесь происходит?

1 ответ

aws-sam-cli использует docker-lambda контейнер, который в соответствии с документами создает:

Изолированная локальная среда, которая почти одинаково реплицирует живую среду AWS Lambda...

Это означает, что такие компоненты, как AWS SSM, не создаются заново в контейнере Docker. Вы можете проверить открытую проблему Github здесь.

Поэтому вам, возможно, придется прибегнуть к получению параметров SSM с хоста (с помощью aws cli настроен), и передать их в контейнер при вызове sam-cli:

PASSWORD_PUBLIC=$(aws ssm get-parameter --with-decryption --name "/test/param/encrypt") sam local start-api
Другие вопросы по тегам