GCSとGCEを使って開発/StageなどでUnity AssetとかをIP制限しながら配布する

開発環境、Staging環境などでUnity AssetをIP制限かけながら配布したいを解決!

今までGCEでInstance立てて、nginxでHostしてPersistent Diskなんかで直接配布してたんだけど
本番はHTTP Load Balancer + Backend Bucketでやりたい・・・
なにしろDeployの流れが変わるというめんどくささw

そこでみつけたgcsproxy

すんごい簡単!
便利!

本番で使うわけじゃないし多少オーバーヘッドあってもいいよね
何しろDeployの流れを統一できる!!!


Setup

Requirements

  1. GCEのInstance ScopeにGCS許可が入ってること
  2. goがbuildこと
  3. gcsproxy
  4. nginx
  5. Firewall設定

build gcsproxy

goenvとかGOPATHとか説明してると長くなっちゃうので・・・

適当にどうぞ!

gcsproxy 起動方法

こんな感じ

gcsproxy -b 127.0.0.1:8090

[IP:Port]なんだけど8080, 8081とかは使ってたりすることあるんでここは
かぶらないように適当に

ただしnginxのconfigに合わせる必要があるのでそこは気がついといてください!

実際の利用の際には、InitScript書くかsystemdのUnitFile書いて下さい。

nginx config

以下一部

upstream gcsproxy {
  server                   '127.0.0.1:8090';
}

server {
  server_name _;
  listen 80;
  server_tokens off;
  access_log /var/log/nginx/access.log main;
  error_log /var/log/nginx/error.log error;

  # Limit Request Methods to GET|HEAD|PURGE
  # 変なことしないなら無くてもいい
  if ( $request_method !~ "GET|HEAD|PURGE" ) {
    return 405;
  }

  location / {
    proxy_pass             http://gcsproxy$uri;
  }
}

cache-controlとかは必要あれば入れてください。

あとはterraformとかなんでもいいけど
Google Developer ConsoleでFirewallを設定するだけ!

HTTPS化はHTTP Load Balancerなど使うなりしてください!