Git BashからAWS CDKしてみる

# やりたいこと
Windows環境からGit Bash使ってAWS CDK触ってみたい！

# 背景
世の中にはWSLを使ったAWS CDKインストール手順はあふれていますが
なかなか Git Bashを使った方法はなさそうでした。

Linuxベースのコマンドを使うという意味ではWSLもGit Bashも一緒ですが
Git Bashのほうが直感的に「今C:\Users\xxx フォルダ配下を触ってる～」感があって好きなんですよね。
WSLだと仮想的にUbuntu等を立ち上げてる感覚なので、「今はどっちのOS？」「ファイルどこ？」になりやすいというか。

案外、Git Bash経由のAWS CDKインストール記事ってないかなと思ったので作成してみました。

# 1. Git Bash インストール
Windows版 Git Bashはここからダウンロードできます。　https://gitforwindows.org/

以降のコマンドはGit Bashのプロンプト上で実施します。

# 2. AWS CLI インストール
Windows版 AWS CLIはここからダウンロードできます。　https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

aws configureコマンドで対象のAWSアカウントと紐づけておきましょう。

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

# 3. Node.jsインストール
今回 AWS CDKの言語は標準でも採用されているTypeScriptを使用します。
TypeScriptを使用するということは、、Node.jsのインストールが必要ですね。
(このあたりうまく言語化できていないので、後ほど腹落ちしてから記載追加するかもしれません。)

Windows版 Node.jsはここからダウンロードできます。　https://nodejs.org/en/download

node --versionコマンドでバージョンが表示されればおk。
```
$ node --version
v20.12.2
```

# 4. AWS CDK インストール
次はAWS CDKインストールです。
npmコマンドとはNode.jsのパッケージコマンドで、ライブラリインストール等を行うコマンドとなります。
```
$ npm install -g aws-cdk

added 1 package in 2s
npm notice
npm notice New minor version of npm available! 10.5.0 -> 10.7.0
npm notice Changelog: <https://github.com/npm/cli/releases/tag/v10.7.0>
npm notice Run `npm install -g npm@10.7.0` to update!
npm notice
```

cdk --versionコマンドでバージョンが表示されればおk。
```
$ cdk --version
2.140.0 (build 46168aa)
```

# 5. AWS CDK でS3バケットを作成してみる
あとはよくあるCDKセットアップ～デプロイの流れで行けそうです。

参考
[AWS Black Belt Online Seminar / AWS Cloud Development Kit (CDK)](https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_AWS-CDK-Basic-1-Overview_0731_v1.pdf)
P33 のコマンドをそのまま実行します。

```
# ディレクトリの作成
$ mkdir cdk-sample
$ cd cdk-sample

# CDKプロジェクトを作成
$ npx aws-cdk init app --language=typescript
　・・・・・・
　Executing npm install...
　✅ All done!

# CDK Bootstrapping
$ npx aws-cdk bootstrap
　・・・・・・
　✅  Environment aws://339712720800/ap-northeast-1 bootstrapped (no changes).
```

あとはC:\Users\xxx\cdk-sample\lib配下にあるcdk-sample-stack.jsにS3バケット情報などを追記して、、

```cdk-sample-stack.js
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
// import * as sqs from 'aws-cdk-lib/aws-sqs';
import * as s3 from 'aws-cdk-lib/aws-s3';

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

    // The code that defines your stack goes here
    const bucket = new s3.Bucket(this, 'CreateBucket', {
      bucketName: "akiau6bucket",
      versioned: true
    });
    // example resource
    // const queue = new sqs.Queue(this, 'CdkSampleQueue', {
    //   visibilityTimeout: cdk.Duration.seconds(300)
    // });
  }
}
```

cdk diffコマンドで環境との差分を確認して、、

```
$ cdk diff CdkSampleStack
　・・・・・
　Resources
　[+] AWS::S3::Bucket CreateBucket CreateBucketEFE7EF15
```

デプロイします。

```
$ cdk deploy CdkSampleStack
　・・・・
　✅  CdkSampleStack
　✨  Deployment time: 37.75s
```

マネジメントコンソールからも確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784328/cba077fb-fbe3-f05a-ba98-ff3961e2adce.png)

# まとめ
最後まで実際にやってみて、おそらくGit Bash使わなくても、PowershellやコマンドプロンプトでもAWS CDK使えるのでは？と思いました。
ただ、AWS公式もUnixコマンドメインで載せていたりもするので、Git Bashを使う価値はあるかなと考えます。

Terraformばっかりやってきましたが、AWS CDK屋としても一歩を踏み出しました。