如何在python中为AWS-CDK创建自定义构造库

时间:2020-01-30 12:29:18

标签: python amazon-web-services amazon-ec2 aws-cdk

最近我一直在使用aws-cdk创建EC2,VPC和S3服务。

但是,如果要在python中创建我的自定义EC2库(不使用JSII),则要比使用aws_cdk的aws_ec2库实际创建EC2实例和VPC多得多。

自定义库将接受诸如实例名称(字符串) InstanceType(字符串) MachineImage(字符串)子网类型(字符串)

比起以下参数,将引用以下参数:

免责声明:下面的代码可能不正确

dummy_ec2 = ec2.Instance(self, <InstanceName>, 
                                vpc=<Created_VPC>,
                                instance_type=ec2.InstanceType(<InstanceType>),
                                machine_image=ec2.AmazonLinuxImage(
                                        generation=ec2.AmazonLinuxGeneration.AMAZON_LINUX,
                                        edition=ec2.AmazonLinuxEdition.STANDARD,
                                        virtualization=ec2.AmazonLinuxVirt.HVM,
                                        storage=ec2.AmazonLinuxStorage.GENERAL_PURPOSE
                                ),
                                key_name="demo-key",
                                vpc_subnets=ec2.SubnetSelection(subnet_type=<subnet_type>),
                                role=self.my_role
                                )

任何帮助开发人员的方法如何?

2 个答案:

答案 0 :(得分:2)

此帖子use existing vpc and security group when adding an ec2 instance可能可以提供帮助。您的代码看起来像在正确的道路上。 AWS CDK中的某些资源定义涉及许多对象,并且可能导致冗长的代码。

答案 1 :(得分:1)

要创建构造,您只需创建一个继承自 aws_cdk.core.Construct 的类,示例如下:

class InstanceWithVPC(aws_cdk.core.Construct):
    def __init__(self, scope: aws_cdk.core.Construct, id: str, *, instanceType, subnet_type, role, key, **kwargs):
        super().__init__(scope, id)
        self.vpc = ec2.Vpc(...)
        self.instance = ec2.Instance(self, id, 
                                vpc=self.vpc,
                                instance_type=ec2.InstanceType(instanceType),
                                machine_image=ec2.AmazonLinuxImage(
                                        generation=ec2.AmazonLinuxGeneration.AMAZON_LINUX,
                                        edition=ec2.AmazonLinuxEdition.STANDARD,
                                        virtualization=ec2.AmazonLinuxVirt.HVM,
                                        storage=ec2.AmazonLinuxStorage.GENERAL_PURPOSE
                                ),
                                key_name=key,
                                vpc_subnets=ec2.SubnetSelection(subnet_type),
                                role=role
                                )

当然请记住,这只能在 Python 中使用,使用 Typescript 的好处是它也可以在其他语言中使用,从而提高可重用性。