AWSサービス全体の概要
1-1 AWS Well-Architectedフレームワーク
- AWSが数多くのユーザーにさまざまなクラウドサービスを提供してきて蓄積したベストプラクティス集
- 定期的にチェックしよう
-
5つの柱
- 運用上の優秀性
- セキュリティ
- 信頼性
- パフォーマンス効率
- コスト最適化
1-2 AWSインフラストラクチャの概要
インフラ概要
@startuml
class Region
class AvailabilityZone
class DataCenter
class EdgeLocation
Region o-- AvailabilityZone
AvailabilityZone o-- DataCenter
@enduml
-
リージョン
- 世界に20余
- 一覧
アジアパシフィック (東京) ap-northeast-1
とか
-
AZ: Availability Zone
- 20のリージョンに対し60
- 複数のデータセンターの集合体
-
AZ間は冗長化された高速なネットワークで接続
- AZをまたいだ構成にすることで、可用性が高まる
-
エッジロケーション
- CloudFront, Route53等の提供
- AZを上回る数の拠点
- 地理的に近い拠点にアクセスすると低レイテンシーで効率よく通信できる
AWSサービスの範囲
グローバルサービス | リージョンサービス | AZサービス | |
---|---|---|---|
特徴 | リージョン非依存 | 特定のリージョン内で利用 | 特定のAZ内で利用 |
例 | IAM CloudFront Route53 |
VPC DynamoDB Lambda |
VPCのサブネット EC2 RDS |
1-3 アクセス制御サービス
IAM: Identity and Access Management 概要
-
ルートユーザー
- 最初に利用するときに作るアカウント
- クレカ情報とか登録してるやつ
- 全管理権限をもつ
-
IAMユーザー、IAMグループ
-
ルートユーザを直接使うのは危険
- 誤操作等
-
-
IAMポリシー
- IAMユーザー、IAMグループに付与する権限
- JSONで記述
@startuml
class IAMUser
class IAMGroup
class IAMPolicy
IAMUser -- IAMGroup
IAMUser -- IAMPolicy
IAMGroup -- IAMPolicy
@enduml
-
AWS CLI, AWS SDK使用時に設定する認証情報はIAMユーザーごとに発行する
- アクセスキーID
- シークレットアクセスキー
-
アクセスキーID, シークレットアクセスキーを利用した認証は現在非推奨
- IAM Role使え
1-4 ネットワークサービス
- VPCはリージョンサービス
VPC: Virtual Private Cloud 構成
-
サブネット
- VPC内のセグ
- 1VPCにつき1つ以上
-
VPCのサブネットはAZサービス
- AZをまたいだサブネットは作れない
-
IGW: Internet Gateway
- VPC内のリソースからインターネットにアクセスするためのゲートウェイ
-
ルートテーブル
- サブネット単位で設定
-
パブリックサブネット
0.0.0.0/0
にIGW指定している
-
プライベートサブネット
0.0.0.0/0
にIGW指定してない
-
NATゲートウェイ
-
プライベートサブネットからインターネットアクセスするために使用するやつ
- ルートテーブルの
0.0.0.0/0
にNATゲートウェイを登録する - プライベートサブネット -> NATゲートウェイ -> パブリックサブネット -> IGW -> インターネット
- ルートテーブルの
-
透過的に冗長化されている
- ので、冗長化の仕組みのないNATインスタンスよりも高可用性
-
-
NATインスタンス
- NATゲートウェイを使わない場合、プライベートサブネットからインターネットアクセスするのに使用
- 冗長化の仕組みを作らないとSPOFになる
-
VGW, VPG: Virtual Private Gateway
-
オンプレ環境との接続に使用するゲートウェイ
- Direct Connect
- インターネットVPN
-
-
VPCフローログ
- VPC内のENI: Elastic Network Interface で通信するトラフィックをキャプチャ
- CloudWatch Logsに情報転送
-
設定単位は複数
- VPC
- サブネット
- ENI個別
-
Elastic IP
- 固定のグローバルIP割り当てるやつ
-
これをアタッチしていないEC2インスタンスは、停止するとIP変わる
- そのたびにDNSを変更するのは運用上手間なので固定したい
-
課金条件
- EC2インスタンスにアタッチしていない
- アタッチしているEC2インスタンスがrunningでない
-
VPCピアリング接続
- VPCピア機能とは
- 通常、VPCは独立したプライベートネットワーク空間なので、VPC同士は直接通信を行えない
-
VPCピア機能を使用するとできる
- 同じネットワークに存在しているかのように
- ネットワークアドレスが一致または重複したら不可
-
できること
- 自分のAWSアカウントのVPC間
- 他のAWSアカウントのVPCとの間
- 複数リージョンまたぎ(リージョン間VPCピアリング)
-
VPCの既存のインフラで作成している
- ゲートウェイでもVPNでもない
- 通信の単一障害点や帯域幅のボトルネックは存在しない
-
VPCエンドポイント
-
共通点
- インターネットを経由せずにプライベート接続
-
ゲートウェイ型
- ネットワーク層
-
ルートテーブルにターゲット指定
- S3
- DynamoDB
-
インターフェイス型
- アプリケーション層
- PrivateLinkとも
-
サービスを指定
- API Gatewayとか
-
- セキュリティグループ/ネットワークACL
セキュリティグループ | ネットワークACL | |
---|---|---|
適用範囲 | インスタンス | サブネット |
デフォルト動作 | inbound: 全拒否 | inbound: 全許可 |
outbound: 全許可 | outbound: 全許可 | |
ルールの評価 | すべて | 番号順 |
ステート | ステートフル (inboundが許可されたら戻りも許可) |
ステートレス |
VPC内で利用できるネットワークサービス
-
ELB: Elastic Load Balancing
-
-
CLB: Classic Load Balancer
- L4(TCP/SSL)またはL7(HTTP/HTTPS)
- 標準的なやつ
-
ALB: Application Load Banalcer
-
L7(HTTP/HTTPS)
- リクエストのクエリを判断
-
ルーティングにしたがって振り分け
- コンテンツベースで特定のサーバーに振り分け可能
-
-
NLB: Network Load Balancer
- L4(TCP/SSL)
- 低レイテンシ・高スループット
-
送信元のアドレスを保持
- レスポンスはクライアントに直接返る
-
-
特徴
-
高可用性
- トラフィックを複数AZに分散できる
- Healthyなバックエンドインスタンスのみに振り分け
-
自動スケーリング
- 負荷に応じて自動スケーリング
- ELB自体冗長性確保
-
エンドポイント
- ELBに割り当てられたDNS名
- VPCサブネットのIPアドレスが自動的に割り振られるが、これが変動するため名前解決用
-
セキュリティ機能
-
SSL復号機能
- バックエンドインスタンスの負荷軽減
- 証明書一元化
- セキュリティグループをアタッチ可能
-
-
ヘルスチェックとモニタリング
-
バックエンドインスタンスが正常に動作しているかチェック
- 正常でないものはトラフィックの振り分け対象から除外
-
スティッキーセッション
-
一度セッションを確立したインスタンスにリクエスト送信
- ←→ デフォルト: 負荷最小のインスタンスに振り分け
-
-
Connection Draining
- サーバをELBから登録解除するさい、処理が完了するまで遅延させる
- 処理の中断を避けるために使用する
-
メトリクス
- 応答時間
- リクエスト数
-
S3へのログ保管
- 通信のログ
-
-
外部ELBと内部ELB
-
Internet-facing(外部ELB)
- ELB自体がパプリックサブネットに配置される
- ので、バックエンドインスタンスをパブリックサブネットに置く必要なし
- 名前解決するとパブリックIP返る
-
Internal(内部ELB)
- プライベートサブネットで使用
- 名前解決するとプライベートIP返る
-
-
クロスゾーン負荷分散
-
無効(デフォルト): AZごとに均一振り分け
- AZごとにインスタンス数が異なると、全インスタンス均一にならない
- 有効: AZをまたいで均一振り分け
-
-
-
-
Auto Scaling
-
AMI: Amazon Machine Image からインスタンス起動
- AMIは最新に保て
-
EC2インスタンスのユーザーデータでソースやスクリプトを取得しインスタンス最新状態に
- S3
- Git
- …
-
設定
-
スケーリングプラン
-
Auto Scaling 実行の条件
-
いつ
- スケジュール
- CloudWatchのメトリクス(後述)
- 手動で
-
どのように
- 正常なインスタンス数を維持するように
-
-
-
起動設定
-
インスタンス情報定義
- AMI
- インスタンスタイプ
- セキュリティグループ
- キーペア
- など
-
-
Auto Scaling グループ
- EC2の管理単位
- インスタンスの最小/最大数
-
-
その他のネットワークサービス
-
Route 53
-
高可用性DNSサービス
-
パブリックホストゾーン
- 外部向け
-
プライベートホストゾーン
- 内部向け
-
-
Zone Apexレコードを指定するには…
- CNAMEは使用できない
-
ALIASレコード使え
- 独自仕様
- Aレコードに
ALIAS
前置 - ドキュメント
-
ルーティングポリシー設定可能
- WRR: Weighted Round Robin とか
- LBR: Latency Based Routing とか
-
-
Direct Connect
- オンプレ環境とAWSとの間を専用線で接続
Direct Connect | インターネットVPN | |
---|---|---|
回線 | 専用線 | インターネット |
品質 | 高速・安定 | 比較すると低品質 |
コスト | 高 | 低 |
導入期間 | 長 | 短 |
-
VGW: Virtual Private Gateway (仮想プライベートゲートウェイ)
- VPG
- Direct ConnectやインターネットVPNで接続する場合、予め用意しておく
-
VPCにアタッチして使用する
- cf. IGWとかNATゲートウェイとかはサブネットにアタッチする
-
CloudFront
- CDNサービス
- グローバルサービス
- 地理的に最も近いエッジロケーションからコンテンツ配信
-
オリジン: コンテンツ提供元
- ELB
- EC2
- S3
- オンプレミスのサーバー
- など
-
機能
-
SSLによる通信の暗号化
- ユーザーが用意した独自のSSL証明書導入可能
- CloudFront-バックエンド間をSSL暗号化通信にすることも可能
-
署名付きURL
- 一定時間だけアクセス可能なURL
- カスタムエラーページ
- 地域制限(地理的ブロッキング)
- ストリーミング配信
-
1-5 コンピューティングサービス
EC2: Elastic Compute Cloud
- 仮想サーバー提供サービス
-
インスタンス
- 提供される仮想サーバー
-
ハイパーバイザー型仮想化
- OSに直接ハイパーバイザーが乗っかるので、
ホストOS型仮想化のような制約を受けない
- OSに直接ハイパーバイザーが乗っかるので、
-
AMI: Amazon Machine Image
-
OS
- 各種Linuxディストリ
- Microsoft Windows Server
- Amazon Linux
-
root領域にマウントするストレージによる分類
-
EBS-Backed
- 不揮発性
-
Instance Store-Backed
- 揮発性
-
インスタンス停止するとデータ削除される
- 再起動では削除されない
- というかインスタンス停止できない(終了しかできない)
-
- AWS Marketplaceにて、M/Wインストール済のサードパーティ製AMIが用意されている
-
-
ライフサイクル
- runningのみ金かかる
- Instance Store-Backedインスタンスは停止できない
@startuml
hide empty description
[*] --> pending : 初回起動
pending --> running
running --> rebooting : 再起動
rebooting --> running
running --> shuttingdown : 終了
shuttingdown --> terminated
running --> stopping : 停止
stopping --> stopped
stopped --> pending : 起動
stopped --> terminated
terminated --> [*]
@enduml
-
ユーザーデータとインスタンスメタデータ
- ドキュメント
-
ユーザデータ
- インスタンス初回起動時に1回だけスクリプトを実行できる
- 最新ソースの反映などを行う
-
インスタンスメタデータ
-
EC2インスタンス自身に関するデータ
- インスタンスID
- プライベート/パブリックIPv4アドレス
- ローカルホスト名
- 公開鍵
-
リンクローカルアドレスにGETでアクセスして取得できる
http://169.254.169.254/latest/meta-data
-
169.254.0.0/16
で定義された特別なIPアドレス- インスタンスからのみアクセスできる
- AWS管理用にバックエンドで利用されている
-
Lambda
- サーバーレス
- メモリ容量と処理時間で課金
- 実行時間制限あり
-
イベント駆動型のアプリケーションを実行可能
- S3にコンテンツがアップロードされたらEC2インスタンスへ連携する、とか
-
ExecutionRole
- IAM Roleをアタッチできる
-
ロギング
- 処理結果はCloudWatch Logsに保存される
API Gateway
- Lambdaと組み合わせてサーバーレスアプリケーションを作ったりするやつ
その他のコンピューティングサービス
-
EMR: Elastic MapReduce
- 大量のデータを迅速、容易に、かつコスト効果よく処理するためのWebサービス
-
主要な分散処理環境を構築・分散処理の実行
- Hadoop
- Spark
-
ECS: Elastic Container Service
- コンテナオーケストレーションサービス
-
VM Import/Export
- オンプレ環境の仮想サーバーのMI <-> AWSのEC2インスタンス
- 既存の仮想マシン資産を流用できる