Как создать сборку CDK с помощью Python aws_cdk.cx_api

#python #aws-cdk

Вопрос:

Я в отчаянии, поэтому буду признателен за любую помощь.

Я пытаюсь изменить свой текущий CDK с помощью облачной сборки на Python.

Я не могу найти ни примеров, ни надлежащей документации для python, только справочное руководство.

Это мой код:

 import os import subprocess import aws_cdk.cx_api as cxapi import aws_cdk.cloud_assembly_schema as cxschema  class my_class():  def synth():  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)  cab.add_artifact(new_stack_name, type = cxschema.ArtifactType.ASSET_MANIFEST, properties = orig_stack_assembly.manifest)  

Затем, в моем тесте на манекен, я называю это: печать(stack_info.синтезатор(«Тест», «Цель»))

И это выполняется с помощью pytest.

Просто для сравнения, я заставил его работать в машинописном виде:

 const cab: CloudAssemblyBuilder = new CloudAssemblyBuilder(ASSEMBLY_PATH); cab.addArtifact(new_stack_name, stack.manifest); cab.buildAssembly();  

Я ожидал аналогичного/такого же поведения, но я просто не могу понять, как это сделать в python, и, поскольку вся моя база кода написана на python, я бы просто хотел, чтобы все это было сделано в одном месте, а не переделывать все это в TS.

Изменить: Если я передам stack.manifest, я получу следующую ошибку:

 jsii.errors.JSIIError: Value did not match any type in union:  Wire struct type '@aws-cdk/cloud-assembly-schema.ArtifactManifest' does not match expected '@aws-cdk/cloud-assembly-schema.AwsCloudFormationStackProperties', Wire struct type '@aws-cdk/cloud-assembly-schema.ArtifactManifest' does not match expected '@aws-cdk/cloud-assembly-schema.AssetManifestProperties',  Wire struct type '@aws-cdk/cloud-assembly-schema.ArtifactManifest' does not match expected '@aws-cdk/cloud-assembly-schema.TreeArtifactProperties',  Wire struct type '@aws-cdk/cloud-assembly-schema.ArtifactManifest' does not match expected '@aws-cdk/cloud-assembly-schema.NestedCloudAssemblyProperties'  

И если я передам весь объект сборки стека, я столкнусь с еще более странной проблемой:

 jsii.errors.JavaScriptError:  RangeError: Maximum call stack size exceeded  at /private/var/folders/z6/c91mcs6j4g93t2856_p_51nr0000gn/T/jsii-kernel-35iS5M/node_modules/@aws-cdk/cx-api/lib/cloud-assembly.js:307:53  

Комментарии:

1. В чем на самом деле проблема? Что ты получаешь такого, чего не ожидаешь?

2. Обновлено с учетом ошибок, которые я вижу.

3. Спасибо. Не могли бы вы также опубликовать свой полный код JavaScript и Python, если сможете? Это очень поможет.

4. Там, добавил весь бит python, мне приходит в голову одна вещь: мне не хватает какого-то пути, и я использую один и тот же манифест для чтения и записи, вместо того, чтобы создавать новый, но я его не вижу. Я добавил недостающий бит, что это вызывается как тест pytest.