Как получить доступ к значениям хранилища параметров SSM через переменные среды AWS Lambda Function с помощью Serverless Framework?

Итак, я настроил файл .yaml моей лямбда-функции следующим образом:

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: An AWS Serverless Specification template describing your function.
Resources:
  NewUser:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: NewUser/index.handler
      Runtime: nodejs8.10
      Environment:
        Variables:
          database_encrypt: ${ssm:databaseEncrypt}
          database_password: ${ssm:databasePassword}
          database_server: '8.8.8.8'
          database_user: ${ssm:databaseUser}
          database_version: ${ssm:databaseVersion}
      Description: ''
      MemorySize: 128
      Timeout: 15
      Role: 'arn:aws:iam::663404525923:role/LambdaRole'
      Events:
        LambdaMicroservice:
          Type: Api
          Properties:
            Path: /User/NewUser
            Method: ANY

и моя лямбда-функция выглядит так:

var config = {  
  user: process.env.database_user,  
  password: process.env.database_password,  
  server: process.env.database_server,
  database: process.env.database_version,
  options: {encrypt: true}  
};

class UserService {

    constructor(){
        console.log(config);
        console.log("test test test");
        this.connectionPool = new sql.connect(config);
    }
}

и я могу легко получить доступ к жестко заданному значению database_server, но команда $ {ssm: [myParam]} интерпретируется как строка вместо того, чтобы следовать по пути и получать доступ значение, хранящееся в хранилище параметров SSM.

В большинстве примеров, которые я вижу, есть длинные сложные пути, указывающие на их параметры SSM, но поскольку я просто пытаюсь показать, что можно получить доступ к параметрам SSM вообще таким образом, я стараюсь сделать его как можно более простым. Я также предполагаю, что команда $ {ssm: []} просто не выполняет экранирование, потому что я ожидаю, что значение undefined будет возвращено, если SSM Param не найден. по заданному пути.


person Brandon Miller    schedule 23.10.2019    source источник
comment
Просто предупреждаю, это не шаблон Serverless Framework, это шаблон AWS SAM ... Если вы читали документацию Serverless, то чтение документации SAM может помочь.   -  person hephalump    schedule 24.10.2019
comment
так что я не уверен, в чем разница между Serverless Framework и SAM? Предполагается, что мы перейдем на бессерверную систему, так что, может быть, мы будем строчными буквами без серверов, а не без серверов ™?   -  person Brandon Miller    schedule 24.10.2019
comment
Полностью ли SAM мешает мне делать то, что я пытаюсь сделать?   -  person Brandon Miller    schedule 24.10.2019
comment
Оба являются фреймворками с открытым исходным кодом для создания бессерверных приложений. SAM означает «модель бессерверного приложения», которая специфична для Amazon, и вы можете узнать больше о aws. amazon.com/serverless/sam. Serverless Framework не зависит от платформы и поддерживает множество различных поставщиков; вы можете прочитать об этом на serverless.com   -  person hephalump    schedule 24.10.2019
comment
Итак, если $ {ssm: [paramName]} - это бессерверный способ сделать это, то какова команда для доступа к параметрам SSM с помощью SAM?   -  person Brandon Miller    schedule 24.10.2019
comment
Правильный синтаксис в бессерверном режиме - $ {ssm: / path / to / param}. Вы можете найти примеры использования параметров SSM с SAM в репозитории AWSLABS SAM на Github здесь: github.com/awslabs/serverless-application-model/tree/master/   -  person hephalump    schedule 24.10.2019


Ответы (1)


SAM - это надмножество CloudFormation, поэтому команды CloudFormation должны работать

      Environment:
        Variables:
          database_encrypt: '{{resolve:ssm-secure:databaseEncrypt:1}}' 
          database_password: '{{resolve:ssm-secure:databasePassword:1}}' 

см. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html

person Seth E    schedule 24.10.2019
comment
Кажется, ссылка SSM Secure не поддерживается для AWS :: Lambda :: Function, или я что-то упустил? - person niklr; 26.05.2020
comment
Правильные, безопасные параметры не поддерживаются CloudFormation. Может быть, вместо этого использовать диспетчер секретов? aws.amazon.com / blogs / aws / - person Seth E; 27.05.2020