[英]Conditional If and ENUM AWS CDK (Python)
我只是使用 CDK v2 來生成模板。 當我嘗試使用枚舉重新創建條件時,出現錯誤。
預期的枚舉值,得到 {"$jsii.byref":"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
這確實意味着需要在部署之前進行的合成期間設置條件。 但是,您似乎已經將參數存儲用於其他事情,您可以在此處繼續使用它,並使用上下文變量( cdk deploy Stack\* -c a_variable_name=someValue
)或其他方法來確定這應該是什么部署時間。
請記住,CDK 實際上並沒有對部署做任何事情。 它只合成一個 CloudFormation 模板,然后將模板傳遞給 cloudformation 進行部署。 因此,您的代碼在部署期間永遠不會生效,只會在創建基礎架構時生效。 在部署期間需要發生的任何事情都應該由自定義資源 lambda 或更好的管道來處理。 之后的任何內容都必須是自定義資源。 在開始部署之前可能發生的任何事情都可以在 CDK 堆棧中處理(例如發現信息以設置給定資源的屬性)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.