AWS、Amazon Web Service。
何かと話題ですね。沙耶です。
アカウント作れば一年使わせてもらえますしねw
しかしまあなんだ、GUI画面見てうへぇ英語じゃん!ってなって撤退する人も多いのかも知れない。最近日本語になってくれたので、そこの敷居はだいぶ下がったかなー。
エンジニアにとってみれば別にたいそうなことが書いてあるわけではないけれど、そうじゃない人に気軽に、って画面ではないかもねw
それにAWS特有の言い回しとかもあるし、クラウドの概念がわからないとなかなか手が出しにくいのも事実。
でもせっかく1年もタダで使えるのだから、好き嫌いせずに使ってみるのも面白い。
そうじゃなくても、AWSにオンプレミス環境から移行する際に、一体AWSで何ができて何ができないのか、一体どんなものがサービスとしてあるのかは知っておいて損はない。
そこで、AWSをサンプルに、クラウドとは何か、ってことを軽く話して見ようとおもう。
まず、クラウド、という言葉を大きく”インターネット上にあるもの”くらいの意味で使っている人もいるので、ここを気をつけたほうがいい。下手をすると、タダのレンタルサーバにWebアプリが入っているだけのサービスをクラウドと称していることもある。これはまあインターネットをあらわすネットワーク図においてインターネットを雲で描くことが多いから間違いとも言い切れないんだけど。
さて、いわゆるクラウドサービス、とは何かというと、ざっくばらんに言ってしまえばハードウェアのソフトウェア化だといえる。要するにエミュレーターの概念が近い。クラウドの基幹技術は仮想化基盤によって成立している。
仮想化基盤、とは、実際のハードウェアの上に仮想的なハードウェア層を形成する技術のこと。
などというと、普通は「なんでそんな無駄なことすんの」という突っ込みがされるw
このあたりはレイヤアーキテクチャとかその辺の理解が無いとちょっと説明が苦しい。
これは一種の思想。レイヤアーキテクチャについて語ると本一冊になってしまう。ネットワークな人ならOSI参照モデルなどがレイヤアーキテクチャの現れだし、身近なとこならUSBなんかもレイヤプロトコルを用いている。
レイヤアーキテクチャとは、層(レイヤ)を形成することで、ある層における処理は上下の層だけを参照すればよい、というもの。自分のいる層から二層離れた場所の層が何であるか、を考慮しなくてもよい、という設計思想のことだ。
仮想ハードウェア、という層を形成すると、”現実の”ハードウェアから最下層であるOSですら二層離れる。
これによって、現実のハードウェアが何であるか、を考慮することなく、仮想ハードウェア、という均質化されたハードウェアだけを参照すればよくなる。
それだけでなく、仮想ハードウェアはある種のソフトウェアでしかない。つまり、仮想化されたデバイスは、ともすれば本来はサーバの電源を停止して入れ替えをしなければならなかったハードウェアデバイスを、より単純にソフトウェアの起動と停止で追加や削除ができるようになることさえある(実際にはいろんな制約があったりもするけれど)。
これにより、オンラインのままデバイスの拡張がなされたりする。たとえば、ネットワークカードをオンラインのまま増やしたりするのなんてのは定番だ。仮想化の手法によってはオンラインでメモリの拡張をしてみたり、CPUを増やしたりすることもできたりする。
ま、EC2だとどうしてもインスタンス単位での動作が多いから無理なんだけど。
このレイヤアーキテクチャとは別に目新しい技術でもなんでもない。仮想化技術なんて、論理だけならはるか昔からある手垢のついた思想でもあるのだ。
さて、別にレイヤアーキテクチャを理解していなくてもクラウドを利用するのにはなんの支障もないので、さくっと無視してもらう。知ってれば面白いが、知らなくても別に困んない代表格みたいなもんだからだ。
さて、AWSのサービスで言えば、根幹となっているのがこのコンピューターの仮想化。
これがEC2と呼ばれるサービス。EC2インスタンス、というのがこの仮想化されたコンピューターの1単位に当たる。
ほかのいくつか(結構な数だが)のサービスは、このEC2上に実装された特定の役割をこなすためだけの仕組みを載せた専用のEC2インスタンスを基盤にして実装されている。
次に、ブロックデバイスの仮想化。EBSやS3といったストレージデバイスの仮想化。
そして、VPCなどの、ネットワークの仮想化。
これらを組み合わせることで、AWSはそのサービス上に”仮想的な”データセンターを形成できる。
論理ロジックであるネットワークは仮想化しやすい。実際、VLANなども仮想ネットワークの入り口とも言い換えることができる。が、同時に論理ロジックであるが故に、仮想化されるとまったく何がなんだかわからなくなる、という仕組みでもある。
それに比べて、EC2インスタンスなどは現実のコンピューターという実態と1対1で対比するため、理解しやすい。
今あるサービスをざらっと見ていってみよう。
EC2
Lambda(Preview)
S3
StorageGateway
Glacier
CloudFront
RDS
DynamoDB
ElasticCache
Redshift
VPC
DirectConnect
Route53
DirectoryService
Identity&Access Management
Trust Advisor
Cloud Tail
Config(Preview)
CloudWatch
Elastic Beanstalk
OpsWorks
CloudFormation
Code Deproy
EMR
Kinesis
DataPipeline
SQS
SWF
AppStream
Elastic Transcorder
SES
Cloud Search
Cognito
MobileAnalytics
SNS
WorkSpace
Zocalo
ずらっと並べてみた。Previewは最近リリースされたばっかりのもの。ほぼ毎月なんかしら更新してたりするので、AWSのガイドなんて基本三日で役立たずになる。概念を理解していれば難しい敵じゃないが、そもそも仮想化理念もよくわからん、とかだと正直手に負えない。
ちょろっと使ってみるか!で大事なのは
EC2
S3
RDS
VPC
Route53
このくらいだ。CloudWatchとかは運用監視まで入れるなら大事だけど、今はいい。IAMも今はいいだろう。個人が遊ぶのにIAMは重厚すぎるし、そもそもRoleを記述するのに覚えることが多すぎる。とはいえ、最終的にはIAMは使わないといけなくなるけれど。
覚えとくべきはこの5つ+α。この5つがほぼ基本といえる。
・EC2
言わずもがな、仮想化されたコンピューター。ここのオプションと付随機能の部分だけでも本一冊になるが、とりあえずお勧めされるままインスタンスを立ち上げても、最小限のことはしてくれる。
つまり、インスタンスを作成さえしてしまえば、インターネットにつながった、WindowsかLinuxのサーバが一台提供される。
・S3
分散ストレージ。オンラインストレージサービスに近いイメージでかまわない。低速だが大容量。というか分散ストレージなので事実上容量の制限が無い。容量単位でお金は取られるけどね。
・RDS
データベースを提供する専用のインスタンス。EC2上にMySQLでも入れてもいい。が、RDSはむしろインスタンス単位での強力なスケーラビリティがその強みといえるんじゃないかと思う。まじめにデータベースのスケーラビリティを考えると、長年インフラやってる人間でも二の足を踏みたがる領域だが、そういった面をパッケージングして定型化することで扱いやすいものに仕上がっている。DBサーバをインスタンス上に立ち上げるのもいいが、定番スタイルなDBならRDSでほぼ事足りる。
・VPC
仮想化プライベートネットワーク。ここを支配できれば少々複雑なネットワークだろうが制御できるはず。
・Route53
分散DNSサーバのドメインサービス。
イメージとしては、VPCであなた専用のネットワーク空間をAWS上に形成し、その中にEC2インスタンスやRDSを配置する。
S3はロールの制御でどこからでもアクセスできるストレージ空間である。
ほらだいぶ簡単になった。要するにVPCってのはルータとネットワーク空間を抽象化したものだ。その抽象化された空間に仮想ノードであるEC2をぽこぽこ設置して、ケーブルつなげる。
現実とそう大差なくなってきただろ?
EC2が起動してしまえば、そこから先は(まあやりたいことをサポートする他の機能があったりはするんだが)、従来のサーバとほぼ何も変わらない。
なんで、AWSというとEC2立ち上げてみよう!みたいなのから始まることが多いが、これはEC2の起動時に同時にAWSで勝手にとりあえずVPC作ってくれたり、いろいろやってくれてるからだ。
沙耶的にはとりあえずVPCから作れば?って思うんだけど。
基本的にどんなものを作りたいか、をまずお絵かきしてからはじめるのがデフォだ。
さて、EC2の中にはEC2を利用して作られる専用の仮想ハードウェアがいくつかある。
EC2インスタンスがコンピューターの仮想化ならば、それに乗っけるソフトウェアを定型化してしまった特化ハードウェアだって作れるってことだ。
代表格がELB。Elastic Load Balancer。負荷分散装置。まっとうなロードバランサーを買うとバカ高いが、AWSならタダで使える。一年間はw
まあLinuxで作ればいいんだけどw
ネットワークカードは仮想化されていくらでも作り出せる。EC2インスタンスに仮想化されたネットワークを好きなだけ刺すことができる。ハードディスクだって仮想化されている。
ファイアウォールだって仮想化されて、セキュリティグループなんてものになっている。
実を言えばRDSだってEC2のインスタンスを利用した特化型システムに過ぎない。
VPCの仮想ネットワークも、その中には仮想ルータが配置される。当然この仮想ルータも仮想的な特化型ハードウェアって寸法だ。
だんだん見えてきたんじゃないかな。汎用型のコンピューターを仮想化して生成し、その上にOSを載せたものがEC2で、OSの代わりにネットワーク機器のチップのっけりゃVPCの構造の一部になるし、特定の処理だけやるようなOSのっけりゃロードバランサーになる。分散サービスってのもこの技術の延長の上にある。まあ、実態はハードウェアチップのエミュレーションじゃなくて一律Linuxかなんかを載せてそのうえで特化型に沿った形で構築されたマシンイメージ、ってのが実態だろうけどね。
つまりEC2を支配してしまえば大体わかってくるよねってのが基本なんだ。EC2で大事なのはインスタンスを起動してからじゃない。インスタンスがどう使われ、どうあるのか、ってことを理解すること。
それ以外は実際のハードウェアをたたくのと実のところたいした差はない。いや、あるけど、重要とは言えない。
だからお絵かきをしてみよう。自分がどんなサーバを、どこに配置して、どんなシステムを作りたいかを。
つまり、インフラエンジニアの出番ってわけだ。