前回、前々回に引き続き、個別のサービスについて触れていきます。
AWSで、Amazon EC2に次ぐ有名なサービスといえば、Amazon S3 (Amazon Simple Storage Service)でしょう。S3(エススリー)は、ストレージサービス(ハードディスクのようなもの)ですが、それだけではない便利なWebホスティング機能もあります。
今回は、S3の解説をしながら、AWSでのWebサイト構築についてお話していきます。
Amazon S3とは
Amazon S3は、インテリジェントなオブジェクトストレージサービスです。オブジェクトストレージとは、データをオブジェクト単位で管理する形式を指します。後述しますが、フォルダやディレクトリという概念はありません。
S3の大きな特徴は、「インテリジェント」というだけあって、多機能であることです。あくまでストレージなので、プログラムを動かすことはできませんが、さまざまな機能が用意されています。代表的な機能は、Webサーバ機能(Webホスティング)と、クエリ機能です。手軽に、Webサーバを構築したり、クエリで集計したりすることができます。
また、マネージドサービス(AWSで管理するサービス)なので、スケール(サーバの容量や負荷)の変更を自動で管理してくれます。使用場面に応じたストレージクラス(ストレージの品質の種類)が複数あり、目的と費用に合わせて選べます。ライフサイクルポリシー(ライフサイクルのルール)を使用すれば、自動的に移行できるのも大きな魅力でしょう。
バージョニング機能やレプリケーション機能もあります。
バージョニング機能(世代で管理する機能)を有効にしておけば、間違えて変更したファイルや削除したファイルを復元できますし、レプリケーション(複製を作ること)も容易です。昔、レプリケーションは、同一リージョン内では行えなかったのですが、現在では行えますし、大阪リージョンができたので、日本国内でのCRR(クロスリージョンレプリケーション)も行えます。
そして何より重要なことは、堅牢であることです。99.999999999%(イレブンナイン)のデータ耐久性をうたっており、障害やエラー、脅威に対して強い特徴があります。S3オブジェクトは、最低3つのアベイラビリティゾーンに自動的に複製して保存されているため、どれか1つに障害があっても、使い続けることができます(ただし、S3 1ゾーン - IAを除く)。
オブジェクトとバケット
S3を理解するのに、押さえておきたい用語があります。それは、「オブジェクト」と「バケット」です。
オブジェクトとは、S3で扱うエンティティの単位です。ザックリいえば、テキストや画像などのファイルのことを指します。
バケットは、オブジェクトを格納するコンテナです。すべてのオブジェクトは、バケットに格納されます。Windowsで言うところの、ドライブと考えるとわかりやすいでしょうか。ただし、バケットはフォルダではないので、バケット内にさらに子バケットを作ることはできません。
S3は、オブジェクトストレージなので、本来はフォルダやディレクトリという概念はないのです。オブジェクトは、バケット内に階層ではなく並列に置かれます。ただ、さすがにそれでは不便な点も多いので、コンソールでアクセスすると、フォルダ形式で表示されるようになっています。まあ、やはりフォルダ形式は馴染みがありますからね!ファイルと言えば、フォルダで使いたくなりますから。コンソールでは、フォルダの作成、削除、アップロード、ダウンロードも可能です。
バケットは、AWSアカウント1つにつき、100個まで作成できます(申請すると、最大1,000まで)。また、1つのバケットに保存できるオブジェクトの数に制限はなく、総容量制限もありません。
Amazon S3のWebサイトホスティングとは
S3では、静的Webページをホスティングすることができます(Webサイトホスティング)。
静的Webページとは、単純なHTMLと画像だけで作られたような、サーバ上でスクリプト処理をしないページのことです。「サーバ上でスクリプト処理をしない」がポイントなので、JavaScriptのように、クライアント側だけで処理されるものも静的Webページの仲間です。
逆に、PHP、JSP、ASP.NETなど、サーバ側の処理が必要な動的ページは動かすことができません。
「EC2を使うほどじゃないんだけど、ちょっと静的ページを構築したい!」という場合に便利です。S3なら手軽な上に、マネージドですしね。
S3でWebサイトホスティングをするには、バケットをそのままWebサイトとして公開します。操作としては、URLを設定し、バケットを誰でもアクセスできるようにするだけです。簡単でしょう?
ただ、簡単なだけに、安易に行うと危険です。簡単にできてしまうことほど慎重に!
「そんなに簡単に公開されちゃうなんて大丈夫なの?」と不安になるかもしれませんが、バケットは、デフォルトでは第三者がアクセスできないようになっています。ブロックパブリックアクセスとバケットポリシーを設定して、アクセスを許可しないと、公開はされないので、安心してください。
Amazon S3のクエリ機能(データ分析との連携)
S3内のオブジェクトやオブジェクトの中身に対し、データ分析を行う機能があります。
S3 Select とAmazon Athena は、CSVやJSON(JavaScript で使われるデータ形式)のような構造化されたテキスト形式のデータに対して、SQLのSELECT文を実行するクエリ機能です。双方とも、クエリを実行するためのサーバは不要です。
Amazon Redshift Spectrum も同じような機能ですが、大量のデータを処理することができるため、Redshiftクラスタ(Redshiftの管理単位。データウェアハウスを提供するサービスである、Amazon Redshift を使用する際に必要)が必要になります。
ワンパッケージで手軽なサービスAmazon Lightsail
S3は大変便利ですが、サーバ上で動くプログラムを使えないという制限があります。そうした場合に便利なのが、Amazon Lightsail(ライトセール)というサービスです。
EC2や、S3と比べ、あまり知名度がないのですが、大変便利で、初心者にお勧めのサービスです。
Amazon Lightsail は、必要なものを選ぶだけで、Webサイトに必要なサービス一式を定額で揃えられるサービスです。
たとえばブログサーバを構築したいときに、EC2であれば、OS、WordPress、固定IPアドレスやDNSをそれぞれ用意しなければなりませんが、Lightsailは、ワンパッケージで契約できます。料金も、EC2 の場合はサービスごとの合算でわかりづらい状況であるのに対し、Lightsailは、Lightsailのみで完結するのでシンプルです。必要があれば、データベースやCDN、ロードバランサを追加することもできます。
ただし、EC2インスタンスと違って、CPUやメモリなどのスペック、台数をあとから変更する柔軟性はありません。変更したい場合は、スナップショットと呼ばれる機能でバックアップを作り、希望のスペックのLightsailを新たに契約して、そのバックアップから戻す操作を行います。
フロントエンド開発ならAWS Amplify
S3のWebホスティング、Amazon Lightsailと来たら、もう1つサービスを紹介しておきましょう!
AWS Amplify(アンプリファイ)です。
AWS Amplifyは、フロントエンドの開発環境を提供、及び、それをホスティングするサービスです。認証機能やバックエンドと通信するためのツール、ライブラリなどを提供してくれます。
よくわからない場合は、「Webシステムを開発するためのツール一式を提供するサービスで、開発者が使うもの」らしいと覚えておいてください。
AWS Amplifyは、JavaScriptでAWSの、さまざまな機能を呼び出してシステムを構築していきます。HTMLファイルや画像などをS3を経由して配信したり、AWS Lambda(ラムダ)というサービスを使ってバックエンドのプログラムを実行したりします。AWS Amplify は、こうしたサービスを組み合わせてコンテンツやプログラムを配布する司令塔として機能します。
ちなみに、バックエンドのデータベースサービスとして、Amplify DataStoreが提供されていて、これを通じて、データベースにアクセスできます。
さて、今回はS3についてお話しつつ、EC2以外のサービスを使ったWebサイトの構築について語りました。「AWSでサーバを立てる」と言えば、一番有名なEC2だと思ってしまいがちですが、このように他にも選択肢はあります。
とくに、S3のようにマネージドサービスであれば、Webサイトのバックアップについて考えなくてもよくなりますし、Lightsailならワンパッケージで手軽です。
せっかくのクラウドなのですから、EC2に固執せず、自分が必要としているサービスを選択して使うようにしましょう。
ニャゴロウ先生以外の文中の図は『図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書』より引用しております。おかげさまで発売後わずか2年ですが、10刷を迎える大ヒットとなりました。
この連載は、その10刷記念として企画されたものです。書籍のほうもよろしくお願いしますね!