目次
Part1 AWSの基本ひとめぐり
第1章 Amazon Web Servicesとは何か
1.1 クラウドコンピューティングとは何か
1.2 AWSで何ができるか
1.2.1 オンラインショップのホスティング
1.2.2 プライベートネットワークでのJava EEアプリケーションの実行
1.2.3 高可用性システムの実装
1.2.4 バッチ処理インフラの低コスト化
1.3 AWSのメリット
1.3.1 急成長するイノベーティブなプラットフォーム
1.3.2 一般的な問題を解決するサービス
1.3.3 自動化
1.3.4 柔軟なキャパシティ(スケーラビリティ)
1.3.5 障害への備え(信頼性)
1.3.6 実稼働までの時間の短縮
1.3.7 規模の経済によるメリット
1.3.8 グローバルインフラ
1.3.9 プロフェッショナルなパートナー
1.4 AWSの料金
1.4.1 無料利用枠
1.4.2 請求の例
1.4.3 従量制がもたらす機会
1.5 選択しとしてのクラウドの比較
1.6 AWSのサービス
1.7 AWSとのやり取り
1.7.1 マネジメントコンソール
1.7.2 コマンドラインインターフェイス
1.7.3 SDK
1.7.4 ブループリント
1.8 AWSアカウントの作成
1.8.1 サインアップ
18.2. サインイン
1.8.3 キーペアの作成
1.9 請求アラームの作成:AWSの請求情報を管理する
1.10 まとめ
第2章 5分でWordPressを構築[簡単な概念実証]
2.1 インフラの作成
2.2 インフラの探索
2.2.1 リソースグループ
2.2.2 仮想マシン
2.2.3 ロードバランサー
2.2.4 MySQLデータベース
2.2.5 ネットワークファイルシステム
2.3 インフラのコストを見積もる
2.4 インフラの削除
2.5 まとめ
Part2 インフラ構築/管理の手法
第3章 仮想マシンの活用法[EC2]
3.1 仮想マシンの探索
3.1.1 仮想マシンを起動する
3.1.2 仮想マシンに接続する
3.1.3 手動によるソフトウェアのインストールと実行
3.2 仮想マシンの監視とデバッグ
3.2.1 仮想マシンのログを表示する
3.2.2 仮想マシンの負荷を監視する
3.3 仮想マシンのシャットダウン
3.4 仮想マシンの種類を変更する
3.5 別のデータセンターで仮想マシンを起動する
3.6 仮想マシンにパブリックIPアドレスを割り当てる
3.7 仮想マシンにネットワークインターフェイスを追加する
3.8 仮想マシンのコストを最適化する
3.8.1 仮想マシンの予約
3.8.2 使用されていない仮想マシンのへの入札
3.9 まとめ
第4章 インフラのプログラミング[コマンドライン、SDK、CloudFormation]
4.1 IaC
4.1.1 自動化とDevOpsムーブメント
4.1.2 新しいインフラ言語:JIML
4.2 AWS CLIの使用
4.2.1 自動化すべきなのはなぜか
4.2.2 AWS CLI のインストール
4.2.3 AWS CLI の設定
4.2.4 AWS CLI を使用する
4.3 SDKを使ったプログラミング
4.3.1 SDKで仮想マシンを制御する:nodecc
4.3.2 nodeccの仕組み:仮想マシンの作成
4.3.3 nodeccの仕組み:仮想マシン一覧/詳細の表示
4.3.4 nodeccの仕組み:仮想マシンの終了
4.4 ブループリントを使って仮想マシンを起動する
4.4.1 CoudFormationのテンプレートの構造
4.4.2 テンプレートを作成する
4.5 まとめ
第5章 デプロイの自動化[CloudFormaion、Elastic Beanstalk、OpsWorks]
5.1 柔軟なクライド環境でのアプリケーションのデプロイメント
5.2 デプロイメントツールの比較
5.2.1 デプロイメントツールの分類
5.2.2 デプロイメントサービスの比較
5.3 CloudFormationを使った仮想マシンの作成と起動時のスクリプトの実行
5.3.1 ユーザーデータを使って起動時にスクリプトを実行する
5.3.2 Openswan:仮想マシンにVPNサーバーをデプロイする
5.3.3 仮想マシンを更新するのではなく新たに起動する
5.4 Elastic Beanstalkを使った単純なWebアプリケーションのデプロイメント
5.4.1 Elastic Beanstalkの構成要素
5.4.2 Elastic Beanstalkを使ってEtherpadアプリケーションをデプロイする
5.5 OpsWorksを使った多層アプリケーションのデプロイメント
5.5.1 OpsWorksスタックの構成要素
5.5.2 OpsWorksスタックを使ってIRCチャットアプリケーションをデプロイする
5.6 まとめ
第6章 システムのセキュリティ[IAM、セキュリティグループ、VPC]
6.1 セキュリティの責任の所在をどう考えるか
6.2 ソフトウェアを最新の状態に保つ
6.2.1 セキュリティ更新プログラムを確認する
6.2.2 仮想マシンの開始時にセキュリティ更新プログラムをインストールする
6.2.3 実行中の仮想マシンにセキュリティ更新プログラムをインストールする
6.3 AWSアカウントをセキュリティで保護する
6.3.1 AWSアカウントのrootユーザーをセキュリティで保護する
6.3.2 AWS IAM
6.3.3 IAMポリシーを使ってアクセス許可を定義する
6.3.4 認証のためのユーザーと、ユーザーをまとめるためのグループ
6.3.5 AWSリソースの認証にIAMロールを使用する
6.4 仮想マシンのネットワークトラフィックを制御する
6.4.1 セキュリティグループを使って仮想マシンへのトラフィックを制御する
6.4.2 ICMPトラフィックを許可する
6.4.3 SSHトラフィックを許可する
6.4.4 送信元IPアドレスからのSSHトラフィックを許可する
6.4.5 送信元セキュリティグループからのSSHトラフィックを許可する
6.5 クラウドでのプライベートネットワークの作成:Amazon VPC
6.5.1 VPCとインターネットゲートウェイを作成する
6.5.2 踏み台ホストのパブリックサブネットを定義する
6.5.3 Apache Webサーバーのプライベートサブネットを追加する
6.5.4 サブネット内で仮想マシンを起動する
6.5.5 NATゲートウェイを使ってプライベートサブネットからインターネットにアクセスする
6.6 まとめ
第7章 運用タスクの自動化[Lambda]
7.1 AWS Lambdaを使ったコードの実行
7.1.1 サーバーレスとは何か
7.1.2 AWS Lambdaでコードを実行する
7.1.3 AWS Lambdaと仮想マシン(Amazon EC2)の比較
7.2 AWS Lambdaを使ってWebサイトのヘルスチェックを構築する
7.2.1 Lambda関数を作成する
7.2.2 CloudWatchを使ってLambda関数のログを検索する
7.2.3 CloudWatchのメトリクスとアラームを使ってLambda関数を監視する
7.2.4 VPC内のエンドポイントにアクセスする
7.3 EC2インスタンスの所有者が含まれたタグを自動的に追加する
7.3.1 イベント駆動:CloudWatchイベントをサブスクライブする
7.3.2 Lambda関数をPythonで実装する
7.3.3 SAMを使ってLambda関数を準備する
7.3.4 IAMロールを使ってLambda関数による他のAWSサービスの使用を許可する
7.3.5 SAMを使ってLambda関数をデプロイする
7.4 AWS Lambdaを使って他に何ができるか
7.4.1 AWS Lambdaの制限
7.4.2 サーバーレス料金モデルの影響
7.4.3 ユースケース:Webアプリケーション
7.4.4 ユースケース:データ処理
7.4.5 ユースケース:IoTバックエンド
7.5 まとめ
Part3 データ格納の手法
第8章 オブジェクトの格納[S3、Glacier]
8.1 オブジェクトストアとは何か
8.2 Amazon S3
8.3 AWS CLIを使ってデータをS3にバックアップする
8.4 コスト最適化のためにオブジェクトをアーカイブする
8.4.1 Glacierで使用するためのS3バケットを作成する
8.4.2 バケットにライフサイクルルールを追加する
8.4.3 Glacierとライフサイクルルールを試してみる
8.5 プログラムによるオブジェクトの格納
8.5.1 S3バケットを作成する
8.5.2 S3を使用するWebアプリケーションをインストールする
8.5.3 SDKを使ってS3にアクセスするコードを調べる
8.6 S3を使って静的なWebホスティング
8.6.1 バケットの作成と静的なWebサイトのアップロード
8.6.2 静的なWebホスティングのためにバケットを設定する
8.6.3 S3でホストされているWebサイトにアクセスする
8.7 S3を使用するためのベストプラクティス
8.7.1 データの整合性を確保する
8.7.2 正しいキーを選択する
8.8 まとめ
第9章 ハードディスクへのデータ格納[EBS、インスタンスストア]
9.1 EBS:ネットワーク接続されたブロックレベルの永続的なストレージ
9.1.1 EBSボリュームの作成とEC2インスタンスへのアタッチ
9.1.2 EBSを使用する
9.1.3 パフォーマンスの調整
9.1.4 EBSスナップショットを使ってデータをバックアップする
9.2 インスタンスストストア:ブロックレベルの一時的なストレージ
9.2.1 インスタンスストアを使用する
9.2.2 パフォーマンスをテストする
9.2.3 データをバックアップする
9.3 まとめ
第10章 仮想マシン間のデータボリューム共有[EFS]
10.1 ファイルシステムを作成する
10.1.1 CloudFormationを使ってファイルシステムを定義する
10.1.2 料金モデル
10.2 マウントターゲットを作成する
10.3 EC2インスタンスでEFS共有をマウントする
10.4 EC2インスタンスの間でファイルを共有する
10.5 パフォーマンスを調整する
10.5.1 パフォーマンスモード
10.5.2 期待されるスループット
10.6 ファイルシステムを監視する
10.6.1 Max I/Oパフォーマンスモードを使用すべき状況
10.6.2 許可されるスループットの監視
10.6.3 使用状況の監視
10.7 データのバックアップ
10.7.1 CloudFormationを使ってEBSボリュームを定義する
10.7.2 バックアップ用のEBSボリュームを使用する
10.8 まとめ
第11章 リレーショナルデータベースサービスの活用[RDS]
11.1 MySQLデータベースを起動する
11.1.1 RDSデータベースを使ってWordPressプラットフォームを起動する
11.1.2 MySQLエンジンを搭載したRDSデータベースインスタンスを調べる
11.1.3 Amazon RDSの料金
11.2 MySQLデータベースにデータをインポートする
11.3 データベースのバックアップと復元
11.3.1 自動スナップショットを設定する
11.3.2 スナップショットを手動で作成する
11.3.3 データベースを復元する
11.3.4 データベースを別のリージョンにコピーする
11.3.5 スナップショットの料金を計算する
11.4 データベースへのアクセスを制御する
11.4.1 RDSデータベースの設定に対するアクセスを制御する
11.4.2 RDSデータベースに対するネットワークアクセスを制御する
11.4.3 データアクセスを制御する
11.5 可用性の高いデータベースを使用する
11.5.1 RDSデータベースのHAデプロイメントを有効にする
11.6 データベースのパフォーマンスを調整する
11.6.1 データベースリソースを増やす
11.6.2 リードレプリケーションを使って読み取りパフォーマンスを向上させる
11.7 データベースの監視
11.8 まとめ
第12章 メモリへのデータキャッシュ[ElastiCache]
12.1 キャッシュクラスタを作成する
12.1.1 必要最低限のCloudFormationテンプレート
12.1.2 Redisクラスタをテストする
12.2 キャッシュデプロイメントオプション
12.2.1 Memcached:クラスタ
12.2.2 Redis:シングルノードクラスタ
12.2.3 Redis:クラスタモードが無効化されたクラスタ
12.2.4 Redes:クラスタモードが有効化されたクラスタ
12.3 キャッシュへのアクセスを制御する
12.3.1 設定へのアクセスを制御する
12.3.2 ネットワークアクセスを制御する
12.3.3 クラスタとデータへのアクセスを制御する
12.4 CloudFormationを使ってDiscourseアプリケーションをインストールする
12.4.1 VPC:ネットワーク設定
12.4.2 キャッシュ:セキュリティグループ、サブネットグループ、キャッシュクラスタ
12.4.3 データベース:セキュリティグループ、サブネットグループ、データベースインスタンス
12.4.4 仮想マシン:セキュリティグループ、EC2インスタンス
12.4.5 Discourse用のCloudFormationテンプレートをテストする
12.5 キャッシュの監視
12.5.1 ホストレベルのメトリクスを監視する
12.5.2 メモリは十分か
12.5.3 Redisレプリケーションは最新か
12.6 キャッシュのパフォーマンスを調整する
12.6.1 正しいキャッシュノードタイプを選択する
12.6.2 正しいデプロイメントオプションを選択する
12.6.3 データを圧縮する
12.7 まとめ
第13章 NoSQLデータベースサービスのプログラミング[DynamoDB]
13.1 DynamoDBを操作する
13.1.1 管理
13.1.2 料金
13.1.3 ネットワーク
13.1.4 RDSとの比較
13.1.5 NoSQLとの比較
13.2 開発者のためのDynamoDB
13.2.1 テーブル、アイテム、属性
13.2.2 プライマリキー
13.2.3 DynamoDBローカル
13.3 タスク管理アプリケーションのプログラミング
13.4 テーブルを作成する
13.4.1 ユーザーはパーティションキーによって識別される
13.4.2 タスクはパーティションキーとソートキーによって識別される
13.5 データを追加する
13.5.1 ユーザーを追加する
13.5.2 タスクを追加する
13.6 データを取得する
13.6.1 キーを使ってアイテムを取得する
13.6.2 キーとフィルタを使ってアイテムを取得する
13.6.3 グローバルセカンダリインデックスを使ってクエリの柔軟性を高める
13.6.4 テーブルのすべてのデータのスキャンとフィルタリング
13.6.5 結果整合性を持つデータの読み取り
13.7 データを削除する
13.8 データを変更する
13.9 キャパシティのスケーリング
13.9.1 キャパシティユニット
13.9.2 自動スケーリング
13.10 まとめ
Part4 高可用性/耐障害性/スケーリングの手法
第14章 高可用性の実現[アベイラビリティゾーン、自動スケーリング、CloudWatch]
14.1 CloudWatchを使ってEC2インスタンスを障害から回復させる
14.1.1 ステータスチェックの失敗時に回復を開始するためのCloudWatchアラームを作成する
14.1.2 CloudWatchアラームに基づく仮想マシンの監視と回復
14.2 データセンターの機能停止から回復する
14.2.1 アベイラビリティゾーン:独立したデータセンターのグループ
14.2.2 自動スケーリングを使ってEC2インスタンスを稼働状態に保つ
14.2.3 自動スケーリングを使って別のアベイラビリティゾーンで回復させる
14.2.4 落とし穴:ネットワーク接続型ストレージの回復
14.2.5 落とし穴:ネットワークインターフェイスの回復
14.3 ディザスタリカバリの要件を分析する
14.3.1 EC2インスタンスが1つの場合のRTOとRPOの比較
14.4 まとめ
第15章 インフラの分離[ELB、SQS]
15.1 ロードバランサーによる同期デカップリング
15.1.1 仮想マシンを使ってロードバランサーを準備する
15.2 メッセージキューによる非同期デカップリング
15.2.1 同期プロセスを非同期プロセスに変換する
15.2.2 URL2PNGアプリケーションのアーキテクチャ
15.2.3 メッセージキューを準備する
15.2.4 メッセージをプログラムから生成する
15.2.5 メッセージをプログラムから消費する
15.2.6 SQSを使ったメッセージングの制限
15.3 まとめ
第16章 耐障害性のための設計
16.1 冗長なEC2インスタンスを使って可用性を向上させる
16.1.1 冗長性に基づいて単一障害点を取り除く
16.1.2 冗長性には分離が必要
16.2 コードに耐障害性を持たせる
16.2.1 クラッシュさせてリトライする
16.2.2 べき等リトライは耐障害性を可能にする
16.3 耐障害性を持つWebアプリケーションを構築する:Imagery
16.3.1 べき等の状態機械
16.3.2 耐障害性を持つWebサービスを実装する
16.3.3 SQSメッセージを消費する耐障害性ワーカーを実装する
16.3.4 アプリケーションをデプロイする
16.4 まとめ
第17章 スケールアップとスケールダウン[自動スケーリング、CloudWatch]
17.1 EC2インスタンスの動的なプールを管理する
17.2 メトリクスまたはスケジュールを使ってスケーリングを開始する
17.2.1 スケジュールに基づくスケーリング
17.2.2 CloudWatchのメトリクスに基づくスケーリング
17.3 EC2インスタンスの動的なプールを分離する
17.3.1 同期デカップリングに基づく動的なEC2インスタンスプールのスケーリング
17.3.2 非同期デカップリングに基づく動的なEC2インスタンスプールのスケーリング
17.4 まとめ