AWS CDK:条件资源?



我正在尝试创建一个cron事件,该事件在PROD环境上每天运行一次,而在DEV环境上每周运行一次。我的代码是这样的

environment = CfnParameter(
self,
"environment",
type="String",
description="Environment e.g. DEV|PROD",
default="DEV",
allowed_values=["DEV", "PROD"],
)
if environment.value_as_string == "PROD":
rule = events.Rule(
self,
"Some clever description",
schedule=events.Schedule.cron(minute="0", hour="2", week_day="TUE,WED,THU,FRI,SAT"),
)
else:
rule = events.Rule(
self,
"Some clever description",
schedule=events.Schedule.cron(minute="0", hour="2", week_day="TUE"),
)

我的问题是,在我的prod帐户上,当我检查云形成参数时,它显示PROD,但该事件每周只运行一次?

您的方法不工作,因为您不能使用部署时CloudFormation参数与本地if..then代码。

Docs:因为它们在合成时不可用,参数值不能很容易地用于流量控制和其他目的在你的CDK应用程序…要实现带有参数的控制流,您可以使用CfnCondition结构,尽管这与本机if语句相比有些笨拙。

下面是另外两种惯用的CDK方法。在这两种情况下,"生产还是开发?"在合成时已知:

选项1:将prod: boolprop添加到您的Stack定义

一种方法,取自CDK文档,使用Stack prop和if prod:控制流语句。

# app.py
MyStack(app, "beta", env=my_dev_env)
MyStack(app, "prod", prod=True, env=my_prod_env)

选项2:对控制流使用Stack的帐户id

您可能不需要显式的prodprop。文档中也介绍了另一种方法,即使用堆栈的帐户id来确定条件变量:

#MyStack.py
if self.account == '<prod-account>':
# do prod stuff
else:
# do dev stuff
无论使用哪一种方法,根据你的部署策略,你可以将应用程序分成两个文件(例如app_prod.py,app_dev.py)。这里的要点是:在合成时做出决定,并在代码中对所有生产阶段建模。

最新更新