使用頻度が少なかったり変動するアプリケーションにおいて安くRDBを使うことができる。インスタンスを立てると最低でも月3000円くらいかかるが、Serverlessだとほとんどストレージ分から運用することができて趣味でも使いやすい。Lambdaと同様に常に同等のリソースを使っている状態だとインスタンスと比べて割高になる。今回はLambdaで使う。コンテナの数が容易に増え得るLambdaは同時接続数が問題になるRDBと一般に相性が良くない。APIはこの問題を解消すると思われるが、トランザクションが張れなかったり、レスポンスサイズに制限があるようだ。APIを有効にしている。他の選択肢として、DynamoDBは現状最有力で最近トランザクションもサポートされたがSQLのように複雑なクエリは投げられない。Athenaはクエリは投げられるがそこそこ時間がかかるし、INSERT/UPDATEはできずクエリごとに料金が発生する。Frameworkを使ってリソースを作成しデプロイする。Serverlessの制限の一つとしてVPC内からしか接続しかできないというものがある。いうことでVPCから作成していく。以前Terraformで作ったのと同じリソースをCloudFormationで作る。sambaiz-netLambdaをVPC内で動かすとコンテナ起動時にENIも作成するため立ち上がりの際時間がかかる。必要なら定期的に呼び出して削除されないようにする。今回はテストのため/24でVPCを切っているが、小さいとENIのIPアドレスが枯渇する可能性がある。Serverlessのために少なくとも2つのサブネットが必要。Serverlessの作成SecretDBCluster認証情報はSecretsManagerに置いてパスワードも自動生成させる。sambaiz-netACUが0の状態で確認しやすくするためSecondsUntilAutoPauseを最短の300にしている。300環境変数とVPCまわりの設定はこんな感じ。ServerlessFrameworkではデプロイ時にSecretを解決することもできるが、ローテーションすることも考えて実行時に取りに行っている。"*"アプリケーションSecretsにはusernameやpasswordだけではなくhostやport、dbNameまで含まれているのでこれだけで接続情報が作れる。nil}トランザクションを張ってINSERTしSELECTする。Editorから初期クエリを流す。Gatewayの上限30秒でタイムアウトしてしまった。ENIがある状態でも25秒前後ほどかかって、いずれも立ち上がっている状態では800ms前後。タイムアウトしたときにクライアントでリトライさせるなりする必要がある。Auroraへのアクセスはバッチで行い、API呼び出し時は別のデータソースを参照するといった使い方が良いかもしれない。