2019年2月24日日曜日

GAE でカスタムドメインにサブドメインを使う場合はちゃんとサブドメインをゾーン管理しなければならない

概要

何がしたいかと言うと https://random.kakakikikeke.com というドメインで GAE にアクセスできるようにしたいわけです
GAE にはカスタムドメインの機能があり好きなドメインを割り当てることができます
今回はサブドメインを使いたいわけです

で、サブドメインを GAE に割り当てたい場合は割り当てたいサブドメインをちゃんとゾーン管理しないとダメでしたという話です
考えれば当然かもしれませんが結構ハマる人というか勘違いする人が多いんじゃないかなと思いました

すでにドメインの管理を Route53 などにしている場合にはサブドメインを管理するゾーンを新規で作成すれば OK ですが、お名前.com はサブドメインを新規のゾーンで管理する機能はありません

ということでサブドメインを Cloud DNS で管理してから GAE にサブドメインを割り当ててみたのでその方法を紹介します

環境

  • Google Cloud DNS (2019/02/21 時点)
  • お名前.com (2019/02/21 時点)

勘違いしそうな点

アクセスしたい URL が https://random.kakakikikeke.com なので「あ、kakakikikeke.com のゾーンに CNAME 突っ込めばいいのね」と思いがちですがそれだとハマります
CNAME だけならそれでも良いかもしれないのですが GAE には SSL 証明書を自動で管理してくれる機能があるためネイキッドドメイン (何もサブドメインが付いていない純正のドメイン、ここで言うところの kakakikikeke.com) に対して A レコードを新規で突っ込まなければなりません

それの何が問題かというと kakakikikek.com はすでにホームページ用の A レコードを持っているため GAE ように更に A レコードを突っ込むと本来のホームページの IP ではない IP が返ってしまいホームページが表示されなくなってしまいます

要するに GAE に割り当てるカスタムドメインを「kakakikikeke.com」のようにすでにネイキッドドメインが A レコードとしてすでに使用されているドメインを使うのではなく 、アクセスしたい URL をサブドメインとする「random.kakakikikeke.com」を割り当てます

で「random.kakakikikeke.com」はまだどこにもゾーンとして管理されていないので今回は Cloud DNS でゾーン管理することにしました
前置き長くなりましたがその手順を紹介します

Cloud DNS に random.kakakikikeke.com のサブドメインを管理するゾーンを登録する

これは簡単です
とりあえずサブドメインを新規ゾーンとして登録するだけです

DNS 名がちゃんとサブドメインになるようにしましょう
ゾーン名は好きな名前で OK です

で新規ゾーンが登録されるとこんな画面になります
まだこのサブドメインのゾーンは使えません
ここに表示されている NS レコードをお名前.com 側の DNS サーバに登録してあげることでサブドメインがちゃんと参照できるようにしてあげます

お名前.com に NS レコードを突っ込む

支持された通り NS レコードをお名前.com 側の DNS に突っ込みます
おなじみのお名前.com NAVI を使って「kakakikikeke.com」の DNS レコードの設定をします

ちゃんと random.kakakikikeke.com の NS レコードとして突っ込みましょう
こうすることで random.kakakikikeke.com にアクセスされたときには Google DNS を参照してくださいねという指示を出すことができます

あとは反映して NS レコードが引けるようなるのを待ちましょう

SOA レコードは Google DNS 側の NS レコードが参照できれば参照できるようになるのでお名前.com 側には追加しません
というか SOA レコードは追加できないので心配せず次に進みます

ウェブマスターセントラルに random.kakakikikeke.com を承認させる

全然関係ないですが、ウェブマスターセントラルだけなぜか別サービスなのが気になります
random.kakakikikeke.com の所有者を確認しましょう
直接上記のリンクからたどっても OK です
GAE のカスタムドメインの設定から「新しいドメインの所有権の確認」からでもいけます

TXT レコードで認証します
下記は Onamae.com での認証方法を選択していますが、この TXT レコードは先程新規で登録した Cloud DNS のゾーンに追加します
(一応 TXT レコードは伏せています、、)

こんな感じで Cloud DNS に TXT レコードを追加すれば OK です

たぶん速攻で TXT レコードが引けるようになるので引けるようになったら確認しましょう
問題なく認証できれば、GAE 側のカスタムドメインの設定に進みます

ここまでしてようやく GAE のカスタムドメインの設定にいけるわけです

GAE のカスタムドメインを設定する

GAE -> 設定 -> カスタムドメインと進みます
先程ウェブマスターセントラルで認証したサブドメイン「random.kakakikikeke.com」が選択できるようになっているので選択します

冒頭述べましたが自分はここで「kakakikikeke.com」のネイキッドドメインをずっと選択してハマっていました、、、
ネイキッドドメインでもいいのですが自分の場合は A レコードが被るのでダメというわけです

「続行」を選択します
モザイクで伏せている部分はプロジェクト ID の部分です

マッピングするドメインを選択します
デフォルトだと www が付いたサブドメインと何も付いていないドメインがマッピングに追加されています
www は正直いらないのですが、まぁそのまま進めました
「マッピングを保存」します

マッピングできれば緑になるので「続行」を選択します

で、ここで問題の DNS レコード情報が表示されます
改めて見るとわかりますが、もしネイキッドドメインを登録すると確かに A レコードが複数になるのでホームページがバグりますね、、、
このレコードたちも当然新規で登録した Cloud DNS のゾーンに登録します

Cloud DNS に GAE のマッピング用のレコードを登録する

先程表示された A, AAAA, CNAMEレコードを登録するだけです

A レコード

AAAA レコード

CNAME レコード
これだけ先頭に www が付きます
たぶんマッピングする URL を選択するところで www 付きのマッピングを削除すればこの CNAME はいらなくなると思います

最終的に Cloud DNS の「random.kakakikikeke.com」のゾーンのレコードは以下のようになります
あとはこれが dig とかで引けるようになれば GAE のアプリにも http://random.kakakikikeke.com でアクセスすることができるようになります

SSL 証明書が自動で設定される

中身は Let's Encrypt ですが Google さんが親切に自動で設定してくれます
少しだけ時間がかかるので待ちましょう

これが OK になれば https でもアクセスできます
ちなみに GAE のカスタムドメインは http, https のどちらでもアクセスできるようです
また既存のドメイン xxxx.appspot.com でもアクセスすることができます

Blogger でも同じようにカスタムドメインを設定したのですが Blogger の場合は既存の URL と http は全部 https にリダイレクトしてくれたのですが、GAE の場合はそのままのようです
もしかすると dispatcher.yaml を使えばリダイレクトすることができるかもしれませんが試していません

最後に

GAE にカスタムドメインをマッピングしてみました
サブドメインを使う場合は新規のゾーン登録が必要なのがポイントです

GAE + お名前.com でカスタムドメインを設定する方法が紹介されていますが、その場合はネイキッドドメインを使っていないことが条件になると思います
今回は Google DNS を使いましたが Route53 でも OK です
Route53 の場合には TXT レコードを使ってサブドメインを委任することができるのでそれを使っても OK だと思います

GAE のカスタムドメインの設定は超簡単みたいな記事が多くありますがすでに使用しているドメインだといろいろ考えることが増え急にレベルが上がるので注意が必要です
というか DNS をある程度自分で管理したことある人じゃないとわからないかもしれません、、、

ちなみに今回の目的である https://random.kakakikikeke.com は Podcast のエピソードをランダムで聴くことができる Web アプリです
「kakakikikeke’s Podcast を聴いてみたいけど、どれを始めに聴いたらいいかわからない」みたいな悩みを持つ方でもこれを使えば気軽に聴けるんじゃないかなと思って作りました
Web 版しかないですが是非使ってみてください

2019年2月23日土曜日

kakakikikeke.com を GCP に移行しました

概要

ホームページや Podcast のホスティングを Google Cloud Platform (以下 GCP) に移行しました
移行したときのメモです

環境

  • macOS 10.14.3
  • gsutil 4.36
  • gcloud 4.36

なんで移行したのか

特に理由はないですが絞り出すと以下の 3 つ

  • 音声ファイルの配信をもっと楽にしたったくらいかなと
  • サービスを管理しているアカウントを一つにしたかった
  • CI しやすいところにしたい

ホームページは GCE

GAE でもよかったのですがホームページが Ruby で書かれており Flexible Environment を使わざるを得なかったので GCE にしました
Flexible でもいんですがだったら GCE かなと
GAE だと証明書の管理が自動化されているのでそこは嬉しかったんですけどね、、

OS は Ubuntu です
docker だけインストールしてあとは特に何もしていません
インスタンスは一番小さい f1-micro です
Always free 枠で絶対収まるくらいのアクセスしかないのでそれにしています
free じゃなくても $3/month ほどです

ファイアウォールのチェックしようね

GCE に適用されている default のファイアウォールは特定のポートがフルオープンです
80, 443 はまぁ良いですが 22, 3389 あたりは絞っておきましょう

Podcast の音声ファイルのホスティングは Google Cloud Storage にまかせる

CDN にもなるし静的ファイルのホスティングもしてくれるので Google Cloud Storage にしました
あと CNAME が設定できるので一応独自ドメインで音声ファイルを配信するようにしています

一点困ったのは CNAME がただのリダイレクトなので https にできない点です
まぁ音声ファイルを配信するだけなのでそこは妥協しました

Google Cloud Storage に CNAME を登録する方法

ウェブマスタツール で自分のドメイン「kakakikikeke.com」の管理者になっていることを確認します (見せたくないドメインはモザイクしています)
自分は Blogger の CNAME を登録するときに認証していたようです

バケット名をアクセスしたい URL で作成します
音声ファイルをアップロードして一般公開にします
Content-Type は一応 audio/aac にしました

念の為 index.html と 404.html を一応配置しておきました
特に何もなくただ文字列を返すだけです (せっかくだから何かコンテンツ載せてもいいかも)

あとは CNAME を DNS に登録します
DNS はまだ Google に移行していない、、、画像はお名前ドットコムの DNS レコードの設定画面です

これで http://sound.kakakikikeke.com/ep0.m4a とかでアクセスできるようになります
Podcast も上記の URL で配信しています

ロギングも有効にしておく

バケットのロギングを有効にしおくと特定のバケットにアクセスログが溜まっていきます
アクセス元などを監視したい場合はオンにしておきましょう
当然ですがログが溜まればストレージの消費量も増えるので料金もあがります

  • gsutil mb -c regional -l us-central1 gs://sound-bucket-log/
  • gsutil acl ch -g cloud-storage-analytics@google.com:W gs://sound-bucket-log/
  • gsutil logging set on -b gs://sound-bucket-log gs://sound.kakakikikeke.com
  • gsutil logging get gs://sound.kakakikikeke.com

追記: feed の enclosure タグにリダイレクト URL は使えない

いざ配信してみてわかったのですが今回の用に CNAME リダイレクトだと Podcast アプリが音声ではないと判断して再生してくれないようです
なので feed は素直に https://storage.googleapis.com/sound.kakakikikeke.com/ で配信するように修正しました、、、
何事も試してみないとわからんですね

それ以外は

あとはこれまで監視に pingdom というサービスを使っていたのですが有料化しちゃったので Stackdriver に移行しました

あと音声ファイルを配信する URL が kakakikikeke.com -> sound.kakakikikeke.com になったので Podcast Connect という Apple が管理する Podcast のポータルサイトからフィードの再読込を依頼しました
たぶんこれをやらないと Podcast クライアントが音源を読み込めなくなりストリーミングできなくなるはず、、、
もしかするとクライアント側がキャッシュしている場合があるのでその場合は一度 unsubscribe してもらえると助かります

あとあと自分のホームページを docker build するときに f1-micro だとメモリが足りなかったのでディスクの領域の一部を swapon しました

たぶん作業的にはこれくらいかなと
だいたい半日もかからないくらいで終わりました

最後に

今までは Heroku とかドッグフードしていたのですが全部 Google にしました
なんか最近はマルチクラウドとかで DR とかしたほうが良いよとか聞きますが全部 Google で完結していると管理がめっちゃ楽です

今後はクラウドで何かホスティングとかしたい場合はまずは GCP で探してなければ GCE で自分でやるか、それが相当面倒なのであれば外部の別のサービスを使うくらいにしようかなーと思います

ちなみにサイトや Podcast はこれまで通りhttps://kakakikikeke.comhttps://kakakikikeke.com/podcast でアクセスできますのでよろしくお願いします

参考サイト

2019年2月2日土曜日

ギガを気にする生活

最近は何かとそんな気がする
自分は携帯キャリアの 2 年縛りとか WiMAX2 の 2 年縛りとかは縛りが解消されたら必ず別のキャリアもしくはプロバイダと再契約し直すようにしている
理由は単純でそちらのほうがお得だからである

何がお得か

お得な点はだいたい金銭的な面が多く、新規契約するとキャッシュバックを受けられたり契約から数ヶ月の間は引っ越しキャンペーンとかで安くなったりするのである

逆にいうと縛りが終了してもそのまま契約しているとキャンペーンも終了し通常のお値段に戻るのでいつも払っていた金額より少し多く払うことになる (まぁそれが普通のお値段なので多くはないのだが)

面倒な点

なので多少面倒な手続きをしなければならないが自分は縛りが終了すると別のところに毎度引っ越ししている
引っ越し時の面倒な点にも少し触れておくと例えば携帯キャリアの引っ越しの場合にはナンバーポータビリティ (MNP) などの手続きが必要になる
単純に別のキャリアと契約する必要があるので契約書類の記載や個人を証明できる書類の提出やクレカの登録なども必要になる

また新規登録の場合には事務手数料といった「初期費用」もかかることになる
この初期費用も結構バカにならず 1 万くらい取るところもある
そして大抵の場合はまたそこから 2 年縛りが発生するの感じだ

当然だが 2 年縛りにはおなじみの契約更新月があるので、そこで手続きするようにしている

契約プラン

ここで登場するのがプランの問題
三大キャリアのプランを見ると大抵の場合は 5GB が普通のプランで 4,000 から 5,000 円 くらい (高すぎ)
それ以下の容量だと月額料金が少し安くなり、それ以上の容量だともっと高くなる
また容量が足りなくなった場合は追加で 1GB 単位で購入することもできる

キャリアはいろいろと策を売っており家族で入ると割引になったり長期間使っていると割引になったりするようなキャンペーンをやっている
まぁそれはキャリアの頑張りなので良いと思う

難しいなと思うのは最近良く見る「キャリアでも格安 SIM ばりに安くなりますよ」的な広告
確かに安くなるのだがいざ箱を開けてみると容量が 500MB しかなかったり 1GB しかなかったりする
スマホ時代の今でもほとんどネットを使わない人なら問題ないが大抵の人は SNS やソシャゲをする
そうなると確実に容量が足りなくなるのである

そんな場合どうやって対応するのか人それぞれだとは思うが自分は大きく以下の 3 つだと思う

  • お金を払って大容量のプランに入る
  • 容量を追加する
  • 別の回線を使う

でここでは「別の回線を使う」についてもうちょっと考える

キャリア以外の通信回線

いわゆる光回線とか WiMAX2 とかである
最近ってわけではないが三大キャリアと契約しているともれなく光回線も契約させられるケースがあるので自宅に固定回線を引いている人が多いと思います
自分はもう 10 年以上固定回線を引いておらず状況が制限周りの使用が分からないのであまり触れませんが、少なくともベストエフォートサービスを歌っており混雑時には自ずと通信制限になるのではと思っています

で自分が使っているのが WiMAX2 です
これも 2 年縛りがあり毎度乗り換えています
多くのプロバイダが提供する WiMAX2 には「ギガ放題」というプランがあり多くの人がこのプランに加入していると思います
自分もそうでした
「月額使いたい放題」なので容量を気にしなくていいと思いきや気にしなければいけません
ギガ放題で通信制限を受ける条件は 2 つあり

  • 10GB/3日
  • 4G LTE 側の制限

下は WiMAX2 と LTE 回線を混在で使うケースであまり使っている人は多くないと思います
ルータに LTE 用の SIM が入っており、それを使って LTE 回線で通信します
当然そちらにも使える容量が決まっておりその上限になると制限がかかります

10GB/3日の制限

問題はそちらではなく 10GB/3日 のほう
要するに 3 日の間で 10GB 使っていると制限状態になりますよという条件
これが厄介で次の日になると解消されるというわけではなく次の日になると、その前と前々日からの合計が 10GB になっているとまた制限の状態になります
つまり毎日 3GB 以上使っていると永遠に制限状態になります

自分の場合、月 170GB ほど使います
理由はわかっており Youtube と AmazonPrime と AbemaTV です
それらを見ているとあった言う間に 10GB/3日の制限に引っかかります
当然制限状態になります

が普通に視聴できます、なぜか
実は WiMAX2 の場合制限がかかっても 1Mbps はでます
かつベストエフォートサービスなので回線が混雑していないお昼とかは制限が掛かっていてもストレスにはならないレベルで通信できます
もちろん夕方からゴールデンタイム、深夜あたりに掛けては制限+混雑でかなり重たくなります

結局何がいいたいかというと WiMAX2 でも (たぶん光回線でも) ギガ放題などということはなく制限がかかってしまうということです

最近出てきた無制限 Softbank 回線

いわゆる Pocket-Wifi です
発端は 1 年くらい前だと思います
最近だとたくさんありますが FUJI Wifi などが初期かなと思います
で衝撃だったのが「LTE 回線使い放題」です

初めは「はいはいどうせ 10GB/3日とかあるんでしょ」とか思っていましたがガチで無制限だったようです
「だったようです」そうお察しの通り今はがっつり制限がかかります
だいたい 100GB が上限のようでそれ以上使うと 128kbps の制限になり翌月になるまで制限の状態のようです
プロバイダのサービスによっては容量を追加購入できるかもしれないのですが大抵のプロバイダは追加購入できず、ただ翌月まで待つしかありません

ここで大問題なのが 128kbps しか出ないということ
冒頭に触れたキャリアのプランで契約しているプランの容量を超えると 128kbps 状態になります
まさにその状態が Pocket-Wifi でも起こります
この制限は WiMAX2 よりタチが悪いです
WiMAX2 の場合制限が掛かっていてもギリギリ使えました
が、Pocket-Wifi の場合、全く使い物になりません
本当に何もできないのでどうしようもありません

ただただ翌月のリセットを待つしか無いのです

制限にかからないためにギガを気にする生活をしなければならない

まぁ要するにそうならないためにギガを気にしなければいけないということです
キャリアしかり WiMAX2 でも Pocket-Wifi でもそうだということです
最近だとマイページやルータにログインすると通信量カウンターがあり一ヶ月でどれくらい使用しているか確認することができます

たぶんそれらを駆使していい感じに容量を使い切るような生活スタイルにしていかなければならないのではないかと思っています

例えば Youtube などは何も気にせず視聴していると回線の状況が良いと勝手にフル HD にしてくれます
最近だと 4K 動画もあるようで 4K になることもあります
そうなると大変です
あっという間に 100GB なんてなってしまいます
ましてや携帯の場合は容量も小さいのであっという間にキャリアの上限に引っかかります
なので視聴する際は 144p or 240p に固定して視聴するようにします

FireTV Stick でも「環境設定」->「データ使用量の監視」をオン->「ビデオ画質を設定」->「標準画質」とかしています

音楽ストリーミングだと Spofity などは通信を節約できるモードがあるのでそういうの使ったりします

そんな感じでギガを気にしなければならないのかなと思います
特に家族がいる場合はそんなこと知ったこっちゃないってことでガンガンダウンロードしたりするので注意が必要です

固定回線を引こう、たぶんそれが安牌

いろいろ書きましたが、実は容量なんてあまり気にしていない人が多いと思います
なぜこんなことを書いているかというと今携帯の SIM がマイネオさんで契約しており自宅の回線が Star Wifi で契約しています
どちらも制限がかかると 128kbps になってしまうからです

そんなジレンマから解消されるにはたぶん自宅に固定回線を引くのが良いんだと思います
工事したり家に弁当箱みたいなでっかいモデムとルータを置かなければいけないので面倒ですが (たぶん) 容量とか気にしなくて済むと思います
ただベストエフォートなので混雑はどうしようもないですが、、、
混雑すら嫌だって人は「専用線」を引くしかないのかなと思います
自分は引いたことないですが法人向けっぽいのでお値段もそれなりにすると思います
そもそも個人で契約できるのかってのもありますが

今後どうするか

Star Wifi は契約したばかりなのでとりあえず 3 ヶ月くらいは使ってみようと思います
マイネオさんは特に不満な点はないので今後も継続すると思います

どちらも縛りのないプロバイダさんなのでいつでも解約できるので、全然容量がダメってことであればさっさと解約して次に移ろうと思います
たぶんまた WiMAX2 を契約するんじゃないかなと思っています
ただ、初期費用問題もあるのでさすがに一ヶ月ごととかは厳しいかなと、、、

ということで 2019年はギガを気にしながら生活していこうと思います
動画見るの好きだから辛い、、、
世の中の皆さまはどうやってギガと付き合っていってるのだろうか