【问题标题】:AWS CDK with Python - basics of creating VPCs带有 Python 的 AWS CDK - 创建 VPC 的基础知识
【发布时间】:2020-03-29 15:01:12
【问题描述】:

我已经开始学习 AWS CDK,但从 CDK 参考页面复制的以下代码示例遇到了问题:https://docs.aws.amazon.com/cdk/api/latest/python/aws_cdk.aws_ec2.README.html#vpc。这是我第一次尝试写比复制教程更好的东西,但我找不到哪里出错了。非常感谢您帮助我。

配置:

source .env/bin/activate
pip3 install -r requirements.txt
pip3 install aws_cdk.aws_ec2

我的代码:

from aws_cdk import (
    aws_ec2 as ec2,
    core
)


class CdkStack(core.Stack):

    def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

        vpc = ec2.Vpc(self, "VPC",
            cidr="10.100.0.0/16",
            max_azs=3,
            subnet_configuration=[{
                "subnet_type": ec2.SubnetType.PUBLIC,
                "name": "public1",
                "cidr_mask": 24
            }, {
                "cidr_mask": 24,
                "name": "private1",
                "subnet_type": ec2.SubnetType.PRIVATE
            }
            ]
        )

“cdk synth”命令抛出的错误信息:

(.env) [robert@fedora1 cdk]$ cdk synth
jsii.errors.JavaScriptError: 
  Error: Missing required properties for @aws-cdk/aws-ec2.SubnetConfiguration: subnetType
      at validateRequiredProps (/home/robert/Documents/local/cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:7161:15)
      at Object.deserialize (/home/robert/Documents/local/cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:6835:21)
      at Kernel._toSandbox (/home/robert/Documents/local/cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:8111:61)
      at /home/robert/Documents/local/cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:6731:40
      at Array.map (<anonymous>)
      at Object.deserialize (/home/robert/Documents/local/cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:6731:26)
      at Kernel._toSandbox (/home/robert/Documents/local/cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:8111:61)
      at /home/robert/Documents/local/cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:6841:29
      at mapValues (/home/robert/Documents/local/cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:7101:27)
      at Kernel._wrapSandboxCode (/home/robert/Documents/local/cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:8205:19)
      at Kernel._create (/home/robert/Documents/local/cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:7749:26)
      at Kernel.create (/home/robert/Documents/local/cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:7503:21)
      at KernelHost.processRequest (/home/robert/Documents/local/cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:7293:28)
      at KernelHost.run (/home/robert/Documents/local/cdk/.env/lib/python3.7/site-packages/jsii/_embedded/jsii/jsii-runtime.js:7233:14)
      at Immediate._onImmediate (/home/robert/Documents/local/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>
    CdkStack(app, "cdk")
  File "/home/robert/Documents/local/cdk/.env/lib64/python3.7/site-packages/jsii/_runtime.py", line 66, in __call__
    inst = super().__call__(*args, **kwargs)
  File "/home/robert/Documents/local/cdk/cdk/cdk_stack.py", line 22, in __init__
    "subnet_type": ec2.SubnetType.PRIVATE
  File "/home/robert/Documents/local/cdk/.env/lib64/python3.7/site-packages/jsii/_runtime.py", line 66, in __call__
    inst = super().__call__(*args, **kwargs)
  File "/home/robert/Documents/local/cdk/.env/lib64/python3.7/site-packages/aws_cdk/aws_ec2/__init__.py", line 23226, in __init__
    jsii.create(Vpc, self, [scope, id, props])
  File "/home/robert/Documents/local/cdk/.env/lib64/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/robert/Documents/local/cdk/.env/lib64/python3.7/site-packages/jsii/_kernel/providers/process.py", line 333, in create
    return self._process.send(request, CreateResponse)
  File "/home/robert/Documents/local/cdk/.env/lib64/python3.7/site-packages/jsii/_kernel/providers/process.py", line 318, in send
    raise JSIIError(resp.error) from JavaScriptError(resp.stack)
jsii.errors.JSIIError: Missing required properties for @aws-cdk/aws-ec2.SubnetConfiguration: subnetType
Subprocess exited with error 1

【问题讨论】:

    标签: python-3.x aws-cdk


    【解决方案1】:

    您提供了一个字典列表,但它需要一个 SubnetConfiguration 对象列表。

    subnet_configuration(可选[List[SubnetConfiguration]])

    subnet_configuration=[
        ec2.SubnetConfiguration(
            cidr_mask=24,
            name='public1',
            subnet_type=ec2.SubnetType.PUBLIC
        ),
        ec2.SubnetConfiguration(
            cidr_mask=24,
            name='private1',
            subnet_type=ec2.SubnetType.PRIVATE
        )
    
    ]
    

    【讨论】:

    • 谢谢,我看起来我从高级配置中举了一个例子:docs.aws.amazon.com/cdk/api/latest/python/… 太字面意思了。您的代码按预期工作。
    • 如果您已将包导入为 ec2,请将“_ec2”重命名为 ec2。
    猜你喜欢
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 2013-01-25
    • 2014-04-03
    • 2023-04-02
    • 2012-08-29
    • 1970-01-01
    相关资源
    最近更新 更多