AWS SAM локальные параметры и параметры среды - PullRequest
3 голосов
/ 12 января 2020

Я хочу избавиться от жестко закодированных паролей в моей лямбде, которая развернута на AWS. Я обнаружил, что буду изменять packaged.yaml:

Parameters:
  DATABASE_URI:
    Description: 'Required. MongoDB connection URL'
    Type: 'String'
Resources:
  BUDAuthorizeUserHandler:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: BUDAuthorizeUserHandler
      Handler: src/handlers/users/authorizeUser.handler
      Runtime: nodejs10.x
      Environment:
        Variables:
          MONGODB_URI: !Ref DATABASE_URI

Это использование:

const MONGODB_URI = process.env.MONGODB_URI;
console.log(MONGODB_URI);

Пока все хорошо и в соответствии со спецификацией. Но я потратил два часа, пытаясь заставить его работать локально.

Файл конфигурации env.json

{
  "BUDAuthorizeUserHandler": {
     "MONGODB_URI": "mongodb+srv://USER:PASSWORD@HOST/bud?retryWrites=true&w=majority"
   }
}

Я пробовал эти параметры, но переменная среды никогда не определялась:

sam local start-api --env-vars env.json

sam local start-api --parameter-overrides ParameterKey=DATABASE_URI,ParameterValue="mongodb+srv://USER:PASSWORD@HOST/bud?retryWrites=true&w=majority"

Я прошел по этим страницам:

https://github.com/awslabs/aws-sam-cli/issues/1163 aws -sam-локальные переменные среды Как указать параметры шаблона, когда работает AWS SAM Local? Установка переменных среды с помощью! Ref in AWS SAM?

SAM CLI, версия 0.39.0

Как сделать это работает? Что я делаю не так?

1 Ответ

5 голосов
/ 15 января 2020

Вы можете go - эту статью , в которой есть несколько примеров использования AWS SAM для создания различных AWS ресурсов.

Проблема в вашем случае может заключаться в том, что Имя параметра DATABASE_URI содержит не алфавитные символы c символов (подчеркивание в вашем примере). Попробуйте переименовать его в DatabaseUri и сделать то же самое в вашей команде sam invoke local. Это должно работать.

Кроме того, вам нужны изменения в template.yaml, а не packaged.yaml. packaged.yaml генерируется автоматически при запуске команды sam package.

При внесении этих изменений у меня работает следующий шаблон.yaml.

Parameters:
    DatabaseUri: # Changed this to remove underscore
        Description: 'Required. MongoDB connection URL'
        Type: 'String'
Resources:
    BUDAuthorizeUserHandler:
        Type: AWS::Serverless::Function
        Properties:
            FunctionName: BUDAuthorizeUserHandler
            Handler: index.pingWithEnvVariable # Ignore this change, my test function is at this location
            Runtime: nodejs10.x
            Environment:
                Variables:
                    MONGODB_URI: !Ref DatabaseUri # Removed underscore from here as well, obviously

index. js ( возвращает значение переменной env в вывод для тестирования)

exports.pingWithEnvVariable = async event => {
    const response = {};
    response.statusCode = 200;
    const env = process.env.MONGODB_URI;
    response.body = JSON.stringify({ env });
    return response;
};

использовал тот же env. json, что и ваш

$ sam local invoke BUDAuthorizeUserHandler  --env-vars env.json
START RequestId: 6a9d398c-fecd-1b07-c9a0-d9fe4293cfe1 Version: $LATEST
END RequestId: 6a9d398c-fecd-1b07-c9a0-d9fe4293cfe1
REPORT RequestId: 6a9d398c-fecd-1b07-c9a0-d9fe4293cfe1  Init Duration: 211.76 ms        Duration: 5.66 ms       Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 43 MB

{"statusCode":200,"body":"{\"env\":\"mongodb+srv://USER:PASSWORD@HOST/bud?retryWrites=true\u0026w=majority\"}"}

Работает также с переопределениями параметров

$ sam local invoke BUDAuthorizeUserHandler  --parameter-overrides 'ParameterKey=DatabaseUri,ParameterValue=mongodb+srv://USER:PASSWORD@HOST/bud?retryWrites=true&w=majority'
START RequestId: e0415251-2655-139b-e5df-5f9db658ca01 Version: $LATEST
END RequestId: e0415251-2655-139b-e5df-5f9db658ca01
REPORT RequestId: e0415251-2655-139b-e5df-5f9db658ca01  Init Duration: 163.06 ms        Duration: 6.88 ms       Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 43 MB

{"statusCode":200,"body":"{\"env\":\"mongodb+srv://USER:PASSWORD@HOST/bud?retryWrites=true\u0026w=majority\"}"}
...