jsii
jsii copied to clipboard
CloudArtifact.manifest cannot be read via jsii
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
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
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)
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.
+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"}}
I got another jsii error when I try to access an image-type asset of a stack.
Steps to reproduce:
- Create a CDK app with an image-type Lambda Function.
- 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
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