【メモ】みんなのAWS 〜AWSの基本を最新アーキテクチャでまるごと理解！



## メモです
<a href="https://gihyo.jp/book/2020/978-4-297-11329-2" target="_blank" rel="noopener noreferrer">みんなのAWS 〜AWSの基本を最新アーキテクチャでまるごと理解！：書籍案内｜技術評論社</a>


## 第１章　AWSの基礎知識



- クラウドとは
    - ITインフラの歴史
        - メインフレームからクラウドの時代へ
    - AWS のはじまり
    - クラウドの定義
        - クラウドの特徴
            - オンデマンド・セルフサービス
            - 幅広いネットワークアクセス
            - リソースの共用
            - スピーディな拡張
            - サービスが計測可能であること
        - クラウドのサービスモデル
            - IaaS
            - PaaS
            - SaaS
    - クラウドの物理的な世界へ
    - 責任共有モデル
- AWS のベストプラクティス
    - AWS Well-Architected フレームワーク
        - 一般的な設計の原則
        - 運用上の優秀性
        - コスト最適化
        - 信頼性
        - パフォーマンス効率
            - コンピューティング
            - ストレージ
            - ネットワーク
        - セキュリティ
            - 認証情報の管理
            - データ保護
            - 監視とログ管理
            - セキュリティのベストプラクティス

- 最低限押さえておくべきアカウント開設時のセキュリティ
    - AWSセキュリティの概要
        - AWS はセキュリティ的に安全なのか
            - AWS クラウドセキュリティ
                - データの保護
                - コンプライアンスの要件に準拠
                - コスト削減
                - 迅速なスケーリング
            - 責任共有モデル
            - 日本国内の導入事例
        - AWS セキュリティの考え方
    - アカウント開設時のセキュリティ
        - root ユーザーを利用せず、IAM ユーザーを利用する
        - AWS CloudTrail を有効化する
        - AWS Config を有効化する
        - Amazon GuardDuty を有効化する
        - その他アカウント開設時の参考情報
    - IAM の概要と使い方
        - ユーザー/グループ/ポリシー/ロール
        - 権限設定の考え方
    - AWS Well-Architected の「セキュリティの柱」
        - 設計原則
            - 強力なアイデンティティ基盤の実装
            - トレーサビリティの実現
            - 全レイヤーへのセキュリティの適用
            - セキュリティのベストプラクティスの自動化
            - 伝送中および保管中のデータの保護
            - データに人の手を入れない
            - セキュリティイベントへの備え
        - ベストプラクティス
            - アイデンティティ管理とアクセス管理
            - 発見的統制
            - インフラストラクチャ保護
            - データ保護
            - インシデント対応
    - その他の参考情報
- AWS における監視（モニタリング）
    - 監視の基本用語にみる時代の変化
        - メトリック、ログ、イベント
        - モニタリング・4つの立ち位置
            - ブラックボックス監視
            - ホワイトボックス監視
            - ヘルスチェック監視
            - シンセティック監視、リアルユーザー監視
        - 可観測性と「トレース」
        - AI・機械学習による「AIOps」
    - AWS上のシステムを「監視（モニタリング）」する
        - Amazon CloudWatch
        - AWS X-Ray
        - その他の監視（モニタリング）機能
        - AWS以外の選択肢
- AWS を学習するコツ
    - AWS 認定
    - AWS Webinar
    - よくある質問
    - AWSの最新情報



## 第２章　AWS で作るWebサービス



- 本章で解説するアプリケーションの全体構成と利用する AWS サービス
    - Amazon ECS
    - PHP
    - CodePipeline
- AWS のネットワーク基礎
    - Amazon VPC
        - Amazon VPN の構成要素
            - サブネット
            - ゲートウェイサービス
            - ENI とIPアドレス
            - ルートテーブル
            - セキュリティグループとNACL
            - Amzon Provided DNS
        - VPC の設計
            - CIDRの決定
            - サブネットの分割
            - ルートテーブルの設定
        - パブリックドメインとSS:/TLS証明書
            - Amazon Route53を用いたドメインの取得とレコードの管理
        - AWS Certificate Manager とSSL/TLS 証明書
- アプリケーション構築・運用手段としてのコンテナ関連サービス
    - コンテナとは何かを理解する
    - コンテナを使う意味を考える
        - 複数の環境で使うか？
        - 頻繁に変更するか？
        - 増えたり減ったりするか？
    - AWS におけるコンテナ関連サービスについて理解する
        - Amazon Elastic Container Registory
        - コントロールプレーンとデータプレーン
        - Amazon Elastic Container Service
        - Amazon Elastic Kubernetes Service
        - AWS Fargate
    - 要件に合ったコンテナ環境の選択が非常に重要
- CI/CD を実現する Code シリーズ
    - AWS フルマネージド Git リポジトリ「CodeCommit」
        - CodeCommitの利用方法（HTTPS）
        - CodeCommitの利用方法（SSH）
    - アプリケーションのテストやビルドを実行する「CodeBuild」
        - CodeBuildによるテストスクリプトの実行
    - Codeシリーズを束ねる「CodePipeline」
        - CodePipelineの作成
        - CodeCommitへのプッシュによるPipeline自動起動の確認
        - CodePipelineのその他の機能
    - アプリケーションのデプロイを実現する「CodeDeploy」
        - インプレイスデプロイ
        - Blue/Greenデプロイ
- モニタリング：障害監視、リソース監視
    - AWSコンポーネントでのデータ収集
        - ログの収集
        - メトリクスの収集
        - CloudWatch Logsメトリクスフィルターを用いらログ内の特定イベント数の集計
            - アプリケーションレイヤでのカスタムメトリクスの収集
            - Container Insightsによるコンテナの詳細情報の収集
        - ダッシュボードによる可視化
            - 各サービスの標準ダッシュボード
            - カスタムダッシュボード
            - 作成可能なウィジェット
            - メトリクスと統計値の取得
                - CloudWatch Metric Math
            - 各サービスの標準ダッシュボードからのウィジェットのインポート
        - アラーム
            - 設定の流れ
            - メトリクスの選択
            - 条件の設定
            - アクションの設定
            - 説明の追加、設定の完了
            - 異常検知用学習モデルのカスタマイズ
- アプリケーションセキュリティ
    - WAF と AWS WAF
    - AWS WAF の設定
        - Web ACLの作成
        - ロギングの設定
    - Amazon Athenaによるログの確認
        - 分析データ準備
    - コンテナセキュリティの概要
        - イメージリスク
        - レジストリリスク
        - オーケストレーターリスク
        - コンテナリスク
        - ホストOSリスク
    - Amazon ECR のイメージスキャン
    - Aquaによるコンテナ環境の保護
- コードによるインフラの運用管理
    - AWS CloudFormationとは
        - CloudFormationのシステム概要
    - CloudFormationのテンプレートの基礎を理解する
    - CloudFormationを AWS マネジメントコンソールから実行する
    - CloudFormationを CLI から実行する
        - チェンジセットの活用
    - CloudFormationで複数リソースを作成する
        - 方法1 クロススタック参照
        - 方法2 ダイナミック参照（動的な参照）
        - 方法3 シェルスクリプトを利用する方法
- CloudFormation を利用したコンテナアプリケーション構築
    - ハンズオンの目的
    - ハンズオンで作成するAWS サービスの構成図
        - 管理者用管理画面
        - アプリケーション画面
    - ハンズオンに必要な環境の用意
        - Bashの動作環境
    - ハンズオンで利用するソースコードの取得方法、および内容の解説
    - ハンズオンの実行方法
        - エラーが起こったときの対処方法
        - なぜCloudFormationだけで全環境を構築する構成にしなかったか
    - 手順1：VPCの作成
    - 手順2：SecuriryGroupの作成
    - 手順3：CodeCommitの作成
    - 手順4：ECRの作成
    - 手順5：RDSの作成
        - コンソールからパラメータストアへのデータベース接続パスワード登録
        - CloudFormationからのRDS作成
    - 手順6：ECSクラスターの作成
    - 手順7：管理者用コンソール画面の作成
        - 管理画面（phpMyAdmin）ページの作成
        - アプリケーションから利用するテーブルの作成
        - phpMyAdminで利用しているコンテナの解説
    - 手順8：アプリケーション画面の作成
        - 1.PHPコンテナのビルドとECRへのプッシュ
        - 2.アプリケーションの公開（ALB、ECSタスク、ECSサービスの作成）
        - CloudWatch Logsの確認
        - Container Insightsによるコンテナ環境のメトリクスの確認
    - 手順9：CI/CDパイプラインの作成
        - 1.CodeCommitリポジトリへのソースコード格納
    - ハンズオン環境に対するブラッシュアップの方向性
    - ハンズオン環境の削除方法
        - スタック削除時の注意点



## 第３章　サーバーレスプラットフォームで作るモバイル向けアプリケーション



- サーバーレスアーキテクチャとは
    - なぜサーバーレスを選択するか
        - サーバーレスサービス登場以前
        - 提供したい価値と、それを実現するための効率的な手段
    - サーバーレスアーキテクチャの定義
        - マネージドサービスのみで構築されている
        - イベントドリブンなアーキテクチャ
        - 実使用リソース量・時間に対する従量課金（最大値に対する課金ではない）
        - スケーリングが自動で行われる
- サーバーレスを実現する AWS サービス
    - AWS Lambda
        - Lambda の特徴
        - Lambda の基本操作
            - Lambda のトリガーとなるイベントソース
        - Lambda のユースケース
            - Web サービスのバックエンド
            - データの整形・変数処理
            - 定期的な処理
        - Lambda 開発におけるポイント
            - Lambda からRDSへの接続
            - Lambda コールドスタート対策
            - Lambda Layers
    - Amazon API Gateway
        - API Gateway の基本操作
            - HTTP のメソッドを定義
            - API Gatewayのテスト
            - API のデプロイ
        - API Gateway 利用時のポイント
            - メソッド設定
                - メソッドリクエスト
                - 統合リクエスト
                - 統合レスポンス
                - メソッドレスポンス
            - API に対する認証機能の追加
                - IAM アクセス権限を利用する
                - Lambda オーソライザーを利用する
                - Cognito オーソライザーを利用する
            - WAF によるセキュリティ対策
    - Amazon DynamoDB
        - DynamoDBの特徴
        - DynamoDBの基本操作
        - DynamoDB利用によるおけるポイント
            - キャパシティユニット
            - 結果整合性のある読み込みと強力な整合性のある読み込み
    - Amazon S3
        - S3の基本操作
        - S3のユースケース
            - データのバックアップ
            - ログの保存
            - コンテンツの配信
        - S3を利用するときのポイント
            - バージョニング
            - ライフサイクル、ストレージタイプ
    - Amazon CloudFront
        - CloudFrontの特徴
        - CloudFrontの基本操作
        - CloudFront利用におけるポイント
            - ディストリビューションとビヘイビアー
            - カスタムエラーページ
            - カスタムヘッダー
- 構築するアプリケーションの全体構成
- クラウド開発キット（AWS CDK）の準備
    - AWS CDK とは
    - AWSCDK で利用する IAM ユーザーの作成
        - credential ファイルの作成
    - ランタイムのインストール
    - AWS CDK のテンプレート生成
    - Bootstrap処理
- バックエンドアプリケーション（API）の構築 
    - 必要なライブラリのインストール
    - バックエンドの作成
        - 全体構成
        - API Gateway Endpoint の作成
        - DynamoDB テーブルの作成
        - Lambda Function の作成
        - 処理の実装
        - AWS CDK Appの定義
    - ビルド＆デプロイの定義
    - デプロイの実行
    - 確認
- フロントエンドアプリケーションの作成
    - Vue.jsとは
        - Vue.js登場前との比較
    - PWAとは
    - Vue.jsアプリケーションの作成
        - main.js
        - App.vue
        - Tab.vue
        - Home.vue
        - Persons.vue
        - index.js
- フロントエンドアプリケーションの配信
    - 必要なライブラリのインストール
    - フロントエンドの作成
        - 全体構成
        - S3バケットの作成
        - CloudFront Distributionの作成
        - AWS CDK Appの定義
    - ビルド＆デプロイの定義
    - デプロイの実行
    - 動作確認
- サーバーレスアプリケーションのモニタリング
    - モニタリングの考え方
    - 監視ポイント
        - パフォーマンス（性能）モニタリング
        - 異常検知
        - キャパシティプランニング
    - AWS X-Ray

        



## 第４章　AWS で作るデータの取集・可視化基盤



- AWS で作るデータ収集基盤
    - 本節で構築するデータ収集基盤
        - 想定するシナリオ
            - 高速道路にあるETCゲート
        - 構築するデータ収集基盤の概要
        - 仮想IoTデバイス
        - 構築するデータ収集基盤の詳細
            - アーキテクチャと処理の流れ
            - データの変換処理
            - 使用しているAWSサービス
                - IoT Core
                - Kinesis Data Firehose
                - Lambda 
                - DynamoDB
                - S3
            - プログラミング環境
                - Python 3
    - AWS SAM（Serverless Application Model）
    - データ収集基盤の構築
        - 仕様を決める
            - ETCゲートとIoT Core の仕様
            - データ収集結果の内容
            - DynamoDB の設計と格納するデータ
        - Python 仮想環境の構築
        - 必要なライブラリをインストール
        - AWS SAMプロジェクトの作成
        - デプロイ先S3バケットの作成
            - デプロイ先のS3バケットのCloudFormationテンプレートを作成
            - デプロイ先のS3バケットをデプロイ
        - AWS SAM テンプレートの作成
        - ライブラリを未使用にする
        - Lambda 関数のコードを作成
        - ビルド
        - デプロイ
        - データ収集結果を格納するS3バケットの情報
    - 動作確認（簡易）
        - DynamoDBに格納するデータのJSONファイルを作成する
        - ブラウザの IoT Core でテストする
    - 仮想IoTデバイスの作成
        - キーペアの作成
        - IPアドレスの確認
        - EC2インスタンスの作成
        - EC2インスタンス内でAWS CLI を使うユーザーの作成
        - EC2インスタンスに接続する
        - Python 3 の環境を構築する
        - AWSCLI の設定を行う
        - IoT デバイスを IoT Core に接続するための準備
            - IoT Core にモノを作成する
            - IoT Core にポリシーを作成する
            - 証明書の作成
            - モノと証明書の紐付け
            - 証明書とポリシーの紐付け
            - サーバー認証用のルートCA証明書の取得
            - IoT Core のエンドポイントを取得
        - ETC ゲート用プログラムの作成
            - AWSIoTPythonSDKのインストール
            - データ送信用プログラムの作成
        - 動作確認（仮想IoTデバイス）
            - データの送信を終了する
            - S3 バケットの様子
        - より実用的に利用する場合
- データ分析の基本知識と AWS サービス
    - データ分析の基本知識
        - データレイク
        - データウェアハウス
        - ETL
            - Extract（抽出）
            - Transform（変換）
            - Load（ロード）
        - 可視化
    - データ分析で使用するAWSサービス
        - Amazon S3
        - AWS Glue
            - クローラ
            - データカタログ
            - ジョブ
            - トリガー
            - ジョブフロー
        - Amazon Athena
    - Amazon Redshift
    - Amaozn Quicksight
- データレイクを構築する
    - S3のデータをカタログ化する
        - AWS Glue クローラの設定と実行
        - データカタログ内のテーブル定義確認
    - Athenaでログ検索
- データウェアハウスを構成し、グラフ表示する
    - データウェアハウス構成
        - Redshiftクラスター構築
        - Redshiftテーブル作成
        - AWS Glue からRedshiftへのコネクションの作成
        - Redshiftテーブルのカタログ登録
        - Glue ジョブの作成と実行
        - Redshiftテーブル確認
    - Amazon QuickSightからデータを参照する
        - QuickSightアカウント作成
        - Redshift-QuickSight間通信用VPCの作成
        - データセットの作成
        - グラフ作成
- 機械学習を導入する
    - AWS における機械学習利用のアプローチ
        - AI サービスを利用する
            - Amazon Forecast
            - Amazon Personalize
            - Amazon Comprehend
        - Amazon SageMakerを使用する
    - 機械学習を導入する前にすべきこと
- 構築したシステム（AWSリソース）を削除する
    - データ分析基盤の削除
        - QuickSight環境の削除
            - 分析の削除
            - データセットの削除
            - VPC 接続設定の削除
            - QuickSightアカウントの削除
        - Glueリソースの削除
            - ジョブの削除
            - クローラの削除
            - カタログの削除
        - Redshiftクラスターの削除
        - VPCエンドポイントの削除
    - 仮想IoTデバイスの削除
        - モノと証明書とポリシーの紐付けを解除
        - モノと証明書とポリシーの削除
        - EC2インスタンス およびユーザーの削除
    - データ収集基盤の削除
        - S3バケット名の取得
        - データ収集基盤の本体を削除
        - S3バケットを削除