AQ Tech Blog

文系学部インターン生がTypeScriptでCDKの環境を構築してみた話

作成者: koitarou.takehashi|2025年02月14日

本記事の内容

本記事は2025年卒非情報系文系学部のインターン生が、AWSが提供しているTypeScript の基礎から始める AWS CDK 開発入門というハンズオンを参考にしつつ実際にCDKで環境を構築してみたという内容になっております。

多少プログラミングを触ったことがある程度でAWSに関しての知識は皆無に等しかった自分が、ハンズオンを通してどこまで環境構築できたのか、CDKで何ができるのかなどを解説していきたいと思います。

前提知識として

CDKとは

AWS CDKとは、主要なプログラミング言語を使用してAWS上のリソースを定義できるツールです。
いわゆるIaC(Infrastructure as Code)と呼ばれるもので、サーバやネットワーク、データベースといったインフラ構築を、コードを用いて自動的に行うことができます。

これにより、バージョン管理や再現性が向上し、インフラの変更や展開がより迅速かつ柔軟におこなえるようになります。

TypeScriptとは

TypeScript(タイプスクリプト)は、JavaScriptを使いやすく、安全にするためのプログラミング言語です。ハンズオンに詳しい説明が記載されているためここでは簡単に解説します。

メリットとしては

  • ミスを防げる:「型」の仕組みで間違いを事前にチェックできる。
  • 使いやすい:JavaScriptに慣れていればすぐ始められる。
  • チームでの開発向き:コードが分かりやすくなり、バグを減らせる。

といったようなことが挙げられます。

なぜTypeScriptなのか

今回CDKで環境構築するにあたって何故TypeScriptを使うのか、それはCDKにおいてはTypeScriptが圧倒的に利用しやすいからです。
CDKが一番初めに対応した言語がTypeScriptということもあり、ネットでの情報量も多くサンプルコードや学習リソースが豊富に存在します。 その他にもメリットはいくつかあるため、 詳しい理由についてはぜひこちらの記事をご参照ください。
AWS CDKの言語はTypeScript一択!その理由と必要なスキルをご紹介

実際に触ってみよう

開発環境の構築とTypeScriptのインプット

まずはこちらのページを開きます。
今回は自分自身でこちらのハンズオンを参考にして進めていくので赤枠の部分を開いてください。

開くと以下の画面が表示されるかと思います。VSCode ServerかCloud9で環境を構築するか選べるのですが、今回はCloud9にしました。

ちなみにCloud9とは

IDE(統合開発環境)と呼ばれる、アプリケーションの開発に必要なツールがまとまったものの一つです。IDEの例として「Eclipse」や「Visual Studio」といったものがあります。Cloud9はクラウド環境で利用できるIDEになります。

絵を書くには紙とペンや筆、絵具などが必要かと思います。それらの役割+αを果すのがこのCloud9だとイメージしてもらえればいいかと思います。

ただ、Cloud9でのセットアップページに表示されている通り、これから新規でCloud9に登録できない可能性があり、
今後新機能が実装されることは無いようなので、VSCode Serverでの構築をお勧めします。

セットアップが終わったらパッケージのインストールやTypeScriptについての情報のインプットを進めていきます。
この辺りはJavaScriptに限らず何かしらのプログラミング言語を触ったことがある方ならすんなりと入ってくるかと思います。

完全にプログラミング初心者という方はProgatepaizaなどの学習サイトでJavaScriptに触れてみることをお勧めします。

CDK構築の前に

ハンズオンを最後まで読み進めていくと分かるかと思いますが、このハンズオンの最終目標はCDKで構築した環境上でWordPressを稼働させることです。
それを意識しながら作業を進めるとハンズオンの説明もイメージしやすいかと思います。

WordPressとは

WordPressとは、だれでも簡単にブログやWebサイトの作成ができるソフトウェアである「コンテンツマネジメントシステム(CMS)」の一つです。
もちろんCDKで構築する環境上ではWordPress以外のサービスやサイトも稼働させることができます。今回は環境を構築することが目標なので、WordPressについては大まかな理解で大丈夫です。

CloudFormationとは

最初にAWS CloudFormationという単語が出てきます。CDKを理解するうえで重要なので簡単に説明すると...

AWS CloudFormationは
・AWSリソース(例: サーバやデータベースなど)をまとめて管理・構築できるツール。
・設定をYAMLJSONという形式で書いたテンプレートを用意して、そのテンプレートを元にAWSがリソースを自動的に作ってくれる。

使う目的はCDKとほとんど一緒なのですが、YAMLJSONといったデータ記述言語の知識が必要なため、このあたりの知識がない方にとってはとっつきにくいかと思います。

YAMLのコード例

AWSTemplateFormatVersion: 2010-09-09
Description: A sample template
Resources:
MyEC2Instance:
Type: 'AWS::EC2::Instance'
Properties:
ImageId: ami-0ff8a91507f77f867
InstanceType: t2.micro
KeyName: testkey
BlockDeviceMappings:
- DeviceName: /dev/sdm
Ebs:
VolumeType: io1
Iops: 200
DeleteOnTermination: false
VolumeSize: 20

引用元:CloudFormation の仕組み

ですがCDKならCloudFormationを一般的なプログラミング言語で利用できます。ここが大きな違いになります。

初めてのCDKプロジェクトを作成する

この章ではCDKでのコーディングのための前準備をしています。作業の全体像としては、

cdk initでCDKプロジェクトの作成
       ↓
cdk synthでCloudFormationテンプレートの構成を確認し、作成計画のリソース情報を出力
       ↓
cdk deployでプロジェクトの実行

という流れになります。
よく使うCDKコマンドについては実践!AWS CDK #30 よく使う CDK コマンドを参考にしました。

cdk initのページであれば下記の写真2枚目のような出力結果になります。
ターミナルを使う際にはカレントディレクトリ(自分が今選択して作業しているディレクトリ)を意識して作業しましょう。 カレントディレクトリによって出力結果が変わってしまいます。
今回であれば「AWS CDK入門」~「WordPress を設定する」の間はcdk-workshopがカレントディレクトリになるかと思います。

カレントディレクトリの移動やその他の基本的なCloud9コマンドについてはCloud9のターミナル操作、9つの基礎コマンドを習得を参考にしました。

デプロイ後に忘れてはならないこと

ハンズオンをこちらのページまで進めてプロジェクトをデプロイした後に必ずしてほしいことがあります。
それはCDKスタックの削除です。

CDKプロジェクトをデプロイした時点からEC2インスタンスなどのリソースが起動します。 それを放置したままにしてしまうと知らない間にどんどん課金されかねないので、 必要でない場合は必ずスタックの削除をしておきましょう。

スタックの削除はこちらのコマンドでできます。

 cdk destroy

ちなみに削除してもまたデプロイすれば同じ内容のプロジェクトが再作成されます。

WordPress のサイトを CDK を使って公開する

この章での全体像としては、APIリファレンスを参照しながらVPCをデプロイし、その中にEC2とRDSをデプロイするというものになります。ちなみに(発展高可用性アーキテクチャを実践するの部分はWordPress設定の際に以下の写真のようなエラーが出るため今回はスキップします。

コンストラクトとは

読み進めていくとコンストラクトという単語がでてくるかと思います。 ハンズオンにも説明がありますがコンストラクトとはリソースの構成要素のことで、この値を記載することでリソースの細かい設定を行っていきます。
また、画像のように各要素(CDK内ではConstruct propsという)の後ろに?があるものは必ずしも値を記載する必要はなく、記載しない場合はAWS側が設定したデフォルトの仕様になります。

例えば、ハンズオンのVPCのデプロイであればVPCの宣言時に要素props?の中のsubnetConfiguration?というpropsの値を記載しないため、2枚目の写真の説明にある通りデフォルトで1つのAZ内で1つのパブリックサブネットと1つのプライベートサブネットに分割されます。

インターフェースとは

こちらも重要な単語で、インターフェースとは複数の異なるもの同士を接続するというような意味があり、 CDKが少ない記述量で環境構築できるのもこのインターフェースのおかげです。

例えば、EC2 インスタンスのデプロイページにあるこの箇所ではEC2インスタンスを宣言するにあたってprops?内でvpcやinstanceTypeを設定しなければいけません。

インターフェースの説明のために今回はvpcのみを例に挙げるのですが、こちらのAPIリファレンスにあるように、vpcというpropsは何やらIVpcというタイプに属しているようです。

そして、IVpcの説明ページに飛ぶとIVpcというタイプはVpcクラスによって構成されるものだと記載されています。
このように、vpcというpropsとVpcクラスを繋ぐ役割を果たしているのがIVpcというインターフェースになります。

ちなみにVpcクラスはVPCのデプロイで既に宣言しているのでvpcと記載するだけで呼び出せます。

この章ではこれらの前提知識をもとに、APIリファレンスを参照しながら作業を進めていきます。

進めていくと...

RDS DB インスタンスのデプロイでは9分近く掛かることもありました。恐らくこの時間も個人差があるため、状況によってはもっと掛かるかもしれません。

無事WordPressが実装出来たら必ずcdk destroyを打ち込んでから作業を終了しましょう。

  cdk destroy

まとめ

今回はハンズオンを補足するような形で解説させていただきました。
僕自身が実際にCDKを触ってみて、コードの記述量の少なさやCDKコマンドの便利さに驚きました。また、IaCという概念の理解にも繋がったと強く感じています。
IaCでの環境構築が主流になりつつあるので、今回のようにハンズオンを通して大まかなイメージだけでも掴んでおくと今後役に立つかと思います。

これからCDKやIaCを学んでいきたい方にとってこの記事が少しでも役に立てば幸いです。