目的
2016年はサーバレスアーキテクチャが盛り上がったし、自分自身でも何度も口にした一年だったような気がしますので、Firebase (Hosting)を使ってServerless Architectureを実現してみましょう。また、同等のことはGoogle App Engine (GAE)を使っても実現できるでしょう。
サーバレスと言えば、AWS Lambda + API Gateway、Azure Functionsという空気になっていて、Cloud Functionsが現状のまま(アルファ版)だと盛り上がらないよな、ということで、GCPでもサーバレスでやっていこうと思う人に刺さればいいかなと思います。
基本的にhttps://firebase.google.com/docs/cli/ に書いてある手順通り実行すれば大丈夫です。
はじめに
Googleアカウント(@gmail.comかG Suiteのアカウント)が必要です。
次にNode.js環境(npm)を確保しましょう。Homebrew信者の方はbrewでいいと思いますが、2017年を迎えようとする今ですから通常はDockerでいいでしょう。
docker run --rm -it -p 9005:9005 node:7.2.1-alpine sh
後ほどGoogleアカウントを用いたOAuth 2認証のため、localhostにポート9005でアクセスする必要がありますので、-p 9005:9005
しましょう。
firebase-toolsを用意
npm install -g firebase-tools
とするだけで、firebase
コマンドが利用できるようになります。結構時間がかかります(分単位)。
認証情報を取得
firebase login
とすると、URLが提示されると思いますので、ブラウザで開き、許可しましょう。許可が完了すると、localhost:9005
のどこかにコールバックされます。
プロジェクト初期化
firebase init
として、Realtime DatabaseとHostingを選択できますが、今日はHostingのみ選びましょう。プロジェクトIDを訊かれますので、答えましょう。
firebase.jsonが作成されます。
{
"hosting": {
"public": "public"
}
}
ファイル作成・編集
publicディレクトリに index.html
と 404.html
が作成されるので、自分がアップロードしたいものにアップロードしましょう。
アップロード
ファイルの作成などが完了したら、
firebase deploy
とすればアップロードされます。
=== Deploying to 'my-project'...
i deploying hosting
✔ database: rules ready to deploy.
i hosting: preparing public directory for upload...
⚠ Warning: Public directory does not contain index.html
✔ hosting: public folder uploaded successfully
✔ hosting: 2 files uploaded successfully
i starting release process (may take several minutes)...
✔ Deploy complete!
Project Console: https://console.firebase.google.com/project/my-project/overview
Hosting URL: https://my-project.firebaseapp.com
このままでは、 https://my-project.firebaseapp.com という形式でしかアクセスできませんので、カスタムドメインを利用しましょう。
カスタムドメイン設定
ドメイン名の所有の確認
新規ドメインの場合は myproject.com
の所有権の確認が必要です。APEXドメインを利用する場合でもサブドメインを利用する場合でもAPEXに TXT
レコードを2個追加する必要があるようです。
ドメイン名管理者にメールが飛んでくるようですが、気にしなくてもいいようです。
サブドメインのCNAME設定
推奨されているのはCNAMEですが、Aレコードもサポートされていますので、固定IPにもできるようです!すごい!
CI化
今どきCIを使っているのが当たり前でしょう、という時代になって久しいので、各自のCI環境に組み込みましょう。
セキュリティ
Qualysに問い合わせてみましょう。
こんな感じ。極めて普通ですね。
GAEと組み合わせ
- GAE (SE)とFirebaseを組み合わせてAndroidアプリを開発する例はGoogle Cloud Platformにも載っていますので、そちらでServerlessを実現していくとよいでしょう。