簡體   English   中英

使用 AWS CDK 創建 EFS 掛載目標時如何設置子網 ID?

[英]How to set the subnet_id when creating an EFS Mount Target with AWS CDK?

當我將子網 ID 傳遞給我的掛載目標時,我收到“jsii.errors.JSIIError: Expected Scalar, got {"$jsii.byref":"@aws-cdk/core.Reference@10024"}”錯誤。 這是代碼:

  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

該參數需要一個字符串,所以我在這一點上被卡住了。

這是完整的錯誤消息:

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

感謝您的任何幫助和建議。

問題不是子網 ID 而是 file_system_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
        )       

文件系統是一個 CfnFileSystem

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM