⚠️ このエントリーは1年以上前に作成されたものです。情報の賞味期限切れにご注意ください。
このエントリーはコモン・クリエーション合同会社の提供でお送りします
ギョームの話だから一応クレジットを入れて免罪符にしておく
AWS CDK v2を使って、既存VPCのサブネットを取得する話。
ぶっちゃけるとデフォルトVPC。
- VPC
- Public Subnet
- ap-northeast-1a
- ap-northeast-1c
- ap-northeast-1d
- Isolated Subnet
- ap-northeast-1a
- ap-northeast-1c
- ap-northeast-1d
- Private Subnet with NAT
- ap-northeast-1a
- Public Subnet
のような構成で、Isolated Subnet
とPrivate Subnet with NAT
は手作業で作られた状態。
NATはNATゲートウェイではなく、NATインスタンスを使っていて、コストをケチっている。
ここで、以下のようなVPCモジュールがあるとする。
import { aws_ec2 } from "aws-cdk-lib";
import { Construct } from "constructs";
import { Options } from "../lib/option";
export interface VpcOptions extends Options {}
export class VPC {
public vpc: aws_ec2.IVpc;
public publicSubnets: aws_ec2.SelectedSubnets;
public privateSubnets: aws_ec2.SelectedSubnets;
constructor(scope: Construct, option: VpcOptions) {
this.vpc = aws_ec2.Vpc.fromLookup(scope, "VPC", { isDefault: true });
this.publicSubnets = this.vpc.selectSubnets({
subnetType: aws_ec2.SubnetType.PUBLIC,
});
this.privateSubnets = this.vpc.selectSubnets({
subnetType: aws_ec2.SubnetType.PRIVATE_WITH_EGRESS,
});
}
}
TypeScriptこれを使ってcdk deploy
をすると、
Error: There are no 'Private' subnet groups in this VPC. Available types: Isolated,Public
Plaintextのエラーで死ぬ。
CDKのソースを読んでみると、NATゲートウェイ云々は書かれているが、NATインスタンスでもOKとは明記されていない。
ただし、VPC作成でnatGatewayProvider
を指定すればNATインスタンスにできるので、この指定がダメとも考えづらい。cdk.context.json
を消せというissueの回答もあったが、特に変化なし。
あれこれして解決した方法としては、対象のサブネットのタグに
aws-cdk:subnet-type: Private
Plaintextを指定して、CDKを騙せばうまくいく。
なんかもにょる。
