Amplify Consoleのリダイレクトを使ってリバプロ的なことをやる

AWS Amplify Advent Calendar 2020、15日目の記事です。

やりたいこと

Amplifyにホストしているドメインで、特定のパスだけ別のサーバーからレスポンスを返したい。

Headlessなwebsiteで運用している場合ですと、CMSが提供しているAPIやfeed・メディアなどを同じパスで使いたいというケースが当たるかなと思います。

やったこと

Amplify Consoleでリダイレクトの設定ができますので、それを使います。

[
     {
         "source": "/api/<*>", 
         "target": "https://example.com/api/<*>",
         "status": "200",
         "condition": null
     },
     {
         "source": "/<*>",
         "target": "/404.html",
         "status": "404-200",
         "condition": null
     }
 ]

<*>をつけることで、それ以降のパスやクエリをパススルーするようにできます。

よびだしてみる

先程のexample.com/apiというパスを適当なWP APIのエンドポイントに差し替えて試してみました。

$ wget -S --spider https://main.xxxxxxxx.amplifyapp.com/api/wp/v2/pages

 HTTP による接続要求を送信しました、応答を待っています… 
   HTTP/1.1 200 OK
   Content-Type: application/json; charset=UTF-8
   Connection: keep-alive
   Server: nginx
   Date: Wed, 02 Dec 2020 09:10:39 GMT
   X-Cached: Wed, 02 Dec 2020 09:10:39 GMT
   X-Robots-Tag: noindex
   Link: https://example.com/wp-json/; rel="https://api.w.org/"
   X-Content-Type-Options: nosniff
   Access-Control-Expose-Headers: X-WP-Total, X-WP-TotalPages, Link
   Access-Control-Allow-Headers: Authorization, X-WP-Nonce, Content-Disposition, Content-MD5, Content-Type
   X-WP-Total: 3
   X-WP-TotalPages: 1
   Allow: GET
   X-Cache-Status: MISS
   X-Amz-Cf-Pop: NRT12-C3
   Vary: Accept-Encoding
   X-Cache: Miss from cloudfront
   X-Amz-Cf-Pop: NRT51-C2
   X-Amz-Cf-Id: VQ2Q5vZBFeV9Rg1DSuSjoPTdte6kF9GETQKA8paG-TYbZIoU4pIcZQ==
 長さ: 特定できません [application/json]

HTTP200ですが、WordPressで処理されたデータが返ってきていることがうかがえる内容です。

あまり出番のあるTipsではないですが、知っていると便利です。

Comment