VPCはL2で作成すると様々なリソースが自動作成されるため、あえてL1のCfnVPCで作成を試みたところ、セキュリティグループなどをL2で作成しようとすると、IVPC型(L2のVPC型)が必要だったため、作成できず。結局セキュリティグループなどもL1で作成するしかないのか?と思い調査しました。
結果以下の方法がありましたので、公開しておきます。Issueも出ており、そのうち正式な型変換が提供される可能性があるので、一時的な凌ぎとして活用すると良さそうです。
VPCを以下のようにL1で作成したとします。そうすると作成されたvpcはCfnVPC型となります。
const vpc = new ec2.CfnVPC(this, 'Vpc', {
cidrBlock: '10.0.0.0/16',
});
上記で作成した vpcを以下のようにインポートすることで、ivpcはIVPC型となるため事実上の型変換として利用できます。なお、これは上記vpcを作成するスタックと同一スタックで実行できます。
const ivpc = ec2.Vpc.fromVpcAttributes(this, 'ImportedVpc', {
vpcId: vpc.ref,
availabilityZones: ['ap-northeast-1a']
})
以降は、例えばセキュリティグループの場合以下のように、ivpcを参照して作成することができます。
const securityGroup = new ec2.SecurityGroup(this, 'MySecurityGroup', {
vpc: ivpc,
allowAllOutbound: true,
description: 'Allow SSH and HTTP',
});