はじめに
今回は、AWS CDK(Cloud Development Kit)を使ってインフラストラクチャをコードで管理する(Infrastructure as Code: IaC)方法についてご紹介します。TerraformやAWS CloudFormationに触れたことがある方には、CDKの考え方が馴染みやすいかもしれません。CDKを使うと、インフラの定義を一般的なプログラミング言語(TypeScript、Python、Java、C#など)で記述できるため、開発者にとっては非常に扱いやすいツールです。
AWS CDKとは?
AWS CDKは、クラウドリソースをプログラムコードで定義・管理するためのツールです。従来のAWS CloudFormationでは、YAMLやJSONで記述する必要がありましたが、CDKを使うことで、例えばTypeScriptやPythonなど、より柔軟で強力なプログラミング言語を使ってリソースを定義できるようになります。
CDKは、これらのコードをAWS CloudFormationテンプレートに変換し、AWSにデプロイすることができます。そのため、CloudFormationの強力な機能を活かしながら、より開発者フレンドリーな方法でインフラ管理ができるのが特徴です。
AWS CDKの基本的な操作
AWS CDKの基本操作は大きく以下の流れで進めます。
・CDKのインストール
・CDKプロジェクトの作成
・リソースの定義
・デプロイ
1. CDKのインストール
AWS CDKを使うには、まずCLI(コマンドラインインターフェース)ツールをインストールする必要があります。以下のコマンドでインストールできます。
npm install -g aws-cdk
cdk --version
これで、cdkコマンドが使えるようになります。次に、AWS CLIがセットアップされていることを確認し、AWSのクレデンシャルを設定しておきます。
2. CDKプロジェクトの作成
CDKプロジェクトは、cdk initコマンドを使って作成します。たとえば、TypeScriptプロジェクトを作成する場合は以下のコマンドを実行します。
mkdir my-cdk-app
cd my-cdk-app
cdk init app --language typescript
このコマンドで、CDK用の基本的なファイルやフォルダが生成されます。今回注目すべきファルダは”lib”フォルダで、スタック定義を格納するディレクトリになります。このディレクトリ配下に作成したAWSリソースの定義ファイルを作成します。
3. リソースの定義
次に実際にリソースを定義します。CDKでは、スタック(Stack)という単位でリソースを管理します。Libディレクトリ配下に“aws-cdk-stack.ts”というファイルがあります。それを以下のように書き換えてCDKでS3バケットを作ってみましょう!
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
export class AwsCdkStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// S3バケットの作成
new s3.Bucket(this, 'MyFirstS3BukcetForCDKStudy2024', {
versioned: true,
});
}
}
ここでは、aws-cdk-libのBucketクラスを使って、バージョニングが有効なS3バケットを作成しています。
4. デプロイ
リソースの定義が完了したら、デプロイを行います。まず、cdk synthコマンドを使ってCloudFormationテンプレートを生成します。cdk.outというフォルダが自動で生成されAWSリソースを作成するためのCloudformationファイルが出力されます。
cdk synth
次に、デプロイコマンドを実行して、実際にAWSにリソースを作成します。
cdk deploy
✨ Synthesis time: 13.2s
AwsCdkStack: start: Building a085cf876a23d885f73c2193b3a64ec47eaa5ccf299213dd9dcc8358091b4ffc:current_account-current_region
AwsCdkStack: success: Built a085cf876a23d885f73c2193b3a64ec47eaa5ccf299213dd9dcc8358091b4ffc:current_account-current_region
AwsCdkStack: start: Publishing a085cf876a23d885f73c2193b3a64ec47eaa5ccf299213dd9dcc8358091b4ffc:current_account-current_region
AwsCdkStack: success: Published a085cf876a23d885f73c2193b3a64ec47eaa5ccf299213dd9dcc8358091b4ffc:current_account-current_region
AwsCdkStack: deploying... [1/1]
AwsCdkStack: creating CloudFormation changeset...
AwsCdkStack | 0/3 | 19:29:59 | REVIEW_IN_PROGRESS | AWS::CloudFormation::Stack | AwsCdkStack User Initiated
AwsCdkStack | 0/3 | 19:30:05 | CREATE_IN_PROGRESS | AWS::CloudFormation::Stack | AwsCdkStack User Initiated
AwsCdkStack | 0/3 | 19:30:07 | CREATE_IN_PROGRESS | AWS::CDK::Metadata | CDKMetadata/Default (CDKMetadata)
AwsCdkStack | 0/3 | 19:30:07 | CREATE_IN_PROGRESS | AWS::S3::Bucket | MyFirstS3BukcetForCDKStudy2024 (MyFirstS3BukcetForCDKStudy2024C7F0F781)
AwsCdkStack | 0/3 | 19:30:08 | CREATE_IN_PROGRESS | AWS::CDK::Metadata | CDKMetadata/Default (CDKMetadata) Resource creation Initiated
AwsCdkStack | 1/3 | 19:30:08 | CREATE_COMPLETE | AWS::CDK::Metadata | CDKMetadata/Default (CDKMetadata)
AwsCdkStack | 1/3 | 19:30:08 | CREATE_IN_PROGRESS | AWS::S3::Bucket | MyFirstS3BukcetForCDKStudy2024 (MyFirstS3BukcetForCDKStudy2024C7F0F781) Resource creation Initiated
AwsCdkStack | 2/3 | 19:30:22 | CREATE_COMPLETE | AWS::S3::Bucket | MyFirstS3BukcetForCDKStudy2024 (MyFirstS3BukcetForCDKStudy2024C7F0F781)
AwsCdkStack | 3/3 | 19:30:23 | CREATE_COMPLETE | AWS::CloudFormation::Stack | AwsCdkStack
✅ AwsCdkStack
✨ Deployment time: 30.91s
Stack ARN:
arn:aws:cloudformation:ap-northeast-1:000000000000000:stack/AwsCdkStack/e59721c0-a4ce-11ef-b6da-0ef49295c121
✨ Total time: 44.11s
これで、定義したリソースがAWSにデプロイされました。
cdk destroy
AWS CDKのメリット
AWS CDKを使うと、以下のようなメリットがあります。
• プログラムコードでの定義: CDKはTypeScriptやPythonなどの一般的なプログラミング言語を使用してリソースを定義できるため、ロジックやループ、条件分岐などの柔軟な処理が可能です。
• 再利用性: 関数やクラスを使って、定義したリソースを再利用しやすくなります。大規模なインフラを構築する際に非常に有用です。
• 自動の依存関係管理: CDKはリソース間の依存関係を自動的に処理します。これにより、手動で依存関係を管理する手間が省けます。
まとめ
今回はAWS CDKを使った基本的な操作を紹介しました。CDKは、プログラミングに馴染みのある方にとっては非常に使いやすいツールであり、クラウドインフラをより効率的に管理できる強力な手段です。今後さらに複雑な構成やマルチスタックの管理もできるようになるので、ぜひ試してみてください!
次回は、さらに高度なCDKの使い方や、他のAWSサービスとの連携方法についてご紹介したいと思います。