表題どおり。
これまでAmazon API Gatewayは301とかを返してもLocationヘッダの値をLambdaからのレスポンスの値で変更したりというようなことができなかった。このせいで、たとえば何か画像をプログラムで生成して、そのURLにリダイレクトするみたいなサービスが作れなかった。リクエストURLを元にサムネイル作ったり、存在してればファイルだけ返したりとか、色々便利そうなのに出来ない。
で、これは公式のフォーラムでも要望が多かったようで(AWS Developer Forums: Setting HTTP response headers for an ...)、最近(2015年12月現在)やっとできるようになった。
やり方はこのフォーラムでも書いてあるように、ヘッダのマッピングにintegration.response.body.(field名)みたいなやり方でLambdaからのレスポンスにアクセスできるようになったので、あとはそれをLocationヘッダに紐付けてやって、HTTPのレスポンスコードを301とかにしてやるだけだ。
ちなみに設定でちょっとわかりにくいのが、まず先にHTTPのレスポンスコードの設定画面から対応するコードと、そのコードで定義したいヘッダ名を先に作ってから、Lambdaのレスポンスとそれを紐付ける部分という順番で設定する必要があるということだ。
(画面的に言うと、左下、右下という順番で設定することになるので自然なのかもしれないが)
そんなわけで、Bloggerの記事URLを渡すと、Twitter-card用の画像にリダイレクトするツールを作った。
https://github.com/sashimizakana/serverless-twitter-cards
これで人のサービスを借りなくてもTwitter-card作り放題である。
(アクセス多すぎると金がかかるはずだが、たぶんよほどのことがなければ平気だろう)