32
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

API Gateway + Lambdaで任意のURLにリダイレクトする方法

Last updated at Posted at 2017-08-04

Web開発をしているときに、クライアントからアクセスされたサーバーでリダレクトさせたい場合があるとします。

そのとき、サーバーを立ててWebサーバーをインストールしてredirectの設定をして...等行うと思いますが、それをAWSのサービスでサーバレスに行う方法を紹介します。

これは、

「Webサーバーリクエストを受け付けて、リダイレクト処理 + ちょっとしたロジック」

「API Gatewayでリクエストを受け付けて、Lambdaでリダレクト用のヘッダーを作成 + ちょっとしたロジック。それを、API Gatewayでまた返却」

という形で実現します。

使用するサービスはタイトルにもあるように、

  • API Gateway
  • AWS Lambda

Lambda上のランタイムは、

version
Node.js v6.10

となります。

これら作るのは

あるURLにGETメソッドのクエリパラメータにリダイレクトするという機構です。

さて、実際には以下の作業を行っていきます。

  • Lambdaにロジックを記述
  • API Gatewayの設定をする

Lambdaを先に設定するのは、API Gatewayの設定中、Lambdaを設定する箇所が出てくるからです。

Lambdaにロジックを記述

以下のようにコードを記述します。

index.js
exports.handler = (event, context, callback) => {

    var location = decodeURI(event["params"]["target"])

    context.succeed({"Location": location});
};

event["params"]["target"] : eventオブジェクトのtargetがgetのパラメータと紐付いてます。

API Gatewayの設定をする

  • APIの作成
  • Lambdaの設定
  • 統合リクエストの設定
  • メソッドレスポンスの設定
  • 統合レスポンスの設定

APIの作成/Lambdaの設定

統合リクエスト

[本文マッピングテンプレート]から[Content-Type]として、 application/json を追加します。

スクリーンショット 2017-08-03 16.04.01.png

テンプレートとしては、以下を追加します。

{
  "params": {
    #foreach($param in $input.params().querystring.keySet())
    "$param": "$util.escapeJavaScript($input.params().querystring.get($param))" #if($foreach.hasNext),#end
    #end
  }
}

これにより、GETメソッドのparameterをeventオブジェクトのkey, objectに展開できます。

メソッドレスポンスの設定

デフォルトで、HTTPのステータスコードが200がレスポンスとして設定されているので、それを削除します。

[レスポンスの追加]より、ステータスコード302を追加します。

[302 のレスポンスヘッダー]において、

Locationを追加します。

スクリーンショット 2017-08-03 15.53.11.png

統合レスポンスの設定

[メソッドレスポンスのステータス]が302のものを追加します。ステータスが200のものは消します。

次に
[ヘッダーのマッピング]でメソッドレスポンスより追加した「Location」がレスポンスヘッダーとして表示されているので、それに対応するマッピングの値として、 integration.response.body.Location を追加します。

スクリーンショット 2017-08-03 15.55.12.png

これにより、LambdaでのLocationの値が、レスポンスヘッダー「Location」にマッピングされるようになります。

実行してみる

[ステージ名]を test 等にして、APIをDeployすると、

 https://hogehoge.execute-api.ap-northeast-1.amazonaws.com/test

と呼び出し用のURLが発行されます。

https://hogehoge.execute-api.ap-northeast-1.amazonaws.com/test?target=https%3A%2F%2Fwww.google.co.jp

のようにブラウザからアクセスしてみましょう。リダイレクトされるはずです。

参考

32
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?