Google Cloud Storage でウェブサイトを公開してみました。最終的には、以下を実現しました。
- 独自ドメインにて、Google Cloud Storageにアップロードしたファイルを閲覧できるようにする
- 最初は、Mac上のリソースをrsyncにてアップロードする
- Debian上のJenkinsにて、リソースを自動アップロードできるようにする。この時Jenkinsには、Google Cloud Storageにアップロードする権限だけを付与するようにする。
Amazon S3よりもGoogle Cloud Storageの方が2割程度安くなります。
公式ドキュメントは以下になります。
Hosting a Static Website - Cloud Storage — Google Cloud Platform
1. プロジェクトを作る
Google Cloud Platform では、このプラットフォーム全体で、Projectという単位でリソースを区切る必要があります。以下のリンクからぷとジェクトを作成します。
2. 独自ドメインをGoogleに認証させる
独自ドメインを利用できるようにするには、ウェブマスターセントラルにて所有していることを認証させる必要があります。
ドメインは、mydomain.comで取得し、サブドメインwww.mydomain.comを利用する場合であっても、domain.comで登録します。
お名前.comの場合は、確認方法で「GMO.jp」を選択すれば、ログイン画面が現れて認証できるようですが、うまく行きませんでした。私は表示されたTXTレコードを登録する方法で確認を実施しました。
3. バケットを公開するホスト名で作成し、公開の設定を追加する
以下のページから、作成したプロジェクトを選択し、バケットを作成します。この時バケットの名前は、公開するサブドメイン www.mydomain.com に設定します。
上記の画面から、作成したバケットに対して、右端のオプションボタンから「オブジェクトの規定の設定」を表示し、以下の設定を追加します。
- エンティティ:ユーザ
- 名前:allUsers
- アクセス権:読み取り
この設定は、アップロードをする前に必要があります。
5. gcloudを使ってアップロードする
Macの場合は、homebrewを使って簡単にインストールできます。インストール後、初期設定を行ってgcloudコマンドが使えるようにします。表示されるままに記載のURLにアクセスし、キーを入力します。
brew install gcloud gcloud init
アップロードするには、gcloudのrsyncを使います。
gsutil -m rsync -d -r <アップロードディレク取取り> gs://<バケット名>
この時点で、以下のURLにアクセスすると、確認できるようになります。
https://storage.googleapis.com/<バケット名>/
6. ドメインがGoogle Cloud Platformを指すようにする
ドメインを取得したレジストラにて、DNSレコードを以下のようにします。
- ホスト名: <公開ホスト名>
- TYPE: CNAME
- VALUE: c.storage.googleapis.com
これで、目的のドメインにて、静的ウェブサイトを公開できました。
7. Debian/UbuntuのJenkinsにて、自動アップロードを出来るようにする
自分はDebianサーバにてJenkinsを立てており、Gitリポジトリをポーリングさせ、Jenkinsから自動でGoogle Cloud Storageにアップロードされるようにします。
まず、Jenkins用のサービスアカウントを作成します。
サービスアカウント名に「Jenkins」などと入れると、自動的サービスアカウントIDが作成されます。「新しい秘密鍵の提供」を選び、キーのタイプを「JSON」とすると、秘密鍵が書かれたJSONファイルがダウンロードできます。
サービスアカウントIDをコピーしておきます。
バケットの一覧の画面から、目的のバケットの「バケットの権限の編集」を選び、以下のように先ほど作ったサービスアカウントに編集権限をもたせます。
- エンティティ: ユーザ
- 名前: サービスアカウントID
- アクセス権: 書き込み
Debian/Ubuntuに、Google Cloud SDKをインストールします。Debian/Ubuntuの場合には、リポジトリを追加すると、apt-getでインストールできます。無理してCentOSなどを使わずに、Debianを使いましょう。
Quickstart for Debian and Ubuntu - Cloud SDK — Google Cloud Platform
このJSONファイルをJenkinsサーバに移動し、Jenkinsにしかアクセス出来ないところへ配置します。そして、JenkinsユーザにてこのJSONキーの有効化をします。
sudo su jenkins gcloud auth activate-service-account --key-file <鍵のjsonファイル>
これで、Jenkinsからもgsutil rsync
が使えるようになります。
困った点
- AWS S3と異なり、
https://storage.googleapis.com/<バケット名>/
とプラットフォームの方でドメインを割り振ってくれないため、サイトによってはCNAMEを設定するまでサイトをきちんと確認できない。 - 「オブジェクトの規定の設定」はアップロード時に付く権限らしく、アップロード後に設定しても、公開設定されない。なので、アップロード前に権限設定をする必要がある。
- まだ東京リージョンがないので、ちょっと遅いかもしれない。
最後に
一時、github.ioでサイトを公開していましたが、なんとなくオープンソースでもないのに無料のサービスに間借りするなんてという気分になり、Google Cloud StorageのWebサイトへ移行しました。