AWSソリューションアーキテクトを受けるためのノート

- ※2018年5月ごろの記事になります

# 宣伝(2020/11/13)
一つ宣伝をさせてください。
現在、「もくもくオンライン勉強会」という勉強コミュニティを運営しています
創設から１年が経過し、より情報のやりとりが多くなり活発化するよう
メンバーを募集しています。コミュ独自でpythonとnodejsを活用して
BOTを開発し、いろいろな自動化を進めているので今後も便利になる成長のあるコミュです

👇詳細は以下にまとめましたので興味ある方は連絡ください
https://bosyu.me/b/G43e6INUpQw
# 注意書き(2020/11/5)
試験受験前の備忘録としてこの記事を作成しましたが
別の記事にていくつか誤字を確認しております。
そのため、11月末までに各種コマンドの誤字がないかなど確認する予定でおります。
が、もし時間がなく対応できなければ11月末で削除する予定です。
もし、誤字の箇所が見つかりましたら
気軽に「編集リクエスト」を頂ければと思います。
その都度確認して、適応して参ります。

#合格後の追記（11月10日）
##11月10日（土）午前の受験日を終えて、実は私...
- 実は私、2週間前に同様の試験を受けて不合格になっています。

#試験について
少し前に電子書籍でAWSについて本を読んでいるが、実務経験がなく実感が掴めないため
実際に個人アカウントでゴニョゴニョやりながら、メモ程度に色々とまとめていこうと思う。

- 勉強する中でアイコンを使ってみよう
    - アイコンダウンロード先：https://aws.amazon.com/jp/architecture/icons/

- クラウド活用資料集を見てみよう
    - 資料集ダウンロード先：https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-service-cut/


#備忘録

##IAMユーザーから請求ダッシュボード
- IAMユーザーでダッシュボ-ドを見るにはルートユーザーから設定が必要になる。

##AMIとSnapshotの違い
※静止点をとってから作業を行う

- AMI
    - EC2のある断面（EC2インスタンス作成ののもと）
- Snapshot
    - EBS（ディスク）の断面（EBS作成のもと）
    - /(ルート)をsnapshotした場合、AMIにすることも出来る。

##Elastic IPの課金対象
- 0.005USD:（/時間)
    - 実行中のインスタンスと関連付けられている追加のIP
    - 実行中のインスタンスと関連付けられていない場合
- 1ヶ月使用した場合：=3.6UDS（0.005usd*24h*30d）

##AWS上のネットワークの基本
- リージョン：ある地域のまとまり
    - VPC
- AZ：リージョン内のAZは互いに物理的な距離がある
    - サブネット
 
##CIDRについて
- ５つ分のアドレスはAWS側で予約されている
    - /32：１つのIP
    - /28：16つのIP（実際は-５されるので１１)
    - /24；２５６つのIP(実際は-5されるので251)

##インスタンスの初期設定
- sudo vim
    - /etc/sysconfig/network
    - /etc/hosts
    - /etc/sysconfig/i18n：CentOS6（CentOS7[ex]localectl set-locale LANG=en_US.utf8）
        - cp /usr/share/zoneinfo/Japan /etc/localtime
    - /etc/sysconfig/clock

##mysqlに他のサーバーからアクセス
- mysqlが導入サーバからmysqlにアクセスし、実行
    - grant all privileges on *.* to <ユーザー名>@"%" identified by '<パスワード>' with grant option; 
    
- mysqlが導入されているサーバーにアクセスできる他のサーバーから実行
    - mysql -h <mysqlが導入されているサーバーのIP> -u <ユーザー名> -p

##ネットワークACLについて
- セキュリティグループ
    - インスタンス単位の制御
    - ステートフル（インバウンド設定すればアウトも設定される）
    
- ネットワークACL
    - サブネット単位の制御
    - ステートレス（イン・バウンド共に設定必要）

##マネージドサービスについて
- RDS
    - AWS側の作業：[電源等]、[OS Inst.]、[パッチ当て]、[バックアップ]
        - 自動バックアップ取得（手動で取得可、スナップショットを元に新たなRDS構築可）
        - パッチ当ての自動実施（メンテナンスウィンドウで時間指定できる）
        - パラメータ設定（RDSにSSHはできない。パラメータグループを作りマネージメントコンソールから設定）
    - ユーザー側の作業：[アプリ最適化]
    - 対応しているエンジン
        - MySQL
        - PostgreSQL
        - MariaDB
        - Oracle
        - MS SQL Server
        - Amazon Aurora
    - Master - Slave構成が容易（可用性向上）
    - RDSインスタンスの削除について
        - インスタンス削除と共にスナップショットの自動は消えるが、手動は自動で消えない


- マネージドサービスの一部紹介
    - RDS
    - RedShift
    - ElasticCache
    - S3
    - Route53
    - CloudFront
    - SQS
    - SES

他様々...

##単一障害点（SPOF：single point of failure)をなくす
- 一例
    - DB層：RDS
    - WEB層：ELB
        - 負荷分散
        - 正常なインスタンスにリクエスト
        - Auto Scaling
    - NATインスタンスより可用性の高いNAT GWを用いる
    - セッション管理を一つで行なっていた際、障害が起きた時のためにElasticCacheを用いる
    - メールサーバー：SES（冗長性を持った設計にする）

##ELBについて
- ３種類
    - ALB（Appllcation LB)：L7レイヤーのロードバランサー
        - コンテンツベースでの振り分けが可能
        - 振り分けを行うのはリバースプキシに何らかの改善する必要ある
    - NLB(Network LB)：L4レイヤーでのロードバランサー
    - CLB（Classic LB）：ALBやNLBに比べてプロトタイプ
        - リクエストをバックエンドインスタンスへ振り分けする
        - コンテンツベースでの振り分けはできない
- 機能
    - 負荷分散
        - クロスゾーン負荷分散
            - 配下のEC2の負荷をみて、負荷が均等になるようにリクエストを分散する
    - ヘスルチェック
        - 正しい動きをしているインスタンスのみにリクエストを振る
        - 対象ファイル、チェック周期、何回成功したらOKかNGとするか
- 異常時の動作
    - EC2への振り分けを停止し、ほかの正常なEC2のみに通信する
- 接続
    - フロントエンド (クライアントからロードバランサー) 
    - バックエンド (ロードバランサーからインスタンス)


##S3について
- 安価で耐久性の高いオブジェクトストレージ
- 利用料
    - 0.025SD（月10GBデータを置いて約30円/月くらい、120円/ドル換算）
    - 比較：EBSは０．１２USD/GB（月）
- 耐久性
    - ９９．９９９９９９９９９％
- セキュリティ
    - ユーザポリシー：IAMで利用できるユーザ制限
    - バケットポリシー：S3のバケット単位でユーザやFrom Ipなどを制限可能
- 機能
    - Webサイトホスティング：静的なサイトであればS3だけで公開可能
    - 他のAWSサービスと連携が豊富：（例）RedShit Spectrum、Lambda Function起動トリガー
- 利用用途
    - 静的コンテンツの配信
    - ログなどのエクスポート先
    - バッチ連携用のファイル置き場
    - 静的Webホスティング
- 署名付きURLは、S3常のデータに対して一定時間だけアクセスを許可するためのURLを発行
    - Web経由せずにファイルを直接S3に格納できる
- 整合性モデル
    - オブジェクトのPUT処理（新規追加）：書き込み後の読み込み整合性
    - 　　　　　　　　　　（更新）：結果整合性
    - オブジェクトのDELETE処理（削除）：結果整合性
    - 更新と削除の場合、前のデータが参照される場合もある。
- ストレージクラス
    - スタンダード：頻度にアクセス
    - 標準低頻度アクセス：
    - １ゾーン低頻度アクセス

##Glacierについて
- 取り出しオプション
    - 迅速（Ecpedited）：１〜５分
    - 標準（standard）：３〜５時間
    - 大容量（Bulk）：５〜１２時間


##Route53について
- DNSの機能
- SLA100%（障害時には停止時間に応じたサービスチケット配布有り）
- 多様なルーティングポリシー
    - Simple
        - 一般的
    - Weight
        - インスタンスのスペック差やAPテストカナリアリリース（一部対象に最新配布）時など
    - Latency
        - Latencyが最小のリリースが優先で、マルチリージョンなど有効的
    - Geolocation
        - リクエスト元の位置情報によって優先度が変わる
    - Failover
        - 正常時はsimpleルーティグと同様、障害時はS3などの副系に振られるようにする
- エイリアスについて
    - ELBやCloudFrontに対してZoneApexレコードを設定できる
    - 静的なサイトを負担に応じた費用対効果の高いスケーラビリティが実現できる

##EBSを別リージョンで利用する方法
- （１）EBSのスナップショット作成
- （２）別リージョンにコピー
- （３）スナップショットからEBSを作成
- （４）EC2インスタンスにアタッチ

##EBSの種類
- プロビジョンド IOPS SSD (io1)
- 汎用 SSD (gp2)
- スループット最適化 HDD (st1)
- Cold HDD (sc1)

##S3のパフォーマンスを向上させる方法
- ファイル名のプレフィックス（接頭語）にラン旦那１６進数で表した文字列を設定する
    - インデックス格納先が分散されてパフォーマンスがさらに向上する

##S3ファイルの外部公開の制限について
- 想定していない人へのアクセスを許さないために
    - パブリックアクセス（一般公開権）というアクセス制御の無効にする
    - 有効制限付きURLを使用する

##VPCエンドポイントについて
- S3などにインターネットを経由せずに、プライベート接続を実現するサービス
    - 指定されたルートへのターゲットをルートテーブルに設定することで利用可能

※NATゲートウェイはインターネットに接続するから違うよ！

##RDSについて
- マネージド型リレーショナルデータベースサービス
- 標準でマルチAZ機能
- 障害時には自動でフェイルオーバーを行う
- 標準設定は1日1回自動バックアップ
- データベースとトランザクションログを取得する
- MySQLではSSL接続がサポートされている
    - デフォルトのmysqlクライアントを使用して接続を暗号化する
        - --ssl-caオプションに公開鍵のフルパスを指定してmysqlクライアントを起動する

##Amazon Auroraについて
- マネージド型のリレーショナルデータベース（RDS）
- 頻繁にデータの更新・削除が行われるDBに向いている
- SQLを発行して複数のテーブルを結合し、結合したテーブルから対象データを取得できる
- フルマネージド型なので、データ量に応じてストレージを自動拡張できる
- MySQLの５倍、PostgreSQLの３倍のスループット（と実現しているといわれている）
- データは３箇所のAZに格納
- 行指向

##DynamoDB
- NoSQLデータサービス
    - キーとなるIDを指定することでデータベースに格納されているバリューを取得する
- JSON（Java Script Object Notation）のような半構造データも格納可能
- IoTデータのような高速かつ大量のデータを処理できる
- データの一貫性が保証sれていないが、結果の整合性は保証される
- 適していないユースケース
    - アクセス頻度の低い大量データを管理する
    - 複雑なSQLを様いたデータの処理

##Amazon DynamoDB Acceletatorについて
- DAX
- 可用性が高くフルマネージドなDynamoDB用のインメモリキャッシュ
- 1秒あたり100万回単位のリクエストに数ミリ秒で応答可能
- DynamoDBのデータ読み込み回数を減らすので、読み込みスループットが向上する

##Amazon RedShif
- 列指向のアーキテクチャを持る
- 大量データの集計分析に無垢データウェアハウスサービス
- ノードを増やすと複数のDBにクラスター化されて冗長性が高まる

##Lambdaについて
- ユースケース
    - 例）リクエスト数が１００件、平均応答時間が50ミリと非常に短時間の処理の場合
        - CPUのコア数に特化したインスタンスよりLambdaの方がこう可用性かつ低コスト

##CloudFront
- CDN（Content Delivery Nerwork）サービス
- 画像・動画などを安全かつ高速に配信可能
- エッジロケーション（グルーバルに点在する拠点からコンテンツ配信する）
- 高可用性・高パフォーマンス・低レイテンシー
- 署名付きURLが利用すると、ユーザーはコンテンツのダウンロードやストリーミング配信できる
- アクセスする地域に関係なくアクセスから再生までの時間を短縮する
- 地域制限（地理的ブロッキング）の機能
    - 特定地域のユーザーにコンテンツ配信や、逆にブロック可能

##Aout Scaling
- スケーリングプラン
    - CloudWatchのメトリクス
    - スケジュールの指定
- AZが複数ある場合、AZ間でEC2の数の均衡を保つ
- 増加時はEC2が少ない場所で起動
- EC２起動失敗時は、起動するまで別のAZで起動を試みる
- 起動設定でIAMロールを設定できる
- デフォルトの動作順序
    - １）EC2が多いAZ内からランダムにAZを選択
    - ２）もっとも古い起動設定をしようしたEC2があるAZを選択
    - ３）次に課金が発生するまでの時間が最も短いEC2を選択
    - ４）発生タイミングの一緒なEC２が複数の場合にはその内からランダムで選択

##RDSのリードレプリカ
- マスターデータベースと同じDBを複製し、読み取り専用として構築
- 読み取りスループットを増やしパフォーマンス向上
- 
##Amazon ElastiCacheについて
- マネージド型インメモリーデータベース
- メモリ上で処理を実行するため、データをキャッシュすることでデータベースの負担軽減

##(クラスター)プレイスメントグループ
- 単一のAZ内のEC2を論理的にグルーピングしたもの

##リザーブドインスタンス（RI)について
- 種類
    - StandardタイプのRI
    - ConvertibleタイプのRI
    - スケジュールされたRI
        - 予約した時間ないで起動できる購入オプション
        - 非営業日にバッチ処理など継続的に行う必要がなく、定期的な処理を行う時に適する

##インスタンスの選択（コスパ面）
- リザーブドインスタンす
    - 基幹システムで実行するバッチ処理はインスタンスを常時起動する必要ある場合
- スポットインスタンス
    - 非基幹システムで実行するバッチ処理は処理が中断したとしても業務に直接影響しない場合


##iSCSIを使用するインターフェイス
- キャッシュ型ボリュームゲートウェイ
    - データをStrageGateway経由でS3に格納
    - アクセス頻度の高いデータは、ローカルにキャッシュすることでデータへの高速アクセス可能
- 保管型ボリュームゲートウェイ
    - データをスナップショットとしてS3に格納
- テーブルゲートウェイ
    - 物理テープ装置の代替としてデータをS3(Glacier)に格納

##iSCSIがないインターフェイス
- ファイルゲートウェイ
    - NFSインターフェイスを使用し、データをS3に直接オブジェクトとして格納

##ElasticBeanstalkについて
- アプリケーションをデプロイおよび管理するサービス
- デプロイするサーバー
    - ApacheHTTPserver,Nginx,Passenger,MicrosoftInternetInfomarionServer(IIS)


##CodeDeployについて
- アプリケーションのデプロイを自動化するサービス

##CloudFormationについて
- AWSリソースをプロビジョニング（予測と提供準備）するサービス

##AWS OpsWorksについて
- ChefやPuppetを使ってサーバに必要なソフトウェアのインストールや設定を自動化する

##EBS と インスタンスストアの違い

- EBS
    - 物理ホストとネットワーク接続されたEBSストレージ
    - 不揮発性
- インスタンスストア
    - 物理ホストのローカル接続されたストレージ
    - 揮発性
    - EBSよりアクセス性能は高

##Kinesisについて
- リアルタイムに流れてくる大量のデータを処理するサービス
- 種類
    - Kinesis Data Firehose
        - ストリームデータを各サービスに簡単に配信・保存できる
    - Kinesis Data Analytics
        - ストリーミングデータに対してAQLクエリを実行しリアルタイム分析を行う
  
##AWS DataPipelineについて
- 指定された感覚でデータ処理やデータ移動を行うことを支援するサービス

##200(320km)マイル以上離れた冗長化
- コストは掛かるが別リージョンに環境を構築する

##CloudTrailについて
- AWSアカウントで利用された操作（APIコール）をログとして記録するサービス

##VPCフローログについて
- VPC内のネットワークインターフェイス間で行き来する通信の内容をキャプチャする機能

##AWS Configについて
- AWSでサービスで管理されているリソースの構成変更を追跡する

##CloudWatchについて
- AWSリソースの情報を収集・監視・可視化するサービス
- 標準メトリクスで収集できる項目
    - CPU使用率
    - EBSからの読み取られたバイト数
    - ENIから受信されたバイト数
    - など
- カスタムメトリクス
    - メモリ使用率
    - ディスク使用率
    - など

##

##AMI/インスタンスについて
- 種類
    - Amazon EBS-Backed
        - EBSがOSのルート領域
        - 不揮発性
        - インスタンスでは停止・再開が可能
    - Amazon Instance Store-Backed
        - インスタンスストアがOSのルート領域
        - 揮発性
        - インスタンスでは停止・再開ができない

##インスタンスメタデータ
- EC2インスタンス自身に関するデータで、実行中のインスタンを設定・管理するために使用できる
- 種類
    - インスタンスID
    - プライベートIPv4
    - パプリックIPv4
    - ローカルホスト名
    - 公開鍵


##AWS TrustedAdvisor
- AWSのベストプラクティス
    - コスト最適化
    - セキュリティ
    - サービスの制限
    - 耐障害性
    - パフォーマンス

##AWS KMSについて
- Key Management Service
- AWS上で鍵管理を提供する
- 暗号化鍵の作成や有効・無効の管理、ローテーション、削除
- AWSに送信されたデータをデータサイド（AWS）で暗号化
- データ送信前にクライアントサイドで暗号化

##AWS CloudHSMについて
- Cloud Hardware Security Module
- AWSデータセンター内に配置されるユーザーの占有のハードウェアアプラインアンス
- ユーザーのVPC内に配置される
    - 他のネットワークから隔離される
    - 国際的なセキュリティ基準に準拠している

##VirtualPrivateGatewayについて
- 仮想プライベートゲートウェイ
- VPN接続する際に使用するゲートウェイ

##ベネトレーションテストについて
- 侵入テスト
- AWSに事前申請が必要
- 許可されているリソース
    - EC2、RDS、Aurora、CloudFront、APIGateway、Lambda
- 許可されていないインスタンスリソース
    - スモールRDSインスタンス、m1.smallインスタンス

##ユーザーデータ
- EC2インスタンスの初回起動時に１回だけスクリプト実行できる機能

##API Gateway
- 秒単位で指定した有効期限（TTL）が切れるまでエンドポイントからレスポンスをキャッシュする
- デフォルトはTTL300秒
- TTL=0はキャッシュ無効を示す
- エンドポイントのレスポンスがキャッシュされるようにできている
- APIへのリクエストへの呼び出しを減らし、APIへのリクエストのレイテンシーを低くできる
- APIキャッシュでは時間単位で料金発生