🌊

初心者がAWS CDKを触ってみた【VPC編】

2024/06/30に公開

はじめに

勉強のためAWS CDKを使ってVPC周りのリソースを作成してみました。
L2コンストラクタを使うとリソース名が制御できない(多分)のでL1と一緒に混ぜて使います。

先に結論

L1を使うと記述が増える分細かい制御が可能になるのでより業務に使いやすくなると思いました。
※増えると言ってもCloudFormationよりは短く記述できます。

環境

  • Mac
  • Vscode
  • AmazonQ (TypeScript初心者のためGithubCopilotのように使ってます)

完成予想図

コード

lib/vpc-stack.ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as ec2 from 'aws-cdk-lib/aws-ec2';

export class VpcStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    //VPC
    //「subnetConfiguration」を空にすることで余計なリソースを作成しない
    const vpc = new cdk.aws_ec2.Vpc(this, 'VPC', {
      vpcName: 'CDK-VPC',
      ipAddresses: ec2.IpAddresses.cidr('10.10.0.0/16'),
      subnetConfiguration: []
    });

    //IGW
    const igw = new ec2.CfnInternetGateway(this, 'IGW', {
      tags: [{key: 'Name',value: 'CDK-IGW'}]
    });

    //Attach IGW
    const attachGateway = new ec2.CfnVPCGatewayAttachment(this, 'VPCAttachment', {
      vpcId: vpc.vpcId,
      internetGatewayId: igw.ref
    });

    //Public Subnet
    const public_subnet = new ec2.CfnSubnet(this, 'SubnetPublic', {
      vpcId: vpc.vpcId,
      cidrBlock: '10.10.10.0/24',
      tags: [{key: 'Name',value: 'CDK-Public'}]
    });

    //Public RouteTable
    const public_table = new ec2.CfnRouteTable(this, 'PublicRouteTable', {
      vpcId: vpc.vpcId,
      tags: [{key: 'Name',value: 'CDK-Public-Table'}]
    });

    //IGW Rote
    const igw_route = new ec2.CfnRoute(this, 'PublicRoute', {
      routeTableId: public_table.ref,
      destinationCidrBlock: '0.0.0.0/0',
      gatewayId: igw.ref
    });

    //Public Route Association
    const public_assoc = new ec2.CfnSubnetRouteTableAssociation(this, 'PublicAssoc', {
      subnetId: public_subnet.ref,
      routeTableId: public_table.ref
    });
  }
}

参考

https://catalog.workshops.aws/typescript-and-cdk-for-beginner/ja-JP/20-typescript-basic
https://blog.future.ad.jp/aws-cdk-v2-でvpcを自分好みに-そのに

おわりに

CDKの方が定義のバリエーションが多いので学習コストが高い分使えるようになれば
色々便利なのかなと思いました。次はEC2等も作ってみようと思います。

GitHubで編集を提案

Discussion