AWS CDK(AWS Cloud Development Kit)
TypeScriptおよびPythonなどのプログラミング言語を使用して、AWSリソースを定義し、Terraformの様に**Infrastructure as Code(以降、IaC)**を実現する手段として、クラウドインフラのリソースをプロビジョニングすることが可能。
CDKにはL1 ~ L3までの概念があるため忘れないこと。
serverless frameworkとcdkの違い
はじめてCDKで作成するとき
AWS CDKのアプリを環境(アカウント/リージョン)にはじめてデプロイする場合は初期設定を行います。cdk bootstrapコマンドを実行しましょう。
$ cdk bootstrap
これによりデプロイプロセスの際に使用されるCFnのテンプレートやアセットを保存するためのS3バケットが作成されます。
スタック
AWS CDKのデプロイ単位はスタックと呼ばれる
アプリケーションのstackを表示する
cdk ls
cdk deployコマンドが優秀
このコマンドだけで差分デプロイができる
CloudFormationで同じことをしようとしたら
- 初回実行時は普通にデプロイ
- 二度目以降は変更セットを作成して差分デプロイ みたいなヘルパースクリプトが必要となってしまう。
IaCの種類
手続き型
ChefやAnsibleなど構成情報や設定情報を定義する手続き型
冪等性
Terraformの様にテンプレートに必要とするリソースを定義し、冪等性を担保する宣言型
※AWS CDKはTerraformと同じ宣言型として、テンプレートを定義することでプロビジョニングを実現します。
aws-cdk 事始め
AWS CDKをはじめて利用する際は、アカウントのブートストラップというものが必要になる。
たとえば、AWS LambdaやDockerイメージを作成する際に、スタックと同時に外部ファイルなどが生成する。
これらの外部ファイルは、S3に置くが、S3にアクセスできる(アップロードできる)ように事前にしておかなければならない
その作業をブートストラップと呼んでおります。
ブートストラップにおいて必要な情報が2つです。
- アカウントID
- リージョン
アカウントIDとリージョンは下記コマンドで確認可能
# Get the account ID
$ aws sts get-caller-identity
{
"UserId": "xxxxxxxxxxxxxxxxx",
"Account": "yyyyyyyyyyyy",
"Arn": "arn:aws:iam::yyyyyyyyyyyy:user/terraform"
}
# Get the Region
$ aws configure get region
ap-northeast-1
AWS CDK 実践
VPCから作成するのが慣例(自分の陣地をとるみたいな)
Construct
CDK上においてクラウドコンポーネントは Construct
という単位の基本ビルディングブロックとして提供されており、リソース作成に必要なすべてがカプセル化されています。
そしてこのConstructは以下の3つのレイヤーに分けられています。
- L3: Patterns
- 複数のリソースを含む構成パターンを 事前定義したもの
- L2: High-level constructs
- デフォルト値や便利なメソッドを定義したAWSリソースを表すクラス
- L1: Low-level constructs
- CFnリソースおよびプロパティと1:1で対応(Cfnというプレフィックスがついたもの)
クラス(Construct)Vpcは L2
であり、それを作成することでネットワーク構築に必要な(ベストプラクティスとされる)他のリソースが適切な設定値で軒並み一緒に作られてしまう。
インフラエンジニアとしては各リソースのプロパティは細かくカスタマイズしたいもの。
その場合はL1のLow-level Constructを使用する
Context
CFnのパラメーターのように使える機能
- スタックやConstructに関連付けできるキーと値のペア
- キーと値の型はstring
- 他の型にしたい場合は変換処理が必要
6つの異なる方法でCDKアプリに提供される
- 現在のAWSアカウントから自動的に
- CDKコマンドの --contextオプション
- プロジェクトのcdk.context.jsonファイル
- プロジェクトのcdk.jsonファイル
- ~/.cdk.jsonファイルのcontextキー
- construct.node.setContextメソッド
6つの方法はいずれも暗黙的に App Construct
に設定されるためアプリケーション内のConstructインスタンスでContextの値 を取得できる。
パラメーターとの棲み分け
Contextを使う。 CfnParameterというクラスも存在するのですが、AWS公式から非推奨となっている。
AWS CDKにおけるテスト
AWS CDKではテストは以下の3つのカテゴリに分類される
- Snapshot tests
- Fine-grained assertions
- Validation tests
Snapshot tests
テスト実行時点で作成されるCFnテンプレート(スナップショット)と事前に保存されているベースラインテンプレートを比較してテストします。
Fine-grained assertions
生成されたCFnテンプレートの一部をテストする。
以下のような項目をチェックできます。
- どんなリソースがあるか
- リソースのプロパティ