AWS CDK v2でNATインスタンスがあるのにIsolatedサブネットとして認識された話

AWS
この記事は約3分で読めます。

⚠️ このエントリーは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

のような構成で、Isolated SubnetPrivate 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を騙せばうまくいく。
なんかもにょる。

タイトルとURLをコピーしました