ぐりです。久しぶりに,技術系の記事です。
先日,技術書典4にサークル参加する準備をしているときに,名刺を見たらブログのURLが前のものでした。旧ブログを運用していたVPSサーバはもう契約していないので,どうにかして旧ブログのURLからこのブログへリダイレクトする必要があることに気がつきました。技術書典でその名刺を配ってしまってから,もう数日が経ってしまっていますが,どうにかリダイレクトが実現できたので,その方法を紹介します。
「さくらのレンタルサーバ」だと無理!?
さくらのレンタルサーバを契約しているので,旧ブログのドメインを割り当てて,.htaccessを書くとか,リダイレクトするHTMLを置くとかを考えました。
しかし,さくらのレンタルサーバの独自ドメインは自由度が低く,「あるサブドメインにAレコードを設定して,それだけさくらのレンタルサーバ」という設定ができないようでした。もしそれができたなら,技術書典の会場に着くまでにスマホでどうにか設定出来たのですが…
CNAMEでこのブログのURLを指定する??
よく考えればわかりますが,絶対に無理です。
このブログは,tlt.gurigoro.netからCNAMEレコードでhatenablog.comを指定することで,独自ドメインからアクセスできるようになっています。この設定は,はてなブログが指示しているものです。
旧ブログのサブドメインからCNAMEレコードでtlt.gurigoro.netを指定してあげればいいんじゃないかと思ってやってみましたが,はてなブログの404ページが出るだけでした。よく考えてみれば,はてなブログ側から見たら,旧ブログのURLに対応したブログを返そうとするわけで,そもそもリダイレクトにすらなっていません。
クラウドでどうにかする
全然使ったことがなかったAWS(Amazon Web Services)とかAzureを検討してみることにしました。AWSのEC2とかを使ってしまったら,VPSを使っていた頃に後戻りなので,それを避けて今流行りのサーバーレスで出来ないかと考えてみました。
そこで,旧ブログのサブドメインのアクセスをAWSのAPI Gatewayで受けて,Lambdaを通してこのブログのURLを301で返すことでリダイレクトしようということにしました。
Lambdaでリダイレクトを実装
ググると,やりたいことそのままの記事が見つかったので,基本的にそれをなぞるように実行していきました。参考にした記事は次のものです。
この記事では,リクエストのパラメータに書いてあるURLにリダイレクトする,というプログラムになっていますが,今回はリダイレクト先はこのブログのトップで固定なので,リクエストは触る必要はありません。Lambdaに書いたプログラムを次に示します。
この記事を最後まで進めると,実際にリダイレクトができることを確認できましたが,AWSのドメインで,目的のサブドメインではありません。そこで,次にこのAPI Gatewayを目的のサブドメインから叩けるようにします。
独自ドメインからAPI Gatewayを叩く
こちらも,やりたいことそのままの記事がありました。
ただし,この記事では,SSLの証明書を直接指定しています。この為だけにわざわざLet's Encryptとかで証明書を取るのも面倒なので,AWSの一部のサービス上で無料で使用できるSSL証明書をCertificate Managerで取得して,それを使用しました。次に示す記事の後半の「Certificate Managerで証明書を作成する」を参考にしました。
API Gatewayでサブドメインの設定が終わったら,旧ブログのサブドメインにCNAMEレコードを追加します。CNAMEの宛先は,「エンドポイントの設定」の「ターゲットドメイン」にあるcloudfront.netのサブドメインを指定します。
これで設定は全て終了です。実際に試してみて確認します。
ちなみに,この記事で「旧ブログのURL」とか「旧ブログのサブドメイン」と言いつつ,実際のURLを出さないのは,余計なリクエストを減らす為です。一応無料で利用できる範囲ですが,無駄に使うのはちょっと嫌なので。
また,このブログを移転してしばらくの間は旧ブログの各ページからこのブログに301のリダイレクトをかけていた頃もありました。その間に検索のインデックスはこのブログに移っていると信じたいです。