0
2

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】基礎をまとめてみた

0
Posted at

はじめに

今回はAWSインフラ構築のコード化(IaC)にかかせない、AWS CDKについて、実装前に知っておきたいことをまとめてみました。

AWS CDKの基礎知識に関しては、こちらの記事がおすすめです。

CloudFormationとの違い

CDKは、「CloudFormationをより使いやすくしたい」との思いから誕生しました。
以下に、CloudFormationとCDKの違いを簡単に表にまとめてみました。

比較項目 AWS CloudFormation AWS Cloud Development Kit (CDK)
定義方法 YAML / JSON TypeScript / Python / Java など
実行方法 そのままデプロイ 内部でCloudFormationに変換してデプロイ
複数スタック (基本)一つずつデプロイ 複数のスタックをまとめて一つのアプリとしてデプロイ
依存関係 手動でデプロイ順序を決める CDKが依存関係を解決する
抽象度 低い(リソース単位) 高い(Construct単位)
再利用性 低い(コピペ・Nested Stack) 高い(関数・クラス・Construct)
可読性 冗長になりがち コードとして整理しやすい
ロジック 制限あり(条件・マッピング程度) 自由(ループ・条件分岐・関数)
デバッグ ChangeSet / Drift検知 synth結果+CloudFormation依存

エスケープハッチ(代替手段)

AWSの進化は速いため、CDKがまだ対応していないリソースが存在することがあります。
そのような場合、以下のように対応することが可能です。

  • L2コンストラクト(抽象レイヤー)がない場合
    Cfnで始まるL1コンストラクトを使用する
    →L1コンストラクトもない場合、cdk.CfnResourceを使用する
  • L2コンストラクトでプロパティが設定できない場合
    construct.node.defaultChildでL1コンストラクトを取得し、プロパティを設定する
  • CloudFormationでも対応していない機能の場合
    Provider Frameworkを使用してカスタムリソースを作成する
    (AWSのAPIを呼び出すシンプルなカスタムリソースは、AwsCustomResource コンストラクトを使用することで、Lambda関数のコードを記述することなく簡単に作成可能)

詳しくは:AWS CDK 概要 (Basic #1)【AWS Black Belt】

セットアップ

空のディレクトリを作成したらそこへ移動し、以下のコマンドを実行します。

zsh
cdk init --language typescript

初期準備に関しては、ぜひ一度チュートリアルをハンズオン形式で試してみることをおすすめします。

公式ドキュメントの用語解説

実際にCDKを実装していく場合、公式ドキュメントを参照しながら進めていくことになるかと思います。
そこで、公式ドキュメントに出てくる基本用語をまとめてみました。
(今回はVPCを例にします)
以下のドキュメントに出てくる大項目

  1. Construct
  2. Props
  3. Properties
  4. Methods

について解説します。

1. Construct(コンストラクト)

CDKの基本単位で、「AWSリソース」や「抽象化された部品」を表すクラスのことを指します。

例(TypeScript)
new ec2.Vpc(this, 'MyVpc', { ... })

ここでのVpcがConstructにあたります。
CloudFormationリソースのラッパーであり、クラスとして定義されます。
スタックの中ではツリー構造になっています。

2. Props(=Construct Props)

Constructを生成するときに渡す(初期)設定値のことを指します。

明示的に指定しない場合、デフォルト値が適用されるため、把握しておくことが重要です。

例(TypeScript)
new ec2.Vpc(this, 'MyVpc', {
  maxAzs: 2,
  natGateways: 1,
})

ここでの{ maxAzs: 2, ... }がPropsにあたります。
(TypeScriptでは[VpcProps]という型で定義されています)
オプション設定の集合であり、初期化時にしか使えません。

3. Properties

Constructが生成された後に持つ「値・属性(=作成されたリソースの状態・情報)」のことを指します。

例(TypeScript)
const vpc = new ec2.Vpc(...);

console.log(vpc.vpcId);
console.log(vpc.publicSubnets);

ここでのvpc.vpcId, vpc.publicSubnetsがPropertiesにあたります。
他のリソースに渡すための情報として、基本的に読み取り専用で使います。
IDなど、AWS側で決まる値も含みます。

4. Methods(メソッド)

あらかじめクラスに用意されている、Constructに対して操作を行う関数のことを指します。

例(TypeScript)
const vpc = new ec2.Vpc(...);

vpc.addFlowLog(...)
vpc.selectSubnets(...)

ここでのvpc.addFlowLog(...)などがMethodsにあたります。
設定の追加・取得・加工など、リソースに対する操作をおこないます。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?