AWS SAM 本地和环境参数
AWS SAM local and environment parameters
我想摆脱部署到 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?
SAM CLI,版本 0.39.0
如何让它发挥作用?我做错了什么?
您遇到的问题可能是参数名称 DATABASE_URI
包含非字母数字字符(在您的示例中为下划线)。尝试将其重命名为 DatabaseUri
并在 sam invoke local
命令中执行相同的操作。它应该有效。
此外,您需要 template.yaml
中的更改,而不是 packaged.yaml
中的更改。 packaged.yaml 是在您 运行 sam package
命令时自动生成的。
在进行这些更改时,遵循 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\"}"}
我想摆脱部署到 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?
SAM CLI,版本 0.39.0
如何让它发挥作用?我做错了什么?
您遇到的问题可能是参数名称 DATABASE_URI
包含非字母数字字符(在您的示例中为下划线)。尝试将其重命名为 DatabaseUri
并在 sam invoke local
命令中执行相同的操作。它应该有效。
此外,您需要 template.yaml
中的更改,而不是 packaged.yaml
中的更改。 packaged.yaml 是在您 运行 sam package
命令时自动生成的。
在进行这些更改时,遵循 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\"}"}