2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS CDK】AWS CDKを触ってみた!

Last updated at Posted at 2024-11-09

はじめに

本記事ではAWS CDKの基本的な使い方を書いたもの(セットアップからTypeScriptを使ったプロジェクト構築まで)になります。

目次

  1. AWS CDKとは
  2. AWS CDK環境構築をする
  3. プロジェクトを作成する
  4. 各ファイル/ディレクトリの役割
  5. cdkコマンドを使ってみる
  6. まとめ

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

アクセスキー/シークレットキーは

  1. 右上のIAMユーザー名をクリック
  2. セキュリティ認証情報をクリック
  3. アクセスキーを作成
    で取得することができます。

下記コマンドで設定した内容を確認することができます。

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環境を構築してみたいと思いましたね。
もし実現できたら備忘録がてらにブログ投稿したいと思います。

では、またノシ

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?