ばかおもちゃ本店:Youtube twitter:@sashimizakana Amazon.co.jpアソシエイト

2015年12月27日日曜日

Amazon API GatewayがLambdaのレスポンスからのリダイレクトとかに対応してた

表題どおり。

これまで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作り放題である。
(アクセス多すぎると金がかかるはずだが、たぶんよほどのことがなければ平気だろう)