Python 使用AWS CDK创建EFS装载目标时,如何设置子网id?

Python 使用AWS CDK创建EFS装载目标时,如何设置子网id?,python,amazon-web-services,aws-cdk,amazon-efs,Python,Amazon Web Services,Aws Cdk,Amazon Efs,我得到一个“jsii.errors.jsiierro:Expected Scalar,got{“$jsii.byref”:“@aws cdk/core。Reference@10024向装载目标传递子网id时出现“}”错误。代码如下: mountTarget = efs.CfnMountTarget(self, "EfsMounttarget", file_system_id=filesystem.get_att("FileSystemId"), security_groups

我得到一个“jsii.errors.jsiierro:Expected Scalar,got{“$jsii.byref”:“@aws cdk/core。Reference@10024向装载目标传递子网id时出现“}”错误。代码如下:

  mountTarget = efs.CfnMountTarget(self, "EfsMounttarget",
    file_system_id=filesystem.get_att("FileSystemId"),
    security_groups= [ sg_asg ],
    subnet_id=vpc.select_subnets(subnet_type=ec2.SubnetType.PUBLIC).subnet_ids[0]
    )
当我打印出select_subnets方法时,我得到了一个字符串形式的正确id

print(type(vpc.select_subnets(subnet_type=ec2.SubnetType.PUBLIC).subnet_ids[0]))
print(vpc.select_subnets(subnet_type=ec2.SubnetType.PUBLIC).subnet_ids[0])
输出:

<class 'str'>
subnet-9b1f3bd3

子网9b1f3bd3
这个参数需要一个字符串,所以我在这里卡住了

以下是完整的错误消息:

jsii.errors.JavaScriptError: 
  Error: Expected Scalar, got {"$jsii.byref":"@aws-cdk/core.Reference@10024"}
      at Object.deserialize (/home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:6630:23)
      at Kernel._toSandbox (/home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:8111:61)
      at /home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:6841:29
      at mapValues (/home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:7101:27)
      at Object.deserialize (/home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:6837:20)
      at Kernel._toSandbox (/home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:8111:61)
      at /home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:8164:33
      at Array.map (<anonymous>)
      at Kernel._boxUnboxParameters (/home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:8164:19)
      at Kernel._wrapSandboxCode (/home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:8205:19)
      at Kernel._create (/home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:7749:26)
      at Kernel.create (/home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:7503:21)
      at KernelHost.processRequest (/home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:7293:28)
      at KernelHost.run (/home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:7233:14)
      at Immediate._onImmediate (/home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:7236:37)
      at processImmediate (internal/timers.js:439:21)

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

Traceback (most recent call last):
  File "app.py", line 9, in <module>
    HelloCdkStack(app, "HelloCdkStack2", env={'region': 'eu-west-1', 'account': '000000000000'})
  File "/home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/jsii/_runtime.py", line 66, in __call__
    inst = super().__call__(*args, **kwargs)
  File "/home/username/dev/tests/hello-cdk/hello_cdk/hello_cdk_stack.py", line 92, in __init__
    subnet_id=vpc.select_subnets(subnet_type=ec2.SubnetType.PUBLIC).subnet_ids[0]
  File "/home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/jsii/_runtime.py", line 66, in __call__
    inst = super().__call__(*args, **kwargs)
  File "/home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/aws_cdk/aws_efs/__init__.py", line 385, in __init__
    jsii.create(CfnMountTarget, self, [scope, id, props])
  File "/home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/jsii/_kernel/__init__.py", line 223, in create
    interfaces=[iface.__jsii_type__ for iface in getattr(klass, "__jsii_ifaces__", [])],
  File "/home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/jsii/_kernel/providers/process.py", line 333, in create
    return self._process.send(request, CreateResponse)
  File "/home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/jsii/_kernel/providers/process.py", line 318, in send
    raise JSIIError(resp.error) from JavaScriptError(resp.stack)
jsii.errors.JSIIError: Expected Scalar, got {"$jsii.byref":"@aws-cdk/core.Reference@10024"}
Subprocess exited with error 1
jsii.errors.JavaScriptError:
错误:应为标量,获得{“$jsii.byref”:“@aws cdk/core。Reference@10024"}
反序列化(/home/username/dev/tests/hello cdk/.env/lib/python3.7/site packages/jsii/_embedded/jsii/jsii runtime.js:6630:23)
在Kernel._toSandbox(/home/username/dev/tests/hello cdk/.env/lib/python3.7/site packages/jsii/_embedded/jsii/jsii runtime.js:8111:61)
在/home/username/dev/tests/hello cdk/.env/lib/python3.7/site packages/jsii/_embedded/jsii/jsii runtime.js:6841:29
在mapValues(/home/username/dev/tests/hello cdk/.env/lib/python3.7/site packages/jsii/_embedded/jsii/jsii runtime.js:7101:27)
反序列化(/home/username/dev/tests/hello cdk/.env/lib/python3.7/site packages/jsii/_embedded/jsii/jsii runtime.js:6837:20)
在Kernel._toSandbox(/home/username/dev/tests/hello cdk/.env/lib/python3.7/site packages/jsii/_embedded/jsii/jsii runtime.js:8111:61)
在/home/username/dev/tests/hello cdk/.env/lib/python3.7/site packages/jsii/_embedded/jsii/jsii runtime.js:8164:33
在Array.map()处
在Kernel._boxUnexparameters(/home/username/dev/tests/hello cdk/.env/lib/python3.7/site packages/jsii/_embedded/jsii/jsii runtime.js:8164:19)
在Kernel._wrapSandboxCode(/home/username/dev/tests/hello cdk/.env/lib/python3.7/site packages/jsii/_embedded/jsii/jsii runtime.js:8205:19)
在内核中创建(/home/username/dev/tests/hello cdk/.env/lib/python3.7/site packages/jsii/_embedded/jsii/jsii runtime.js:7749:26)
在Kernel.create(/home/username/dev/tests/hello cdk/.env/lib/python3.7/site packages/jsii/_embedded/jsii/jsii runtime.js:7503:21)
位于KernelHost.processRequest(/home/username/dev/tests/hello cdk/.env/lib/python3.7/site packages/jsii/_embedded/jsii/jsii runtime.js:7293:28)
在KernelHost.run(/home/username/dev/tests/hello cdk/.env/lib/python3.7/site packages/jsii/_embedded/jsii/jsii runtime.js:7233:14)
立即。_onImmediate(/home/username/dev/tests/hello cdk/.env/lib/python3.7/site packages/jsii/_embedded/jsii/jsii runtime.js:7236:37)
在processImmediate(internal/timers.js:439:21)
上述异常是以下异常的直接原因:
回溯(最近一次呼叫最后一次):
文件“app.py”,第9行,在
HelloCdkStack(应用程序,“HelloCdkStack2”,env={'region':'eu-west-1','account':'000000000000'})
文件“/home/username/dev/tests/hello cdk/.env/lib/python3.7/site packages/jsii/_runtime.py”,第66行,在调用中__
inst=super()
文件“/home/username/dev/tests/hello-cdk/hello\u-cdk/hello\u-cdk\u-stack.py”,第92行,在__
子网\u id=vpc。选择\u子网(子网\u类型=ec2.SubnetType.PUBLIC)。子网\u id[0]
文件“/home/username/dev/tests/hello cdk/.env/lib/python3.7/site packages/jsii/_runtime.py”,第66行,在调用中__
inst=super()
文件“/home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/aws\u-cdk/aws\u-efs/\u-init\u-init.py”,第385行,在\u-init中__
创建(CfnMountTarget、self、[scope、id、props])
文件“/home/username/dev/tests/hello-cdk/.env/lib/python3.7/site-packages/jsii/\u-kernel/\uuuuu-init\uuuu.py”,第223行,在create中
接口=[iface.\uuuuJSII\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,
文件“/home/username/dev/tests/hello cdk/.env/lib/python3.7/site packages/jsii/_kernel/providers/process.py”,第333行,在create中
返回self.\u process.send(请求、创建响应)
文件“/home/username/dev/tests/hello cdk/.env/lib/python3.7/site packages/jsii/_kernel/providers/process.py”,第318行,在send中
从JavaScriptError(resp.stack)引发JSIIError(resp.error)
jsii.errors.jsiirerror:应为标量,得到{“$jsii.byref”:“@aws cdk/core。Reference@10024"}
子进程已退出,出现错误1

感谢您的帮助和建议。

问题不在于子网id,而在于文件系统id。此代码适用于:

mountTarget = efs.CfnMountTarget(self, "EfsMounttarget"+str(i),
            file_system_id=filesystem.ref,
            security_groups= [ sg_efs.security_group_id ],
            subnet_id=vpc.select_subnets(subnet_type=ec2.SubnetType.PRIVATE).subnets[0].subnet_id
        )       
文件系统是一个CFN文件系统