一番簡単な CDK Deploy

# はじめに
最近AWS CDKを触り始めたのですが、デプロイまで簡単に行う例が見当たらなかったので、「IAMユーザを作るだけ」を例にして記事にしました。

# 用意する環境

Cloud9を使いましたので、PCはブラウザのみ。
言語はTypeScriptで行いました。

## 環境構築
Cloud9であれば中にすべて入っていましたので、何もインストールする必要ありませんでした。

- Cloud9作成
    - デフォルトVPC
    - デフォルトIAMロール
    - インスタンスタイプはメモリが2GB以上
    - Node.jsはインストール済み
    - AWS CDKもインストール済み
 

# やったこと

## CDKのバージョン確認
```
cdk --version
```

最新バージョンは以下を確認

https://github.com/aws/aws-cdk/releases


## CDKのアップデート
- 参考

https://www.bioerrorlog.work/entry/cdk-updates#Cloud9%E3%81%A7%E3%81%AECDK%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88%E6%96%B9%E6%B3%95

```
# Cloud9の場合
npm update -g cdk

# 一般的な場合
sudo npm update -g aws-cdk
```

## プロジェクト作成
今回は`testcreate-user`という名前のプロジェクトとします。
```
mkdir testcreate-user
cd testcreate-user
cdk init --language=typescript
```

以下のようなポップアップ出てきましたので、Yesで閉じます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/e0b4da58-27c1-29c8-d832-b70b8a889bef.png)


## Bootstrap
アカウントごと（かつリージョンごと？）に1回実行していればよく、すでに実施済みであれば不要。
```
cdk bootstrap
```

 
## 修正するファイル
- 以下のファイルがスタックを定義するファイルになります。
  - `lib/testcreate-user-stack.ts`

単純にユーザを作る場合です。
```diff:lib/testcreate-user-stack.ts
import { Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';
+import * as iam from 'aws-cdk-lib/aws-iam';

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

    // 第二引数はスタックの論理ID（末尾に乱数が自動付与される）
+    const user = new iam.User(this, 'Heroine',{userName:'Komichi-Akebi'});
  }
}
```

## TypeScriptのコンパイル
コードを修正したらコンパイルです。

### 都度実行する場合
- 都度、以下のコマンドを実行
```
npm run build
```

### 監視させ、自動で実行する場合
- 別ターミナルを開き以下を実行
```
cd testcreate-user
npm run watch
```
- ターミナルが実行中のままになるので、1回実行すればよい

## テンプレートに変換
```
cdk synth
```

## デプロイ
```
cdk deploy
```

プロジェクト名に関連した名前でCloudFormationのスタックが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/81e56528-e2b9-f6f1-da7e-4899dc47dd86.png)
ユーザも作られました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/48e4f270-50cd-24f1-5c69-732b14eb003a.png)

## 差分をみる
（例えば名前を変えて）差分を見る場合は以下の流れです。
```
cdk synth

# 自動でコンパイルするようにしていれば不要
npm run build

cdk diff
```
差分は以下のように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/369543de-b0dc-d512-37d4-dd7568267a1e.png)

## おまけ　Gitつかってみる
Cloud9上だと、GUIでGitが使えます。
左メニューのGitのアイコンをクリックすると、プロジェクトごとに差分が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/048a4405-25fc-8d15-9a5f-91056a78a9b5.png)
まずは`Commit - Commit All`で現時点のをすべてコミットしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/7b2670c0-9832-95d5-edee-ce0d955df29b.png)
ポップアップはYesで。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/176dd83d-8823-3dfd-96f2-61f2cde5648b.png)
コミットのメッセージを入力する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/2ec599fe-68a1-bfef-3df5-3d0bc5d9b9a6.png)
差分がなくなりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/3856a9f0-a433-26ab-9137-841f0b3371a8.png)
コードを修正しユーザ名を変えてみると、差分が検知され、左右で比較することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/da2dda30-79dd-519f-5063-334d170d90aa.png)
戻るのようなアイコンをクリックすれば、元のバージョンまで戻すことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/5f962355-a2a4-0f4d-a8ea-1f7b78f1657d.png)
Pushなどは試してませんが、個人で少し使う程度であればローカルだけで十分かと思います。

## 削除
プロジェクトを削除するのは以下のコマンドです。
```
cdk destroy
```
- 削除されるもの
    - プロジェクトのスタック
- 削除されないもの
    - Cloud9内のプロジェクトのフォルダ
    - Bootstrapで作成されたリソース

# おわりに
新しいプログラミング言語に触る際の"Hello World"を表示させる例のように、AWS CDKの簡単なデプロイ例をまとめました。
初めてAWS CDKを触る方は参考にしてください。

# 参考：AWS CDK v2のリファレンス
ユーザ以外を作成する際によく使うリファレンスは以下のページになります。少し前まで検索してもv1のページが上位に出てきてしまっていたので。。。

https://docs.aws.amazon.com/cdk/api/v2/