ブログをConoHaからS3に移動しました

ホストの引っ越しついでにDark Advent Calendar 2017の23日目の記事です。 余裕の遅刻です。

概要

ConoHa VPSからS3+CloudFrontに引っ越しました。

発端というか愚痴

ConoHaの運営から以下のメールが来ました(一部抜粋)。
Twitterを検索すると、似たようなメールが来て止められている事案がちらほらあるようです。

1
2
3
4
5
6
7
8
9
10
上記IPアドレスにてご利用のVPSにつきまして、CPUの使用率が
高い状況が継続しております。

一時的なものであれば問題ございませんが、継続する場合、
収容ホストへの負荷影響や、他のお客様への影響が懸念されます。

そのため、大変恐縮ではございますが、該当VPSのシャットダウンを
実施させていただきました。

なお、ご運用状況の見直しもご検討くださいますと幸いです。

半年くらい前から1GBと2GBの2つのプランのVPSでマイニングをしていました。 CPU使用率がほぼ0%だとこちらが損だったので出来る限り使っておきたかった、かつ変なコインが欲しかったのもあり、採算度外視で掘り始めました。
2GBの方は blog.mihyaeru.com を運用していたサーバーです。 1GBの方は、もうちょっと掘りたくなったので2GBの方で掘り始めて数日経ったくらいの頃に追加して、マイニング専用としていました。

止める前に警告を出してから止めるならわかるのですが、いきなり止めた後に事後報告をしてくるという姿勢と、こちらは100%使わないと損なのに100%使ってはいけないという運営の方針が嫌だったので、言われた通り「運用状況の見直し」として全て解約して別の場所に乗り換えることを即座に決めました。

AWSをいじる練習として、いずれS3に乗り換えるつもりだったので良い機会になりました。
これでお互い幸せなんだと思います。

引っ越し

やりたかったのは、S3 + CloudFront + 独自ドメイン + HTTPSという構図です。
詳しい手順については、それぞれリンクした記事などを参照すれば良いので書きません。

第一段階: 新規WebサイトでS3 + 独自ドメイン + HTTPS

参考: https://qiita.com/Ichiro_Tsuji/items/c174d580587a622d3358#fnref1

wwwsample. というサブドメインで作っていました。
問題なく順調に終わったので特に書くことは無いです。

第二弾階: 新規サイトでS3 + CloudFront + 独自ドメイン + HTTPS

参考: https://qiita.com/74th/items/62aaf34c080e747ba420

ドメインの認証に使うためのメールアドレスの用意に手こずりました。 MXレコードを設定し忘れたため、メールを受信できていないというオチでした。 実はメールで認証する必要はなく、DNSレコードをいじることで認証することができました。 参考にした記事が1年以上前のものだったので、新しい方式が追加されたことがわからない感じでした。

もう1点ハマったのが、「US Eastリージョンの証明書でないとCloudFrontで使用できない」という点です。
明らかに証明書を作成できているのに、それをCloudFront側から参照できなくて???となっていました。
最終的に https://stackoverflow.com/questions/44230614/aws-cloudfront-custom-ssl-certificate-disabled にたどり着いてこの事実を知りました。

第三弾階: ブログをS3 + CloudFront + 独自ドメイン + HTTPSに移動させる

お試しサイトを動かしたことでやり方は全て理解したので、ほとんどはさくさくーっとできました。
いくつかハマったのでメモっておきます。

なぜか blog.mihyaeru.com にアクセスすると、S3ぽいURLにリダイレクトされてしまうという問題が発生して謎でした。
アクセスログを見たらstatusが307になっていたので、「s3 cloudfront 307」とかでググったら http://miyasakura.hatenablog.com/entry/2016/12/28/200000 が見つかり、Invalidateして事なきを得ました。

その後もう1つ、 /archives/ のような root 以外のディレクトリにアクセスした際に /archives/index.html が表示されるのではなく403だか404ぽくなってしまう問題が発生しました。
これもテキトーにググッた結果 https://qiita.com/naoiwata/items/3c6626cbeacbb44d4aa8 が見つかり、CloudFrontでS3のバケットを直接originに設定せずに、WebホスティングしているURLをoriginに設定することで、想定通りの動きになってくれました。

Hexoのデプロイ

hexo-deployer-s3hexo-deployer-s3-cloudfrontがあり、CloudFrontを噛ませている場合はInvalidateを実行するために後者の方を使うのが楽そうな感じでした。
が、地味にhexo-deployer-s3からフォークした後に差が開いてしまっているようで、「なんで本家にオプション機能としてマージしなかったんだー」感が強くなってしまい、hexo-deployer-s3を使いつつInvalidateはaws-cliでやることにしました。どっちみち make deploy でラップしているので手間は変わらないかなーという感じです。

終わりに

数時間でできると思っていたらハマりまくりで、けっこう時間を使ってしまいました。 その代わりS3, CloudFront, Route 53, ACM, SNS, SESあたりをざっくりいじったりドキュメントを読んだりできて良い経験になりました。
参考にした記事だけだと基本的な情報が不足していたので、いじった周辺の公式も後から読みました。 やはり基本から順を追って説明してくれる公式のドキュメントはありがたいなと感じました。 ドキュメントがしっかりしていると入門者的にとてもありがたいです。

マイニングは、とりあえず家で余っているPCたちで細々とやっていきます。
年明けたら仮想通貨の取引で儲けた分でマイニング用のマシンを組もうかなと考えています。

それでは良いお年を(?)。