はじめに
本記事ではAWS CDKの基本的な使い方を書いたもの(セットアップからTypeScriptを使ったプロジェクト構築まで)になります。
目次
- AWS CDKとは
- AWS CDK環境構築をする
- プロジェクトを作成する
- 各ファイル/ディレクトリの役割
- cdkコマンドを使ってみる
- まとめ
AWS CDKとは
最新のプログラミング言語を使用して AWS のインフラストラクチャをコードとして定義し、それをデプロイ、管理する事ができるソフトウェア開発フレームワークです。つまり、 CloudFormation や Terraform のような IaC ( Infrastructure as Code )の手段の 1 つということです。
CloudFormation や Terraform との違いとして、
「慣れ親しんだ言語を使用できる」というメリットがあります。(Python、TypeScript、Javaなどなど)
プログラマー出身の人からすると、とっつきやすいIaCかもしれませんね。
AWS CDK環境を構築する
では、CDKを始めるためのセットアップ作業をしていきましょう。
セットアップß端末のOSはLinux(Red Hat)を想定しています。
node.jsをインストールする
・cdkパッケージ
・TypeScriptの実行環境
を用意するために必要なNode.jsをインストールしていきましょう。
sudo dnf install -y nodejs
AWS CLIをインストール
CDKからAWSリソースをデプロイする際にIAMユーザーの認証情報が必要になります。
AWS CLIで事前に認証情報を定義することができますのでインストールしましょう。
sudo dnf install -y aws-cli
AWS CLIの設定を行う
認証情報を設定していきます。
aws configure
項目 | 説明 |
---|---|
AWS Access Key ID | IAMユーザーのアクセスキー |
AWS Secret Access Key | IAMユーザーのシークレットキー |
Default region name | 作成したいリージョン |
Default output format | json |
アクセスキー/シークレットキーは
- 右上のIAMユーザー名をクリック
- セキュリティ認証情報をクリック
- アクセスキーを作成
で取得することができます。
下記コマンドで設定した内容を確認することができます。
aws configure list
TypeScriptコンパイラをインストールする
npm install -g typescript
AWS CDKをインストールする
最後に、cdkをインストールしましょう。
npm install -g aws-cdk
これにて、準備作業は完了になります。
プロジェクトを作成する
では、いよいよAWS CDK環境を構築していきます。
AWS CDK用の作業ディレクトリを作成する
cdkプロジェクトを作成するためのディレクトリを用意します。
以降このディレクトリで作業していきます。
mkdir <cdkプロジェクト名>
cd <cdkプロジェクト名>
CDKプロジェクトを作成
ではお待ちかねのcdkプロジェクトを作成していきましょう!
languageにはtypescriptを指定します。
cdk init app --language typescript
dotenvパッケージをインストールする
最後にdotenvパッケージをインストールしておきます。
dotenvは、.env ファイルに定義された環境変数をNode.jsの process.env にロードするためのライブラリです。
npm install dotenv
cdkプロジェクト配下に.enxファイルを作成しておきましょう。
touch .env
これで環境構築は完了となります。
各ファイル/ディレクトリの役割
cdkプロジェクトにある各ファイル/ディレクトリの役割を体系的に把握しておきましょう。
my-cdk-app/
├── bin/ # アプリケーションエントリポイント
│ └── my-cdk-app.ts # Appインスタンスを作成しスタックをロード
├── lib/ # スタック定義を配置するディレクトリ
│ └── my-cdk-app-stack.ts
├── test/ # ユニットテスト用
├── cdk.json # CDK設定ファイル
├── package.json # npm設定ファイル
└── tsconfig.json # TypeScript設定ファイル
bin
binディレクトリは、アプリケーションのエントリポイントとなるコードを配置する場所です。
libディレクトリで定義されたスタック(Stack)をロードしてデプロイ対象に含めます。
#!/usr/bin/env node
import 'dotenv/config';
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { NetworkStack } from '../lib/network-stack';
import { ApplicationStack } from '../lib/application-stack';
const AWS_ACCOUNT = process.env.AWS_ACCOUNT;
const AWS_REGION = process.env.AWS_REGION;
const app = new cdk.App();
// ネットワークスタックの作成
const networkStack = new NetworkStack(app, 'NetworkStack', {
env: {
account: AWS_ACCOUNT,
region: AWS_REGION,
},
});
// アプリケーションスタックの作成
new ApplicationStack(app, 'ApplicationStack', {
env: {
account: AWS_ACCOUNT,
region: AWS_REGION,
},
vpc: networkStack.vpc, // ネットワークスタックの出力を使用
});
lib
CDKスタック(Stack)を定義するためのコードを配置する場所です。
AWSリソースを作成・管理するためのCDKスタック(Stackクラス)が定義されます。
lib/
├── network-stack.ts # ネットワーク関連のリソース
├── database-stack.ts # データベース関連のリソース
├── application-stack.ts # アプリケーション関連のリソース
cdkコマンドを使ってみる
折角cdkプロジェクトを構築できましたので
動作検証も兼ねて、cdkコマンドを軽く触っていきたいと思います。
新しいcdkプロジェクトを初期化する
先ほど実施したコマンドですね。
languageに好きな言語を指定することで、その言語に基づいたテンプレートが生成されます。
cdk init
CloudFormationテンプレートの生成
CDKコードをCloudFormationテンプレートに変換するコマンドです。デプロイ前に内容を確認するのに便利です。
cdk synth
初期デプロイの準備
初回デプロイの前に実行するコマンドで、CDKが使用する必要なリソース(S3バケットなど)をAWSアカウントに作成します。
特定のスタックのみをデプロイする場合は、スタック名を指定します。
cdk bootstrap
スタックのデプロイ
作成したCDKスタックをAWSにデプロイするコマンドです。
cdk deploy
スタックの削除
デプロイ済みのCDKスタックを削除するコマンドです。リソースを削除したいときに使用します。
特定のスタックのみを削除する場合は、スタック名を指定します。
cdk destroy
スタックの一覧確認
現在のCDKアプリに定義されているスタックの一覧を表示します。
cdk list
CDK環境のチェック
CDK環境に問題がないかチェックするためのコマンドです。問題が発生したときのトラブルシューティングに役立ちます。
cdk doctor
差分の確認
ローカルのCDKアプリと、デプロイ済みのCloudFormationテンプレートの差分を確認するコマンドです。
cdk diff
まとめ
今回はAWS-CDKを使ってみましたが、プログラミングをしながらリソースを作成できることに終始感動してました笑
とは言いつつも投稿主はTypescriptを触ったことがないので、まずは言語の学習から入ることになりそうです。
あとは、コンテナにCDK環境を構築してみたいと思いましたね。
もし実現できたら備忘録がてらにブログ投稿したいと思います。
では、またノシ