You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python aws_cdk.cx_api构建CDK Cloud Assembly

问题根因

  1. 第一个类型匹配错误:
    Python版CloudAssemblyBuilder.add_artifact的参数结构和TS版不同:TS的addArtifact直接接收完整的ArtifactManifest对象,而Python版是将manifest的各个属性拆分为独立参数。你之前错误地将整个ArtifactManifest对象传入了properties参数,同时手动指定了错误的ASSET_MANIFEST类型(原栈是CloudFormation栈类型,和资产清单类型不匹配),导致类型校验失败。
  2. 第二个栈溢出错误:
    Stack Assembly对象内部包含指向父级Cloud Assembly的反向引用,跨语言序列化的jsii层处理循环引用时触发无限递归,最终栈溢出,因此不能直接将整个Stack Assembly对象作为参数传入。

修正后的代码

import os
import subprocess
import aws_cdk.cx_api as cxapi
import aws_cdk.cloud_assembly_schema as cxschema

class MyClass():
    # 修正方法缩进、补全入参
    def synth(self, original_stack_name, TEMP_OUT):
        ASSEMBLY_PATH = 'igor_cdk'
        result = subprocess.run(['cdk', 'synth', '-o', ASSEMBLY_PATH], stdout=subprocess.PIPE)
        my_stuff = result.stdout.decode('utf-8')
        
        new_stack_name = original_stack_name + TEMP_OUT
        print(new_stack_name)
        cloud_assembly = cxapi.CloudAssembly(ASSEMBLY_PATH)
        orig_stack_assembly = cloud_assembly.get_stack_by_name(original_stack_name)
        logical_Ids = orig_stack_assembly.find_metadata_by_type("aws:cdk:logicalId")
        
        cab = cxapi.CloudAssemblyBuilder(ASSEMBLY_PATH)
        orig_manifest = orig_stack_assembly.manifest
        # 拆分manifest属性逐个传入,不手动指定错误类型
        cab.add_artifact(
            id=new_stack_name,
            type=orig_manifest.type,
            properties=orig_manifest.properties,
            metadata=orig_manifest.metadata,
            dependencies=orig_manifest.dependencies
        )
        # 补全汇编构建步骤,对应TS版的cab.buildAssembly()
        final_assembly = cab.build_assembly()
        return final_assembly.get_stack_by_name(new_stack_name)

额外说明

如果需要修改栈的配置,直接修改orig_manifest.properties内的对应字段再传入即可,比如修改模板路径可以调整template_file属性。如果你的需求确实是生成资产清单而非CloudFormation栈,则需要自行构造符合AssetManifestProperties结构的对象传入properties参数,不可直接复用栈的manifest属性。

内容的提问来源于stack exchange,提问作者Balkyto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:24:02