jsii icon indicating copy to clipboard operation
jsii copied to clipboard

CloudArtifact.manifest cannot be read via jsii

Open rabbittsoup opened this issue 4 years ago • 5 comments
trafficstars

Error thrown when retrieving the manifest attribute of a CloudArtifact.

Reproduction Steps

from aws_cdk.core import App, Stack
app = App()
Stack(app, 'Stack')
assembly = app.synth()
for artifact in assembly.artifacts:
    artifact.manifest

What did you expect to happen?

I expect artifact.manifest to return an ArtifactManifest

What actually happened?

jsii.errors.JavaScriptError: Error: Got 'undefined' for non-optional instance of {"abstract":true,"docs":{"stability":"stable","summary":"A file relative to the assembly root which contains the CloudFormation template for this stack."},"immutable":true,"locationInModule":{"filename":"lib/cloud-assembly/artifact-schema.ts","line":9},"name":"templateFile","type":{"primitive":"string"}} at nullAndOk (/tmp/tmp5j7tkg0q/lib/program.js:9318:23) at Object.serialize (/tmp/tmp5j7tkg0q/lib/program.js:8843:25) at Kernel._fromSandbox (/tmp/tmp5j7tkg0q/lib/program.js:8528:69) at Kernel.get (/tmp/tmp5j7tkg0q/lib/program.js:7943:34) at KernelHost.processRequest (/tmp/tmp5j7tkg0q/lib/program.js:9479:36) at KernelHost.run (/tmp/tmp5j7tkg0q/lib/program.js:9442:22) at Immediate._onImmediate (/tmp/tmp5j7tkg0q/lib/program.js:9443:46) at processImmediate (internal/timers.js:461:21)

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "app.py", line 7, in artifact.manifest File ".../lib/python3.8/site-packages/aws_cdk/cx_api/init.py", line 252, in manifest return typing.cast(aws_cdk.cloud_assembly_schema.ArtifactManifest, jsii.get(self, "manifest")) File ".../lib/python3.8/site-packages/jsii/_kernel/init.py", line 128, in wrapped return _recursize_dereference(kernel, fn(kernel, *args, **kwargs)) File ".../lib/python3.8/site-packages/jsii/_kernel/init.py", line 118, in _recursize_dereference return _reference_map.resolve_reference(kernel, d) File ".../lib/python3.8/site-packages/jsii/_reference_map.py", line 111, in resolve insts = [ File ".../lib/python3.8/site-packages/jsii/_reference_map.py", line 113, in **{ File ".../lib/python3.8/site-packages/jsii/_reference_map.py", line 114, in python_name: kernel.get(remote_struct, jsii_name) File ".../lib/python3.8/site-packages/jsii/_kernel/init.py", line 128, in wrapped return _recursize_dereference(kernel, fn(kernel, *args, **kwargs)) File ".../lib/python3.8/site-packages/jsii/_kernel/init.py", line 118, in _recursize_dereference return _reference_map.resolve_reference(kernel, d) File ".../lib/python3.8/site-packages/jsii/_reference_map.py", line 111, in resolve insts = [ File ".../lib/python3.8/site-packages/jsii/_reference_map.py", line 113, in **{ File ".../lib/python3.8/site-packages/jsii/_reference_map.py", line 114, in python_name: kernel.get(remote_struct, jsii_name) File ".../lib/python3.8/site-packages/jsii/_kernel/init.py", line 128, in wrapped return _recursize_dereference(kernel, fn(kernel, *args, **kwargs)) File ".../lib/python3.8/site-packages/jsii/_kernel/init.py", line 301, in get response = self.provider.get( File ".../lib/python3.8/site-packages/jsii/_kernel/providers/process.py", line 347, in get return self._process.send(request, GetResponse) File ".../lib/python3.8/site-packages/jsii/_kernel/providers/process.py", line 326, in send raise JSIIError(resp.error) from JavaScriptError(resp.stack) jsii.errors.JSIIError: Got 'undefined' for non-optional instance of {"abstract":true,"docs":{"stability":"stable","summary":"A file relative to the assembly root which contains the CloudFormation template for this stack."},"immutable":true,"locationInModule":{"filename":"lib/cloud-assembly/artifact-schema.ts","line":9},"name":"templateFile","type":{"primitive":"string"}} Subprocess exited with error 1

Environment

  • CDK CLI Version: 1.100.0 (build d996c6d)
  • Framework Version: 1.100.0
  • Node.js Version: v14.16.0
  • OS: Amazon Linux 2
  • Language (Version): Python 3.8

Other


This is :bug: Bug Report

rabbittsoup avatar Apr 22 '21 05:04 rabbittsoup

This would be part of a bigger intent to loop through the cloud assembly, customize some stuff, and write it back out. But, alas, I can't get past the first line in the loop.

builder = CloudAssemblyBuilder(assembly.directory)
for artifact in assembly.artifacts:
    manifest = artifact.manifest
    # customize something
    builder.add_artifact(
        artifact.id,
        type=manifest.type,
        dependencies=manifest.dependencies,
        environment=manifest.environment,
        metadata=manifest.metadata,
        properties=manifest.properties
    )
builder.build_assembly(runtime_info=assembly.runtime)

rabbittsoup avatar Apr 22 '21 13:04 rabbittsoup

The Cloud Artifact apparently cannot be read over jsii. Looks like jsii is interpreting an artifact as a StackArtifact, even though it isn't, and then gets confused by the absence of a templateFile property.

rix0rrr avatar Apr 23 '21 09:04 rix0rrr

+1

I got the exact same error when I tried to access the manifest by using cx_api.CloudAssembly to read a cloud assembly:

Python code to reproduce the error:

from aws_cdk import cx_api

cloud_assembly = cx_api.CloudAssembly("cdk.out")
print(cloud_assembly.manifest)

Stack trace:

jsii.errors.JavaScriptError: 
  Error: Got 'undefined' for non-optional instance of {"abstract":true,"docs":{"stability":"stable","summary":"The name of the parameter where the hash of the bundled asset should be passed in."},"immutable":true,"locationInModule":{"filename":"lib/cloud-assembly/metadata-schema.ts","line":48},"name":"artifactHashParameter","type":{"primitive":"string"}}
      at nullAndOk (/private/var/folders/z2/g4k47qqs00x51ndqbx73fzsjw9wk8h/T/tmpfbdjovkp/lib/program.js:9318:23)
      at Object.serialize (/private/var/folders/z2/g4k47qqs00x51ndqbx73fzsjw9wk8h/T/tmpfbdjovkp/lib/program.js:8843:25)
      at Kernel._fromSandbox (/private/var/folders/z2/g4k47qqs00x51ndqbx73fzsjw9wk8h/T/tmpfbdjovkp/lib/program.js:8528:69)
      at Kernel.get (/private/var/folders/z2/g4k47qqs00x51ndqbx73fzsjw9wk8h/T/tmpfbdjovkp/lib/program.js:7943:34)
      at KernelHost.processRequest (/private/var/folders/z2/g4k47qqs00x51ndqbx73fzsjw9wk8h/T/tmpfbdjovkp/lib/program.js:9479:36)
      at KernelHost.run (/private/var/folders/z2/g4k47qqs00x51ndqbx73fzsjw9wk8h/T/tmpfbdjovkp/lib/program.js:9442:22)
      at Immediate._onImmediate (/private/var/folders/z2/g4k47qqs00x51ndqbx73fzsjw9wk8h/T/tmpfbdjovkp/lib/program.js:9443:46)
      at processImmediate (node:internal/timers:462:21)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/jsii_error.py", line 7, in <module>
    print(stack.assets)
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/aws_cdk/cx_api/__init__.py", line 611, in assets
    return typing.cast(typing.List[typing.Union[aws_cdk.cloud_assembly_schema.FileAssetMetadataEntry, aws_cdk.cloud_assembly_schema.ContainerImageAssetMetadataEntry]], jsii.get(self, "assets"))
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_kernel/__init__.py", line 128, in wrapped
    return _recursize_dereference(kernel, fn(kernel, *args, **kwargs))
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_kernel/__init__.py", line 116, in _recursize_dereference
    return [_recursize_dereference(kernel, i) for i in d]
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_kernel/__init__.py", line 116, in <listcomp>
    return [_recursize_dereference(kernel, i) for i in d]
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_kernel/__init__.py", line 118, in _recursize_dereference
    return _reference_map.resolve_reference(kernel, d)
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_reference_map.py", line 111, in resolve
    insts = [
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_reference_map.py", line 113, in <listcomp>
    **{
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_reference_map.py", line 114, in <dictcomp>
    python_name: kernel.get(remote_struct, jsii_name)
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_kernel/__init__.py", line 128, in wrapped
    return _recursize_dereference(kernel, fn(kernel, *args, **kwargs))
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_kernel/__init__.py", line 301, in get
    response = self.provider.get(
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_kernel/providers/process.py", line 347, in get
    return self._process.send(request, GetResponse)
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_kernel/providers/process.py", line 326, in send
    raise JSIIError(resp.error) from JavaScriptError(resp.stack)
jsii.errors.JSIIError: Got 'undefined' for non-optional instance of {"abstract":true,"docs":{"stability":"stable","summary":"The name of the parameter where the hash of the bundled asset should be passed in."},"immutable":true,"locationInModule":{"filename":"lib/cloud-assembly/metadata-schema.ts","line":48},"name":"artifactHashParameter","type":{"primitive":"string"}}

hawflau avatar May 07 '21 22:05 hawflau

I got another jsii error when I try to access an image-type asset of a stack.

Steps to reproduce:

  1. Create a CDK app with an image-type Lambda Function.
  2. run the following in Python:
from aws_cdk import cx_api

cloud_assembly = cx_api.CloudAssembly("cdk.out")
for stack in cloud_assembly.stacks:
    print(stack.assets)

Stack trace:

jsii.errors.JavaScriptError: 
  Error: Got 'undefined' for non-optional instance of {"abstract":true,"docs":{"stability":"stable","summary":"The name of the parameter where the hash of the bundled asset should be passed in."},"immutable":true,"locationInModule":{"filename":"lib/cloud-assembly/metadata-schema.ts","line":48},"name":"artifactHashParameter","type":{"primitive":"string"}}
      at nullAndOk (/private/var/folders/z2/g4k47qqs00x51ndqbx73fzsjw9wk8h/T/tmpfbdjovkp/lib/program.js:9318:23)
      at Object.serialize (/private/var/folders/z2/g4k47qqs00x51ndqbx73fzsjw9wk8h/T/tmpfbdjovkp/lib/program.js:8843:25)
      at Kernel._fromSandbox (/private/var/folders/z2/g4k47qqs00x51ndqbx73fzsjw9wk8h/T/tmpfbdjovkp/lib/program.js:8528:69)
      at Kernel.get (/private/var/folders/z2/g4k47qqs00x51ndqbx73fzsjw9wk8h/T/tmpfbdjovkp/lib/program.js:7943:34)
      at KernelHost.processRequest (/private/var/folders/z2/g4k47qqs00x51ndqbx73fzsjw9wk8h/T/tmpfbdjovkp/lib/program.js:9479:36)
      at KernelHost.run (/private/var/folders/z2/g4k47qqs00x51ndqbx73fzsjw9wk8h/T/tmpfbdjovkp/lib/program.js:9442:22)
      at Immediate._onImmediate (/private/var/folders/z2/g4k47qqs00x51ndqbx73fzsjw9wk8h/T/tmpfbdjovkp/lib/program.js:9443:46)
      at processImmediate (node:internal/timers:462:21)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/jsii_error.py", line 7, in <module>
    print(stack.assets)
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/aws_cdk/cx_api/__init__.py", line 611, in assets
    return typing.cast(typing.List[typing.Union[aws_cdk.cloud_assembly_schema.FileAssetMetadataEntry, aws_cdk.cloud_assembly_schema.ContainerImageAssetMetadataEntry]], jsii.get(self, "assets"))
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_kernel/__init__.py", line 128, in wrapped
    return _recursize_dereference(kernel, fn(kernel, *args, **kwargs))
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_kernel/__init__.py", line 116, in _recursize_dereference
    return [_recursize_dereference(kernel, i) for i in d]
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_kernel/__init__.py", line 116, in <listcomp>
    return [_recursize_dereference(kernel, i) for i in d]
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_kernel/__init__.py", line 118, in _recursize_dereference
    return _reference_map.resolve_reference(kernel, d)
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_reference_map.py", line 111, in resolve
    insts = [
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_reference_map.py", line 113, in <listcomp>
    **{
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_reference_map.py", line 114, in <dictcomp>
    python_name: kernel.get(remote_struct, jsii_name)
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_kernel/__init__.py", line 128, in wrapped
    return _recursize_dereference(kernel, fn(kernel, *args, **kwargs))
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_kernel/__init__.py", line 301, in get
    response = self.provider.get(
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_kernel/providers/process.py", line 347, in get
    return self._process.send(request, GetResponse)
  File "/Volumes/workplace/gh/cdk-example-app-01/cdk-example-multiple-stacks-01/.venv/lib/python3.8/site-packages/jsii/_kernel/providers/process.py", line 326, in send
    raise JSIIError(resp.error) from JavaScriptError(resp.stack)
jsii.errors.JSIIError: Got 'undefined' for non-optional instance of {"abstract":true,"docs":{"stability":"stable","summary":"The name of the parameter where the hash of the bundled asset should be passed in."},"immutable":true,"locationInModule":{"filename":"lib/cloud-assembly/metadata-schema.ts","line":48},"name":"artifactHashParameter","type":{"primitive":"string"}}

It looks to me a similar error as above

hawflau avatar May 07 '21 22:05 hawflau

Since it looks like this has been bounced around quite a bit, I have updated priority to p1, if this doesnt accurately reflect the severity, please downgrade

NGL321 avatar Jul 24 '21 03:07 NGL321