我应该如何使用 sam build 注入环境变量

Posted

技术标签:

【中文标题】我应该如何使用 sam build 注入环境变量【英文标题】:How should I inject env vars with sam build 【发布时间】:2021-12-28 17:25:02 【问题描述】:

我正在使用 AWS SAM。 我创建了一个包含以下条目的 samconfig.toml 文件:

[default.build.parameters]
container_env_var_file = "envDefault.json"

当我做sam build 时,我看到.aws-sam/build.toml 来自 envDefault.json 的 env 值 但是当我检查模板.aws-sam/build/template.yaml 我看到的是原始值,而不是 envDefault.json 中的覆盖

sam deploy 覆盖我要部署到的每个环境的 env 变量的最佳方法是什么? 我试图避免在部署过程中手动输入参数。

【问题讨论】:

【参考方案1】:

您似乎正在尝试设置构建参数而不是部署参数

AWS SAM toml 文件中的所有构建参数部分都以 [default.build.parameters]

开头

对于覆盖部署参数,您必须使用 [default.deploy.parameters] 部分(default 表示默认配置文件)。

所以在你的情况下,它会是这样的。

[default.deploy.parameters]
parameter_overrides = "ParamKey=\"ParamValue\""

或者你可以使用命令行,

sam deploy --parameter-overrides

但是,如果您想根据环境为 lambda 函数获取一些值,我强烈建议使用参数存储

【讨论】:

我正在尝试指定每个部署配置文件附带的环境变量值以覆盖 template.yaml 中的环境值 - 而不是参数。 docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/… @ItayMoav-Malimovka 您可以使用这些参数来传递您的环境,以便它覆盖您的 template.yaml 中的值,如果您有很多变量,比如不同环境的相同变量,请使用 cloudformation '映射'。因此您可以在参数中指定您的环境,它将选择正确的映射docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/… tnx - 看起来像我要找的东西 一旦我让它为我工作(等待工作周开始:-))我总是接受答案,我是 SO 的创始一代

以上是关于我应该如何使用 sam build 注入环境变量的主要内容,如果未能解决你的问题,请参考以下文章

Post-build Actions 部分看不到注入的环境变量

在 Github Actions 中注入 .env.local 文件或自定义环境变量集到 yarn build

使用 SAM 时,AWS sam build 和 sam package 有啥区别?

SAM 调用不会采用本地环境变量

Powershell将文件从环境变量复制到另一个环境变量的zip文件夹

如何在build.gradle中创建文件并设置环境变量并获取文件内的数据?