簡體   English   中英

如何獲取cloudformation模板的資源邏輯id到cdk - python

[英]How to get the resource logical id of cloudformation template to cdk - python

我正在將 cloudformation 模板遷移到 CDK。 唯一的問題是我不知道如何從 cloudformation 模板獲取相同的父堆棧邏輯 ID 到 CDK。 請問有什么幫助嗎? 謝謝你。 或者有沒有辦法覆蓋 cdk 生成的邏輯 ID? 當將模板遷移到沒有 Cfn 的 CDK 時,這將非常有用,實際上由於邏輯 ID 的變化而刪除和重新創建了資源。

        from aws_cdk.core import Stack, Construct, StackProps
        import aws_cdk.aws_cloudformation as cfn
        import aws_cdk.aws_s3 as s3
        import aws_cdk.core as core
        import aws_cdk.cloudformation_include as cfn_inc
        
        
        
        class MyNestedStack1(cfn.NestedStack):
            def __init__(self, scope, id, *, parameters=None, timeout=None, notifications=None):
                super().__init__(scope, id)
                
                bucket = s3.Bucket.from_bucket_name(self, "S3Bucket", 
                   bucket_name = "sample-bucket-sample-tin-test")
                bucket_arn = core.Fn.get_att("S3Bucket", "Arn")
    
        
        class MyParentStack1 (Stack):
            def __init__(self, scope, id, *, description=None, env=None, stack_name=None, tags=None, synthesizer=None, terminationProtection=None):
                super().__init__(scope, id, stack_name='aws-stack-nightly')
    

                MyNestedStack(self, "AWSHealthStack")
    

正如您在屏幕截圖中看到的那樣。 AWSHealthStack是 cf 模板的邏輯 ID。 然后,當我將其部署到 cdk 時,它會創建另一個邏輯 ID( AWSHealthStackNestedStackAWSHealthStackNestedStackResource7F23391A

在此處輸入圖像描述

好吧,在這里我嘗試了這段代碼,所以我可以使用 CFnInclude 覆蓋邏輯 ID。 但我得到了這個錯誤:

jsii.errors.JSIIError:缺少@aws-cdk/cloudformation-include.CfnIncludeProps 所需的屬性:templateFile

class MyParentStack(core.Stack):
    def __init__(self, scope, id, *, description=None, env=None, stack_name=None, tags=None, synthesizer=None, terminationProtection=None):
        super().__init__(scope, id, stack_name='aws-stack-nightly')

        stack = MyNestedStack(self, "AWSHealthStack1")
        cfn_template = cfn_inc.CfnIncludeProps(template_file="monitoring-template/aws-stack.yml",
            nested_stacks=[stack])
        cfn_template1 = cfn_inc.CfnInclude(self, "AWSHealthStack2", template_file="monitoring-template/aws-stack.yml",
            nested_stacks=cfn_template)
        cfn_stack = core.Fn.get_att("AWSHealthStack", "Arn")
        cfn_template1.override_logical_id("AWSHealthStack")

我通過重命名邏輯ID來解決這個問題。

stack.rename_logical_id("AWSHealthNestedStackAWSHealthNestedStackResource7F23391A", "AWSHealthStack")

但是,如果有任何更好的方法將不勝感激。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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