2017-09-16 / @syui

server

google-cloud-kubernetes

AWS(Amazon Web Service)の対抗であるGoogle Cloud PlatformContainer Engineがかなり便利なのですが、注意点があるので、それについて。

Google Cloud Platform(以降、GCP)は、無料枠で使うにしてもまずクレジットカードの登録が必要です。プリペイドカード(V-プリカなど)での登録は不可能です。

また、無料枠で使うにはコツがいります。具体的にはデフォルトの設定では一定期間後に多大な料金が課金されるような仕組みになっていると思うので注意が必要な感じです。

ここで、Google Container Engine(以降、GKE)の無料枠で使用できるのは最小インスタンスx1(f1-micro)とストレージ5GBのようです。その辺を注意して使いましょう。また、固定IPを取得できるのですが、サーバーを消し上でこれを削除する必要があります。

Google Cloud Platform を使い始めた頃は、無料トライアル期間の300ドルのクレジットがあったので、サーバーを作りまくって色々試しました。作成したサーバーをトライアル期間終了前にしっかり削除したのところまでは良かったのですが、固定IPアドレスをそのままにして痛い目をみたことがありました(^^;)

このような目にあわないように、サーバーを削除したら不要な固定IPアドレスは必ず削除しましょう。

https://blog.apar.jp/web/6966/

通常、固定IPを取得するには結構な費用が必要で、GCPが提供するそれ自体は相当に安いと思うのですが、元々固定IPの維持費は高いので、その辺は注意が必要だと思います。

f1-microというのは、ようは自分の端末から常時接続できるIaaSのインスタンスです。これが無料であることは非常に頼もしいというか、お得なことです。通常はレンタルサーバーを有料で借りて接続したり、またはPaaSへのデプロイやrunをするわけですが、PaaSの場合はSSHで直接操作できるわけではありません。この辺の違いにおいて、痒いところにも手が届きやすくなったと言えるでしょう。しかし、注意も必要で、SSHで接続できるようになったということは、セキュリティ上のリスクが上昇したとも言えます。SSH総当たり攻撃などによってトラフィックが増加し、そのために課金が増えるなんてこともありえるかもしれません。

で、どんな感じでGKEを使えばいいだろうというと、個人的にはGitLabでAuto DevOpsが登場しましたので、そちらの方で利用していきたいなと思っています。GitLabのAuto DevOpsはクラスタ構成が利用可能な場合、現在のアプリケーションをKubernetesにデプロイするものです。Kubernetesのデプロイ先はGKEを利用します。多分、そんな感じで使っていくのがオススメなのではないかなと。

# git repoのrootにDockerfileとapplication.codeを置く
$ ls
Dockerfile
server.rb
$ git init
$ git remote add origin [email protected]:$USER/$REPO_NAME
$ git add .
$ git commit -m 'first demo'
$ git push -u origin master
or fork : [email protected]:gitlab-examples/minimal-ruby-app.git

# 必要なものセットアップ 
$ brew install caskroom/cask/brew-cask
$ brew cask install google-cloud-sdk
$ gcloud components install kubectl
$ gcloud auth login
# Connect to the cluster
$ gcloud container clusters get-credentials ruby-autodeploy --zone europe-west2-c --project api-project-XXXXXXX
$ kubectl proxy
# Kubernetes >  Secrets under the  Config > ca.crt and token
# GitLab Project > Settings > Integrations > Project services > Kubernetes > ca.crt and token, api(GCP IP Address), name=minimal-ruby-app-xxx

# アプリケーションを公開する
$ brew install kubernetes-helm
$ helm init
$ helm install --name ruby-app stable/nginx-ingress
$ kubectl get svc ruby-app-nginx-ingress-controller -o jsonpath='{.status.loadBalancer.ingress[0].ip}'

# Auto DevOpsを設定する
# GitLab Project > Settings > CI > Enable Auto DevOps > minimal-ruby-app-staging.<yourdomain>
$ git push 

しかし、AWSやGCP(GKE)を使うにしてもやはり注意が必要で、料金体系の変更や不正アクセスによる莫大な請求が発生する可能性はあります。特に、ユーザーの権限が大きいということは、メリットとして幅広い自由な利用が可能ですが、デメリットとして不正アクセスや攻撃対象として標的(ターゲット)になりやすいことを意味します。よって、やはり一番安心なのは定額制っぽい気がしますね。

参考

https://cloud.google.com/free/

https://cloud.google.com/free/docs/always-free-usage-limits

Example : https://gitlab.com/help/topics/autodevops/quick_start_guide.md

Preview : https://blog.apar.jp/web/6966/

永久無料枠(2017.03) : http://www.atmarkit.co.jp/ait/articles/1703/13/news061.html

Mastodonお一人様インスタンスの料金例 : http://blog.okumin.com/entry/2017/06/19/234734