なにか作ってみようとなったときにサーバーレスで簡単にホストできるのは嬉しい。
パブリックなプロダクトではないし、ソースコードもプライベートレポジトリにおいてあるので、具体的にどう、という話が書けないのは残念だが、せめてやったことのアーカイブくらいは残しておこう、というくらいの動機付けで書く。
作ったもの
DynamoDB のレコードを、簡単な条件文でフィルタして一覧取得する API エンドポイントを作った。前回の記事で紹介した、 Amplify アプリの背後にいた DynamoDB を再利用している。
Amplify アプリでは GraphQL で CRUD できるようになっているのだが、スキーマの定義は AppSync に任せきりになってしまっていて、手を加えるのは大変。とはいえシンプルな一覧取得もやりたいな、という動機があった。ロジックはシンプルなので、 Go を使って手軽に実装してみることにした。
SAM で生成したテンプレートをいくらか書き換えるだけで完成させられた。作業日数は2日ほど。ただしテストの書き方などで試行錯誤して、こまごました作業はもうしばらく長く続けた。
反省点
深く考える前に作り始めてしまったことで、認証まわりのデザインにぎこちなさが出てしまった 。
API エンドポイントがグローバルに公開されてしまうのは、読み取り専用 API とはいえ気持ち悪い感じがするなあと、 API Key とそれに紐付けた利用制限を定義した。こうして仮の保護は与えられたものの、Amplify の方でせっかく Cognito を使っているのだから、こちらも同じ仕組みを使って認証させるのが筋だったなあと反省している。
とはいえ、実際こうして素早く実装を仕上げられたことには満足している。不満な部分はあとでまた対応すればいいし、必要なくなったら気軽に捨てられるのも身軽でいい。それに何より、好きな技術を好きに組み合わせて動くものを完成させられた達成感がある。