【问题标题】:AWS SAM local and environment parametersAWS SAM 本地和环境参数
【发布时间】:2020-04-29 14:04:33
【问题描述】:

我想摆脱部署到 AWS 的 lambda 中的硬编码密码。我发现我要修改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-local environment variables How do I specify template parameters when running AWS SAM Local? Setting environmental variables with !Ref in AWS SAM?

SAM CLI,版本 0.39.0

如何让它发挥作用?我做错了什么?

【问题讨论】:

    标签: node.js amazon-web-services aws-lambda aws-serverless


    【解决方案1】:

    您的问题可能是参数名称DATABASE_URI 包含非字母数字字符(在您的示例中为下划线)。尝试将其重命名为 DatabaseUri 并在您的 sam invoke local 命令中执行相同操作。它应该可以工作。

    另外,您需要更改 template.yaml,而不是 packaged.yaml。运行sam package 命令时会自动生成packaged.yaml。

    在进行这些更改时,以下 template.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\"}"}
    

    【讨论】:

    • 谢谢,我会试试的。顺便说一句,将 template.yaml 存储在公共 git 中是否安全?我认为没有敏感信息,但我担心,因为我读了一篇关于意外提交敏感信息的文章,一些破解者用来启动大量 EC2 实例..
    • 只要template.yaml中没有存储凭据,我认为没有风险。
    • 通过编辑您的示例更新了我的答案。在对你的 template.yaml 进行细微更改后,env-vars 和参数覆盖都对我有用
    • 好东西。 MONGODB_URI 来自 env.json,而不是 DatabaseUri。我现在会接受你的解决方案,谢谢。你能支持我的问题吗?
    • sam 包和部署不接受 --env-vars。如何将参数传递给 AWS?调用 CreateChangeSet 操作时发生错误(ValidationError):参数:[DatabaseUri] 必须有值
    猜你喜欢
    • 2018-06-14
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 2020-11-11
    • 2023-04-06
    • 2020-09-05
    相关资源
    最近更新 更多