Google Cloud Storage に静的サイトを置きたいけれど、どこから手をつければいいかわからない、という方はいませんか? 友だちとファイルを共有するたびに Storage にアップロードして「公開」を押すのは面倒ですよね。この数日、仕事の必要があって調べてみました。最初は、ドメインを設定してファイルを共有するだけでいいと思っていました。しかし調べてみると、ほかにも細かいコツがたくさんあることがわかりました。たとえば、アップロードするたびにファイルを公開設定するのは本当に面倒ですが、バケットに設定しておけば、新しくアップロードされたファイルはデフォルトで公開されるようにできます。インデックスや 404 ページのデフォルトのファイル名も設定できます。さらに、解決策がないと思っていた SSL の問題にも、公式ドキュメントに良い解決策が載っていました!

詳しくは公式ドキュメント Hosting a Static Website を参照してください。内容はとても充実しています。ここでは簡単に説明し、私の感想も共有します。

gsutil ツールは必ずインストールしておく必要があります。まだインストールしていない方は、こちらからどうぞ:Install the Google Cloud Tools。

この記事では次の内容を取り上げます。

  • Storage で自分のドメインを設定する
  • 独自ドメイン + SSL
  • アップロードしたファイルをデフォルトで公開にする
    • 現在のファイルをすべて公開にする
  • index と 404 のデフォルトのファイル名を設定する

独自ドメイン

Storage では公開ファイル用の URL が一つ提供されています。たとえば次のようなものです。
https://storage.googleapis.com/s.ntust.me/ncc.png
しかし、Storage にWebサイトをデプロイするなら、この URL は使いたくないと思うでしょう。やはり自分のドメインを紐づけたいですよね!

まず、紐づけたいドメインを Google ウェブマスターツールで所有権を確認し、そのドメインの CNAME を設定します。

s.ntust.me  CNAME  c.storage.googleapis.com

次に、バケットを作成します。名前はドメインと同じにする必要があります。これで完了です!

ファイルをアップロードして公開に設定してみてください。公開リンクは依然として Google のデフォルトのものになりますが。

https://storage.googleapis.com/s.ntust.me/ncc.png
少し修正するだけです。https を http に変えて、storage.googleapis.com を取り除けばOKです。自分のドメインにファイルのパスを付けただけの形になります!
http://s.ntust.me/ncc.png

SSL

お気づきのとおり、独自ドメインでは SSL が使えません。これはまさに差別待遇ですね!! ただ、心配はいりません。公式ドキュメントにも解決策があります。Cloudflare などの CDN は SSL 機能を提供しています。ドメインを CDN に紐づけて、CDN から Storage へトラフィックを転送させればよいのです!

アップロード後に自動で公開する

Storage にファイルをアップロードするたびに「公開共有」を設定しなければならないのが、いちばん面倒です。ファイルが多かったり、フォルダーがあったりすると、本当に嫌になります。また、同じ名前のファイルを上書きアップロードした場合も、もう一度設定する必要があります。ただ、gsutil を使えばこの問題を処理する方法がたくさんあります!

バケットに新しくアップロードされたファイルをデフォルトで公開にします。これはバケット単位でしか設定できず、既存のファイルには遡って適用されません。

 gsutil defacl set public-read gs://s.ntust.me

特定のフォルダー(またはバケット)配下のすべてのファイルとディレクトリを公開にします。

gsutil acl set -r public-read gs://s.ntust.me/iatp

index と 404 ページの設定

Apace や Nginx では、index.html がデフォルトでホームページとして扱われます。たとえば http://s.ntust.me/ と http://s.ntust.me/index.html は同じものになります。しかし Storage では、この動作は個別に設定しないと有効になりません。また、Storage には 404 Not Found ページを設定する機能もあります。これは、Storage にWebページを置いている私のような人のために作られた機能だと感じました!

次のコマンドで、s.ntust.me バケットのデフォルトのホームページを index.html に、404 ページを 404.html に設定します。

gsutil web set -m index.html -e 404.html gs://s.ntust.me