LoginSignup
0
0

More than 1 year has passed since last update.

インフラ設計者がAWS CDKに入門してみる①~準備編~

Posted at

AWS CDK とは

AWS CDKとは、AWSが提供するAWSリソースをコードで定義するためのキットです。

やりたいこと

AWS CDK初心者が、検証環境を簡単にデプロイするためにCDKでテンプレート化しておきたい。
特にNetwork周りの部分で簡素化できればいいなと思ってCDKにチャレンジしてみました。

出来るものは以下のリソースです。東京リージョンです。

  • VPC
  • 9サブネット(パブリック3つ、プライベート6つ)az-a,c,dでマルチAZ構成
  • InternetGateway
  • RouteTable(パブリック、プライベート1つずつ)

前提

  • AWS自体はリソースをある程度理解している
  • アプリ開発(コード開発)経験はほぼない
  • 業務ではAWS開発は基本CLIかマネジメントコンソール操作

構築環境は以下の通り。

  • Windows 11 Home
  • VSCode
  • WSL2上のUbuntu22.04
  • nodejs v18.12.1
  • AWS CLI v2.7.4
  • AWS CDK v2.56.1
  • TypeScript

やってみる

基本的にはAWSが提供するWorkshopに沿って準備を進めます。
AWS CLIとNode.jsがインストールされている状態から始めます。Node.jsのインストールは公式に沿ってください。ここでは省略します。

CDKインストール

npm install -g cdk@2.56.1
cdk --version

2.54.0 (build 9f41881)と表示されればOKです。

ディレクトリ作成とcdk init

ディレクトリの名前は任意に変更してください。

$ mkdir aws-1vpc-3private-subnet && cd aws-1vpc-3private-subnet
$ cdk init --language typescript

Gitの初期化などの警告は出ますが無視してください。
以下の出力が出れば初期化完了です。

Applying project template app for typescript
Initializing a new git repository...
Executing npm install...
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN tst@0.1.0 No repository field.
npm WARN tst@0.1.0 No license field.

# Useful commands

 * `npm run build`   compile typescript to js
 * `npm run watch`   watch for changes and compile
 * `cdk deploy`      deploy this stack to your default AWS account/region
 * `cdk diff`        compare deployed stack with current state
 * `cdk synth`       emits the synthesized CloudFormation template

依存パッケージをインストールしておきます。

$ npm i

別ターミナルでnpmの変更監視をしておきます。(新規のターミナルで上記のディレクトリに移動してコマンドを実行)

npm run watch

変更の都度以下の出力があればコードに異常はありません。

Starting compilation in watch mode...
Found 0 errors. Watching for file changes.

cdk initを実行すると、ディレクトリ内に必要なリソースがダウンロードされます。
デフォルトでテンプレートはappという空のアプリが作成されます。SQSキューとSNSトピックを含むsample-appというテンプレートを指定する場合は、cdk init sample-appで指定します。

ディレクトリ内に以下のようなリソースが作成されているかと思います。
簡単に説明すると、

ファイル名 説明
lib/cdk-workshop-stack.ts CDKアプリケーションのメインスタックが定義されます。基本的にこのファイルを編集していきます。
bin/cdk-workshop.ts CDKアプリケーションのエントリポイントです。lib/cdk-workshop-stack.ts で定義されたスタックをロードします。
package.json npmモジュールのマニフェストです。アプリの名前、バージョン、依存関係、"watch" や "build" 用のビルドスクリプトなどの情報が含まれます。
cdk.json アプリの実行方法をツールキットに指示させるためのファイルです。
tsconfig.json プロジェクトのTypeScript設定です。
node_modules npmによって管理され、プロジェクトのすべての依存関係が含まれます。npm install @aws-cdk/aws-ec2等でインストールされたものもこちらに入ります。

cdk synth

ひとまずcdkがどんなものかを把握するために、CloudFormationテンプレートを出力してみます。

cdk synth

CloudFormationテンプレートが出力されると思います。基本的にはIAMなどの基本リソースが定義されています。(sample-appを利用する場合は、SQSキューやSNSトピックが含まれています。)

cdk bootstrap、cdk deploy

実際にリソースを作成してみます。
cdk bootstrapを実行すると、実際にAWS環境にbootstrapスタックという、デプロイプロセスで使われるCloudformationテンプレートとアセットを保存するために使用されるS3バケットが作成されます。
ここで、S3バケット名を指定したい場合は以下のようなコマンドを実行します。

cdk bootstrap \
 --bootstrap-bucket-name backet_name \
 --toolkit-stack-name toolkit_name

最後にcdk deployを実行すると、実際にCloudFormationのスタックが作成され、AWSリソースが作成されます。
コンソールにリソースの作成状況が表示されるので、どんなリソースが作成されるか観察するのも面白いです。

ここまでで、CDKを利用する準備は整いました!
次回以降で実際にNetworkリソース等を準備していきたいと思います。

0
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
0
0