クラウドとWebとの関わりについて学ぶ。
実習でやるので今回はなし。
「クラウドコンピューティング」の略。ユーザーがインターネット越しに計算資源を使うことによりサービスを利用するサービス形態のこと。
身近な例で言うと、Gmail, Twitter, Skype, LINE, Slack, iTunes などは全て広義のクラウドか。
クラウドはWeb開発においてもよく用いられる。上に挙げたサービスはすべて SaaS (Software as a Service) と呼ばれるが、Web開発で用いられるのは主にPaaSやIaaSである。
Infrastructure as a Service の略。
一言で言うと本来サーバー管理する際に必要な「物理マシン」「ネットワーク」「電源」「無停電装置」「冷却装置」「ストレージ冗長化」「クラスタリング」などのめんどくさい各種設備の管理を開発者の代わりに行い、開発者はリモートに存在するVPS(仮想プライベートサーバー)にログインして作業すればいいという形で提供されるサービスのこと。
要はVPSである。
有名なものに、
- AWS EC2
- Google Cloud Platform
- Azure VM
- DigitalOcean
- さくら
- ConoHa
など。
Platform as a Service の略。
IaaSからさらに一歩進んで、サーバーのことを考える必要もなくしたのがPaaS。アプリケーションのコードを送信すると自動でデプロイしてくれて、
最近流行っている「サーバーレス」という概念の中心にある存在。
有名なものに、
- Heroku
- AWS Lambda
- Azure Websites
など。
AWSはAmazonが提供する、開発者向けのクラウドサービスの総称である。
なのでAWSと一言にいっても50種類以上のサービスが存在し、その全貌を把握している人はほとんどいない。
徹底された1秒単位の細かい時間課金とスケーラビリティが特徴。また、開発者向けクラウドサービスの先駆けであるということもあって、サービス内容が最も充実しており、個人ユースから大規模なWebサイトまで使用できる。ただ初心者にはとっつきにくいかも。学生なら GitHub Education などを経由して20ドル~50ドルのクレジットを手に入れられる。
主要なサービスを挙げると、
簡単に言うとVPSだが、ずっと立てておくよりはすぐ立ててすぐ潰すみたいな使い方をすることが多い。
EC2では起動状態のサーバーのことをインスタンスと呼び、通常のインスタンスの他に、
- リザーブドインスタンス: 1年とかそういう単位でインスタンスを貸し切り、半額くらいで使う
- スポットインスタンス: サーバーの余剰インスタンスを競りにかける。格安でEC2を利用できるが、スポット価格が入札した価格を上回ると突然殺される。
などの種類がある。
ストレージ。基本的にはOneDriveや Google Drive と同じように大容量のデータを保管できる場所と考えれば良い。
EC2のインスタンスから高速にアクセスできるため、EC2で使用するデータを置いておくのがベスト。
デプロイしたコードを「関数単位で」実行できるプラットフォーム。利用料はタダ同然。
CDN。
SQLサーバー。
NoSQLサーバー。ドキュメンドデータモデル(MongoDB)とKVS(Redis, memcached)。
DNS。
他のAWSサービスなどにおけるアクセス権限を一括管理するプラットフォーム。S3やEC2の管理には必須。
Microsoftがやっているなんかよく分からないクラウド。Microsoftの技術が惜しげなくつぎ込まれているらしいが、博多市は操作性の悪さからあまり好きじゃない。
Googleがやっているクラウド。Googleの技術が惜しげなくつぎ込まれているらしいがよく知らない。
PaaSの1つであるHerokuに簡単なアプリケーションをデプロイしてみよう。
以下では第4回Web分科会で作成した「曜日計算機」のRailsアプリケーションをデプロイするが、Ruby, Node.js, Pythonなどで書かれたアプリケーションなら何でも良い。
データが残ってない場合は以下の実装を使用できる。 https://github.com/hakatashi/sig-web-04
概ね以下の記事の手順に従って進めていくので、こちらも適宜参照のこと。 http://qiita.com/Arashi/items/b2f2e01259238235e187
Herokuへのデプロイなど、Herokuの操作に必要なCLIツール。
$ heroku login
Enter your Heroku credentials.
Email: [email protected]
Password (typing will be hidden):
Authentication successful.
HerokuではSQLiteが使えないので、Postgresに移行する必要がある。
https://github.com/hakatashi/sig-web-04/commit/511bd519ffcb345fedd05e18c31c8d31e1e6c8ab を参考に。
GitHubにおいてある実装を使用した場合は不要。
曜日計算機のディレクトリに移動する。
$ cd /path/to/sig-web-04
Gitリポジトリになっていない場合はGitリポジトリにする。
$ git init
$ git add .
$ git commit -m "Initial commit"
Heroku上にアプリケーションを作成する。
$ heroku create
Creating app... done, ⬢ boiling-lake-47499
https://boiling-lake-47499.herokuapp.com/ | https://git.heroku.com/boiling-lake-47499.git
すると、Gitリポジトリにherokuなるremoteが追加される。
$ git remote -v
heroku https://git.heroku.com/boiling-lake-47499.git (fetch)
heroku https://git.heroku.com/boiling-lake-47499.git (push)
origin https://github.com/hakatashi/sig-web-04.git (fetch)
origin [email protected]:hakatashi/sig-web-04.git (push)
このherokuなるremoteにpushしてやるとデプロイが始まる。
$ git push heroku master
Counting objects: 102, done.
Compressing objects: 100% (89/89), done.
Writing objects: 100% (102/102), 19.83 KiB | 0 bytes/s, done.
Total 102 (delta 20), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Ruby app detected
remote: -----> Compiling Ruby/Rails
remote: -----> Using Ruby version: ruby-2.2.6
...
デプロイが終了するとhttps://(アプリケーションID).herokuapp.com/
からアクセスできるようになる。
※曜日計算機は/days
に実装されている。