適当に作ったWebアプリを雑に社内公開したい、そんなときはCloud Runがお勧め
はじめに
みなさんは、こんな経験はないでしょうか。
- 業務効率化に繋がるちょっとしたWebアプリを手元で作ってみたが、自分しか使っていない。
- 他の人も使えたら便利かもしれないけど、社内限定で公開する方法が分からない。
- 公開するためのセキュリティを考えるのが面倒くさい。
その結果、自分専用になってしまったアプリがローカルPCに眠っていませんか?
そのWebアプリ、Google CloudのCloud Runなら簡単に認証付きでデプロイできます。
やってみよう
アプリを用意しよう
サンプルのWebアプリを用意しました。
create vite
で初期化しただけのReactアプリで、便利ツールでもなんでもないですが、今回はそれを便利ツールとみなして社内の特定のメンバーに公開するシナリオを試してみましょう。
コンテナ化しよう
Dockerfile
を作ります。
今回は比較的丁寧に、ビルドした上でhttp-server
で起動するようにしました。ですが、より雑にnpm run dev
で動かしてもいいと思います。雑な社内用ツールですので。
GitHubにPushしよう
アプリをGitHubにPushしておきましょう。
もちろんprivateでOKです。
Google Cloudで、Cloud RunとCloud Buildを有効化しよう
Cloud Runを初めて使う場合は、まずはCloud BuildとCloud RunのAPIを有効化しましょう。
以下のURLからそれぞれ有効化してもいいですし、ブラウザでGoogle Cloudのコンソールを開いて画面の指示に従って有効化しても良いです。
Cloud Runにアプリをデプロイしよう
ブラウザでCloud Runのコンソールを開いて、画面上部の「リポジトリを接続」を選択します。
「Cloud Buildの設定」を押下します。
GitHubのリポジトリを選択します。
リポジトリが表示されない場合は、画面に従ってGitHubのリポジトリに権限を付与してください。
長い注意書きをよく読んだらチェックボックスをチェックして、「次へ」を押下します。
ビルド構成を必要に応じて変更します。今回はデフォルトのままで問題なかったので、このまま「保存」します。
Cloud Runのサービス作成に戻るので、適当に設定を埋めていきます。
今回は以下のように入れましたが、必要に応じて変更してください。
- サービスの名前
- sample-web-app
- リージョン
- asia-northeast1 (東京)
- 認証
- 重要なので別途説明します
- 課金
- リクエストベース
- サービスのスケーリング
- 自動スケーリング
- インスタンスの最小数 : 0
- インスタンスの最大数 : 1
- 自動スケーリング
- Ingress
- すべて
- コンテナ、ボリューム、ネットワーキング、セキュリティ
- (特別な設定やこだわりが不要ならデフォルトでOK)
一通り設定したら「作成」を押下すれば、自動でデプロイされます。
なお、認証の設定は次のセクションを参照してください。
認証の設定
「認証が必要」にして、「Identity-Aware Proxy(IAP)」にチェックをしてください。
なお「IAM」のチェックは外してください。
「ポリシーの編集」を押下して、「Principal 1」にアクセス許可を付与したい対象を入力してください。アクセス許可は、以下に対して付与できます。
- Google Workspace ドメイン: example.com
- Google グループ: admins@googlegroups.com
- Google アカウントのメールアドレス: user@gmail.com
- サービス アカウント: server@example.gserviceaccount.com
私としては、Googleグループで社内の特定のグループにアクセス権限を付与するのがお勧めですが、ドメイン全体(つまり会社の組織全体)に権限を付与することもできます。
隣の「アクセスレベル(オプション)」は触れなくてよいので、「Principal 1」を設定したら「保存」しましょう。
その他補足
最小インスタンス数について
インスタンスの最小数0にすることで、Cloud Runはしばらくアクセスがない状態が続くとインスタンス数0までスケールインします。つまりインフラコストがゼロになり非常にお得です。
ただし、この状態だと次にアクセスした時の起動に時間がかかるので注意が必要です。
サービスアカウントについて
「コンテナ、ボリューム、ネットワーキング、セキュリティ」はデフォルトでOKと書きましたが、「セキュリティ」の「サービスアカウント」に関しては、可能であればアプリ専用のサービスアカウントを作成し必要最小の権限のみを付与することを推奨します。
動作確認
一通り設定して「作成」を押下してしばらく待つとアプリがデプロイされます。
表示されるURLにアクセスしてみましょう。
Googleのログイン画面に飛ばされます。
アクセス許可を与えたアカウントでログインすればアプリにつながります。
権限がないアカウントでログインすると、エラーになります。
以上で許可された社内メンバーにだけアプリを公開することができました。
手順を振り返ってみると、Dockerfile
さえ作ってしまえば後は、画面でポチポチするだけで、認証付きのWebアプリをデプロイできたことになります。
さらに、GitHubのmainブランチと連携したことにより、mainブランチが更新されると自動で再デプロイもしてくれるのもとても便利です。
そして、最小インスタンス数を0にしておけば、使ってない時の費用は0円です。
維持コストの心配もありません。
まとめ
Cloud Runを使えば、
- Webアプリを簡単にデプロイできる
- しかも、認証を簡単につけられる
- しかも、アプリ更新時の再デプロイは自動
- しかも、アクセスしたとき以外の維持コストはゼロ
Cloud Runを使って、ローカルで眠っている便利アプリを社内に公開してはどうでしょうか?
参考ドキュメント

NCDC株式会社( ncdc.co.jp/ )のエンジニアチームです。 募集中のエンジニアのポジションや、採用している技術スタックの紹介などはこちら( github.com/ncdcdev/recruitment )をご覧ください! ※エンジニア以外も記事を投稿することがあります
Discussion