AWSの代表的なサービス簡単まとめ
はじめに
AWSについて各サービスがどんな役割なのかやインフラ構築の全体像をざっくりと学習したく、「AWSではじめるインフラ構築入門」という本を読みました。(1回読んだ後、再度見ながらAWSの構築もしていきました)
この本を読んでAWSについての基本的な部分のイメージを掴むことができたので、そのアウトプットをしていこうと思います。
内容としては、本の中で挙げられているインフラ構築例をもとに各サービスの概要をまとめていければと思います。
全体像
IAM(Identity and Access Management)
AWSのアカウントを作成したときに自動的にルートユーザーと呼ばれるアカウントが作成されます。ルートユーザーはAWSのすべてのリソースにアクセスできる、とても強力なアクセス許可を持ったアカウントのため、基本的にはAWSの解約やユーザー管理などの特殊な作業以外では使わず、代わりに通常の開発で使用する一般ユーザー(IAMユーザー)を作成することが勧められています。IAMのダッシュボード上から作成できるため、開発担当者それぞれのIAMユーザーを作成すると良いでしょう。
作成したユーザーにリソースへのアクセス権限を渡すことでAWSのリソースへのアクセスを安全に管理できます。
ユーザーごとにアクセス許可を設定することもできますが、数が多いと設定の手間が増えたり、設定漏れのリスクもあるため、グループ(ユーザーグループ)を使ったアクセス許可の管理方法も用意されています。グループに対してアクセス許可を与え、ユーザーをそのグループに参加させることでアクセス許可を与えることができます。
AWSではたくさんのリソースが用意されているため、個別にアクセス許可を与えるよりも、ポリシーという複数のリソースへのアクセス許可を束ねたものを設定(アタッチ)すると便利です。
VPC(Virtual Private Cloud)
Amazon VPCはAWSでネットワークを構築するときに使用する仕組みです。Virtualとある通り、仮想のネットワークを構築できます。
VPCを作成するには、事前にネットワークの情報を決めておく必要があります。
設定項目
項目 | 説明 |
---|---|
名前 | VPCを識別するための名前 |
IPv4 CIDRブロック | VPCで使用するプライベートネットワークのIPv4アドレスの範囲(VPCで指定できるサブネットマスクは最大16ビットまで) |
IPv6 CIDRブロック | VPCで使用するプライベートネットワークのIPv6アドレスの範囲(特別な意図がない限り「なし」でよい) |
テナンシー | VPC上のリソースを専用ハードウェア上で実行するかどうか(信頼性を重要視するシステムの場合は検討) |
VPCの中には1つ以上のサブネットを作成する必要があります。サブネットとは、VPCのIPアドレスの範囲を分割する単位です。外部に公開するリソースかどうかや冗長化を行うなどの理由でIPアドレスの範囲を分割します。
VPCにはアベイラビリティーゾーン(各リージョン内の複数の独立した場所)という概念があり、異なるアベイラビリティーゾーンは独立していることが保証されているため、アベイラビリティーゾーンごとにサブネットを用意すれば、複数同時に使えなくなるという可能性を下げ、耐障害性を高めることができます。
本の中では、アベイラビリティーゾーン2つにそれぞれパブリックとプライベートの2つのサブネットを用意しています。
VPCでは他にも下記のような設定も必要になってきます。
インターネットゲートウェイ
VPCを作成しただけではインターネットとVPC内のリソースは相互に通信できません。VPCで作成されたネットワークとインターネットの間の通信を可能にするためにインターネットゲートウェイを作成する必要があります。
インターネットゲートウェイを通じてVPCで作成されたネットワークの中に作成されるリソースは、外部のネットワークと直接通信するために、パプリックIPを持っている必要があります。
NATゲートウェイ
インターネットゲートウェイで通信を行うにはパブリックIPが必要、すなわち、インターネット上に直接公開される状態となります。しかし、それではサブネットをパブリックとプライベートに分けた意味がなくなります。
プライベートサブネットに作成されたリソースはインターネットに出ていく必要はあっても、外部からのアクセスはされたくありません。そういった場合に、NAT(ネットワークアドレス変換)という仕組みを活用します。AWS内でNATを実現するために用意されているのがNATゲートウェイとなります。
NATゲートウェイはパブリックなサブネットに対して作成します。
ルートテーブル
ルートテーブルでは、サブネット間の通信経路を設定します。「〇〇のサーバーに接続するときはここを経由する」といったルールを設定します。
設定例)
送信先 | ターゲット | 用途 |
---|---|---|
10.0.0.0/16 | Local | VPC内の他のリソース |
0.0.0.0/0 | Internet Gateway | その他すべての通信先 |
・送信先 | ||
どこに接続するかをIPアドレスで指定。(特定のIPアドレスでもCIDR形式を使用して範囲指定も可) |
・ターゲット
どこを経由するかという情報。
ターゲットは下記のようなものを指定できる。
ターゲット | 用途 |
---|---|
Local | 同一VPC内のリソースにアクセスするとき |
インターネットゲートウェイ | パブリックサブネットに作成されたリソースがインターネットのサーバーと通信するとき |
NATゲートウェイ | プライベートサブネットに作成されたリソースがインターネットのサーバーと通信するとき |
VPNゲートウェイ | VPNで接続された独自のネットワーク上のサーバーと通信するとき |
VPCピアリング | 接続を許可された他のVPC上のリソースと通信するとき |
セキュリティグループ
外部からのアクセス制限を行うためにセキュリティグループという機能が用意されています。セキュリティグループでは、外部からのアクセスをポート番号とIPアドレスの2つの概念で制御できます。
セキュリティグループはリソース単位で設定が可能で、ルールの許可のみが可能です。(許可しないものはすべて拒否)
EC2(Elastic Compute Cloud)
EC2は仮想サーバーを作成できるサービスです。LinuxやWindowsなどのOSはAWSが用意しているものから選択でき、CPUやメモリなどサーバーのスペックも利用者が自由に選択できます。
EC2では仮想サーバーをインスタンスという単位で管理します。インスタンスは最低限、下記の項目を設定することで作成可能です。
項目 | 説明 |
---|---|
名前 | EC2インスタンスの名前 |
Amazonマシンイメージ(AMI) | EC2インスタンスに導入するOS |
インスタンスタイプ | EC2インスタンスのスペック |
キーペア(ログイン) | EC2にログインするときに使用するキーペア |
VPC | EC2インスタンスを作成するVPC |
サブネット | EC2インスタンスを作成するサブネット |
パブリックIPの自動割り当て | EC2インスタンスに対してどのようにパブリックIPを割り振るか |
セキュリティグループ | EC2インスタンスに適用するセキュリティグループ |
本の中では、パブリックサブネットに踏み台サーバーを一つ、プライベートサブネットそれぞれにWebサーバーを一つずつの計3つのインスタンスを作成しています。
Webサーバーと踏み台サーバーの比較
Webサーバー | 踏み台サーバー | |
---|---|---|
ユーザー | Webサービスのユーザーが常時接続 | システム管理者が時々使用 |
接続方法 | ロードバランサーを通じて間接的に接続される | インターネットから直接接続される |
ロードバランサー
ユーザーが増加すると1台のWebサーバーでは処理が追いつかなくなってくるため、Webサーバーを複数用意して性能を上げていきます。(スケールアウトと呼ばれる手法)
ロードバランサーはこのスケールアウトを行うための手法の1つで、下記のような役割があります。
・リクエストの分散
インターネットから送られたリクエストを、Webサーバーに均等に分散させます。ロードバランサーはWebサーバーの動作状況を常に確認しており、ダウンしてしまったサーバーにはリクエストを分散しないようにします。Webサーバーが復旧したら再度リクエストを分散するようにします。
・SSL処理
データを暗号化したり、もとに戻したりする処理を行います。
ロードバランサーには、暗号に関する処理を高速に行う専用の仕組みが用意されているため、Webサーバーで暗号を処理するよりも高速に行うことができます。
・不正リクエスト対策
不正なアクセスを検知して防ぐ処理をWebサーバーで行うと、負荷がかかり、サーバーがダウンする可能性があるため、不正アクセスの対応をロードバランサーで行います。
ロードバランサーには不正アクセスに対応するための専用の仕組みも用意されているため、Webサーバーごとに対策を用意するよりも効率的に不正なアクセスに対応できます。
RDS(Relational Database Service)
RDSは利用する製品やスペックなどを指定するだけで簡単にデータベースサーバーを構築できるAWSのサービスです。
RDSは下記の4つで構成されます。
・データベースエンジン
実際にデータが保存されたり問い合わせに応じたりするデータベース本体を表します。RDSではMySQLやPostgreSQLなど、さまざまなデータベース製品をデータベースエンジンとして選択できます。
・パラメータグループ
データベースエンジン固有の設定を行うためのもので、使用する言語やデータベースのチューニングの設定を行うことができます。
・オプショングループ
RDS固有の設定を行うためのもので、AWSによるデータベースの監視に関する設定などを行うことができます。
・サブネットグループ
データベースサーバーを複数のアベイラビリティーゾーンに分散させて配置するときに使われる設定です。
RDSではデータベースを作成する際にマルチAZという設定を行うと、1つのデータベースを複数のアベイラビリティーゾーンに配置してくれます。待機しているデータベースが作成されるため、コストも増加しますが、可用性や耐久性を向上させることができます。
S3(Simple Storage Service)
S3はAWSが提供するオブジェクトストレージサービスです。ストレージはデータの保存場所、オブジェクトはデータを指します。
オブジェクトストレージというのは、従来のファイルストレージのようなフォルダ構造は持たず、オブジェクトキーによりデータを一意に特定してデータの出し入れ、管理を行うストレージです。キーのみでデータを管理するため、シンプルで大容量のデータを保存、管理できます。
S3にデータを保存するには、まずバケット(管理するデータを1まとまりにした単位)を作成する必要があります。作成したバケットの中にオブジェクトを保存していきます。オブジェクトはテキスト、画像、音声、動画などファイルとして扱えるものであればほぼすべて、S3のオブジェクトとして扱うことができます。
Route 53
Route 53はDNSの役割を果たすサービスです。主に次の2つの機能があります。
・ドメイン名の登録
Route 53を使用することでAWSがドメイン名の取得を代行してくれます。
ドメイン名を取得することで外部に公開されるDNSが同時に作成されます。
・DNSサーバー
外部に公開するためのDNSやシステム内部で利用するDNSを作成することができます。
SES(Simple Email Service)
AmazonSESは、メールの送受信を行う機能を提供するAWSのマネージドサービスです。ただ、通常のメールサーバーとは異なり、人ではなくアプリでメールを送受信するのに都合が良い機能が用意されています。
アプリからメールを送信するとき、メールの送信者はsystem@〇〇.comやno-reply@〇〇.comのようなアカウントになることが多いと思います。AmazonSESではそのような特別なアカウントをIAMユーザーとして登録し、そのユーザーを使ってメールを送信するようにします。
メールの受信も通常とは異なり、POP3やIMAP4といったプロトコルは提供されておらず、代わりにアクションと呼ばれる処理が実行されます。
このアクションを使って、アプリで用意されている独自APIを起動できるので、ユーザーから届いたメールに対してリアルタイムで処理を行うことが可能です。
アクション一覧
アクション | 説明 |
---|---|
S3アクション | 届いたメールをS3に保存する |
SNSアクション | 届いたメールをAmazon SNSトピックに公開する |
Lambdaアクション | Lambda関数を実行する |
バウンスアクション | 送信者にバウンス応答(無効なメールであったなど)を返す |
停止アクション | 届いたメールを無視する |
Amazon SESを作成した初期時点では、悪用を防ぐためサンドボックスの中に置かれます。
サンドボックスとは、外部に影響を与えないように閉じられた環境のことで、次のような制約があります。
・メールの送信先は、検証済みのアドレスに限られる
・メールの送信元は、検証済みのアドレスか登録したドメインのもののみとなる
・送信できるメール数が、24時間あたり200通、かつ1秒あたり1通に制限される
ElastiCache
ElastiCacheは簡単にキャッシュサーバーを構築できるサービスで、RedisやMemcachedが導入された環境が提供されており、利用者は利用するキャッシュの実装を選択するだけで構築が可能です。
Elasti Cacheではキーバリュー型の仕組みを提供していますが、内部ではデータ量や種類に応じてパフォーマンスを上げるための構成が用意されています。
ElastiCacheの階層構造
要素 | 別名 | 説明 |
---|---|---|
ノード | - | 実際のデータが保存される最小単位 |
シャード | ノードグループ | ノードを束ねるグループで、1つのプライマリノードと、複数のレプリカノードで構成される |
クラスター | レプリケーショングループ | シャードを束ねるグループで、複数のシャードで構成される |
・ノード
キャッシュされるデータが実際に保存される場所を確保します。ノードごとに、キャッシュエンジン、スペック、容量などを設定できます。
・シャード
1〜6個のノードで構成されます。ノードは、1つのプライマリーノードと複数のレプリカノードとなります。
プライマリーノードは、データの更新と照会を行います。レプリカノードは、プライマリノードに行った更新がコピーされて同じ状態が維持されます。
・クラスター
クラスターは複数のシャードで構成されます。
マルチAZ機能を使用すると、複数のアベイラビリティーゾーンにシャードを分散させることができます。あるアベイラビリティーゾーンで障害が発生したときは、別のアベイラビリティーゾーンにフェイルオーバーが行われます。
おわりに
ここまで読んでいただきありがとうございます。
「AWSではじめるインフラ構築入門」を読んで、ざっくりAWSの基本的な部分は抑えることができたかと思います。各サービスの説明に加え、実際の構築の流れまで解説してくれているため、手を動かしながら学ぶことができます。
AWSについてよく知らない方や、これから学んでいきたいという方にはおすすめの本です!
(基本情報レベルの基礎知識があった方が理解しやすいかと思います。)
Discussion