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?

AWS CDKで学ぶJavaScript / TypeScriptの「new」とは?

0
Posted at

初めに

CDK開発を行い、Stack上にリソースを定義する際、以下のように new を使用するケースがあります。

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

    new ec2.Vpc(this, 'Vpc', {
      maxAzs: 2,
      natGateways: 0,
      subnetConfiguration: [
        {
          name: 'Public',
          subnetType: ec2.SubnetType.PUBLIC,
          cidrMask: 24,
        },
        {
          name: 'Isolated',
          subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
          cidrMask: 24,
        },
      ],
    });
  }
}

この new は、いったい何をしているのでしょうか?

この記事では、new の役割と、なぜCDKで new を使うのかについて、JavaScript / TypeScriptの基本から簡単に見ていきたいと思います。

■ 結論

TypeScriptの new は、クラスから新しいオブジェクト(インスタンス)を生成するための構文です。
CDKでは、以下のように new を使ってConstructを生成し、Stackの中にAWSリソースを定義します。

new ec2.Vpc(...)

■ 仕組み

クラスとは?

JavaScriptとTypeScriptでは、class 構文を使ってクラスを定義できます。

クラスは、オブジェクトを作成するための設計図のようなものです。

例えば、以下のようなクラスを作ることができます。

class User {
  name: string;

  constructor(name: string) {
    this.name = name;
  }
}

この User クラスを使って、

const user = new User('田中');

とすると、User クラスから新しいオブジェクト(インスタンス)が生成されます。

Userクラス
  ↓
【設計図】
  ↓
new User('田中')
  ↓
Userのインスタンス

CDKではどうなっているのか?

AWS CDKでは、AWSリソースを定義するためのConstructがあらかじめ用意されています。

例えば、VPCを作成するためのConstructとして ec2.Vpc があります。

new ec2.Vpc(...)

とすることで、Vpc Constructのインスタンスを生成し、Stackの中にVPCを定義できます。

つまり、

CDKが用意しているConstruct
        ↓
     ec2.Vpc
        ↓
new ec2.Vpc(...)
        ↓
Vpc Constructのインスタンスを生成
        ↓
StackにVPCを定義

という流れになります。

なぜCDKではnewを使うのか?

CDKでは、AWSリソースをConstructとして表現しています。

そのため、Constructのクラスからインスタンスを生成するために new を使用します。

例えば、

new ec2.Vpc(...)

でVPCを、

new ec2.Instance(...)

でEC2インスタンスを、

new s3.Bucket(...)

でS3バケットを定義できます。

このように、CDKが用意しているConstructを利用することで、CloudFormationの詳細な設定をすべて自分で記述しなくても、TypeScriptを使ってAWSリソースを定義できます。

注意

Constructを使用するためには、対応するCDKライブラリを import する必要があります。

例えばEC2のConstructを使用する場合は、以下のように記述します。

import * as ec2 from 'aws-cdk-lib/aws-ec2';

これによって、EC2用のConstructを ec2 という名前で使用できるようになります。

例えば、

new ec2.Vpc(...)

や、

new ec2.Instance(...)

のように記述できます。

つまり、

import
  ↓
EC2用のCDKライブラリを読み込む
  ↓
ec2.VpcなどのConstructが使用可能になる
  ↓
new ec2.Vpc(...)
  ↓
Constructのインスタンスを生成
  ↓
StackにAWSリソースを定義

という流れになります。

まとめ

今回の内容をまとめると、以下のようになります。

  • class はオブジェクトを作成するための設計図
  • new はクラスから新しいオブジェクト(インスタンス)を生成する
  • CDKではAWSリソースをConstructとして扱う
  • new ec2.Vpc(...) のように new を使ってConstructのインスタンスを生成する
  • 使用するConstructに対応したCDKライブラリは import しておく必要がある

つまり、CDKの

new ec2.Vpc(...)

は、

「CDKが用意しているVPC用のConstruct(クラス)からインスタンスを生成し、そのVPCをStackに定義する」

という処理を行っています。

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?