AWS:ゼロから実践するAmazon Web Services。手を動かしながらインフラの基礎を習得を受けた。出てくる語句をメモ。
どんな講義?
講義の流れはこんな感じ。
セクション | AWS | インフラ | 内容 |
---|---|---|---|
1 | 概要 | 概要 | AWSでネットワーク・サーバを構築しよう |
2 | サインアップ、CloudWatch、IAM、CloudTrail | - | AWSを始めよう |
3 | VPC | IPアドレス、ルーティング | ネットワークの構築しよう |
4 | EC2 | SSH、公開鍵認証、ポート番号、ファイアウォール | Webサーバーを構築しよう |
5 | Route53 | ドメイン、DNS | ドメインを登録しよう |
6 | RDS | - | DBサーバーを構築しよう |
7 | EC2 | HTTP、TCP、UDP、IP | WordPressを構築しよう |
8 | S3、CloudFront | 画像配信、キャッシュ | 画像を配信しよう |
9 | ELB | Webレイヤ冗長化 | Webレイヤを冗長化しよう |
10 | RDS | DBレイヤ冗長化 | DBレイヤを冗長化しよう |
11 | CloudWatch | 監視 | システムを監視しよう |
12 | IAM | 権限管理 | アクセス権限を管理しよう |
セクション1-7の**基礎編(構築編)と8-12の発展編(運用編)**に分かれている。AWSの各サービスおよびそれに付随するインフラについて、実際に手を動かしながら学ぶのが特徴。
- はじめてAWSを学ぶ人
- インフラにあまり詳しくない人
- AWSを使用してネットワーク・サーバを構築したいアプリケーションエンジニア
を対象とした講義。
講義を受けることで、下図のようなシステムを構築することができるようになる。
VPCの中にパブリックサブネットとプライベートサブネットがある。
パブリックサブネットはインターネットゲートウェイと繋がっていて、インターネットにアクセス出来る。一方、プライベートサブネットはインターネットゲートウェイと繋がっていないので、インターネットからは接続できない。
パブリックサブネットの中に、EC2のWebサーバーがあって、ApacheとWordPressがインストールされている。
プライベートサブネットの中には、RDSのDBサーバーがあって、MySQLがインストールされていて、WordPressからMySQLに接続できるようになっている。VPCの外にはRoute53があり、ドメイン名で問い合わせがあった時に、名前解決できるようになっている。
以上が講義の簡単な説明。
以下が出てくる語句のまとめ。
AWS
Amazon Web Services
Amazon社が提供する クラウドサービス
- サービスが豊富
- クラウドサービスとして 世界最大規模
- EC2やRDS等、100以上のサービスが存在
- 高負荷に耐えられる、信頼性の高いシステムを少ない手間で運用できる
- リソースが柔軟
- リソースを、必要なときに必要な分だけ調達できる
- 従量課金
- 使った分だけ支払う
- 不必要なときは使う必要がなく、費用対効果に優れている
インフラ
Infrastracture: 基盤
システムやサービスの基盤となる設備 = サーバーやネットワークのこと。
サーバー
クライアントに対してサービスを提供するコンピューター
ネットワーク
複数のコンピューターをつないで、データを送受信できるようにするもの。
クラウド
クラウドコンピューティング
ネットワークを利用してコンピュータリソースを利用する形態
- オンプレミス(インフラを時前で用意し、自社で所有・管理すること)と比べ、初期コストが少ない
- すぐに始められる
- サーバーの増減が自由
- 費用の予測が付きづらい
- クラウド全体で障害が起こると対応できない
【VPC】ネットワークの構築しよう
リージョン
AWSの各サービスが提供されている地域
東京リージョン
など
アベイラビリティゾーン
独立したデータセンター
ap-northeast-1a
など
VPC(Virtual Private Cloud)
AWS上に仮想ネットワークを作成できるサービス
この講義では、VPCのIPアドレスを 10.0.0.0/16
に設定する。
サブネット
VPCを細かく区切ったネットワーク
-
パブリックサブネット
講義では、パブリックサブネットのIPアドレスを
10.0.10.0/24
に設定する。 -
プライベートサブネット
講義では、IPアドレスを
10.0.20.0/24
に設定する。
IPアドレス
インターネット上の住所
ネットワーク上で重複しない番号
- 32ビットの整数値で構成
- 32ビットのIPアドレスを8ビットずつ4つの組に分け、
.
を入れて10進数で表現 - 0.0.0.0 - 255.255.255.255
- パブリックIPアドレスとプライベートIPアドレスがある
- ネットワーク部とホスト部に区分けする
パブリックIPアドレス
インターネットに接続する際に使用するIPアドレス
- ICANN(Internet Corporation for Assigned Names and Numbers)が、重複しないように管理
- プロバイダーやサーバー事業者から貸し出される
プライベートIPアドレス
インターネットで使用されないIPアドレス
- 社内LANの構築やネットワークの実験時はプライベートIPアドレスを使用する
- 下記範囲内のアドレスで自由に使用できる
プライベートIPアドレスの範囲 |
---|
10.0.0.0 - 10.255.255.255 |
172.16.0.0 - 172.31.255.255 |
192.168.0.0 - 192.168.255.255 |
ネットワーク部
IPアドレスが属しているネットワークを識別するための部分
ホスト部
ネットワーク内のコンピュータを識別するための部分
CIDR(サイダー)表記 (Classless Inter-Domain Routing)
IPアドレスのネットワーク部とホスト部の境目を
/
の後に続くビット数で指定する方法
例えば、 192.168.128.0
- 192.168.128.255
の256個のIPアドレスは、 192.168.128.0/24
と表される。この場合、IPアドレスの先頭から24ビットがネットワーク部、残りの8ビットがホスト部。
サブネットマスク表記
IPアドレスとサブネットマスクを
/
で区切って並べた表記
例えば、 192.168.128.0
- 192.168.128.255
の256個のIPアドレスは、 192.168.128.0/255.255.255.0
と表される。
2進数
各桁を0か1で表す。コンピュータは2進数で計算を行う。
ビット
2進数の1桁(0か1)。コンピュータデータの最小単位。
バイト
1バイト = 8ビット
10進数
0-9の10種類で数値を表す。
【EC2】Webサーバーを構築しよう
EC2(Elastic Compute Cloud)
AWSクラウド上の仮想サーバー
- 数分で起動し、1時間または秒単位従量課金
- サーバー(EC2インスタンス)の追加・削除、マシンスペック変更も数分で可能
- OSより上のレイヤは自由に設定できる
AMI(Amazon Machine Image)
インスタンス起動に必要な情報が入った、OSのイメージ
サーバーのテンプレートのようなもの
- AWSやサードパーティが提供
- 自前のカスタムAMIも作成可能
- カスタムAMIから何台でもEC2インスタンスを起動可能
インスタンスタイプ
サーバーのスペックを定義したもの
- インスタンスタイプにより、CPU、メモリ、ストレージ、ネットワーク帯域が異なる
- インスタンスタイプにより、料金が異なる。
- アクセス数等に応じて必要なスペックのあるインスタンスタイプを選択する
- 例えば、
m5.xlarge
の場合、
m
は、インスタンスファミリー 、
5
は、インスタンス世代、
xlarge
は、インスタンスサイズと言う。
ストレージ
サーバーにつける、データの保存場所
EBS(Elastic Block Store)
高い可用性と耐久性を持つストレージ
- 他のインスタンスに付け替え可能
- EC2インスタンスをStop/TerminateしてもEBSは保持可能
- Snapshotを取得してS3に保存可能
- 費用が別途発生
- OS、DB等、永続性、耐久性が必要なデータを置く
インスタンスストア
インスタンス専用の一時的なストレージ
- 他のインスタンスに付け替えることができない
- EC2インスタンスをStop/Terminateするとクリアされる
- 無料
- 無くなってはいけないデータは置かない
- 一時ファイル、キャッシュ等、失われても問題ないデータを置く
SSH
サーバーとパソコンをセキュアにつなぐサービス
通信内容が暗号化された遠隔ログインシステム
- SSHクライアント
- SSHサーバー
- EC2ではSSHログインじに公開鍵認証を行なっている
公開鍵認証
サーバーへのログイン時に認証を行う仕組み
- ユーザー名とパスワードをしようした認証と比べ、よりセキュリティが高い
- 公開鍵暗号(秘密鍵と公開鍵)を用いて認証を行う
- 公開鍵はサーバーが保有
- 秘密鍵を持っているユーザーのみログイン可能
ポート番号
プログラムのアドレス
- 同一コンピュータ内で通信を行うプログラムを識別するときに利用される
ポート番号を決める方法
ウェルノウンポート番号
- 代表的なプログラムが使うポート番号は予め決められている
- 0 - 1023までの整数値
- ex) SSH: 22番, SMTP: 25番, HTTP: 80番, HTTPS: 443番
- クライアントが接続先のポート番号を省略した場合はウェルノウンポート番号が使用される
動的に決まる番号
- サーバーはポート番号が決まっている必要があるが、クライアントのポート番号は決まっていなくてもよい
- クライアントのポート番号は、OSが他のポート番号と被らないよう、ランダムに決める
- 49142 - 65535の整数値
ファイアウォール
ネットワークを不正アクセスから守るために、通してよい通信のみ通し、それ以外は通さない機能の総称
- AWSではセキュリティグループが担う
Elastic IPアドレス
インターネット経由でアクセス可能な固定グローバルIPアドレスを取得でき、インスタンスに付与できるサービス
- インスタンスを削除するまで同じIPアドレスを使用することができる
- EC2インスタンスに関連づけられており、インスタンスが起動中であれば無料。起動していないと課金される
【Route53】ドメインを登録しよう
ドメイン
覚えにくいIPアドレスの代わりに、Webサイトにアクセスできる、任意でつけられる文字列の名前
- ピリオドで区切られた構造
- 例えば、
www.example.co.jp
の場合、-
トップレベルドメイン:
jp
-
第2レベルドメイン:
co
-
第3レベルドメイン:
example
-
第4レベルドメイン:
www
-
トップレベルドメイン:
- ICANNがドメイン全体を管理
- レジストリがトップレベルドメインを管理、レジストラに卸す
- レジストラがリセらに卸す、一般消費者に販売
- リセラが一般消費者に販売
DNS(Domain Name System)
ドメイン名をIPアドレスに変換する、ドメイン名管理システム
ネームサーバー と フルリゾルバ の2つから構成
ネームサーバー
ドメイン名とそれに紐づくIPアドレスが登録されているサーバー
ドメインの階層ごとに配置され、配置された階層のドメインに関する情報を管理
フルリゾルバ
どのドメインに紐づくIPアドレスを問い合わせると、様々なネームサーバーに聞いてIPアドレスを調べて教えてくれるサーバー
リソースレコード
DNSの、ドメイン名とIPアドレスの一つひとつの紐付けのこと
リソースレコードのタイプ | 内容 |
---|---|
Aレコード | ドメインに基づくIPアドレス |
NSレコード | ドメインのゾーンを管理するネームサーバー |
MXレコード | ドメインに紐付くメール受信サーバー |
CNAME | ドメインの別名でリソースレコードの参照先 |
SOA | ドメインのゾーンの管理情報 |
Route53
AWSのDNSサービス
ネームサーバーの役割
- 高可用性
- SLA(Service Level Agreement) 100%
- 高速
- フルマネージドシステム
ホストゾーン
DNSのリソースレコードの集合
レコードセット
リソースレコード
ルーティングポリシー
Route53がレコードセットに対してどのようにルーティングを行うかを決める
シンプルルーティング
- レコードセットで事前に設定された値に基づいて、ドメインへの問い合わせに応答
加重ルーティング
- 複数エンドポイント毎に設定された重みづけに基づいて、ドメインへの問い合わせに応答する
- 提供リソースに差がある場合に使用
- ABテスト時に使用
レイテンシールーティング
- リージョン間の遅延が少ない方のリソースへルーティングする
- マルチリージョンにリソースが存在する場合に使用
位置情報ルーティング
- クライアントの位置情報に基づいて、ドメインへの問い合わせに応答する
- コンテンツのローカライズに使用
- 地域限定配信時に使用
フェイルオーバールーティング
- ヘルスチェックの結果に基づいて、利用可能なリソースへルーティングする
- 障害発生時にSorryサーバーに簡単に切り替えられる
ヘルスチェック
サーバーの稼働状況をチェック
【RDS】DBサーバーを構築しよう
RDS
フルマネージドなリレーショナルデータベースのサービス
-
構築の手間の軽減
- 物理サーバー設置
- OSインストール
-
運用の手間の軽減
- アップデート
- バックアップ
- スケーリング
-
AWSエンジニアによるデータベース設計のベストプラクティスを適用
これらにより、コア機能の開発(アプリ最適化)に注力できる。
- 設定できる項目には制限がある
- 利用可能なエンジン
- MySQL
- PostgreSQL
- Oracle
- Microsoft SQL Server
- Amazon Aurora
- MariaDB
- 各種設定グループ
- DBパラメータグループ: DB設定値を制御
- DBオプショングループ: RDSへの機能追加を制御
- DBサブネットグループ: RDSを起動させるサブネットを制御
- 利用可能なエンジン
- 可用性の向上
- マルチAZ(マスタースレーブ方式: DBの冗長化)を簡単に構築
- パフォーマンスの向上
- リードレプリカを簡単に構築
- 運用負荷の軽減
- 自動的なバックアップ
- スナップショットと呼ばれるバックアップを1日1回自動取得
- スナップショットを基にDBインスタンスを作成(リストア)
- 自動的なソフトウェアメンテナンス
- メンテナンスウィンドウで指定した曜日・時間帯にアップデートを自動実施
- 監視
- 各種メトリクスを60秒間隔で取得・確認可能
- 自動的なバックアップ
【EC2】WordPressを構築しよう
プロトコル
コンピュータ同士がネットワークを利用して通信するために決められた約束事
- プロトコルの例
- HTTP
- TCP
- UDP
- IP
- SMTP
- IPX など
- メーカーやOSが違うコンピュータ同士が通信するためには、同じ仕様でやりとりする必要がある
- 同じプロトコルを使用するという同意があるため、様々なコンピュータ同士が通信できる
TCP/IP
TCP・IPを中心として、インターネットを構築する上で必要なプロトコル群の総称。インターネットを運用するために開発された。
TCP/IPプロトコル群
アプリケーションプロトコル | トランスポートプロトコル |
---|---|
HTTP、SMTP、FTP | TCP、UDP |
経路制御プロトコル | インターネットプロトコル |
---|---|
RIP、OSPF、BGP | IP、ICMP、ARP |
TCP/IPの階層モデル
インターネットでコンピュータ同士が通信する一連の処理を4階層で表現したもの
役割 | プロトコル例 | |
---|---|---|
アプリケーション層 | アプリケーション同士が会話 | HTTP、DNS、SSH、SMTP |
トランスポート層 | データの転送を制御 | TCP、UDP |
ネットワーク層 | IPアドレスを管理、経路選択 | IP、ICMP、ARP |
ネットワークインターフェース層 | 直接接続された機器同士で通信 | Ethernet、PPP |
HTTP(Hyper Text Protocol)
HTML等のコンテンツの送受信に用いられる通信の約束事
- クライアントがHTTPリクエストを送り、サーバーがHTTPレスポンスを返す
- リクエストライン、ヘッダー、ボディから構成される
HTTPリクエスト
リクエストライン
GET /HTTP/1.1
ヘッダー
Host: example.com
User-Agent: Mozila/5.0
Accept-Encoding: gzip, deflate
Connection: keep-alive
ボディ
オプションでつけられる
HTTPレスポンス
ステータスライン
HTTP/1.1 200 OK
のようなもの
ヘッダー
Data: Fri, 28 Jun 2019 01:09:23 GMT
Content-Type: text/html; charset=utf-8
Cache-Control: max-age=604800
Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT
ボディ
<!doctype>
<html>
...
</html>
TCP(Trnsmission Control Protocol)
通信を制御するプロトコル。データの到着確認や、コネクション管理を行う
- 信頼性のある通信を提供
- 信頼性を保つために、送信するパケットの順序制御や再送制御を行う
- 信頼性のある通信を実現する必要がある場合に使用
データの到達確認
- 送信したデータが届いたかを確認する
- 届いていなければ再送する
- 確認応答とシーケンス番号を使用することで、再送制御などを行う
コネクション管理
- 通信相手との間で通信を始める準備をしてから通信を行う
- コネクション指向の通信を提供する
ヘッダーのフォーマット
- 送信元ポート番号
- 宛先ポート番号
- シーケンス番号
- チェックサム
- データオフセット
- 予約
- コントロールフラグ
- ウィンドウサイズ
- 確認応答番号
- 緊急ポインタ
- オプション
- パディング
UDP(User Datagram Protocol)
コネクションレスな通信サービス
- 信頼性のない通信
- 送信するだけで、パケットが届いたかは保証しない
- 高速性やリアルタイム性を重視する通信で使用
- アプリケーションからの送信要求のあったデータをそのままネットワークに流す
- パケットが届かなくても再送制御はせず、パケットの到着順序が入れ替わっても直せない
- コネクションレスなのでいつでもデータを送信できる
- プロトコルの処理も簡単なので高速
- 動画、電話等、即時性が必要な通信
- 総パケット数が少ない通信(DNS等)
- 特定ネットワークに限定したアプリケーションの通信
ヘッダーのフォーマット
- 送信元ポート番号
- 宛先ポート番号
- パケット長
- チェックサム
IP(Internet Protocol)
IPアドレス
- ネットワーク上で、通信を行う宛先を識別するのに使われる
- IPアドレスを基にしてパケットが配送される
ルーティング
- 宛先IPアドレスのコンピュータまでパケットを届ける
- それぞれの区間ごとにルーターがIPパケットを転送し、それを繰り返して最終的な宛先コンピュータまでパケットが辿り着く
パケットの分割・再構築処理
- ネットワークインターフェース層のプロトコルによって、最大転送単位が異なる。
- IPでは、各ネットワークインターフェースの最大転送単位より小さくなるようにパケットを分割して送信し、終点コンピュータで再構築する
IPv4のヘッダーのフォーマット
- 送信元IPアドレス
- 宛先IPアドレス
- バージョン
- ヘッダ長
- サービスタイプ
- パケット長
- 識別子
- フラグ
- フラグメントオフセット
- 生存時間
- プロトコル
- ヘッダチェックサム
- オプション
- パディング
【S3/CloudFront】画像を配信しよう
インフラ設計における重要な観点
観点 | 内容 | 具体的指標例 |
---|---|---|
可用性 | サービスを継続的に利用できるか | 稼働率、目標復旧時間、災害対策 |
性能・拡張性 | システムの性能が十分で、将来的においても拡張しやすいか | 性能目標、拡張性 |
運用・保守性 | 運用と捕手がしやすいか | 運用時間、バックアップ、運用監視、メンテナンス |
セキュリティ | 情報が安全に守られているか | 資産の公開範囲、ガイドライン、情報漏洩対策 |
移行性 | 現行のシステムを他のシステムに移行しやすくなっているか | 移行方式の規定、設備・データ、移行スケジュール |
画像の保存場所をWebサーバーではなくS3にする理由
- Webサーバーのストレージが画像で一杯になるのを防ぐ
- HTMLへのアクセスと画像へのアクセスを分けることで負荷分散する
- サーバーの台数を増やしやすくする
- Webサーバー上に画像が保存されていると、Webサーバーの台数を増やした時に、画像を同期する必要があり、スケールアウトが難しい
- 画像の保存場所は分離されていた方がWebサーバーの台数を簡単に増やすことができる
- コンテンツ配信サービスから配信することで、画像配信を高速化できる
S3(Simple Storage Service)
安価で耐久性の高いAWSのクラウドストレージサービス
- 0.023USD/GB・月と、安価。1GB約3円/月
- 99.99999999999%の高い耐久性
- 容量無制限。1ファイル最大5TBまで
- パケットやオブジェクトに対してアクセス制限を設定できる
利用シーン
- 静的コンテンツの配信
- 画像はS3から配信
- バッチ連携用のファイル置き場
- S3にファイルを置き、バッチでそのファイルをサンス用して処理を行う
- ログなどの出力先
- 定期的にS3にログを送る
- 静的ウェブホスティング
- 静的なウェブサイト(LPなど)をS3から公開
バケット
オブジェクトの保存場所
- 名前はグローバルでユニークな必要あり
オブジェクト
データ本体
- S3に格納されるファイルで、URLが付与される
- パケット内オブジェクト数は無制限
キー
オブジェクトの格納URLパス
CloudFront
高速にコンテンツを配信するCDN(Content Delivery Network)のサービス
- オリジンサーバー上にあるコンテンツを、世界中100箇所以上にあるエッジロケーションにコピーし、そこから配信を行う
- 高速
- ユーザーから最も近いエッジサーバーから画像を配信する
- 効率的
- エッジサーバーでコンテンツのキャッシングを行うので、オリジンサーバーに負荷をかけずに配信できる
【ELB】Webレイヤを冗長化しよう
稼働率を高くするための考え方
- 障害発生間隔を長くする
- 平均復旧期間を短くする
冗長化
システムの構成要素を多重化すること
ある構成要素で障害が発生しても処理を引き継げるようにすることで稼働率を高める。
↓
単一障害点(SPOF: Single Point Of Failure)をなくす。
-
要素単体の稼働率を高くする
-
要素を組み合わせて、全体の稼働率を高くする
冗長化構成 | - Active-Active 冗長化した両方が利用可能 | - Active-Standby 冗長化した片方は利用不可能 | - Hot Standby スタンバイ側は普段起動し、すぐに利用可能 | - Warm Standby スタンバイ側は普段起動しているが、利用するのに準備が必要 | - Cold Standby スタンバイ側は普段停止している
-
負荷を適切なプロビジョニングで回避する
プロビジョニング
アクセス数を予測し適切にリソースを準備すること
- スケールアップ
- 個々の要素の性能を向上させる
- ある程度の規模まではコストパフォーマンスが良いが、一定を超えると悪くなる
- スケールアウト
- ここの要素の数を増やす
- ある程度の規模を超えそうであれば、スケールアウトで対応
- 最低限N+1構成で、N+2構成がベター
- スケールアップ
サーバー構成のベストプラクティス
- パターン1
- Webサーバー 1 + DBサーバー1
- パターン2
- Webサーバー 2 + DBサーバー1
- パターン3
- Webサーバー 2 + DBサーバー2
ロードバランサー
各サーバーにアクセスを振り分け、負荷を分散する装置
ELB(Elastic Load Balancing)
AWS上のロードバランサー
- 複数のEC2インスタンスに負荷分散する
- 複数のアベイラビリティゾーンにある複数のEC2インスタンスの中から正常なターゲットにのみ振り分ける(ヘルスチェック)
- スケーラブル
- アベイラビリティゾーンをまたがる構成
- 名前解決
- 安価な従量課金
- マネージドサービス
【RDS】DBレイヤを冗長化しよう
RDSでは、マルチAZの機能を使えばマスタースレーブ構成を構築できる。
【CloudWatch】システムを監視しよう
システム監視
システムを正常な状態に保てるよう、稼働状況やリソースを監視すること
【IAM】アクセス権限を管理しよう
IAM(Identity and Access Management)
AWSのサービスを利用するユーザー権限を管理するサービス
- AWSリソースをセキュアに操作するために、認証・認可の仕組みを提供する
- 各AWSリソースに対して別々のアクセス権限をユーザーごとに付与できる
- AWS IAM自体の利用は無料
ポリシー
アクセス許可の定義
どのAWSサービスの、どのリソースに対して、どんな操作を、許可する(しない)を定義
ユーザー
ここのアカウントのユーザー
グループ
IAMユーザーの集合。複数のユーザーにアクセス許可を付与する作業を簡素化
ロール
一時的にアクセスを許可したアカウントを発行できる。EC2やLambadaなどのAWSリソースに権限を付与するために使用
IAMのベストプラクティス
- 個々人にIAMユーザーを作成する
- rootユーザーは使わない
- 誰が何の操作をしたか記録される
- ユーザーをグループに所属させ、グループに権限を割り当てる
- 権限は最小限にする
- EC2インスタンスから実行するアプリケーションには、ロールを使用する
- 定期的に不要な認証情報を削除する
おわりに
以上、備忘録としての語句のメモ。