はじめまして。
スプラシアへ2023年に新卒で入社した峯岸と申します。
今回は新卒で開発経験のない私が「AWSome Day」に参加し、AWSについて学んだことについて書いていこうと思います。
私のように、AWSに初めて触れた方の力になることができれば幸いです。
1. AWSの概要について
私は社会人になって初めて、 AWS(Amazon Web Service)という言葉を耳にしました。ロゴからAmazonが関与していることは察せても、それ以上の詳細は全く知りませんでした。
AWSとは一言で表すと、ウェブサーバーをクラウド上で利用するものなのですが、サーバーの機械を置いて動かすのと何が違うのかを言語化できずにいました。
AWSの利点として大きなものは、「手間をかけず、高性能なものが使える」ことが第一でしょう。サーバー自体の管理はAWSに任せ、その高性能なサーバーを利用することができることが大きなポイントになります。
なぜそうできるのか、6つの要素が挙げられました。
・資本支出を変動支出に切り替えられること
サーバーという一つのコンピュータを購入し、整備して……といった一つの資本に対する支出を、貸与という形で使用した分だけ、といった変動的な支出に変えられます。
・スケールを調整しやすいこと
必要になるコンピュータの性能を調整できるため、融通を利かせることができる。
・容量の判断を勘に任せずに済むこと
ストレージ容量を「だいたいこれくらい」で大き目に取るのではなく、必要な分だけ適宜利用することができる。
・迅速に起動、操作ができること
自分達でコンピュータを保有し、そこからサーバーを起動するとなると時間がかかることが多い。AWSの場合、最短50秒で起動させることができる。
・データの維持管理にかかる費用が削減できること
Webデータ等の維持にかかる費用が低く済む。Amazon S3の場合、0.023ドル/GBで使用できる。
・数分で世界中に送り出せること
世界中にサーバーを持っているため、数分で世界中にWebアプリを反映させることができる。
また、本来ハードウェアであるサーバーを、ソフトウェアとして外から操作していくことができます。
コマンドライン、プログラムのコードでのアクセスに加えて、AWSマネジメントコンソールというインターフェースでも操作ができます。
AWSの中でも、サービスの種類は多岐に渡ります。
コンピューティング、ストレージ、データベース、ネットワーク、そしてセキュリティ。その中のいずれか、もしくはすべてを活用し、利用者である私たちのサービス提供につなげていくものとなっています。
ここで、一つ押さえておきたい要素があります。それは、「アベイラビリティーゾーン(以降AZ)」、そして「リージョン」です。
数千台のサーバーを収容するデータセンター、それがおかれているのが、AZです。そして、さらにそれが固まっているのが、リージョンです。地域という意味の通り、世界各地にこのリージョンが置かれており、日本には東京、大阪にリージョンが設置されています。
例を挙げると東京リージョンは4つのAZで構成されており、大阪リージョンは3つのAZで構成されています。
この枠組みをまたいでサーバーを動かすことにより、トラブル発生時のリスクを回避することにも繋がっていきます。
2. コンピューティング
まず、AWSで最も使われているサービスで、この単語には私も聞き覚えのあった、「EC2」というサービスがあります。
EC2とは、「Elastic Compute Cloud」の略です。EC1もEC3もありません。
これは端的に言えば、サイズの変動する仮想サーバーのようなものです。
リソースは変更可能で、さらに起動や新しい仮想マシンの取得に要する時間を短縮できます。
また、必要に応じてインスタンス(一つの仮想サーバーのこと)の追加や削除、一時停止や再開ができます。
AWSが起動している時間に応じて従量課金されていくので、停止していればお金はかかりません。
同じインスタンスでも、適切なタイプを選択することが大切になっています。汎用的なものもありますが、用途がはっきりしているなら、それに特化したものを扱うのが良いでしょう。
扱われるCPUには「Intel Xeon」や「AMD EPYC」等に加えてAmazonが作っている「AWS Gravition」といったものがあります。
CPUの違うモデルに変更することは非常に大きな労力を要するため、慎重に決定していきたいものでしょう。
その中から汎用性に優れたモデルである「T3」やバッチ処理や動画のエンコーディングに優れたコンピューティング最適化モデルである「C5」、BigDataの処理や分散型ファイルシステムの処理に優れたストレージ最適化モデルの「H1」など、汎用性に優れたものから尖った長所があるものまであるので、何を利用するかは熟慮すべきでしょう。
利点を大まかに表しますと、「高性能を低コストで使えること」が大きいでしょう。セキュリティや信頼性が高く、容量の増減も自由で制御もできる。そんなものが低コストで簡単にできる、というものが売り文句なくらいです。
料金形態は、先ほど挙げた従量課金のほかにもいくつかあります。
長期契約に向いている一定期間固定料金の「リザーブドインスタンス」、固定料金と従量課金のハイブリッドである「Saving Plans」、そして時間ごとに料金を入札することにより利用権を得る「スポットインスタンス」があります。
クラウドサービスの中でも、スケーリング、耐障害性、可用性を自己管理する「アンマネージドサービス」と、先に挙げた要素をサービス内に組み込んである「マネージドサービス」に分類されます。EC2はアンマネージドサービスでありますが、AWSのサービス全体ではマネージドサービスがほとんどだそうです。
そんなマネージドサービスの一つでもあるのが、「AWS Lambda」です。これはテーブルの変更や、何かしらのイベントがトリガーとなって起動、処理を実行するといったものです。
そしてこれはサーバーレス(サーバーを意識せずにシステムを運用すること)のサービスになっていて、プログラムさえ用意すれば利用できるものとなっています。
ウェブアプリやバックエンド処理、時間に応じたEC2の自動起動、停止といった自動化など多岐に渡り利用できるものとなっています。
3. ストレージ
そしてAWSでは、ストレージサービスもあります。
その一つが、EBS(Elastic Block Store)です。
これはブロックストレージに分類されており、容量をブロックごとに管理するものです。
EBSはEC2とセットで使う外付けストレージのような立ち位置になっており、セットで使うことが多いそうです。
Webサイトのデータにも、しまう場所が必要になります。
画像データなどの大きなものは、特に置き場所に困ることでしょう。
その際に使われているのが、Amazon S3(Simple Storage Service)です。S2等はありません。
これはWebデータを保存することができるもので、オブジェクトストレージの名の通り、大概のものを入れることができます。
画像データなどの重いものも問題ありません。これはデータの保存、取得を目的に構築されていて、高速なアクセスができます。
値段はリージョンごとに異なっていて、費用対効果を考える必要があります。しかし、遠い場所となると通信時間も長くなるので、兼ね合いが大切です。
例えばアメリカのバージニア州北部にあるリージョンでは1GBあたり0.023ドルで利用できたものが、香港のリージョンでは同じ1GBで0.025ドルと、1.1倍弱の値段となります。
一方、安くても遠くのリージョンにデータを保存してしまうと、アクセスするのに時間がかかってしまいます。その兼ね合いを考えてリージョン選択をする必要があります。
長期保存(バックアップなど)に長けているのが、S3 Glacierです。これは引き出すのに費用が掛かる代わりに、低コストで、長期間の保存ができるものになっています。
先ほど挙げたバージニア北部のリージョンで比較すると、通常のS3が1GBあたり0.023ドルのところ、四半期に一回程度のアクセスを想定したS3 Glacier Instant Retrievalの場合、1GBあたり0.004ドルと、二割弱の値段で利用することができます。
他にもいくつかありますが、どのストレージも性質が異なるので、利用する場合は調べる必要があるでしょう。
4. データベース
ユーザー情報やセッション情報、商品情報など、情報をデータベースに保存することは多いでしょう。基本的にアプリケーションを作る時には必須とも言えます。そんなデータベースもAWSのものが利用できます。
それぞれ適したものが用意されており、リレーショナル型、非リレーショナル型問わず活用していくことができます。
よく目にするであろう、二次元のデータであるSQLを活用するもののほか、NoSQLといった異なる形のデータ管理にも対応しており、鍵と要素が一対一で組み合わさっているkey-value型やそれに列を追加したカラム指向型、文章として管理するドキュメント型など色々なものがある。
万能のものはないので、適宜適したデータベースサービスを選択する必要がある。
リレーショナルデータベース(二次元のもの)のサービスとして、RDS(Relational Database Service)があります。
MySQLやORACLE等といった多くのデータベース管理システムを使用できる他、ほとんどの部分をAWS側に任せることができるので、アプリ側の用意さえすれば利用できるという利点があります。
また、データベースのインスタンスを別AZで用意しておくことで、何かしらの要因で止まってしまった際の予備として使うことができます。
また、Amazon Auroraというものもリレーショナルデータベースを利用するのに便利です。これはMySQLとPostgreSQLにエンジンを絞る代わりに、フェイルオーバー(緊急事態時に別サーバーを利用する)優先順位の変更や、特定の時間までデータを巻き戻すバックトラックを利用できます。
非リレーショナルのものとして、DynamoDBがあります。リレーショナル型に比べ早く、大量のデータを利用することに長けている反面、複雑な結合はできません。
5. ネットワーク
ネットワーク空間としては、クラウド上のプライベート空間としてAmazon VPCがあります。
これは開発、テストといったワークロードを分離したり、その空間でのセキュリティ設定をしたりなどが可能です。
プライベート空間に接続するにも認証が必要であり、下記の図のようになっている。
ELB(Elastic Load Balancing)というサーバー分散サービスを用いて、サーバーの負荷を分散させることができます。
また、Route53というリージョンを分けるサービスと併用することで、サーバーの負担をより分散しやすくなります。
6. セキュリティ
AWSではセキュリティを最優先に考えています。
また、責任共有モデルというものを適用していて、利用者はデータの暗号化やアクセス、ファイアウォールの管理を徹底し、AWS側は基盤サービスの管理、インフラ管理などを行うといった形で、それぞれが徹底することでセキュリティを万全にしていくというものになっています。
アクセス制御に使われるものとして、IAM(Identity and Access Management)というものがあります。
これはAWSのリソースへのアクセス権を制御するもので、AWSアカウントとは別のIAMユーザーというアカウント内のユーザーを作り、管理者がその個人、または属するグループやロール(役割)に権限を振り分けることで、必要なリソースにのみ接続できるといった仕組みにできます。
Cloud Trailというサービスを用いることで、ユーザーアクティビティと使用状況の追跡ができます。
継続的な監視、記録により、何かあったときの行動を明確にすることができます。
こういったサービスにより、セキュリティ面を強く保っていることがわかりました。
7. イノベーションに向けての活用
IoTへの活用にも利用されており、ネットワークを介した通信で、分析や制御ができるようになっています。
また、機械学習のサービスも多く提供しており、視覚、音声、言語、予測、チャットボットといったAIサービスを簡単に使用できるほか、Sagemakerというサービスにより、自分でアルゴリズム作成から強化学習、トレーニングといったものを経由し、機械学習を行うことができるものもあります。
その中でも視覚系AIであるAmazon Rekognitionでは、物体やシーンの検出、顔の分析、比較、認識といったことを容易に実装できます。
8. 最後に
AWS初学者として、次に手を出すものとして考えられるものは、資格の取得です。まず私は、入門用資格であるAWS Cloud Practitioner Essentials取得に向けて勉強していこうと考えています。
デジタルトレーニング等のサービスも利用し、AWSの知識を付けていきたいと考えています。