株式会社システムアイの川合です
システムアイカレンダーの1日目ということで最近ハマっているCDKについての記事にしようと思います。
CDKとは
CDK (Cloud Development Kit) は、AWSのクラウドインフラストラクチャをコードで定義し、デプロイするためのオープンソースのソフトウェア開発フレームワークです。
AWSのインフラストラクチャのコード化だとCloudformationがありますが、どちらもAWSのインフラストラクチャをコードで定義し、自動的にプロビジョニングするためのツールです。次のような違いがあります。
- CloudFormation: YAMLまたはJSONという専用のフォーマット
- CDK: TypeScript、Python、Java、C#など、一般的なプログラミング言語で記述できるツール
またCDKはConstructsによってより抽象度があがって少ないコード量で記述できるので、プロトタイプを構築する時はCDKを使って構築したりしています。
次に僕が最近やっているCDKの始め方を記述していこうと思います。
インストール方法
一から作成する場合は、最近は projen を使って必要なファイル一式を揃えて作り始めています。
まず、node.jsをインストールします。インストール方法はなんでもよいですがバージョン管理も含めて"mise"でインストールします。
mise install node
nodeのインストール後はnpxをつかってprojenを実行しプロジェクト初期ファイルを設置していきます。
なおprojenではyarnを使っているのでyarnも実行しておきます。
npm install --global yarn
npx projen new awscdk-app-ts
少し待つと以下のようなファイル群が生成されています。
これらは"projen"によって自動生成されたファイルであるため、これらのファイルは直接手で編集しないように注意します。
偏したい場合は"projenrc.ts"を変更し、変更後 npx projen
を実行します。
今回は初期状態で用意されているnpmの更新確認用Github Actionsをなくし、dependabotに変更してみます。
.projenrc.tsを以下のように変更します
import { awscdk } from 'projen';
const project = new awscdk.AwsCdkTypeScriptApp({
cdkVersion: '2.1.0',
defaultReleaseBranch: 'main',
name: 'cdk-sample-app',
projenrcTs: true,
dependabot: true,
// deps: [], /* Runtime dependencies of this module. */
// description: undefined, /* The description is just a string that helps people understand the purpose of the package. */
// devDeps: [], /* Build dependencies for this module. */
// packageName: undefined, /* The "name" in package.json. */
});
project.synth();
その後、npx projen
を実行するとdependabotを使った更新確認に変わります。
npx projen
こんな感じで基本的に設定の変更は.projenrc.tsを触ることになります。
デプロイについて
ここまでで一回デプロイを試してみましょう
まず、bootstrapを行って準備してから、デプロイします
bootstrap
npx cdk bootstrap
これでデプロイの準備ができたので、次のコマンドでデプロイします
npx projen deploy
すると、Cloudformationのスタックが作られデプロイが進みます。
デプロイが完了すると、定義したAWSのリソースが作成されています。
また、失敗した場合はロールバックなどされます。(このあたりはCloudformationの挙動)
リソースの定義方法
AWSリソースの定義方法ですが詳しい方法は後日記事にするとして、対象のファイルは src/
配下のコードを編集することでデプロイしたいAWSリソースを定義できます。
次はコードの書き方やよく使うディレクトリ構成について記載しようと思います。
※公開設定間違えていて遅くなってしまいすみません。