AWS CDK入門ガイドやってみた

SIEM on Amazon OpenSearch ServiceとかでCDKに触ることはあったのですが、 雰囲気で使っていたので入門ガイドやってみることにします。

aws.amazon.com

環境

  • macOS Monterey Ver 12.3.1

環境構築

AWS CLIのインストール

AWS CLIを環境に合わせてインストールしておきます。 自分の場合はbrew installで入れました。

$ brew install awscli

docs.aws.amazon.com

$ aws --version
$ aws-cli/2.7.0 Python/3.9.12 Darwin/21.4.0 source/x86_64 prompt/off

インストールできたら、アクセスキーID/シークレットアクセスキーを設定します。

$ aws configure
AWS Access Key ID [None]:****************
AWS Secret Access Key [None]:****************
Default region name [ap-northeast-1]:
Default output format [json]:

docs.aws.amazon.com

Node.jsのインストール

AWS CDKの動作にはNode.jsが必要です。

複数バージョンを管理するためにnodebrewを入れておくと良いかと思います。 良かったら前回のブログ記事も参考にしてみてください。

shinsys24.hatenablog.com

$ node --version
v16.15.0

$ npm --version
8.5.5

AWS CDK CLIのインストール

npmAWS CDK CLIをインストールします。

sudo npm install -g aws-cdk

AWSアカウントのブートストラップ

CDKのデプロイに必要なリソースをAmazon S3上に用意します。

いわゆるAWS CDKを使うためのおまじないで、 同一AWSアカウント同一リージョンであれば一度だけ実行すればOKです。

$ cdk bootstrap aws://123456789012/ap-northeast-1

CDKを試してみる

2つのアベイラビリティゾーンを持つVPCをCDKで作成します。

作業用のディレクトリを作っておきます。

$ mkdir cdk-demo
$ cd cdk-demo

CDKでTypeScriptを使うように初期化します。

$ cdk init --language typescript

cdk-demo/bin.cdk-demo.tsを編集し、デプロイ先となるAWSアカウントIDとリージョンを追記します。

#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from '@aws-cdk/core';
import { CdkDemoStack } from '../lib/cdk-demo-stack';

const app = new cdk.App();
new CdkDemoStack(app, 'CdkDemoStack', {
  env: { account: '123456789012', region: 'ap-northeast-1' },

});

VPCやサブネットを作成するには専用のクラスが必要になります。

EC2モジュールをインストールします。

$ npm install -g @aws-cdk/aws-ec2

package.jsonに追加したEC2モジュールの情報が自動で追記されます。

  "dependencies": {
    "@aws-cdk/aws-ec2": "^1.155.0",
    "aws-cdk-lib": "2.23.0",
    "constructs": "^10.0.0",
    "source-map-support": "^0.5.21"
  }

cdk-demo/lib/cdk-demo-stack.tsを編集します。

EC2モジュールからVpcクラスとSubnetTypeクラスをインポートし、 2つのAZを指定したVPCを用意します。

import * as cdk from '@aws-cdk/core';
import { Construct } from 'constructs';

import { Vpc, SubnetType } from '@aws-cdk/aws-ec2';

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

    const vpc = new Vpc(this, 'MainVpc', {
      maxAzs: 2,

      subnetConfiguration: [
        {
          cidrMask: 24,
          name: 'public-subnet',
          subnetType: SubnetType.PUBLIC
        },
      ]
    });
  }
}

CDKのデプロイ

ここまでできたらAWSアカウントにデプロイします。

デプロイするとCloudFormationがのスタックが定義されリソースが作成されます。

$ cdk deploy

CdkDemoStack/MainVPCという名前でVPCが作成されています。

パブリックサブネットが2つ作られていることが確認できました。

クリーンアップ

作成したリソースは次のコマンドで一括で削除できます。

$ cdk destroy

まとめ

AWS CDKの環境構築からVPCのリソース作成まで一通りやってみました。

CloudFormationよりも記述量が少なく、コード補完も効くので書きやすくて便利だなと思いました。

もう少し詳しく知るためにBlackBeltの資料を見たり、 AWS CDK intro Workshopも見つけたのでまたやってみたいと思います。

  • AWS CDK Intro Workshop

catalog.us-east-1.prod.workshops.aws