簡體   English   中英

條件 If 和枚舉 AWS CDK (Python)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM