質問の最初の一行が結構斬新なので驚きましたが、以下の構成を考えている前提でよいでしょうか?
Webサーバー -> S3にhtmlファイルを置く
AP(Application)サーバー -> API GatewayとLambdaを組み合わせる
DBサーバー -> RDS
AWS Lambda上で実行するにはExpressなどWebアプリケーションフレームワークは使わないということで良いのか
不要です。
基本的に同サービスのAPI Gatewayと組み合わせて、API Gatewayがhttpリクエストを受け取ったらlambdaを起動しデータを渡す仕組みになると思うので不要です。
データベースへの接続は普通のNode.jsのプログラムのように書けば良いのか
多分2パターンあります。
- AWSのライブラリを使用する
RDSへ接続する認証を突破する為に、AWSが提供するライブラリ(SDK的なもの)を使用する方法です。
これに関してはSDKの使用方法に則ります。
2. Node.jsのライブラリを使用する
普通のアプリと同様にドメインとユーザー名を設定して接続します。
両方とももしかしたらlambdaからrdsへの接続を許可するロールを作成する必要があるかもしれません。
そのあたりはネットで調べれば手順がちゃんと出てくるとおもいます。
ユーザー認証はどのように実装するのが一般的なのか
構成としてはSPA(Single Page Application)という構成になります。
この辺りは回答できず申し訳ないのですがSPAの実装方式を参考にするか、もしくはS3上にhtml/css/jsを置くのではなく、Amplifyでフロントを開発するのが(AWSが)一般的に紹介している方法だと思います。
(この辺りはAmplify lambda webアプリ 認証で調べると出てきます。)
静的なHTMLやjsをWebブラウザに返す時、S3を使うのが一般的か、その時、ユーザー認証の状態は考慮できるのか
ログインの様なセキュリティを考慮しないのであればS3を(あとはS3に置いたhtmlのCDNとしてCloudFrontなんかが使われます。)、考慮するのであればAmplifyを使うのが多いと思います。
テストはともかく開発もデバッグもAWS Lambdaにデプロイした状態でしか行わないものなのか
lambdaは開発画面でデバックができ、動作が問題なければ公開ボタンを押して公開するようなサービスです。
なので、一部の例外を除いてawsコンソール上(webブラウザ上)で開発やデバッグをします。
私の場合は、ある程度ローカルで開発して、動作が確認出来たらlambda上にコードを載せて、lambdaように書き換えるということをはじめはしていたので、最初はこっちの方がいいかもしれません。
例外は、ソースコードなどのファイル容量が大きい場合はコンテナを動かせるのですが、その場合はローカルでデバックを行います。
1回答としてはこのような形でしょうか。
他にも開発手法はあると思います。(今回の様な構成に関してはAWSやAWSパートナーの会社が記事を出していたりするので検索すれば結構出てくると思います)