AWS CloudFormation を使用してTiDB Cloud Starter を Amazon Lambda と統合する
このドキュメントでは、クラウドネイティブの分散SQLデータベースであるTiDB Cloudスターター 、サーバーレスでイベントドリブンなコンピューティングサービスであるAWS ラムダと統合するための手順をAWS クラウドフォーメーションから順に説明します。TiDB TiDB Cloud StarterをAmazon Lambdaと統合することで、 TiDB Cloud StarterとAWS Lambdaを介したマイクロサービスのスケーラビリティとコスト効率を活用できます。AWS CloudFormationは、Lambda関数、API Gateway、Secrets ManagerなどのAWSリソースの作成と管理を自動化します。
注記:
このドキュメントの手順は、 TiDB Cloud Starter クラスターに加えて、 TiDB Cloud Essential クラスターでも機能します。
ソリューションの概要
このガイドでは、次のコンポーネントを使用して、完全に機能するオンライン書店を作成します。
- AWS Lambda 関数: Sequelize ORM と Fastify API フレームワークを使用して、 TiDB Cloud Starter クラスターからのリクエストを処理し、データをクエリします。
 - AWS Secrets Manager SDK: TiDB Cloud Starter クラスターの接続構成を取得および管理します。
 - AWS API Gateway: HTTP リクエストルートを処理します。
 - TiDB Cloud Starter: クラウドネイティブの分散 SQL データベース。
 
AWS CloudFormation は、Secrets Manager、API Gateway、Lambda 関数など、プロジェクトに必要なリソースを作成するために使用されます。
書店プロジェクトの構造は次のとおりです。

前提条件
始める前に、次のものを用意してください。
次の AWS サービスにアクセスできる AWS アカウント:
TiDB CloudアカウントとTiDB Cloud Starter クラスター。TiDB TiDB Cloud Starter クラスターの接続情報を取得します。

郵便配達員やカールなどのAPIテストツール。このドキュメントのほとんどの例ではcURLを使用しています。WindowsユーザーにはPostmanの使用をお勧めします。
プロジェクトの最新リリースアセットローカル マシンにダウンロードします。これには、
cloudformation_template.ymlとcloudformation_template.jsonファイルが含まれます。
注記:
- AWSリソースを作成する際は、クラスターのリージョンとして
 us-east-1使用することをお勧めします。これは、このデモのLambda関数コードがリージョンをus-east-1にハードコードし、コードバンドルがus-east-1リージョンに保存されるためです。- 別のリージョンを使用する場合は、次の手順に従って Lambda 関数コードを変更し、再構築して、コードバンドルを独自の S3 バケットにアップロードする必要があります。
 
us-east-1以外のリージョンを使用する場合は、Lambda 関数のコードを修正して再構築します。
クラスターリージョンとしてus-east-1使用する場合は、このセクションをスキップしてステップ1: AWS CloudFormationを使用してプロジェクトをセットアップするに進みます。
AWS リソースを作成するためにus-east-1以外の別の AWS リージョンを使用する場合は、Lambda 関数コードを変更して再構築し、コードバンドルを独自の S3 バケットにアップロードする必要があります。
ローカル開発環境の問題を回避するには、 ギットポッドなどのクラウドネイティブ開発環境を使用することをお勧めします。
コードバンドルを再構築して独自の S3 バケットにアップロードするには、次の手順を実行します。
開発環境を初期化します。
- ギットポッドワークスペースを開き、GitHub アカウントでログインします。
 
Lambda 関数のコードを変更します。
- 左側のサイドバーで
aws-lambda-cloudformation/src/secretManager.tsファイルを開きます。 - 22 行目を見つけて、 
region変数を自分の地域に合わせて変更します。 
- 左側のサイドバーで
 コード バンドルを再構築します。
依存関係をインストールします。
Gitpod でターミナルを開きます。
作業ディレクトリを入力してください:
cd aws-lambda-cloudformation依存関係をインストールします。
yarn
コード バンドルを再構築します。
コードバンドルをビルドします。
yarn buildaws-lambda-cloudformation/dist/index.zipファイルを確認してください。index.zipファイルを右クリックし、 [ダウンロード]を選択します。
再構築されたコードバンドルを独自の S3 バケットにアップロードします。
- AWS マネジメントコンソールのS3 サービスアクセスします。
 - 選択したリージョンに新しいバケットを作成します。
 index.zipファイルをバケットにアップロードします。- 後で使用するために、S3 バケット名とリージョンを書き留めておきます。
 
ステップ1. AWS CloudFormationを使用して書店プロジェクトをセットアップする
AWS CloudFormation を使用してブックショッププロジェクトをセットアップするには、次の手順を実行します。
AWS マネジメントコンソールに移動し、 AWS CloudFormation サービスにアクセスします。
[スタックの作成] > [新しいリソースを使用 (標準)]をクリックします。
「スタックの作成」ページで、スタックの作成プロセスを完了します。
前提条件領域で、既存のテンプレートを選択を選択します。
[テンプレートの指定]領域で[テンプレート ファイルのアップロード]を選択し、[**ファイルの選択]をクリックしてテンプレート ファイル (YAML または JSON) をアップロードし、 [次へ]**をクリックします。
ファイルがまだない場合は、 GitHubからダウンロードしてください。ファイルには、プロジェクトに必要なリソースを作成する AWS CloudFormation テンプレートが含まれています。

スタックの詳細を指定します。
クラスターリージョンとして
us-east-1使用する場合は、次のスクリーンショットのようにフィールドに入力します。
- スタック名: スタック名を入力します。
 - S3Bucket : zip ファイルを保存する S3 バケットを入力します。
 - S3Key : S3 キーを入力します。
 - TiDBDatabase : TiDB Cloudクラスター名を入力します。
 - TiDBHost : TiDB Cloudデータベースアクセス用のホストURLを入力します。2 
localhost入力してください。 - TiDBPassword : TiDB Cloudデータベース アクセス用のパスワードを入力します。
 - TiDBPort : TiDB Cloudデータベース アクセス用のポートを入力します。
 - TiDBUser : TiDB Cloudデータベース アクセス用のユーザー名を入力します。
 
us-east-1以外の AWS リージョンを使用する場合は、次の手順に従ってください。us-east-1以外のリージョンを使用する場合は、Lambda 関数のコードを修正して再構築します。を参照して Lambda 関数コードを変更し、再構築して、コードバンドルを独自の S3 バケットにアップロードします。- スタックの詳細フィールドで、独自の設定に応じて、パラメータ
S3BucketとS3Keyに S3 バケット名とリージョンを指定します。 - 前のスクリーンショットのように、他のフィールドに入力します。
 
スタックオプションを設定します。デフォルトの設定を使用できます。

スタックを確認して作成します。

ステップ2. 書店プロジェクトを使用する
スタックが作成されたら、次のようにプロジェクトを使用できます。
AWS マネジメントコンソールのAPIゲートウェイサービスアクセスし、
TiDBCloudApiGatewayV2API をクリックして、左側のペインでAPI: TiDBCloudApiGatewayV2をクリックします。概要ページから
Invoke URLコピーします。このURLがAPIエンドポイントとして機能します。
API をテストするには、Postman や cURL などの API テスト ツールを使用してください。
模擬試験本を初期化します:
curl -X POST -H "Content-Type: application/json" -d '{"count":100}' https://<your-api-endpoint>/book/initすべての書籍を入手:
curl https://<your-api-endpoint>/book書籍IDで書籍を取得します:
curl https://<your-api-endpoint>/book/<book-id>本を作成する:
curl -X POST -H "Content-Type: application/json" -d '{ "title": "Book Title", "type": "Test", "publishAt": "2022-12-15T21:01:49.000Z", "stock": 123, "price": 12.34, "authors": "Test Test" }' https:// <your-api-endpoint>/book本を更新する:
curl -X PUT -H "Content-Type: application/json" -d '{ "title": "Book Title(updated)" }' https://<your-api-endpoint>/book/<book-id>本を削除する:
curl -X DELETE https://<your-api-endpoint>/book/<book-id>
ステップ3. リソースをクリーンアップする
不要な料金を避けるため、作成されたすべてのリソースをクリーンアップしてください。
- AWS マネジメントコンソールにアクセスします。
 - 作成した AWS CloudFormation スタックを削除します。