#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.