最近我一直在使用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
)
任何帮助开发人员的方法如何?
答案 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 的好处是它也可以在其他语言中使用,从而提高可重用性。