条件必选If和ENUM AWS CDK (Python)



我只是使用CDK v2来生成模板。当我尝试用枚举重新创建条件时,我得到一个错误。

期望enum值,已得到{"jsii.byref&quot美元:"aws-cdk-lib.Intrinsic@10012"}

示例代码:

param_enableDeletionProtection = CfnParameter(self, "EnableDeletionProtection", 
type="String",
allowed_values=['True','False'],
description="Whether critical services (like RDS) get provisioned with deletion protection or not")
condition_enable_deletion_protection = CfnCondition(self, "DeletionProtectionEnabled",
expression=Fn.condition_equals(param_enableDeletionProtection.value_as_string, 'True')
)
cond_removal_policy=Fn.condition_if(condition_enable_deletion_protection.logical_id,
RemovalPolicy.RETAIN,
RemovalPolicy.DESTROY
)
s3_Bucket = s3.Bucket(self, "MyBucket",
bucket_name="my-bucket-name",
removal_policy=cond_removal_policy
)

我做错了什么吗?还是不支持?

Fn.condition_if用于深入cloudformation模板的内部,并将返回一条语句—而不是此属性所期望的RETAIN或DESTROY枚举。当你使用python时,你可以这样做:

cond_removal_policy=RemovalPolicy.RETAIN if some_condition_true else RemovalPolicy.DESTROY
这意味着需要在部署前的synth期间设置条件。然而,似乎你已经在其他事情上使用参数存储,你可以继续在这里使用它,或者使用上下文变量(cdk deploy Stack* -c a_variable_name=someValue)或其他方法来确定在部署时应该是什么。

请记住,CDK实际上对部署没有任何作用。只有综合CloudFormation模板,然后通过模板CloudFormation部署。因此,您的代码在部署期间永远不会生效,只有在创建基础架构时才会生效。在

部署期间需要发生的任何事情都应该由自定义资源lambda或更好的管道来处理。之后的任何内容都必须是自定义资源。在开始部署之前可能发生的任何事情都可以在CDK堆栈中处理(例如发现信息以设置给定资源的属性)

最新更新