目的
API Gateway + Lambda でリダイレクトさせたいときの Go 言語のコードを紹介します。
リダイレクトさせる Go 言語のコード
APIGatewayProxyResponse は、リクエストに対して API Gateway によって返されるレスポンスを構成します。よって、APIGatewayProxyResponse にリダイレクト(3xx)のステータスコードとリダイレクト先 URL をセットしてあげれば、クライアントにリダイレクトさせることが可能です。
package main
import (
"net/http"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
func handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
return events.APIGatewayProxyResponse{
StatusCode: http.StatusFound, // ステータスコード 302 を指定
Headers: map[string]string{
"Location": "https://aws.amazon.com/jp/", // リダイレクト先 URL を指定
},
}, nil
}
func main() {
lambda.Start(handler)
}
APIGatewayProxyResponse の内容について
APIGatewayProxyResponse で指定したリダイレクトのステータススコードの代表的なものとロケーションヘッダーについて簡単に解説します。詳細を知りたい方はリンク先を参照してください。
代表的なリダイレクトのステータススコード
ステータスコードは http パッケージの定数を利用しています。以下に、リダイレクトのステータスコードの代表的なものを紹介します。用途にあわせて使い分けてください。
-
301 Moved Permanently:リクエストされたリソースが Location ヘッダーで示された URL へ完全に移動したことを示します。ブラウザは、301 リダイレクトを受け取ると、古い URL から新しい URL へのリダイレクトをキャッシュに記憶します。もう一度ブラウザで古い URL を表示しようとすると、古い URL にアクセスすることなく新しい URL にアクセスします。
-
302 Found:リクエストされたリソースが一時的に Location で示された URL へ移動したことを示します。ブラウザが 302 リダイレクトを受け取っても、リダイレクトをキャッシュに記憶することはありません。もう一度ブラウザで古い URL を表示しようとすると、ブラウザは古い URL にアクセスしたあとでリダイレクトします。
-
303 See Other:リダイレクトが新しくアップロードされたリソースではなく、 (確認ページやアップロード進捗ページのような) 別なページにリンクすることを示します。このレスポンスコードはふつう、 PUT または POST の結果として送り返されます。また、リダイレクトすときは GET メソッドを使用します。
-
307 Temporary Redirect:リクエストされたリソースが一時的に Location で示された URL へ移動したことを示します。ブラウザが 307 リダイレクトを受け取っても、リダイレクトをキャッシュに記憶することはありません。307 と 302 の唯一の違いは、 307 はリダイレクトされたリクエストが行われるときに、メソッドと本文が変更されないことが保証されることです。 使用されるメソッドを GET に変更したい場合は、代わりに 303 See Other を使用してください。
-
308 Permanent Redirect:リクエストされたリソースが Location ヘッダーで示された URL へ完全に移動したことを示します。ブラウザは、308 リダイレクトを受け取ると、古い URL から新しい URL へのリダイレクトをキャッシュに記憶します。301 の場合は GET メソッドに変更される可能性があるのに対し、308 の場合はリクエストメソッドと本文が変更されません。
ロケーションヘッダー
ロケーションヘッダー はリダイレクト先の URL を示します。
以上です。