CDN

CDNの機能はアルファでの提供です。

プロバイダーを選ぶ

サイトが一度に使えるCDNのモードは1つで、そのサイトでコンテンツを配信するすべてのドメインが対象になります。既定は none で、CDNを挟まずに直接配信します。モードは kamakiri cdn で設定します。

Cloudflare で公開する

kamakiri cdn cloudflare を実行します。追加する確認用のレコードが表示され、すべてのドメインが Cloudflare 経由でHTTPS配信されるまで待ちます。

$ kamakiri cdn cloudflare
✓ CDN set to Cloudflare

Configure your DNS (Cloudflare validation):
    add TXT  _cf-custom-hostname.www.example.com → <token>

  Add the record above at your registrar, then come back.
  Safe to close any time (Ctrl-C). Re-run `kamakiri cdn verify` or `kamakiri status` to resume.

✓ Cloudflare validated (~25m)
✓ DNS pointed at the Cloudflare edge
✓ SSL certificate checked
✓ live via Cloudflare: https://www.example.com
$ kamakiri cdn cloudflare
✓ CDNを Cloudflare に設定しました

DNSを設定してください(Cloudflare の確認用レコード):
    TXTを追加  _cf-custom-hostname.www.example.com → <token>

  上記のレコードをレジストラで追加したら、戻ってきてください。
  いつでも閉じて構いません (Ctrl-C)。`kamakiri cdn verify` または `kamakiri status` を再実行すると再開できます。

✓ Cloudflare の確認が完了しました(約25分)
✓ DNSを Cloudflare のエッジに向けました
✓ SSL証明書を確認しました
✓ Cloudflare 経由で公開中: https://www.example.com

トラフィックは、直接配信で使っているレコード、つまりドメインを宛先に向けるレコードを通って Cloudflare に届きます。宛先とは、独自ドメインの手順で設定した kamakiri-pages.site 配下のホストです。そのレコードがない場合や別の場所を向いている場合は、コマンドがそのレコードを表示して待ち続けます。

Cloudflare は example.com のような Apex ドメインを配信できません。コンテンツを配信するドメインに Apex があると、コマンドは何も変更せずに拒否します。www. のサブドメインをコンテンツを配信するドメインにして、Apex からそこへリダイレクトしてください。手順は独自ドメインにあります。Apex は WebAccel でも、CDNなしでも使えます。

WebAccel で公開する

WebAccel には、さくらのクラウドのAPIトークンとそのシークレットが必要です。トークンはさくらのクラウドのコントロールパネルの「APIキー」で、アクセス権をウェブアクセラレータのみ、アクセスレベルをリソースの作成と削除ができるものにして発行してください。CIでは、2つの値をフラグではなく KAMAKIRI_CDN_TOKEN と KAMAKIRI_CDN_SECRET で渡してください。

kamakiri cdn webaccel を実行します。ドメインごとに WebAccel のリソースを作り、それぞれに2つのレコードを順に求めて、反映を待ちます。

$ kamakiri cdn webaccel --token <token> --secret <secret>
CDN set to WebAccel.
✓ WebAccel resource created/updated

Add this DNS record to prove you own the domain (phase 1 of 2):

    _webaccel.shop.example.com  TXT  webaccel=ubol03ca.user.webaccel.jp

  Add the record above at your registrar. This proves ownership only; it does not
  move any traffic yet (the cutover is the next record).
  Safe to close any time (Ctrl-C). Re-run `kamakiri cdn verify` or `kamakiri status` to resume.

✓ domain ownership verified
✓ WebAccel enabled

Add this DNS record to send traffic to WebAccel (phase 2 of 2, the cutover):

    shop.example.com  CNAME  ubol03ca.user.webaccel.jp.

  This is the cutover: once it resolves, public traffic flows to WebAccel and
  WebAccel issues the HTTPS certificate. A brief HTTPS gap is normal while it does.
  Safe to close any time (Ctrl-C). Re-run `kamakiri cdn verify` or `kamakiri status` to resume.

✓ your delivery CNAME is live (traffic now flows to WebAccel)
✓ SSL certificate checked
✓ live via WebAccel: https://shop.example.com
$ kamakiri cdn webaccel --token <token> --secret <secret>
CDNを WebAccel に設定しました。
✓ WebAccel リソースを作成・更新しました

ドメインの所有権を証明するため、次のDNSレコードを追加してください(手順1/2):

    _webaccel.shop.example.com  TXT  webaccel=ubol03ca.user.webaccel.jp

  上記のレコードをレジストラで追加してください。これは所有権の証明のみで、
  トラフィックはまだ移動しません(切り替えは次のレコードです)。
  いつでも閉じて構いません (Ctrl-C)。`kamakiri cdn verify` または `kamakiri status` を再実行すると再開できます。

✓ ドメインの所有権を確認しました
✓ WebAccel を有効にしました

WebAccel へトラフィックを送るため、次のDNSレコードを追加してください(手順2/2、切り替え):

    shop.example.com  CNAME  ubol03ca.user.webaccel.jp.

  これが切り替えです。解決されると公開トラフィックが WebAccel へ流れ、
  WebAccel がHTTPS証明書を発行します。その間、HTTPSが短時間途切れることがあります。
  いつでも閉じて構いません (Ctrl-C)。`kamakiri cdn verify` または `kamakiri status` を再実行すると再開できます。

✓ 配信用CNAMEが有効になりました(トラフィックは WebAccel へ流れています)
✓ SSL証明書を確認しました
✓ WebAccel 経由で公開中: https://shop.example.com

TXTレコードはドメインの所有権を証明するためのもので、トラフィックは動きません。2つ目のレコードが切り替えで、ドメインを割り当てられた WebAccel のサブドメインに向けます。WebAccel が証明書を発行するまで、しばらくHTTPSがつながらないことがあります。Apex の場合、2つ目のレコードは ALIAS か ANAME にする必要があります。お使いのレジストラが Apex でこれを設定できない場合は、www. のサブドメインをお使いください。

プロバイダーを切り替える

切り替え先のプロバイダーのコマンドを実行します。WebAccel のサイトなら kamakiri cdn cloudflare、Cloudflare のサイトなら kamakiri cdn webaccel です。切り替えは直接配信を経由するので、少しのあいだCDNなしで配信されますが、サイトが止まることはありません。WebAccel から移る場合は、まず各ドメインを宛先へ向け直すよう求められ、そのあと切り替え先で必要なレコードが表示されます。

切り替えは対話的なターミナルで実行してください。--no-wait を付けた場合やターミナルがない場合、コマンドはCDNを無効にするところまでを行い、直接配信に戻ったあとに実行するコマンドを表示します。

CDNをやめる

kamakiri cdn none を実行します。DNSで何を変えるかは、やめるプロバイダーによって変わります。

WebAccel をやめる場合、各ドメインは WebAccel のサブドメインを向いているので、宛先へ向け直してください。www.example.com のようなホスト名ならCNAME、Apex なら ALIAS、ANAME、またはAレコードです。新しいレコードが反映されるまで WebAccel のリソースが配信を続けるので、途切れることはありません。

$ kamakiri cdn none
✓ CDN deactivated
  The WebAccel resource(s) for www.example.com remain in your Sakura account.
  Run `kamakiri cdn cleanup` to delete them (repoint your DNS off them first, or those domains go down).

Configure your DNS:
  www.example.com  CNAME  → h1lc-qpb6r87d79wfblfj.c1.kamakiri-pages.site.

www.example.com
  Update the DNS record above at your registrar, then come back.
  Safe to close any time (Ctrl-C). Re-run `kamakiri domain verify www.example.com` or `kamakiri status` to resume.

✓ DNS propagated
✓ SSL certificate provisioned
✓ live: https://www.example.com

(note: if your browser shows an error, DNS might not have propagated close to you)
$ kamakiri cdn none
✓ CDNを無効にしました
  www.example.com の WebAccel リソースはお使いのさくらのクラウドアカウントに残ります。
  `kamakiri cdn cleanup` を実行すると削除できます(先にDNSを向け直してください。そのままだと該当ドメインが停止します)。

DNSを設定してください:
  www.example.com  CNAME  → h1lc-qpb6r87d79wfblfj.c1.kamakiri-pages.site.

www.example.com
  上記のDNSレコードをレジストラで更新したら、戻ってきてください。
  いつでも閉じて構いません (Ctrl-C)。`kamakiri domain verify www.example.com` または `kamakiri status` を再実行すると再開できます。

✓ DNSの反映を確認しました
✓ SSL証明書を発行しました
✓ 公開中: https://www.example.com

(ブラウザでエラーが表示される場合、お近くまでDNSが反映されていない可能性があります)

あとで WebAccel を使い直すと、同じリソースと同じ WebAccel のサブドメインが再利用されます。ドメインは以前と同じ WebAccel のサブドメインに向け直してください。

Cloudflare をやめる場合、レコードはもともと宛先を向いているので、変更は必要ありません。サイトは自動で直接配信に戻ります。

WebAccel のリソースを削除する

WebAccel のリソースは、削除するまでお客様のさくらのクラウドのアカウントに残り、そのあいだ、さくらのクラウドの料金もかかり続けます。CDNをやめても、プロバイダーを切り替えても、ドメインを外しても、サイトを削除しても、リソースは残ります。削除を待っているリソースの数は、kamakiri cdn と kamakiri status に表示されます。

kamakiri cdn cleanup は、DNSを確認せずに削除します。ドメインがまだ向いているリソースも削除され、そのドメインは向け直すまで止まります。サイトで WebAccel をやめてリソースを削除するときは、次の順番で実行してください。

  1. kamakiri cdn none を実行し、各ドメインを向け直します。
  2. kamakiri domain verify <domain> で、そのドメインがCDNなしで公開されていることを確認します。
  3. kamakiri cdn cleanup を実行します。

ドメインを外したときや、Cloudflare に切り替えたときに残ったリソースは、もう使われていないので、kamakiri cdn cleanup だけで削除できます。そのために kamakiri cdn none を実行すると、サイト全体がCDNから外れます。

これらの手順は kamakiri teardown の前に行ってください。サイトを削除したあとは、さくらのクラウドのコントロールパネルからしか削除できません。

Cloudflare では削除するものは残りません。ホスト名は、どのドメインにも使われなくなった時点で自動的に削除されます。

キャッシュとデプロイ

CDNを使っているあいだは、デプロイとロールバックがCDNのキャッシュを自動でクリアします。その ✓ 公開中 の行は、CDNを通した配信でも新しいファイルが届いているという意味です。デプロイせずにキャッシュだけをクリアするには、kamakiri cdn purge を実行します。

ドメインがCDN経由で配信されなくなったとき

公開中のドメインの配信レコードが、割り当てられた先を向かなくなると、kamakiri cdn と kamakiri status はそのドメインを警告として表示し、戻すべきレコードを示します。そのあいだも、サイトはいまの設定のまま配信を続けます。レコードを直してから kamakiri domain verify <domain> を実行すると、DNSを再確認し、ドメインがふたたび公開されるまで待ちます。