CDKでREST API×RDBシステムを構築する 3. 動作確認編

Agaroot IT Partners(AITP)のtomoです。

前回以下の2つの記事でCDKでREST API×RDBシステムを構築しました。

今回はそのシステムの動作確認を行っていきます。

APIツールで動作確認

PostmanなどのAPIツールを使った動作確認方法を説明していきます。

今回のシステムはCognitoのユーザープールでユーザーを作成し、その認証情報でAPIリクエストを行う必要があります。
まずはマネジメントコンソール画面からユーザーの作成を行いましょう。APIツールでの動作確認を行う分にはユーザー名の指定だけで問題ないです。メールアドレスや電話番号を設定する必要はありません。パスワードも後で変更できますので、仮パスワードを自分で設定しても生成しても構いません。
ユーザーを作成したら、下記コマンドを用いてパスワードの設定やトークンの生成を行なってください。

$ aws cognito-idp admin-set-user-password --user-pool-id {ユーザープールID} --username {ユーザー名} --password '{パスワード}' --permanent
$ aws cognito-idp admin-initiate-auth --user-pool-id {ユーザープールID} --client-id {ユーザープールクライアントID} --auth-flow ADMIN_USER_PASSWORD_AUTH --auth-parameters USERNAME={ユーザー名},PASSWORD='{パスワード}'
#2つ目のコマンド実行結果の AuthenticationResult.IdToken が認証で用いるトークンです

後は下記の通りに設定してAPIリクエストを行ってみてください。

  • 共通
    • ヘッダーの項目Authorizationに上記コマンドで取得したトークンを設定する
    • リクエストURL: {APIのエンドポイントURL}/messages
  • メッセージ取得
    • メソッド: GET
    • 備考: クエリパラメータidで取得したいメッセージのIDを指定すると、その1件のみ取得可能
  • メッセージ登録
    • メソッド: POST
    • リクエストボディ: {"content": "{メッセージ内容}"}

上記画像の通り、バリデーション処理や認証処理についても動作確認が行えます。

ブラウザ上で動作確認

動作確認用のReactアプリを作成しました。あくまでも動作確認で必要な最低限の実装を行いましたので、UIなど不便なところもあるかと思いますがご容赦ください🙏

https://github.com/aitp-tomo/demo-api-frontend

起動方法はREADME.mdに記載しております。Dockerコンテナ上でReactアプリを起動しますので、Node.jsなどのバージョンを合わせる必要はありません(このアプリのために環境構築の苦労をする必要はないのでDockerを用いました)。

画面を開くとサインイン/サインアップフォームが表示されます。ユーザー名やメールアドレス(今回は確認コードを求められるのでメールアドレスも必要です)、パスワードを設定してユーザー登録してください。

サインインを行うと下記項目が表示されます。色々触ってみて動作確認を行ってください。

  • Sign Out ボタン
  • メッセージ一覧: 1秒ごとにメッセージ取得が行われ、その結果が表示されます
  • 詳細表示: 各メッセージの詳細ボタンを押下するとJSON形式でそのメッセージの内容が表示されます(クエリパラメータを指定してメッセージを1件のみ取得する処理が行われています)
  • 新しいメッセージ送信フォーム
  • 同時アクセス実行フォーム: メッセージ一覧取得処理をほぼ同時に実行します

特に同時アクセス実行フォームを用いれば、アラート処理の動作確認ができるかと思います。
今回のシステムではLambda関数の同時実行数やDBへの負荷が高まるとCloudWatchアラームがアラーム状態となり、SNSトピックによってメールが送信されるようにしました。

アラート処理の動作確認を行う際には、確実にアラーム状態になるように閾値を下記の通り変更することをお勧めします。

  private readonly createAlarms = (): void => {
    const metricLambdaExec = lambda.Function.metricAllConcurrentExecutions();
    const lambdaExecAlertAlarmId = `${this.appId}-lambda-exec-alert-alarm`;
    this.lambdaExecAlertAlarm = this.createAlarm(
      metricLambdaExec,
      100, #500から100に変更しておく
      lambdaExecAlertAlarmId
    );

    const metricDbCpuUtilization =
      this.dbWrapper.cluster.metricCPUUtilization();
    const dbCpuUtilizationAlarmId = `${this.appId}-db-cpu-util-alarm`;
    this.dbCpuUtilizationAlarm = this.createAlarm(
      metricDbCpuUtilization,
      5, # 65から5に変更しておく
      dbCpuUtilizationAlarmId
    );
  };

その他、画面を表示するポートを変更することでAPIのCORSオリジンの設定の動作確認も行ってみてください。

まとめ

今回は3本の記事を通してREST API×RDBシステムを取り扱ってみましたが、いかがだったでしょうか。

CDKを用いることで、REST APIやVPC、Aurora Serverless v2などの構築も簡単に行えます。マネジメントコンソール画面での操作だと複雑でミスも発生しやすく、手順書の作成も億劫ですが、そういった操作の手間からも解放されます。

REST APIシステムを構築する際には是非今回の内容を参考にしてみてください👋

関連するタグ