我们有一个 yaml 文件,其中包含 1 个带有多个 lambda 函数定义的服务。我试图在一个函数下定义一个环境变量,并希望可以在 iamrole 语句中找到它,但我得到了
Value not found at "env" source
。
但我需要在每个函数级别定义变量。有没有办法我们可以实现这一目标。我们的 yml 看起来像
service: myService
frameworkVersion: "3"
provider:
name: aws
...
iamRoleStatements:
- Fn::If:
- myCondition
- Effect: "Deny"
Action:
- ...
Resources:
- ...
resources:
Conditions:
myCondition: !Equals ["${env:MY_ENV_VARIABLE, false}", true]
functions:
my_function:
...
environment:
MY_ENV_VARIABLE: true
非常感谢!
您可以简单地在 yaml 文件的
custom
部分定义该值,然后从那里选取它:
service: myService
frameworkVersion: "3"
custom:
myEnvVariable: true
provider:
name: aws
...
iamRoleStatements:
- Fn::If:
- myCondition
- Effect: "Deny"
Action:
- ...
Resources:
- ...
resources:
Conditions:
myCondition: !Equals ["${self:custom.myEnvVariable, false}", true]
functions:
my_function:
...
environment:
MY_ENV_VARIABLE: ${self:custom.myEnvVariable}
但是我看到基于此:
["${env:MY_ENV_VARIABLE, false}", true]
,在某些情况下您的变量可能未设置。如果取决于阶段,您可以简单地使用 params 部分:
service: myService
frameworkVersion: "3"
params:
default:
MY_ENV_VARIABLE: true
staging:
MY_ENV_VARIABLE: true
prod:
MY_ENV_VARIABLE: false
provider:
name: aws
...
iamRoleStatements:
- Fn::If:
- myCondition
- Effect: "Deny"
Action:
- ...
Resources:
- ...
resources:
Conditions:
myCondition: !Equals ["${param:MY_ENV_VARIABLE}", true]
functions:
my_function:
...
environment:
MY_ENV_VARIABLE: ${param:MY_ENV_VARIABLE}
然后根据您在部署期间传递的
stage
名称,将选择正确的值。在该示例中,对于 prod,MY_ENV_VARIABLE
的值将有所不同。如果提供非标准的stage
,那么它将回退到默认值。