# クラウドってなんだ?
WARNING
書きかけです。
クラウドが重要らしい。
・言語やフレームワークを基準に案件を選ぼうとすると選択肢が非常に狭くなるため、より価値の高い技術の習得機会を逃してしまう可能性がある。
— 勝又健太@テック系YouTuber (@poly_soft) June 18, 2019
・バックエンドに関しては言語やフレームワークよりもAWSやGCPの各種マネージドサービスやクラウドアーキテクチャ設計の知見の方が価値が高くなっている。
でも、クラウドが、なにかわからない。本当にこのレベルで。
「大地って何だ」のコマが新装版で修正されてる。#BLAME pic.twitter.com/33cqcVnFQP
— おやつ★ (@_o_ya_tsu_) May 26, 2017
AWSアイコン完全にマスターした pic.twitter.com/daqSEvypCx
— いきもの (@yuroyoro) December 24, 2019
# 定義
NIST によるクラウドコンピューティングの定義 (opens new window)
クラウドコンピューティングは、 共用の構成可能なコンピューティングリソース(ネットワーク、サー バー、ストレージ、アプリケーション、サービス)の集積に、どこからでも、簡便に、必要に応じて、ネ ットワーク経由でアクセスすることを可能とするモデルであり、最小限の利用手続きまたはサービス プロバイダとのやりとりで速やかに割当てられ提供されるものである。このクラウドモデルは 5 つの 基本的な特徴と 3 つのサービスモデル、および 4 つの実装モデルによって構成される。
クラウドとは (opens new window)
ユーザーがインフラ※やソフトウェアを持たなくても、 インターネットを通じて、サービスを必要な時に必要な分だけ利用する考え方
※ インフラ・・・サーバーやストレージ、ネットワーク
クラウドが流行りだした頃、レンサバ業者がこぞって「我こそはクラウド!」とか名乗って消費者騙しまくったんよな。
— 伊藤 祐策(パソコンの大先生) (@ito_yusaku) December 6, 2019
日本型クラウドとか、丸投げをつまりクラウドと言い換えたから、「クラウドにあるオンプレ向けなディスク装置が壊れて事故ってもう信じられない」とかになるんで、クラウドって言わなきゃよかったのに、商売は自由だ!で言い換えまくったのが自分たちの首絞めた感。もう戻れないですが。 pic.twitter.com/wHPkxglsyL
— Arichika TANIGUCHI ♻ (@arichika) December 26, 2019
システム保守運用の観点でも、各レイヤーの取り扱い方が違う。 pic.twitter.com/WTIBH6iZLU
— Arichika TANIGUCHI ♻ (@arichika) December 26, 2019
クラウドするなら、人に金を投入しないといけませんぜ、というお話。 pic.twitter.com/mcKWtyJd05
— Arichika TANIGUCHI ♻ (@arichika) December 26, 2019
# 1. 目線を替えて考える。
# 1.1. ワイ目線に言い換える。
上の説明を、ワイ目線に言い換えて見ます。
- インフラを、使えるよう設定してあげて
- インフラが、枯渇しないように頑張るぞい
# 1.2. お客様目線に言い換える。
もう一度、お客様目線に言い換えて見ます。
- インフラが、雲の中にあるように目に見えず
- インフラを、必要な時に必要なだけ増やせるような気がする
まず、増やすだけではなく、減らすこともできます。 また、増減のさせ方もいろいろあります。 例えば AWS は、従量課金制です。使ったぶんだけ請求されます。 Heroku は、上限を手動で設定し、設定した上限の範囲内で応じて課金されます。
Heroku の課金体系は、以下の通り。 バーを伸び縮みできるのでイメージしやすいかなと思います。
AWS は、下手すると、死ぬこともある。
でも基本がアナログベースなバトーさんたちは 電脳化したり義体化してデジタルな要素を増やしていっても ゴーストが損なわれることはない。 しかもゴーストがあるから死ぬこともできる。 いいよねぇ。ねぇねぇ、ゴーストがあるってどんな気分?
攻殻機動隊 第15話 機械たちの時間 MACHINES DESIRANTES
# 2. ストーリーで考える。
「クラウド」がわからなかった話 いまもわかっていないのですが、
はじめて EC2 や Heroku を触った時に、 自分が自宅で立てて遊んでいるサーバとなんの違いがあるのかわかりませんでした。
じゃあ、自分も明日から「ワイのクラウドファイルサーバ」って名前で、 明日からファイルサーバ公開してもいいのかなって?思ったりもしてました。
軽はずみにそんなことをするとどんなことになるのか? もし「クラウド」を名乗ってしまった場合...
1 GB から 100 GB に容量増やしたいってお客様が行ってきた時に 無理とは言えないということです。 物理的な上限の責任を、自分が持たないといけなくなります。
裏で一生懸命、お客様が必要な時に必要なだけ、 使えるようにしないといけないということです。 別に何がしかの法的根拠があるわけではないのですが、 言葉のニュアンス的にそんな雰囲気になる気がします。
お客様側にとってはクラウドです。 ワイにもなにかいいことあるのかな♪と思ったけど、 サービス提供者側にとって 1mm もクラウドでもないわけです笑
レンタルサーバですよ!VPS ですよ!って言っておけば、 物理的な上限を設定することができます。 物理的な上限の責任を、お客様側に持ってもらうことになります。
# 3. まとめ
いろんな人の視点や、物理的な要件などが入っていて、 この辺が理解を難しくしていました。
AWS EC2 や Heroku を触った時にクラウドがなにか本当にこのレベル一切わかりませんでした。
# 全体像
図やら表やらグラフやら見せられても一切わからないと思うのですが、 とりあえず、まず全体像をつかむために。
# 1. 図
オンプレ, データセンタ, レンタルサーバ, IaaS, PaaS, FaaS, SaaS とあるけど、 リンク先の Gartner の図がわかりやすいです。
あるいは Google で画像検索する。
# 2. 表
# 3. グラフ(シェアの違い)
あとクラウド周りのシェアの違いはリンク先の下の方にあるグラフが参考になる。
あるいは Google で画像検索する。
# ポイント
# その1
どれくらい処理を投げるかで分類されています。 面倒だな、これは任せよう!って少しずつ任せるものが増えていきます。
# その2
Step 5 VPS と Step 6 の IaaS の違いを区別する。 ここがクラウドであるかどうかの分解点になります。 以下のサイトが神です。
Step 1 ~ Step 4 まではクラウドではありません。 Step 5 ~ Step 8 までがクラウドになります。
レンタルサーバとの違いってあるのかな...と思ったのですが
レンタルサーバーとクラウドの違い (opens new window)
クラウドには使いたいときに使いたい分だけ使えるという定義がある...
「クラウド」と「レンタルサーバー」の違いとは? (opens new window)
レンタルサーバーについてのおさらい。レンタルサーバーは共有サーバーが一般的で複数のユーザーでサーバーリソースをシェアして利用するため、低コスト運用が魅力です。CPUやメモリなどの処理能力、利用できる容量は一定である以上、昨今のYahoo!砲、LINE砲(メディア掲載やPush配信)で、アクセス急増時にサーバーダウンのリスクが起りやすいです。
これに対し、IaaS型クラウドサービスは複数のサーバーが仮想化され、ユーザーが必要なときに必要なだけCPU・メモリなどを増減でき、サーバーも無限大にスケールできるメリットがあり、アクセス数に応じて臨機応変にサーバー構成をオンデマンドで変更できます。またクラウドの利用料金は定額制だけでなく、従量課金制も選べるのが魅力。キャンペーンサイトなど、期間限定で使いたい場合にも最適です。
要作図
VPS と IaaS の違い。 物理サーバの仮想化の有無。 VPS は OS 以上のレイヤーが仮想化されているが 物理面は仮想化されていない。 IaaS は物理面も仮想化されている。
# Step 1. 自宅サーバ
かっこ悪いから嫌だ。
# Step 2. データセンタ
かっこ悪いから嫌だ。
# Step 3. 共有サーバ(レンタルサーバ)
レンタルサーバって呼ばれるやつですね。 かっこ悪いから嫌だ。
ディレクトリだけ分割してドメインって取れるのかなと思ったら取れた。
レンタルサーバの雰囲気はこの辺がわかりやすい。
# Step 4. 共有サーバ(VPS)
OS を仮想化します。
柔軟な分、割高ということでしょうか。
項目 | クラウド | VPS |
---|---|---|
値段 | 結構高いし、青天井 | 安い |
月間500万PV以下の規模のブログであれば、「VPS」で十分
逆に言えば不要な時は減らせるということです。 以下のサイトがめちゃくちゃ尊いです。
500万 PV 以下なら VPS で十分なんだ... 衝撃。 こういう話本当にありがたい...
500万 PV まで十分なんだ... AWS のお仕事が多いって聞いたけど、本当に必要で載せ替えているのだろうか。
載せられれ乗り換えているだけだったりするのじゃないだろうか...
選定過程の考え方が乗っていて、この記事もすごく勉強になりました。 ありがたい...
# Step 5. IaaS
AWS EC2 ... 面倒... 会側の物理要件も分割します。
# Step 6. CaaS
これがわかりやすい。 プロセス単位で切ってるのか... ファイル -> プロセス。
# Step 7. PaaS
これかな...
どれくらい投げるかを決めた後は、どれを選ぶかを決める。 Heroku と GCP しか知らない。
# Step 8. FaaS
本当はこれでよかった。
# (1) AWS Lambda
AWS Lambda は名ばかりサーバレスだと思った。 API Gate Way 立てて S3 立てて Route53 立てて... なんて...
マイクロサービスアーキテクチャ?みたいな感じでやるときは旨味が出ると思うのですが、
サーバレスのコセンセプトはわかるし、サーバレスであることもわかるけど、
でも色々と考えてみると Heroku でも結局 Route 53 は Cloudflare 使っているし、 場合によっては S3 使わないといけないし、
唯一違いがあるとすれば API Gateway くらい。 この説明がなんかわかりやすそうな気がする。
ワイみたいな無料枠で収まるような小さいものを作りたいときは Heroku でいいやとなりました笑
無料枠から外れ出したら、逆にオンプレに移行して安く済ませたい...
サーバレスについて書かれている... システムそのものよりも社内調整が大変そう...
# (2) Cloud Functions
Google 製
# (3) OpenFaaS
- DockerやKubernetesを使ってFaaS環境を構築できる「OpenFaaS」 (opens new window)
- Your first serverless Python function with OpenFaaS (opens new window)
# (4) Python の FaaS
SQL vs NoSQL, サーバ vs サーバレス みたいなのいつ選べばいいのかが書いてある。 理解はしてないけど、ものすごくいい資料のはず。
# Step 9. BaaS
FaaS ではサーバ側にコードを書いていました。 BaaS ではサーバ側にコードを書く必要がありません。
コードの有無というよりも、DB などのリソースの話ですが。
# Firebase
Firebase がいいですね。JavaScript で。 あとウェブアプリを作るなら HTML + CSS + JavaScript で組んだ方が速い。
最初は Firebase を FaaS と勘違いしていた。 こいつは認証機能やデータベースは持っていてもコードを実行させることはできない。 コードはクライアント側のブラウザで実行させる。
無理して Python をバックエンドで使うシチュエーションが思いつかない... 速度や多機能性を求めるなら Go を使うだろうし、 小規模でいいなら Firebase で十分だし...
Flask で作り込んでいる時にものすごい自問自答してました笑 これ、もしかして Flask いらないのでは...? あれ Flask いらない...? と笑
諸般の事情で無理やり Flask を使いました。