技術は私たちの力。技術は私たちの楽しみ。 Creative Developer BLOG 技術部ブログ
Technology is our strength. Technology is what we enjoy.

AWS CDKを使った簡単環境構築

2023-12-25 サーバ・AWS
システム部開発ユニットの木村です

今年の4月頃、AWS環境を構築する必要がありまして、いろいろ調べたり、思い出しながら構築していたのですが、手動での構築が非常に煩雑でした。

手順書にまとめたのですが、もっと簡単に構築できないかと考えました。

そこで、AWS CDKとCloud Formationに目を向けました。

Cloud Formationとは?

Cloud FormationはAWSのサービスをコードで管理するためのツールです。JSONやYAML形式のテンプレートを使用して、AWSリソースを準備、更新、削除できます。これにより、手動での構築よりも迅速かつ再現性のある環境構築が可能になります。

Cloud Formationの課題

まず、Cloud Formationを触ってみようとしましたが、JSONやYAML形式での記述が複雑で、初学者には難解なこともあります。また、AWSのコンソール上でビジュアルに操作できるデザイナーも提供されていますが、ちょっとうまく作成する自信がありませんでした。

少し調べると、AWS CDKというものがあり、プログラムからAWSのサービスを操作でき、さらにCloud Formation用のYAMLファイルを生成できることがわかりました。

AWS CDKを活用して、AWSのコンソールから簡単に環境構築できるようにすることにしました。

AWS CDKとは?

AWS CDK(AWS Cloud Development Kit)は、AWSのリソースをプログラムで定義し、管理するためのフレームワークです。手動での設定や複雑なCloud Formationテンプレートの作成を回避し、プログラミング言語でAWSリソースを定義できる利点があります。

AWSCDKの前提条件

AWS CDKを利用するためには、以下の前提条件が必要でした

Node.jsとnpmのインストール

AWS CDKはNode.jsで動作します。
Node.jsとnpm(Node.jsのパッケージ管理ツール)をインストールを行いました。
sudo apt update
sudo apt install nodejs
sudo apt install npm
今回はWindows Subsystems For LinuxのUbuntu22.04.3を使用しました。

AWS CLIの設定

AWS CDKはAWS CLIと連携して動作します。
AWS CLIを使用して、AWSアカウントとの認証情報の紐づけが必要でした。
aws configure
このコマンドを実行すると、AWS Access Key ID、Secret Access Key、デフォルトのリージョンなどの情報を入力できます。

TypeScriptのインストール

今回、AWSCDKで記載する際に、一番文献が多かったので、TypeScriptで開発することにしました。
そのため、下記でインストールを行いました。
npm install -g typescript

AWSCDKのインストール

最後に、AWS CDKをインストールしました。
以下のコマンドを使用します。
npm install -g aws-cdk

AWSCDKのプログラム

前提の作業が終わったので、記述したプログラムの構成について説明していきます。

AWS CDKプロジェクトのプログラム構成

簡単に記述したプログラムの構成について説明します。
environment/
|-- bin/
| `-- environment.ts
|-- lib/
| |-- environment-stack.ts
| |-- resource/
| | |-- alb.ts
| | |-- ec2.ts
| | |-- elasticIp.ts
| | |-- iamRole.ts
| | |-- internetGateway.ts
| | |-- natGateway.ts
| | |-- rds.ts
| | |-- routeTable.ts
| | |-- secretsManager.ts
| | |-- securityGroup.ts
| | |-- subnet.ts
| | `-- vpc.ts
| |-- script/
| | `-- ec2/
| | `-- userData.sh
|-- output.yml
environment-stack.ts ファイルから各resourceディレクトリのファイルを呼び出し、各サービスの構築や更新を行っています。

また、userData.sh ファイルでWebサーバの初期起動時の実行処理を定義し、初期設定やカスタマイズが行えるようにしています。

AWS CDKからYAMLファイル生成

上記のプログラムの記述した後、CloudFormationテンプレート(YAML形式)へ以下の手順で変換しました。

プロジェクトのビルドとテンプレート生成

まず、AWS CDKプロジェクトをビルドした後に、Cloud Formationのテンプレートを行いました。
cdk build
cdk synth > output.yml

Cloud Formationでの実行

テンプレートファイルの生成が行えたので、ここからはCloud Formationでの実行となります。

AWSコンソールにログインし、Cloud Formationからスタックの生成を実行します。

下記画面で、生成したテンプレートファイルをアップロードし、次に進みます。

必要なパラメータなどは全てテンプレートに記載済みなので、そのまま名称だけ決めて確認画面で送信ボタンを押します。

全てのスタックが完了で、作業終了です。

実行結果

簡単に生成されたサーバーや設定について確認します。

まとめ

AWS CDKを使用してAWSリソースを定義して、Cloud Formationから簡単かつ再現可能な形で環境構築を行うことができるようになりました。

ALBのHTTPS接続のためのSSL情報の設定やAutoScaringの設定、DBサーバへのセキュアな接続方法の設定等もう少しブラッシュアップが必要で、実際に運用するには対応が必要かなという所感でした。

久々の勉強会でテーマ決めからいろいろと大変でしたが、いい勉強になりました。
記事一覧へ