ローカルのWindowsPCにCDK環境を作成してみた

2022.10.03

CDKを使うときはCloud9を起動していたのですが料金も発生しますし、わざわざ起動するのも面倒になってきたのでローカルPCに環境を作成しました。

CDKを使う際の前提条件の準備

以下のドキュメントに記載されている通り「AWSの認証情報(アクセスキーなど)」と「Node.js 10.13」が必要になります。

Node.jsインストール

Node.jsは以下のところからインストーラをダウンロードします。
私がダウンロードしたときは「16.17.1」が推奨版になっていました。


インストーラをダウンロードしたらインストーラを実行してNode.jsをインストールします。
インストーラを実行すると以下の画面が出てくるのでライセンスの利用規約に同意やインストール先フォルダを選択しながら先に進んでいきます。
私はすべてデフォルトのままインストールしました。







インストールが完了したらPowerShellを起動して以下のコマンドを実行します。
インストールしたNode.jsのバージョンが表示されればインストール完了です。

node --version

アクセスキーとシークレットアクセスの設定

アクセスキーとシークレットアクセスの設定はAWS CLIを利用するので以下のブログを参考にインストールしてください。

アクセスキーとシークレットアクセスキーを設定していきます。
マネジメントコンソールからIAMダッシュボードに移動します。
移動したら左の項目から「ユーザーグループ」をクリックして「グループを作成」をクリックします。


画面が遷移したら「ユーザーグループ名」の入力と「許可ポリシー」の選択をします。
IAMユーザはこの後の手順で作成して追加するのでここでは選択しないでもよいです。
今回は以下の設定値にしました。

  • ユーザーグループ名:CDK_Admin_Group
  • 許可ポリシー:AdministratorAccess

AdministratorAccessは権限が非常に強いため取り扱いには注意してください。
IAMグループが作成できたら、IAMユーザを作成します。
IAMダッシュボードの左の項目から「ユーザー」をクリックして「ユーザーを追加」をクリックします。


以下の画面に遷移したら「ユーザー名」と「AWS認証情報タイプ」を選択します。
「ユーザー名」はわかりやすい名前にしました。
「AWS認証情報タイプ」はマネジメントコンソールへのアクセスは不要なので「アクセスキー - プログラムによるアクセス」だけにチェックを入れてます。

次の画面ではIAMユーザーが所属するIAMグループ(上記手順で作成したグループ)を選択します。

次の画面のタグの設定は何も設定しないで次の画面に進みます。
設定確認画面で問題が無ければ作成します。

ユーザーを作成するとアクセスキーとシークレットアクセスキーが記載されているCSVファイルをダウンロードできるのでダウンロードしておきます。
ダウンロードしたらPowerShellを実行して以下のコマンドを実行します。

aws configure

コマンドを実行すると以下の質問が聞かれるので入力していきます。

AWS Access Key ID [None]: アクセスキーを入力する
AWS Secret Access Key [None]: シークレットアクセスキーを入力する
Default region name [None]: デフォルトリージョンを入力する
Default output format [None]: 出力フォーマットを入力する

CDKコマンドをインストール

上記の手順まで完了したら以下のコマンドでCDKコマンドをインストールします。

npm install -g aws-cdk

インストール確認として以下のコマンドでCDKのバージョンを確認します。
私がインストールしたときは2.44.0がインストールされました。

cdk --version

CDKを使ってみる

私はPythonでCDKを使うので以下のドキュメントの通り進めていきます。

以下のコマンドを実行してvirtualenvをインストールします。

python -m ensurepip --upgrade
python -m pip install --upgrade pip
python -m pip install --upgrade virtualenv

以下のコマンドでCDKプロジェクトを作成します。
最終行を実行するとaws-cdk-libがインストールされます。

mkdir test
cd test
cdk init app --language python
python -m venv .venv
.\source.bat .venv/bin/activate
python -m pip install -r requirements.txt

ここまで実行すると環境作成は完了です。
実際にCDKでS3バケットを作ってみます。
testフォルダにあるtest_stack.pyを編集します。
デフォルトだと以下のSQSを作成するサンプルコードが書いてありました。

from aws_cdk import (
    # Duration,
    Stack,
    # aws_sqs as sqs,
)
from constructs import Construct

class TestStack(Stack):

    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        # The code that defines your stack goes here

        # example resource
        # queue = sqs.Queue(
        #     self, "TestQueue",
        #     visibility_timeout=Duration.seconds(300),
        # )

上記のコードを以下のように編集します。

from aws_cdk import (
    Stack,
    aws_s3 as s3,
    RemovalPolicy
)
from constructs import Construct

Bucket_Name = "バケット名を入力する"

class TestStack(Stack):

    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        # The code that defines your stack goes here
        bucket = s3.Bucket(self, "S3",
            auto_delete_objects=True,
            block_public_access=s3.BlockPublicAccess.BLOCK_ALL,
            bucket_name=Bucket_Name,
            encryption=s3.BucketEncryption.S3_MANAGED,
            removal_policy=RemovalPolicy.DESTROY
        )

上記のコードはSSE-S3を使用した暗号化のバケットが作成されます。
また「auto_delete_objects=True」でスタック削除時にS3の中身を空にしてくれるLambdaがデプロイされます。

コードを書き換えたら以下のコマンドを実行します。
cdk bootstrapはCDKを初めて使用する環境の場合に実行するとコードを保存するS3、デプロイに必要なIAMポリシーが作成されます。
cdk deployでスタックをデプロイします。

cdk bootstrap aws://アカウントID/リージョンコード
cdk deploy

成功するとBucket_Nameで設定した名前のS3バケットが1つ作成されます。
スタックの削除は以下のコマンドを実行します。

cdk destroy スタック名

さいごに

CloudFormationに慣れているとCDKでデプロイした際に作成したいリソース以外も作られていることがあるのでビックリすることがあります。
そのリソースだけを作りたいというときは接頭辞にCfnがついているL1コンストラクトを使うとCloudFormationのように作成することができます。