※本ページは(株)アネステック社内向け(入門者向け)の限定共有記事でしたが、内容的に公開しても特に問題ないため改題の上、公開記事といたしました。
■目次
- 今回の記事の目的と内容
- この記事で書かないこと
- AWSとは
- サービスのレベルによる区別
- AWSサービスの名称
- 各サービスの機能による分類
- 各分類ごとの説明
- AWSを勉強したい場合、どういう順序で勉強すべきか
- おわりに
0.はじめに
過去の社内向け記事において、クラウンドコンピューティングの全般的な概要を説明していますが、クラウドコンピューティングは今後開発業務でも標準となっていく技術であり、ソフトウェア技術者がこの技術領域を無視することはもはや許されなくなってきています。今回は3大クラウドサービスであるAWS、Azure、GCP の中でも最もシェアの大きいAWSについて理解を深めるための記事をお送りします。
1.今回の記事の目的と内容
- AWSにはどんなサービス(機能)があるのかを俯瞰的、網羅的にざっくり把握することを本記事の目的とします。社内でAWSにあまりなじみのない方を想定読者としていますが、ある程度分かっている方の復習にもなるような内容を目指しています。
- また、取り上げた各サービスの概要について紙面の許す範囲で簡単に説明します。
- 本当の本当にクラウドに関して初心者の場合、この記事でもつらいかもしれません。そんな方は下記のスライドを見てみると最初のイメージはつかめるかもしれません。書いてくださった方には本当に感謝しかありません。
【サクッとAWS入門+モダン開発の基本 - Speaker Deck】
2.この記事で書かないこと
- クラウドコンピューティング一般に関する話
- AWSの歴史やこれまでの歩みと言った話
- コストに関する話
- リージョンやAZ(アベイラビリティゾーン)に関する話
- 個々のサービスの詳細な操作方法
このあたりの話をしだすと話題が発散し、説明が多くなりすぎるので今回は割愛します。本記事ではAWSにどんな機能があるかにフォーカスします。
クラウド一般についての話は、既出の資料(※社内向けであったためリンクなしです。すみません)を参照ください。
3.AWSとは
Amazon Web Services (AWS) とは、アマゾン・ドット・コムが提供するクラウドコンピューティングサービスです。AWSは、大規模なデータセンターを維持することなく、インターネットを介してコンピューターやサーバー、データベース、ストレージ、アプリケーションなどを利用することができる、いわゆる「クラウドサービス」です。AWSは、膨大なコンピューティングリソースを提供し、さまざまな種類のアプリケーションやサービスを構築、運用、管理することができるようになっています。
4.サービスのレベルによる区別
一般にクラウドサービスには責任分担のレベルによって大きく3つに分類できます。
- SaaS Software as a service サービスレベルでのクラウド化
- PaaS Platform as a service プラットフォームレベルのクラウド化
- IaaS Inflastructure as a service インフラレベルのクラウド化
AWSで提供されるサービスは基本的にはIaaSに該当するものが多いです。
IaaSに当たるサービスとしては、Amazon EC2, EBS, VPC, ELB などの基本的なサービスは殆どIaaSに該当します。
PaaSに当たるサービスとしては、Amazon RDS, ECS, AWS Lambda、AWS Fargate, AWS Ealstic Beanstalk などが該当します。現在の傾向としては、PaaSに該当するサービスが増えているようです。
1つの目的に対して、AWSの複数レベルのサービスで実現できることがあります。例えば、RDBを使いたい場合にIaaSであるEC2で作成した仮想マシンインスタンスにユーザが自分でMySQLをインストールして使うのと、リレーショナルデータベースを提供するPaaSであるRDSでMySQLのインスタンスを選択して使うのとでは、どちらでもRDBを使いたいという目的を果たすことはできます。この2つは何が違うのかというと、サーバの保守管理の責任をユーザが持つか、AWSが持つかの違いとなります。前者の場合、ユーザ自身がMySQLのセットアップや管理を行う必要があります。また仮想マシンのスペックや利用するストレージによってパフォーマンスが異なるため、適切なスペックをユーザが決める必要があります。一方、RDSでMySQLのインスタンスを使う場合はAWSがMySQLのセットアップや管理をよしなにしてくれるため、ユーザはデータベースを使うだけです。
RDSではスケールアップやスケールダウンが簡単に行えるため、EC2を使って構築した場合よりもデータベースのパフォーマンスを維持するのが容易となります。このようにRDSの方がEC2よりもAWS側の責任範囲が大きくなりますが、このことを「RDSの方がEC2よりもマネージドなサービス」であると言います。
AWSは主な機能をIaaSやPaaSでの提供としているため、SaaSに該当するサービスは基本的にはあまり無いと考えて良いですが、まったくないというわけではなく、例えばAmazon S3は単体でもWeb経由でデータ保存、参照ができるストレージサービスとして使えるのでIaaSでありかつSaaSでもあるとも言えます。またAmazon QuickSight はBIアプリケーションを提供するサービスであり、SaaSの一種であると言っても良いでしょう。他にも、Amazon AppStream はデスクトップアプリをコンテナ化してブラウザから使えるようにする一種のストリーミングサービスであり、これも SaaSよりのサービスと言えます。
5.AWSサービスの名称
ほとんどのAWS のサービスはサービス名が「AWS 〇〇」というようにAWSで始まるか、「Amazon 〇〇」というようにAmazon で始まっています。
(どちらもついていないサービスもたまにあります。例:Elastic Load Balancing)
ネーミングの原則として、「AWS」で始まるサービスは他のサービスと組み合わせて使うユーティリティ系のサービスであり、「Amazon」で始まるサービスは単独で機能を提供できるサービスとなっています。このルールには例外もあり、例えばストレージを提供するAmazon EBSは必ずEC2にアタッチして使うサービスなので上記原則に従うならAWS EBSとなるべきですが、実際の名称はAmazon始まりとなっています。これはおそらくEBSと必ずセットで使う Amazon EC2 の名前に合わせてそろえられたためではないかと考えられます。
また、AWSのサービス名には柔軟性を意味する"Elastic"という言葉が使われているものがいくつかあり、これはクラウドコンピューティングの特性であるスケーラビリティの高さを表すネーミングとなっているためと思われます
6.各サービスの機能による分類
2022年時点でAWSでは200以上のサービスが提供されています。そのすべてを今回の記事だけで説明しきることは不可能ですので、今回はAWSの主要な機能および各サービスをその内容によっていくつかのグループに分類し、俯瞰的にそれぞれの概要を把握するための簡単な説明を行います。各機能およびサービスの個々の細かい使い方については、また別の機会に説明したいと思います。ただし、より詳しい説明が欲しい場合のために、AWSの公式ドキュメントがある場合はなるべくリンクするようにしましたので、必要に応じて参照してください。
以下は、AWSの主要な機能をグループ分けしたものです。AWSが公式このようなカテゴライズを提示しているわけではなく、今回ざっくり簡易化して分類してみたものです。
- 基本コンピューティング(オンプレミス置き換え)
- データベース
- データ処理(データ蓄積、処理、分析)
- 仮想コンテナ
- 機械学習
- IoT
- アプリケーション統合
- 開発ツール
- 全体管理
- IaC
- その他
AWSの公式なサービスカテゴライズはこれより少し細かいもので、AWS の製品・サービス一覧 というページに掲載されています。
7.各分類ごとの説明
(1) 基本コンピューティング(オンプレミス置き換え)
オンプレミスのネットワーク要素をそのままクラウド上に持って行きたい(いわゆるリフト&シフトする)場合の受け皿となる代替サービス群です。AWSの最も中核のサービスであり、基本的なサービス群です。
- Amazon VPC(仮想ネットワーク)各リソースを配置するLANに相当する
- Amazon EC2(仮想マシン)
- Amazon EBS(EC2用のディスク領域としてマウントして使うストレージ)
- Amazon S3(ストレージ)オブジェクトベースの大容量ストレージ
- Amazon Route53(DNS)
- AWS Elastic IP Address(外部固定IPアドレスを提供)
- AWS Directory Service (Active Directory)
-
Elastic Load Balancing (ロードバランシングサービス。ALB,CLB,GLB,NLB)
ALB~NLBはロードバランサーの種類です。それぞれ対応するネットワークレイヤが異なります。 - AWS Elastic Beanstalk(EC2,S3,RDS,ELBなどをまとめてプロビジョニングするサービス)
- Amazon lightsail(VPS:仮想プライベートサーバー)
例えば、オンプレミスでWebシステムを展開する場合は下記のような構成が典型的なのではないかと思います。
AWSで紹介されているクラウドデザインパターンで似たようなケースを探すと、Scale Outパターンと呼ばれるものがこれに近いものになります。
各サーバに対応するのがEC2、ロードバランサを置き換えるのがELB(Elastic Load Balancing)、監視サーバを置き換えるのが CloudWatch です。この図には出てきていませんが、EC2を設置するための仮想ネットワーク(オンプレミスではLANに相当する)としてAmazon VPCを設置し、各EC2にはディスク領域として Amazon EBSを設定する必要があります。DBサーバは次項で挙げる Amazon RDSで代替できます。
オンプレミスでは、トラフィックが増えても簡単にサーバ増設はできませんが、AWSであれば必要に応じてAuto Scaling 機能を使ってサーバを必要なだけ増設できることがわかります。オンプレミスの構成をを単純に置き換えるだけでなく、トラフィックの増減に対して効率よく処理能力を増減できる点がクラウドの強みです。
この図に出てくるサービスで上記に名前がなかったものは以下の通りです。
- Amazon CloudWatch (監視サービス)
- Auto Scaling(監視情報にもとづいてリソースを増減する機能)
- AMI(Amazon Machine Image)AMIはEC2のインスタンスを作るときのテンプレートとなる仮想マシンイメージです。
スケーラビリティが特に要らないのであれば、単純にVPCとEC2およびRDSだけでシステムを構成することもできます。
なおAmazon VPCとEC2については、本社有志による技術レポートで「AWSのEC2とVPCを構築してみた 」というものがありますので合わせて御覧いただければ理解の助けになるかもしれません。
(2)データベース
データベース系のサービスは本来は上記基本のコンピューティングサービス(オンプレミス置き換え)のグループに含むべきものですが、種類が多いため別グループとしました。
- Amazon RDS (リレーショナルDB、MySQL, PostgreSQL, Oracle, SQL ServerなどのDBMSが選べる)
- Amazon Aurora (リレーショナルDB、MySQL、PostgreSQLをベースにAmazonが独自に開発、最適化したDBMSを使用している)
- Amazon DocumentDB (MongoDB互換のドキュメント指向DB)
- Amazon DynamoDB (NoSQL DB)
- Amazon ElastiCache (Memcached/Redis、インメモリデータストア)
RDBだけでなく様々な種類のデータベース、データストアが使用可能です。
また、次に述べるようにデータ処理や分析をするためのサービスも用意されています。
(3)データ処理/分析系
DWH、データレイク、ETL、BIなどを実現するサービス群です。
- Amazon EMR(Elastic Map Reduceの略、ビッグデータ解析用機能)
- Amazon RedShift (DWH、データウェアハウス)
- Amazon Lake Formation(S3ベースのデータレイク)
- Amazon Athena (データ分析)
- Amazon Glue (S3やRDS, RedShift からのETL)
- Amazon Cloud Search(検索エンジンサービス)
- Amazon QuickSight(BIツール)
データレイクとは、RDBのような構造化されたデータだけでなく、構造化されていないテキストデータやCSV、XML、JSONなどさまざまな形式のデータ資産をまとめて保存できるデータリポジトリです。
Amazon Athena は S3に格納されているさまざまなフォーマットのデータにSQLを発行して分析を行えるマネージドサービスです。
Amazon CloudSearchは、文書やデータベースなどのデータをインデックス化し、検索クエリを処理して結果を返すことができます。このサービスは、開発者がカスタム検索エンジンを構築するためのAPIを提供し、検索結果のカスタマイズや検索インターフェースの構築などをサポートします。
(4)仮想コンテナ系
コンテナ型仮想化を実現する製品であるDockerを利用するサービス群です。
- Amazon ECR (コンテナリポジトリ。DockerHubのようななもの)
- Amazon ECS(コンテナ実行のクラスター管理)
- Amazon EKS(Kubernetesによるコンテナオーケストレーション)
- AWS Lambda(FaaS、サーバレスアーキテクチャの中核機能)
- AWS Batch(Lambdaに似ているが、ジョブ単位で長時間実行可能)
- Amazon Fargate(フルマネージドなコンテナ実行環境)
- AWS App Runner(コンテナ系サービスをひとまとめにしてデプロイ・実行する)
サーバーレス技術もその背後基盤にコンテナがあることで成立するものであるため本記事ではコンテナ系サービスの一種とみなしました。サーバーレスとはFaaS(Function as a Service)とも言われる機能で、実際にはサーバが無いわけではなくユーザ側ではサーバの管理をしなくてよいという意味でこう呼ばれています。特定の処理の関数(Function)部分だけをユーザが用意し、その実行環境はフルマネージドでクラウド側が提供するというサービス形態です。課金はその関数を呼んで使用されたCPUの消費量に応じて行われます。その関数が使われていない間は料金は0になります。EC2の場合はサーバが使われていない間も仮想マシンは起動したままなので、稼働時間に応じて料金がかかりますが、サーバーレスでは本当の意味で使った分しか課金されないということです。ただし各関数ごとに1つずつサーバを用意しているわけではありません。関数の背後にはコンテナがあり、必要に応じてコンテナを起動することで実現されています。
このようにサーバーレスはクラウドとコンテナ技術のいいとこどりができる技術であり、需要に合わせて使いたい資源だけを利用するクラウドコンピューティングの考え方と相性の良い技術です。現在はまだオンプレミスのシステムをそのままの形でクラウドへ移行する事例が多いためEC2が基本機能として使われることが多いですが、EC2は使用しない間も稼働し続ける形態であり本来クラウドとの相性はあまりよくありません。今後作られるシステムは最初からクラウド環境への構築が前提となり、EC2は使わずなるべく仮想コンテナ系のサービスを使うことが普通になっていくことが予想されます。
サーバーレスアーキテクチャの次に来るアーキテクチャとしてマイクロサービスアーキテクチャなどのクラウドネイティブと呼ばれる設計思想も注目されており、今後学習が必須となっていく可能性が高い分野と言えるでしょう。
AWS Farage と Amazon ECSの違いはインフラの管理方法です。ECSではコンテナを実行するために必要なインフラをユーザが自分で構築・管理する必要があります。EC2インスタンス上にDockerをインストールし、そこでコンテナを実行することになります。それに対してFargateはインフラを構築・管理する責任をAWSに移譲することができます。FargateはAmazon ECSのオプションとして提供されています。
AWS App Runner はコンテナイメージあるいはソースコードからWebアプリケーションやAPIを迅速にビルド・デプロイ可能とするサービスです。内部的にVPCやFargateを使うが、意識する必要はありません。
(5)機械学習系
機械学習分野に関しては、AWSよりもGCPの方が得意としていると言われていますが、AWSにも機械学習系のサービスがあります。AWSの機械学習系サービスは3つのレイヤーで提供されています。
- AIサービス:AWS側があらかじめ用意した学習モデルを活用してAIタスクを実行できるマネージドなサービス
- Amazon Forecast(AIによる時系列予測)
- Amazon Transcribe(AIによる文字起こし)
- Amazon Polly (テキスト読み上げ)
- Amazon Translate(AIによるテキスト翻訳)
- Amazon Rekognition(画像、動画解析)
- Amazon Comprehend(自然言語処理)
- Amazon CodeGuru(AIによるコードレビュー)
- etc ...
- MLサービス:開発者が自分で機械学習モデルの開発・学習・推論を行えるサービス
- Amazon SageMaker (機械学習)
その他、Tensorflow などのフレームワークがプリインストールされたAMIやDockerコンテナも提供されています。
機械学習系のサービスとしては、Google Colaboratoty や OpenAI が提供するサービスも人気があるためAWSの上記サービスを使うにあたってはそれらと比較し、どれを選択すべきか検討した方が良いでしょう。
(6)IoT系
IoTデバイスとの通信、状態管理、エッヂコンピューティングなどを支援するサービス群です。
- AWS IoT Analytics(デバイスから送信された情報の収集、解析、可視化)
- AWS IoT Core(IoTデバイスとAWSとの接続管理、デバイスからのデータ受信、デバイスの状態管理など)
- AWS IoT Events(IoTデバイスからのメッセージとAWS機能との連携)
- AWS RoboMaker(ロボットアプリケーションの開発、シミュレーション、テストなど)
(7)アプリケーション統合系
AWSの各種サービスを連携させ制御するためのメッセージ配信などのサービスが含まれます。
- AWS SQS(Simple Queue Service、マネージド型の分散メッセージキュー)
- AWS SNS(Simple Notification Service、マネージド型のメッセージ配信)
- AWS Step Functions(ステートマシン・ワークフローによる分散アプリケーションとマイクロサービスのオーケストレーション)
- Amazon EventBridge(アプリケーションをさまざまなソースからのデータに接続するために使用できるサーバーレスのイベントバス)
(8)開発ツール系
- AWS Cloud9(ブラウザベースのIDE)
- AWS CodeCommit(Gitサーバ)
- AWS CodePipeline (コードのビルド、テスト、デプロイを自動化)
- AWS CodeBuild(コンテナを使用して、ビルドを実行)
AWS CodeCommit は Git を利用したリポジトリを提供しており、CodePipelineなどと連携することで、CI/CD パイプラインを構築することができます。
これらのサービスやツールを組み合わせることで、AWS上で CI/CD パイプラインを構築することができます。例えば、CodePipelineを使用して、GitHubからのコードのプッシュをトリガーに、CodeBuildでのビルド、CodeDeployでのデプロイを自動化するような流れが構築できます。
(9)全体管理系
AWSのリソースを管理するサービス群です。
- AWS IAM(AWS自体のユーザ認証、権限認可管理)
- AWS Cognito(AWS上に構築したサービスのユーザ認証機能を提供する)
- Amazon ClowdWatch(ネットワーク監視)
- AWS CloudTail(ロギング)
- AWS Config (リソースの構成管理、監査)
- AWS Systems Manager (運用管理ツール)
- AWS CLI (コマンドラインインターフェイス)
(10)IaC系
IaC は InfraStructure as Code の略で、インフラをコード (スクリプトやコンフィグファイル) として管理し、バージョン管理システムで管理したり自動化ツールを使ってデプロイや更新を行うという考え方です。これによりインフラの変更履歴を追跡し、再現性を高め、スケールアウトやフェイルオーバーなどの自動化も実現することができます。
AWS のIaC系サービスには以下のようなものがあります。
- AWS CloudFormation(クラウドインフラストラクチャのテンプレートを作成・管理するためのサービスで、AWS リソースをスクリプト化し、統一的に管理)
- AWS CDK(AWS Cloud Development Kit)
AWS CDK は、AWS リソースをプログラミング言語 (JavaScript, TypeScript, Python, C#, Javaなど) を使って構築、更新、および管理するためのオープンソースのフレームワークです。AWS CDKを使用することで、AWS CloudFormationのテンプレートを書くよりも簡単に、柔軟に、視覚的にAWS リソースを構築、更新、および管理することができます。AWS CDKは AWS CloudFormation に依存して動作します。またサードパーティ製のIaCツールとして、HashiCorp 社の Terraform がシェアを伸ばしており、AWSでIaCを行う際にも有力な選択肢となります。IaCに興味があればTerraformを勉強してみるのも悪くない選択と思います。
(11)その他
- Amazon CloudFront (CDN)
- AWS Auto Scaling(リソースのスケーラビリティを提供)
- AWS VPN(VPN接続)
- AWS Direct Connect(専用ネットワーク接続)
- AWS Outposts (AWSのインフラをオンプレミスに配置しハイブリッドクラウドを作成)
その他のサービスの一例として、ネットワーク接続に関するサービスやオンプレミス環境上にAWSと同様の環境を作成して併存させる(ハイブリッドクラウド)を実現するためのサービスを挙げました。そのほかにも様々なサービスが用意されています。
8.AWSを勉強したい場合、どういう順序で勉強すべきか
AWSの学習を始めたいと思ったとしても、今回述べたようにサービスの数が膨大なのですべてをいっぺんに習得するのは難しいです。そこで、AWSに入門するときどのような順番で学習していくと良いか方針を考えてみます。
(1) IAMの概念について最低限の勉強をする。
セキュリティ上最低限必要なIAMアカウントのつくり方、権限付与の仕方を学ばないと使えないためです。またアカウントをクラックされないため最低限のセキュリティの知識を得ておく必要があります。IAMポリシーなどの複雑な考え方については最初は後回しとしてもよいでしょう。
(2) 基本コンピューティング系サービスの勉強をする。
AWSの入門的な本を読むと大抵この部分から説明し、VPC、EC2、EBS などを使ってサーバを立て、外部ネットワークと接続するというような例題が扱われていることが多いです。これまで使っていたオンプレミスのシステム構成に内容が近く概念的に分かりやすいということと、今後増加することが見込まれるオンプレミスからクラウドへの移行を行うときに最初に必要となる機能であるためでしょう。AWSの公式サイトにある無料のハンズオン教材 から始めてみるのがおすすめです。
(注意:ハンズオン自体は無料ですが、そのときに使用したAWSサービスで料金が発生することがありますのでご注意下さい)
(3)自分の興味と必要に応じて学習していく。
このくらいの段階まで来たら、自分の興味範囲に応じて勉強する内容を選んでいくと良いと思います。例えば、以下のような方向が考えられます。
- AWS CLIを使ってみる
- AWS RDS を使ってデータベースを構築してみる。
- AWS CloudFormation、CDK などで IaC を体験してみる。
- Docker に興味がある場合は仮想コンテナ系サービスを動かしてみる。
- 機械学習に興味があれば機械学習系サービスを使ってみる。
などなど…
(4)AWS認定試験を利用する。
AWSで実施している各種認定試験を利用して勉強するのも良い考えです。試験は12種類あり、自分の関心に合わせて受験できます。
- 模擬試験は無料で受けることができます。
9.おわりに
始めに書いた通り、今回取り上げたサービスはAWSの主要な機能のみであり、全ては網羅していません。また、AWSのサービスは常に新しいものが提案され、既存機能も更新されていくため、常に動向をウォッチしていく必要があります。
今後もクラウドコンピューティングやAWSの個別のサービスについても調査を進め、記事にしていきたいと思います。