AWS関連

【AWS】はじめてのAWS CDK

はじめに

今回は、本日(2022/02/26) に開催される[特別編 AWS CDK v2 ハンズオン] に参加するにあたって、「CDK 一切触ったこと無い」を抜け出すべく、予習した内容を雑にまとめます。

主に参考にしたページはAWS公式の入門ガイド(下記)。
CDKの要件からインストール方法、最初のプロジェクト作成手順まで丁寧に記載されておりとてもわかりやすい。

なお、上記入門ガイドで紹介されているプロジェクト作成の概要は以下の通り。

    (作成するプロジェクトの概要)

  • TypeScript を使用して新しい CDK プロジェクトを作成
  • CDK で簡単なリソース(VPC, Subnet) を作成
  • CDK コードを CloudFormation テンプレートに合成
  • インフラストラクチャを AWS アカウントにデプロイ

インストール

AWS CDK CLI のインストール

# インストール
npm install -g aws-cdk

# 確認
cdk --version

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

CloudFormation のスタックを生成するときの一時的なファイル置き場として S3 バケットを指定する。

例)Lambda 関数をデプロイするときにZIPパッケージを格納する等。

なお、このS3バケットへのアップロード処理自体はCDK が自動でやってくれるが、バケットの準備については事前の手動作成が必要となる模様。

# Get the account ID
aws sts get-caller-identity

# Bootstrap the account
cdk bootstrap aws://ACCOUNT-NUMBER/REGION

ブートストラップコマンドの例↓

cdk bootstrap aws://123456789012/us-east-1

# Output
⏳  Bootstrapping environment aws://123456789012/us-east-1...
CDKToolkit: creating CloudFormation changeset...

✅  Environment aws://328159166015/us-west-2 bootstrapped.

最初のCDKプロジェクトの作成

CDKプロジェクトの作成

フォルダ構造が作成され、TypeScript CDK プロジェクトに必要なモジュールのいくつかがインストールされます

mkdir cdk-demo
cd cdk-demo
cdk init --language typescript

init コマンドによって作成されるファイル群

├── bin
│   └── cdk-demo.ts
├── cdk.json
├── jest.config.js
├── lib
│   └── cdk-demo-stack.ts
├── package.json
├── package-lock.json
├── README.md
├── test
│   └── cdk-demo.test.ts
└── tsconfig.json

アプリケーション内での明示的な定義を加える(オプション)

`bin/cdk-demo.ts` スタックに対して、明示的にアカウントIDとリージョンを記載する

VPCのコードを作成(追記)する

VPCを利用するためのモジュールをインストールする

# モジュールのインストール
npm install @aws-cdk/aws-ec2

`lib/cdk-demo.ts` にVPC やSubnet の定義を追記していく
(例↓)VPC と2つの AZ にまたがるパブリックサブネットを作成するコード

import * as cdk from '@aws-cdk/core';
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);

    // The code that defines your stack goes here
    // CHANGE: We have created the vpc object from the Vpc class.
    const vpc = new Vpc(this, 'MainVpc',{
    
    // CHANGE: this is where we define how many AZs to use
    maxAzs: 2,
      
   // CHANGE: We define a single subnet configuration per AZ.
      subnetConfiguration:  [
        {
          // CHANGE: this is it's CIDR mask so 255.255.255.0
          cidrMask: 24,

          // CHANGE: a name for each of these subnets
          name: 'public-subnet',

          // CHANGE: and the subnet type to be used - here we will have
          // a public subnet. There are other options available here.
          subnetType: SubnetType.PUBLIC
        },
      ]
    });
  }
}

デプロイ

# デプロイを実行する
cdk deploy

→数分後、新しく作成した CloudFormation スタックの ARN (Amazon リソース名) とともに緑色のチェックマークが表示されます。(デプロイ完了)

後片付け(リソースの削除)

# CDKで作成したリソースを削除する
cdk destroy

CDK コマンド早見表

最後に、早見表的なものを見つけたので記載しておきます。

– cdk init –language :初期化
– cdk bootstrap :最初に一回だけ実行するおまじない
– cdk ls :Stack のリストを表示する
– cdk diff :デプロイ済の Stack との差異を表示する
– cdk synth :生成された Cfn テンプレートを出力する
– cdk deploy :Stack を AWS 環境へデプロイする
– cdk destroy :Stack を破棄する

以上です。

最後まで読んでいただきありがとうございました。