【TypeScript】AWS CDKでのServerless開発実践 - 基本からデプロイまで
2024-11-10
2024-11-10
概要
本記事では、TypeScript
とAWS CDK
を使用したServerless
開発について、基礎的な設定からデプロイまでの流れを実践形式で解説します。Serverless
アーキテクチャは、サーバの管理負荷を軽減し、柔軟なスケーリングが可能なため、特に需要の波があるアプリケーションやイベント駆動型の処理に適しています。AWSのクラウドリソースを自動的に構築できるAWS CDK
とTypeScript
を組み合わせることで、より生産的で保守性の高い開発環境を構築できます。
AWS CDKとServerlessアーキテクチャ
AWS CDKとは
AWS CDK
(Cloud Development Kit)は、TypeScript
、Python
、Java
などの一般的なプログラミング言語でインフラを定義し、コードとして管理できるツールです。これにより、設定ファイルではなく、プログラムコードとして柔軟にクラウドリソースを記述でき、変更管理も容易になります。
Serverlessアーキテクチャとは
Serverlessは、リソースのプロビジョニングやサーバの管理を行わず、イベント駆動でリソースが必要なときだけ動作する仕組みを指します。AWSのLambda
関数やAPI Gateway
、DynamoDB
などが代表的なサービスです。これらを組み合わせることで、高負荷時でも自動的にスケーリングし、負荷がないときはほぼリソースを消費しない効率的なアーキテクチャが実現します。
AWS CDKを使ったServerless開発の流れ
AWS CDKのインストールとプロジェクトのセットアップ
AWS CDKを使用するには、Node.jsとnpmがインストールされている必要があります。次に、AWS CLI
の設定も行っておきましょう。
# AWS CDKのインストール
npm install -g aws-cdk
# 新しいCDKプロジェクトの作成
mkdir my-serverless-app
cd my-serverless-app
cdk init app --language typescript
このコマンドで、AWS CDKのTypeScript
プロジェクトが作成されます。作成されたファイルやディレクトリには、アプリケーションのスタック定義が含まれます。
基本的なLambda関数とAPI Gatewayの設定
AWS CDKでは、コード上でLambda
関数やAPI Gateway
を設定できます。以下は、簡単なLambda関数とAPI Gatewayを設定するコード例です。
import * as cdk from 'aws-cdk-lib';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as apigateway from 'aws-cdk-lib/aws-apigateway';
export class MyServerlessAppStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Lambda関数の定義
const myLambda = new lambda.Function(this, 'MyLambdaFunction', {
runtime: lambda.Runtime.NODEJS_18_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda'),
});
// API Gatewayの設定
new apigateway.LambdaRestApi(this, 'MyEndpoint', {
handler: myLambda,
});
}
}
このコードは、Lambda関数とAPI Gatewayを作成します。Lambda関数はlambda
フォルダに配置したコードを実行します。API GatewayはLambda関数をエンドポイントとして公開し、外部からアクセスできるようにします。
DynamoDBを追加してデータストレージを実装
Serverlessアプリケーションでは、データストレージとしてDynamoDB
がよく利用されます。以下のように、AWS CDKでDynamoDBのテーブルを作成し、Lambda関数にアクセス権を付与することができます。
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
const table = new dynamodb.Table(this, 'MyTable', {
partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
});
table.grantReadWriteData(myLambda);
myLambda.addEnvironment('TABLE_NAME', table.tableName);
このコードで、DynamoDBテーブルが作成され、Lambda関数に読み書き権限が付与されます。また、環境変数TABLE_NAME
にテーブル名を追加し、Lambda関数からテーブルにアクセスしやすくします。
デプロイ
コードが完成したら、CDKのデプロイコマンドを実行してAWSにリソースをデプロイします。
cdk deploy
初回のデプロイ時には、IAM
権限を確認するプロンプトが表示されることがあります。ここで確認後、デプロイが進行し、AWS上にLambda関数やAPI Gateway、DynamoDBテーブルなどが自動的に作成されます。
ローカルテストとデバッグ
AWS CDKで構築したアプリケーションは、ローカルでのテストやデバッグが重要です。AWS SAM
(Serverless Application Model)を使ってローカルテストを行う方法もありますが、ここではCDKのみを使用しての簡単なテスト例を紹介します。
cdk synth
cdk synth
コマンドを使うと、CloudFormationのテンプレートが生成され、実際にデプロイされるリソースが確認できます。スタックの構成や設定の確認を行うのに便利です。
注意点とベストプラクティス
- コスト管理
Serverlessアーキテクチャは通常使用量に応じて課金されますが、予想以上にリクエストが増えるとコストも増大する可能性があるため、CloudWatch
で監視するのが推奨されます。 - インフラのコード管理
CDKで作成したスタックやリソースは、Git
などのバージョン管理システムに保存しておくことで、チーム内での共有やロールバックが容易に行えます。 - 環境ごとの設定
本番環境、ステージング、開発環境など、環境ごとに異なる設定が必要になることが多いため、CDKで複数の環境を扱う場合はスタックごとに分けたり、環境変数を利用することが重要です。
まとめ
TypeScript
とAWS CDK
を使用することで、サーバレス環境の開発を効率的に行うことが可能です。LambdaやDynamoDB、API Gatewayなどのリソースをコードで簡単に定義し、デプロイと管理を自動化できます。AWS CDKの柔軟なリソース管理機能は、インフラの自動化に非常に有効であり、アジャイルな開
発プロセスにも適しています。Serverlessアーキテクチャにおいて、AWS CDKはクラウドリソースの管理をより簡単にし、迅速なデプロイとスケーラビリティを実現します。