【TypeScript】AWS CDKでのServerless開発実践 - 基本からデプロイまで

【TypeScript】AWS CDKでのServerless開発実践 - 基本からデプロイまで

2024-11-10

2024-11-10

概要

本記事では、TypeScriptAWS CDKを使用したServerless開発について、基礎的な設定からデプロイまでの流れを実践形式で解説します。Serverlessアーキテクチャは、サーバの管理負荷を軽減し、柔軟なスケーリングが可能なため、特に需要の波があるアプリケーションやイベント駆動型の処理に適しています。AWSのクラウドリソースを自動的に構築できるAWS CDKTypeScriptを組み合わせることで、より生産的で保守性の高い開発環境を構築できます。

AWS CDKとServerlessアーキテクチャ

AWS CDKとは

AWS CDK(Cloud Development Kit)は、TypeScriptPythonJavaなどの一般的なプログラミング言語でインフラを定義し、コードとして管理できるツールです。これにより、設定ファイルではなく、プログラムコードとして柔軟にクラウドリソースを記述でき、変更管理も容易になります。

Serverlessアーキテクチャとは

Serverlessは、リソースのプロビジョニングやサーバの管理を行わず、イベント駆動でリソースが必要なときだけ動作する仕組みを指します。AWSのLambda関数やAPI GatewayDynamoDBなどが代表的なサービスです。これらを組み合わせることで、高負荷時でも自動的にスケーリングし、負荷がないときはほぼリソースを消費しない効率的なアーキテクチャが実現します。

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で複数の環境を扱う場合はスタックごとに分けたり、環境変数を利用することが重要です。

まとめ

TypeScriptAWS CDKを使用することで、サーバレス環境の開発を効率的に行うことが可能です。LambdaやDynamoDB、API Gatewayなどのリソースをコードで簡単に定義し、デプロイと管理を自動化できます。AWS CDKの柔軟なリソース管理機能は、インフラの自動化に非常に有効であり、アジャイルな開 発プロセスにも適しています。Serverlessアーキテクチャにおいて、AWS CDKはクラウドリソースの管理をより簡単にし、迅速なデプロイとスケーラビリティを実現します。

Recommend