AWSとPelicanによるブログの移転

ブログを移転する

はじめに

はてなブログを使っていたけれど、SSLとか、表示される広告とか、なんだかんだR18を取り扱えないところとか、いろいろな点でブログを移転させようと思う。前にも考えて結局やめたけど。なんかAWSを触りたかったのもある。
それに、はてなブログでやっても他のサービスでやってもたぶん閲覧者数とか変わらないだろう。検索エンジンか、Twitterから訪問してくださる方が多いので。
移転と言っても新しく作り直すようなもので、元のブログにある記事は愛ある手動でそのうちに移動させようと思う。たぶんしなさそう。

移転過程

使うもの

AWSに触りたい欲があったから、もちろんAWSを使う。しかし安直にEC2を使うとなると、いかんせん高くついてしまう。t2.nanoとはいえMastodonとVPNで2つも使っていて、これ以上は勘弁願いたい。
ではどうするのか。S3でホスティングしよう。それに聞くところによると横綱らしいRoute53+CloudFront+S3の構成にする。
S3だけでも静的ウェブサイトをホスティングできるが、SSLは不格好なURLでないと使えないし、Route53で独自ドメインにするとSSLを使えない。しかしCloudFrontでクライアントとCloudFrontまでのSSL化ができて、SSL enabledの喜びが胸いっぱいに広がるだろう。
ホスティングの方法は決まった。では次になにを配信するのか。私にはHTMLもCSSも書けない。HTML書いたとして、できるのはミニマリストでも要素が多いだろうページだ。
話に聞くwixはよく知らないが広告が出るだろう。という訳で安直にWordPressを使う。と思って使ってみたら上手く動いてくれない。プラグインで静的ページを出させようとしても、何か悪いのか、とにかく終わらない。StaticPressならいざ知らず、SimplyStaticはS3とのかみ合わせが悪く、S3コンソールからの手動更新を強いられる。
困ってしまった。WordPressを使えないと私は何もできないのか。

しかし世界はやさしさにあふれている。

なにも静的ページを生成するのにわざわざWordPressを使う必要はない。StaticGenを見てみれば、たくさんの静的ページ生成のフレームワーク的サムシングが利用可能である。
私はPelicanを選んだ。それはひとえにPythonなのと、ペリカンが鳥だからだ。

作業

Pelican編

まず動作環境を得なければならない。ここでもAWSを使おう。EC2でLinux環境を……と言いたいところだが、それではブログを書くに辛すぎる。だからCloud9の開発環境を使う。
数クリックで開発環境が立ち上がって操作可能になる。楽に構築すると下のコンソールがAmazonLinuxなのが気に障るが、慣れれば意外に問題ない。
あーだこーだやってとりあえず環境立ち上げと初期設定に成功した。ドキュメントを読んでコピーアンドペーストでも赦されるだろう。あなたにせきにんはありません。
それにしてもドキュメントとか参考文献とか英語ばっかりでやりにくい。別に日本語で書いてあったとして負荷は変わらないだろうけど。

make html

これで静的ページが生成される。t2.nanoでもそれなりに速く生成できる。
このままCloud9の上からS3バケットに投げることができる。セットアップ時に投げたいバケット名を入力して設定が終わっていれば

make s3_upload

でS3へのアップデートが成功する。らくちん。

AWS編

いよいよホスティングを始めよう。事前にバージニア北部リージョンのAmazonの証明書サービスでSSL証明書を作っておこう。

  1. S3での作業
    1. AWS Policy Generatorでポリシーを作って、アップロードしたバケットにパブリックアクセスを有効にする。
    2. 静的ウェブサイトのホスティングを有効にする。この時に表示されるエンドポイントが後に必要になる。
  2. CloudFrontでの作業
    1. 新しくCloudFront Distributionsを作る。
    2. オリジンを指定するが、サジェストされるものではなくS3の作業中に得たエンドポイントを使おう。そうするとサブディレクトリでもindex.htmlにリダイレクトできる。代わりにCloudFrontとS3の間の通信がSSLにならないが、Amazonを信じるしかない。
    3. SSL証明書を指定したり、その他必要な設定を埋める。
    4. サブドメインを使うならCNAMEsのところにsub.mainを入力しよう。
  3. Route53での作業
    1. CloudFrontのドメイン(hogehoge.cloudfront.net)を独自ドメインのAレコードに入れる。

ここまで来たらあとはもうCloudFrontの展開が終わったり、DNSが浸透(浸透とは言わない)したらそのドメインでページにアクセスできるようになるだろう。ダメだったら私は全く頼りにならないので、他のもっと詳細に書いてあって分かりやすい記事を参照して欲しい。

その他

ページができたてで変更が多い時は、CloudFrontのキャッシュが邪魔になるからTTLを弄ったりInvalidationでキャッシュを破壊したりすると気持ちがいい。
CloudFrontをちょっとでも安くするためにキャッシュ配送範囲を狭めている。どうせ日本語のブログなので世界の人々は見向きもしないだろう。

おわりに

せめてこれから1週間に1回は更新したいと思う。
それとなんだかあまりにも色々とAWSに依存していて、そのうち生命活動もAWSに委託してしまう気がする。

参考

AWSにおける静的コンテンツ配信パターンカタログ(アンチパターン含む)|クラスメソッドブログ

Pythonistaのための静的Blogエンジン'Pelican'とAmazon S3でブログを公開する方法