0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CDKで冗長構成のVPC作成

Posted at

はじめに

CDKの応用として以前作成したパラメータからコードを書いてVPCを作成してみました。

作成するリソース

VPC

  • 今回はVPCのみです
    名称未設定ファイル.drawio(3).png

コードの概要

目的: 高可用性構成のVPCを作成し、パブリックおよびプライベートサブネットを設定
テンプレート概要:

  • 1つのVPC
  • 2つのパブリックサブネット
  • 2つのプライベートサブネット
  • インターネットゲートウェイとそれに紐づくルートテーブル

パラメータ

  • VPC
項目
名前 test-vpc
CIDRブロック 10.0.0.0/16
DNSサポート 有効
DNSホスト名 有効
  • サブネット
サブネット名 CIDRブロック 可用性ゾーン パブリックIP 備考
PublicSubnet1 10.0.0.0/24 AZ1 自動割り当て パブリック通信が可能
PublicSubnet2 10.0.1.0/24 AZ2 自動割り当て パブリック通信が可能
PrivateSubnet1 10.0.10.0/24 AZ1 無効 プライベート通信
PrivateSubnet2 10.0.11.0/24 AZ2 無効 プライベート通信
  • インターネットゲートウェイ
項目
名前 test-igw
接続VPC test-vpc
  • ルートテーブル
項目
名前 test-public-crt
ルート デフォルトルート (0.0.0.0/0) をインターネットゲートウェイに設定
サブネットの関連付け PublicSubnet1, PublicSubnet2
作成するVPCのパラメータは以下のものを参照しながら作成しました。

作成したコード

import { Duration, Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import { CfnOutput } from 'aws-cdk-lib';
import { IpAddresses } from 'aws-cdk-lib/aws-ec2';

export class TestCdkStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);
    
    const vpc = new ec2.Vpc(this, 'test-vpc', {
      maxAzs: 2,
      ipAddresses: ec2.IpAddresses.cidr('10.0.0.0/16'),
      subnetConfiguration: [],
    });

    const publicSubnet1 = new ec2.Subnet(this, 'MyPublicSubnet1', {
      vpcId: vpc.vpcId,
      cidrBlock: '10.0.0.0/24',
      availabilityZone: 'ap-northeast-1a',
      mapPublicIpOnLaunch: true,
    });
  
    const publicSubnet2 = new ec2.Subnet(this, 'MyPublicSubnet2', {
      vpcId: vpc.vpcId,
      cidrBlock: '10.0.1.0/24',
      mapPublicIpOnLaunch: true,
      availabilityZone: 'ap-northeast-1c',
    });
    const privateSubnet1 = new ec2.Subnet(this, 'MyPrivateSubnet1' , {
      vpcId: vpc.vpcId,
      cidrBlock: '10.0.10.0/24',
      availabilityZone: 'ap-northeast-1a',
      mapPublicIpOnLaunch: false,
    });

    const privateSubnet2 = new ec2.Subnet(this, 'MyPrivateSubnet2', {
      vpcId: vpc.vpcId,
      cidrBlock: '10.0.11.0/24',
      availabilityZone: 'ap-northeast-1c',
      mapPublicIpOnLaunch: false,
    }); 
  
    const igw = new ec2.CfnInternetGateway(this, 'DefaultInternetGateway');
    
    new ec2.CfnVPCGatewayAttachment(this, 'MyVPCGatewayAttachment', {
      vpcId: vpc.vpcId,
      internetGatewayId: igw.ref,
    });
  
    const routeTable = new ec2.CfnRouteTable(this, 'MyRouteTable', {
      vpcId: vpc.vpcId,
    });

    new ec2.CfnRoute(this, 'MyRoute', {
      routeTableId: routeTable.ref,
      gatewayId: igw.ref,
      destinationCidrBlock: '0.0.0.0/0',
    });

    [publicSubnet1, publicSubnet2].forEach((subnet, index) => {
      new ec2.CfnSubnetRouteTableAssociation(this, `MySubnetRouteTableAssociation${index}`, {
        subnetId: subnet.subnetId,
        routeTableId: routeTable.ref,
      });
    });
  }
}
  • CDKはデフォルトでサブネットを作成する。上で挙げたパラメータのサブネットのCidrと重複してしまいます。
  • 自分でCidrを割り当てるため以下のコードを追加
subnetConfiguration: [], //サブネットの自動作成を無効化

リソース確認

スクリーンショット 2024-12-31 075620.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?