gpt4 book ai didi

aws-cloudformation - 无服务器环境变量范围

转载 作者:行者123 更新时间:2023-12-03 07:38:16 25 4
gpt4 key购买 nike

我们有一个 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,那么它将回退到默认值。

关于aws-cloudformation - 无服务器环境变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76915857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com