はじめに
最近、社内で (ようやく) AWS の機運が高まってきたので、AWS を体系的に理解するため、知識体系を主要なサービスに絞ってざっくりと整理してみました。これから AWS を勉強する方、知識を整理したい方の参考になれば幸いです。
なお、本記事は AWS のインフラ周りで主要なサービスをターゲットにしています。AI とか IoT とかアプリケーション開発などは対象外です。
記事を Qiita CLI に移行したことに伴い、体裁を修正しました。ただし、内容の更新まではしていませんので、ご留意ください。
知識体系の図
上部にある要素は下部の要素に支えられている、という知識体系(知識スタック)を表現しています。使いたいサービスの下部にある要素まで理解しておくと、腹落ちした状態で設計・構築が進められると思います。
解説
インフラ
クラウドに関する書籍や記事は数多くあれど、ここに触れているものは意外と少ないです。サーバ、ストレージ、ネットワーク、仮想化技術等のインフラ知識は、クラウドであっても設計品質を高めるうえで重宝します。これから勉強していく人は、AWS を触りながらでも徐々に覚えていくと良いと思います。
AWS の基礎
AWS に触れるにあたり、クラウドがどういうものか、AWS とはどういうものかを知っておく必要があります。
リージョン、アベイラビリティゾーン (AZ)、責任共有モデルといった概念はもちろん、どう構成したらどれくらいの SLA になるのかも押さえておくと良いでしょう。例えば、EC2 は 1 つだと SLA 90% だけど、マルチ AZ で 2 台以上構成すれば 99.99% になります、といったものです。
厳密には、xx%というのは「時間コミットメント」、「稼働率」であり、SLA とは「xx%稼働するように頑張ります。もしできなかったら返金するね。」っていう包括的な合意文書 (Agreement) を指します。
IAM (Identity and Access Management)
アクセス権限を管理する仕組みです。「アイアム」と読みます。
すべてのサービスに関わる重要な要素であるため、知識体系の下部に位置させています。正直知らなくてもある程度のことは何とかなりますが、AWS が提唱する「最小限の特権」を守る場合は理解しておかないといけません。
まずは、以下ベストプラクティスに従って設定しましょう。
VPC (Virtual Private Cloud)
論理的に分離されたネットワークです。ほとんどのリソースは VPC が無いことには始まりませんので、比較的下部に位置するサービスだと考えています。
デフォルトでは、異なる VPC 間での通信はできないため、異なる環境を複数構築する場合 (本番環境と開発環境、A システムと B システムなど) は VPC を分けておくと安全です。
VPC と一口に言っても色々ありますが、特に以下が重要です (設計するなら理解必須)。
- サブネット (プライベートサブネットとパブリックサブネットの違い)
- ルートテーブル
- インターネットゲートウェイ
- NAT ゲートウェイ
- セキュリティグループ と ネットワーク ACL
- Elastic IP
S3 (Simple Storage Service)
いわゆるストレージです。AWS の各種サービスと関連がある重要なサービスです。
通常のファイル置き場や精的な Web サイトの公開にも利用できますし、よくある使い方としてバックアップやログの保存もあります。長期で保存したい場合に安くできるもの (ストレージクラス) もあるので、保存期間・アクセス頻度に応じて使い分けると良いでしょう。
CloudWatch
簡単に言うと、監視サービスです。CPU、メモリ、ディスク容量といったメトリクスの監視、ログの監視・保存などができます。閾値超過や特定の条件によりアラート通知(アラーム)することもできます。
SNS (Simple Notification Service)
メッセージのやり取りを可能にするサービスです。Social Networking Service のことではありません。
使い方次第で様々なことができますが、例えば CloudWatch の監視結果を Slack に配信したり、エラー検知したら Lambda を起動してサービスを自動で再起動したり、といった使い方ができます。必ずしも必要なサービスではありませんが、知っておくと便利です。
EC2 (Elastic Computing Cloud)
AWS をよく知らなくも EC2 なら分かるという方は多いでしょう。もはや説明は不要だと思いますが、IaaS(Infrastructure as a Service)の代表でサーバのことです。知識スタックでは割と上部にいますが、IAM や VPC あってのサービスであるためここに位置させています。
RDS (Relational Database Service)
その名の通り、データベース(DB)のサービスです。PaaS (Platform as a Service) にあたるサービスで、利用者はサーバを立てずとも DB が使えます。
DB には、PostgreSQL、MySQL、Oracle、SQL Server などが選べます。冗長化や性能といった非機能要件をほぼ考えなくて良くなるので、やりたいこと(機能)の実現に注力できるのが利点です。ただし、DB のバージョンアップが定期的になされるため、要件によってはそぐわない場合もあります。
Lambda
コードやスクリプトを実行するためのサービスです。サーバーレスコンピューティングサービスとも言います。
RDS と同じくサーバを立てずともコード実行ができるものですが、とにかく安いです!例えば、1 日 1 回データの同期をするといったようなバッチ処理であれば、EC2 を 1 台立てるよりも遥かに安く済ませることができます。
ELB (Elastic Load Balancing)
負荷分散装置(ロードバランサー)です。
EC2 を冗長構成にするとき、および EC2 を外部からアクセスできないプライベートサブネットに配置してアクセスポイントを別に作りたい場合などに使います。3 種類のロードバランサーがありますが、一般的なのは NLB (Network Load Balancer) になるでしょう。
Beanstalk
Web アプリケーションを実行するための、Web サーバ、DB、ロードバランサーなどがセットになったサービスです。ホスティングサービス、またはレンタルサーバーをイメージしてもらえば良いと思います。
正直押さえておかなくても良いサービスではありますが、個々にサービスを使うよりはるかに便利なので、これも覚えておいて損はありません。Docker にも対応しているので、Docker Hub からイメージをダウンロードしてくればすぐにでも使えます。
Direct Connect
AWS とオンプレとを接続するための専用線接続サービスです。業務で使うサーバを AWS に立てる場合は、だいたいセットで検討することになると思います。セキュリティ面や性能面で非常にメリットがある一方、事前検証が難しい、費用が高額、デプロイまでに時間が掛かる等の点も考慮しておく必要があります。
さいごに
知識獲得の近道は何より触ってみることだと思います。本記事を読んでいただければそれはありがたいですが、経験に勝るものはありません。ついでに資格取得も目指してみるとモチベーション向上や、お給料アップにつながるかもしれません。