有很多示例代码,但是快速改进的cdk包并不能帮助我找到一些(我认为)简单的事情的可行示例。例如,即使我在示例中找到的导入也会失败:
import { VpcNetworkRef } from '@aws-cdk/aws-ec2';
error TS2724: Module '"../node_modules/@aws-cdk/aws-ec2/lib"' has no exported member 'VpcNetworkRef'. Did you mean 'IVpcNetwork'?
为什么示例ec2代码未显示原始ec2实例的创建?
有用的示例cdk代码会有所帮助,该代码使用硬编码的VpcId和SecurityGroupId(我将它们作为上下文值传递)来创建一对新子网(即,每个可用区域1个),并在其中放置一对EC2实例的数量。
同样,实例的目标VPC和SecurityGroup已经存在。在添加新的EC2实例集时,我们只是(今天)创建了新的子网。
我们有许多不同的环境(aws基础架构集),这些环境当前共享一个帐户,VPC和安全组。这将改变,但是我当前的目标是查看是否可以使用cloud dev kit在此现有模型中创建新的独特环境。今天我们有一个CF模板。
我不知道从哪里开始。未引用现有VPC的示例。
import { VpcNetworkRef } from '@aws-cdk/aws-ec2';
const vpc = VpcNetworkRef.import(this, 'unused', {vpcId, availabilityZones: ['unused']});
同样,实例的目标VPC和SecurityGroup已经存在。在添加新的EC2实例集时,我们只是(今天)创建了新的子网。
-----编辑-------->
关于gitter的讨论帮助我回答了这个问题以及如何添加裸实例
const vpc - ec2.VpcNetwork.import(this, 'YOUR-VPC-NAME', {
vpcId: 'your-vpc-id',
availabilityZones: ['list', 'some', 'zones'],
publicSubnetIds: ['list', 'some', 'subnets'],
privateSubnetIds: ['list', 'some', 'more'],
});
const sg = ec2.SecurityGroup.import(this, 'YOUR-SG-NAME', {
securityGroupId: 'your-sg-id'
});
// can add subnets to existing..
const newSubnet = new ec2.VpcSubnet(this, "a name", {
availablityZone: "us-west-2b",
cidrBlock: "a.b.c.d/e",
vpcId: vpc.vpcId
});
// add bare instance
new ec2.CfnInstance(this, "instance name", {
imageId: "an ami",
securityGroupIds: [sg.securityGroupId],
subnetId: newSubnet.subnetId,
instanceType: "an instance type",
tags: [{ key: "key", value: "value"}]
});
不需要进一步的答案...对我来说。
答案 0 :(得分:0)
我也遇到了导入现有vpc /子网/安全组的问题。我相信自原始帖子以来,它已经发生了一些变化。从v1.18.0开始,以下是操作方法:
import cdk, { Construct, Stack, Subnet, StackProps } from '@aws-cdk/core';
import { SecurityGroup, SubnetType, Vpc } from "@aws-cdk/aws-ec2";
const stackProps: StackProps = {
env: {
region: 'your region',
account: 'your account'
},
};
export class MyStack extends Stack {
constructor(scope: Construct, id: string) {
super(scope, id, stackProps);
const vpc = Vpc.fromVpcAttributes(this, 'vpc', {
vpcId: 'your vpc id',
availabilityZones: ['your region'],
privateSubnetIds: ['your subnet id']
});
//Get subnets that already exists off your current vpc.
const subnets = vpc.selectSubnets({subnetType: SubnetType.PRIVATE});
//Create a subnet in the existing vpc
const newSubnet = new Subnet(this, 'subnet', {
availabilityZone: 'your zone',
cidrBlock: 'a.b.c.d/e',
vpcId: vpc.vpcId
});
//Get an existing security group.
const securityGroup = SecurityGroup.fromSecurityGroupId(this, 'securitygroup', 'your security group id');
}
}
答案 1 :(得分:0)
import ec2 = require('@aws-cdk/aws-ec2');
// looking up a VPC by its name
const vpc = ec2.Vpc.fromLookup(this, 'VPC', {
vpcName: 'VPC-Name'
});
// looking up an SG by its ID
const sg = ec2.SecurityGroup.fromSecurityGroupId(this, 'SG', 'SG-ID')
// creating the EC2 instance
const instance = new ec2.Instance(this, 'Instance', {
vpc: vpc,
securityGroup: sg,
instanceType: new ec2.InstanceType('m4.large'),
machineImage: new ec2.GenericLinuxImage({
'us-east-1': 'ami-abcdef' // <- add your ami-region mapping here
}),
});