AWS CDKの環境構築(EC2)

1. はじめに

皆様こんにちは。kitayaと申します。
今回はEC2上でAWS CDKの環境構築をしていきます。
以前のAWS CDK構築の投稿ではcloud9を使用していましたが、2024/7/25で新規利用終了となりましたのでEC2上でしてみようと思いました。
ローカル上での環境構築とほぼ差はないのでご参考になれば幸いです。

2. 環境構築手順

2-1. EC2インスタンスを起動する

EC2インスタンスの詳細な起動方法は下記参照をお願いします。
【初心者向け】Amazon EC2インスタンスを立ち上げてみよう

私は下記の設定で起動しました。
今回はSSHで接続するためセキュリティグループで許可設定をしています。
必要に応じて各項目変更していただくとよいと思います。

項目 設定値
AMI、OS Amazon Linux2023
インスタンスタイプ t2.micro
キーペア 作成したものを指定
セキュリティグループ SSHを許可設定したものを指定
パブリックIPの自動割り当て 有効化

2-2. 起動したEC2にSSH接続する

今回はコマンドプロンプトからEC2にSSH接続していきます。
接続のコマンドをマネジメントコンソールから確認後、接続をおこないます。

1. マネジメントコンソールから作成したEC2の概要ページを開きます。その後、"接続"をクリックします。

2. SSHクライアントのタブを開き、赤枠部のコマンドをコピーします。

file

3. コマンドプロンプトを起動し、コピーしたコマンドを実行します。その際、キーペア名の部分は現在のファイルパスに変更してください。

file

4. SSHで初めてEC2インスタンスに接続しようとした際にセキュリティ警告が表示されます。"yes"を入力します。

file

5. 接続できました。

file

2-3. 各種インストール&セットアップ

接続したEC2にCDKを使用する上で必要なもののインストール&セットアップを行います。

1. Node.jsを下記コマンドでインストールします。

sudo dnf install -y nodejs

2. AWS CLIを下記コマンドでインストールします。Amazon Linux2023ではすでにインストール済みのため不要です。

sudo dnf install -y aws-cli

3. AWS CLIの設定を下記コマンドで行います。

aws configure

設定項目は下記

項目 設定値
AWS Access Key ID 自分のIAMユーザーのセキュリティ承認情報から確認。ない場合は新規作成してください。
AWS Secret Access Key Access Keyを作成したときのみに確認可能です。忘れた場合はAccess Keyを新規作成してください。
Default region name リソースを作成したいリージョンを指定
Default output format jsonを指定(デフォルト)

file

4. Pythonを下記コマンドでインストールします。Amazon Linux2023ではすでにインストール済みのため不要です。

sudo dnf install -y python3

5. AWS CDKを下記コマンドでインストールします。

sudo npm install -g aws-cdk

6. AWS CDKの作業ディレクトリを作成して、AWS CDKプロジェクトを初期設定します。

# 作業ディレクトリの作成(任意のディレクトリ名を入力してください)
mkdir cdk-app

# 作業ディレクトリへ移動
cd cdk-app

# CDKアプリケーションを初期化
cdk init app --language python

7. Python仮想環境をアクティブ化し、必要なモジュールをインストールします。

# 仮想環境をアクティブ化
source .venv/bin/activate

# モジュールのインストール
pip install -r requirements.txt

8. 環境構築は完了しました。ディレクトリの構造は以下のようになっています

(.venv) [ec2-user@ip-10-0-14-110 cdk-app]$ tree
.
├── README.md
├── app.py
├── cdk.json
├── cdk_app
│   ├── __init__.py
│   └── cdk_app_stack.py
├── requirements-dev.txt
├── requirements.txt
├── source.bat
└── tests
    ├── __init__.py
    └── unit
        ├── __init__.py
        └── test_cdk_app_stack.py

主にデプロイの際に書き換えるファイルは下記です。

ファイル名 説明
cdk_app_stack.py 作成するAWSリソースを定義するためのスタックを記述します。
app.py CDKアプリケーションのエントリーポイントです。このファイルでCDKスタックを定義し、アプリケーションを作成します。
※複数スタック存在する場合はこちらで依存関係を設定します

3. デプロイ

環境構築が正しくできているか実際にデプロイして確認してみます。
cdk_app_stack.pyの記述を変更してS3バケットを作成してみようと思います。
app.pyはデフォルトの設定で問題ないため、今回は変更不要です。
※デフォルト=cdk_app_stack.pyのCdkAppStackをインポートする設定

3-1.cdk_app_stack.pyの記述を変更

"cdk-test-bucket-20240816"というS3バケットを作成してみます。下記コードに変更してください。

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

class CdkAppStack(Stack):

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

        s3bucket = s3.Bucket(
            self,
            "cdk-test-bucket-20240816",
            bucket_name = "cdk-test-bucket-20240816",
            removal_policy=RemovalPolicy.DESTROY
        )

3-2.cdk bootstrapの実行

指定のリージョンでAWS CDKでのデプロイが初めての場合、下記コマンドを実行します。

cdk bootstrap

cdk bootstrap の役割

  • CDK Toolkit Stackのデプロイ:cdk bootstrap は、CDKが内部で使用するリソースを作成するCloudFormationスタックをデプロイします。このスタックには、CDKがデプロイメント中に使用するためのS3バケットやIAMロールが含まれます。

  • アセットのアップロード:デプロイするアプリケーションのアセット(例えば、Lambda関数のコードやその他のファイル)をS3バケットにアップロードするための準備をします。

  • CDKアプリケーションのデプロイ準備:cdk deploy コマンドを実行する前に、環境がCDKアプリケーションのデプロイに対応できるようにします。

マネジメントコンソールの"CloudFormation>スタック"から作成を確認できました。

file

3-3.cdk deployの実行

下記コマンドを実行し、デプロイします。

cdk deploy

以下の表示があればデプロイ成功です。

file

マネジメントコンソールでスタックの作成、S3バケットの作成を確認できました。

file

file

3-4.cdk destroyの実行

下記コマンドを実行し、スタックの削除をします。本当に削除してよいか聞かれるので"y"を入力します。

cdk destroy

以下の表示があれば削除成功です。

file

4. 感想

cloud9使用時には意識していなかった項目も理解することができてよかった。
今回は割愛しましたが実際に構築を行う際はVSCodeなどのコードエディタを使用すると便利だと思います。
下記を参考にしてください。

[AWS]VSCodeからEC2クラウドにSSH接続する

Last modified: 2024-08-20

Author