AWS 認定ソリューションアーキテクト – プロフェッショナル 合格への道#7

#はじめに
今日で直しを終了させる
##出題範囲
* 組織の複雑さを考慮した設計 hb
    * ハイブリッド設計
* 新しいソリューションの設計 s
    * クラウドファースト設計
* 移行方法の理解 m 
* コスト管理 c
* 既存のソリューションの継続的な改善 i　
    * 改善案の提案

![SAP.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/a2d7d16d-51a9-61c2-95e9-bb2852e033eb.png)

解いた感じ八割くらいとれてそうだったので何を間違えたか詰めていきます。

#学習
##1　s
ある動画モバイルアプリケーションはS3に10GBを超えるファイルをアップロードします。
しかし、S3リージョンから遠い場所でアプリケーションをアップロードすると時間がかかり、完了しないケースがある。

アプリのアップロードパフォーマンスを改善するソリューションはどれですか？二つ選びなさい。

* 各リージョンでS3バケットを構成してアップロードを受信し、クロスリージョンレプリケーションを使ってファイルを配信用バケットにコピーする
    * 不正解
    * ユーザーが地理的に離れた 2 つの場所にいる場合、ユーザーにより近い AWS リージョンにオブジェクトのコピーを保持することで、オブジェクトにアクセスする際のレイテンシーを最小にすることができます。

* アップロード前にファイルにランダムなプレフィックスをつけるようにアプリケーションを変更する。
    * プレフィクスをファイルに付与してもアップロードパフォーマンスは向上しない

* レイテンシベースルーティンングで53をセットアップし、アップロードを一番近いS3バケットリージョンに対して行う。
    * 選択
    * 不正解
    * レイテンシとは
        * レイテンシは、データ転送における代表的な指標のひとつです。転送要求を出してから実際にデータが送られてくるまでに生じる、通信の遅延時間のことを指します。
    * レイテンシが改善されるのであって、アップロードのパフォーマンスが改善されるわけではないのでダメ

* S3バケットでs3 taransfer acceleration を有効にして、アップロードにtransfer acceleration エンドポイントを使用するようにアプリケーションを構成する。
    * 正解
    * 選択

* アプリケーションで動画ファイルを小さい単位に分割してマルチパートアップロードを使用してファイルをS3に転送するように構成する。
    * 正解

### クロスリージョンレプリケーション
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/replication.html

> レプリケーションでは、異なる Amazon S3 バケット間でオブジェクトを自動的に非同期コピーできます。オブジェクトのレプリケーション用に設定されたバケットは、同じ AWS アカウントが所有することも、異なるアカウントが所有することもできます。オブジェクトを異なる AWS リージョン間でコピーすることも、同じリージョン内でコピーすることもできます。

#### オブジェクトレプリケーションの種類
* 異なる AWS リージョン内の Amazon S3 バケット間でオブジェクトをコピーするには、クロスリージョンレプリケーション (CRR) を使用します。
* 同一の AWS リージョン内の Amazon S3 バケット間でオブジェクトをコピーするには、同一リージョンレプリケーション (SRR) を使用します。

##### レプリケーションを使用する理由
* メタデータを保持しながらオブジェクトをレプリケートする
    * レプリケーションを使用すると、元のオブジェクトの作成時刻やバージョン ID などのすべてのメタデータを保持するオブジェクトのコピーを作成できます。この機能は、レプリカがソースオブジェクトと同じであることを確認する場合に重要です。
* オブジェクトを異なるストレージクラスにレプリケートする 
    * レプリケーションを使用すると、オブジェクトをレプリケート先バケットの S3 Glacier、S3 Glacier Deep Archive、または別のストレージクラスに直接配置できます。データを同じストレージクラスにレプリケートし、レプリケーション先バケットのライフサイクルポリシーを使用して、オブジェクトが古くなるにつれてより冷たいストレージクラスに移動することもできます。
* オブジェクトのコピーを別の所有権で保持する
    * ソースオブジェクトの所有者に関係なく、レプリカの所有権をレプリケート先バケットの所有者である AWS アカウントに変更するように Amazon S3 に指示できます。これは所有者オーバーライドオプションと呼ばれます。このオプションを使用すると、オブジェクトのレプリカへのアクセスを制限できます。
* オブジェクトを 15 分以内にレプリケートする 
    * S3 Replication Time Control (S3 RTC) を使用して、予測可能な時間内に、同じ AWS リージョン内または異なるリージョン間でデータをレプリケートできます。S3 RTC は、Amazon S3 内に保存されている新規オブジェクトの 99.99% を 15 分以内にレプリケートします

#### CRR を使用する場合
* コンプライアンス要件を満たす 
    * Amazon S3 はデフォルトで地理的に離れた複数のアベイラビリティーゾーンにデータを保存しますが、コンプライアンス要件によっては、さらに離れた場所にデータを保存することが要求される場合があります。クロスリージョンレプリケーションでは、データを遠く離れた AWS リージョンにレプリケートできるため、そのような要件を満たせるようになります。
* レイテンシーを最小にする
    * ユーザーが地理的に離れた 2 つの場所にいる場合、ユーザーにより近い AWS リージョンにオブジェクトのコピーを保持することで、オブジェクトにアクセスする際のレイテンシーを最小にすることができます。
* 運用効率を向上する
    * コンピューティングクラスターが 2 つの異なる AWS リージョンにあり、同じオブジェクトセットを分析している場合、これら 2 つのリージョンにオブジェクトのコピーを保持できます。

#### SRR を使用する場合
* ログを単一のバケットに集約する
    * 複数のバケットまたは複数のアカウントにログを保存している場合、ログを単一リージョン内のバケットに簡単にレプリケートできます。これにより、ログを一個所でより簡単に処理できます。
* 本番環境アカウントとテストアカウント間のライブレプリケーションを設定する
    * お客様またはお客様の顧客が保持する本番環境アカウントとテストアカウントで同じデータを使用する場合、SRR ルールを実装することにより、オブジェクトメタデータを維持しながら、これらの複数のアカウント間でオブジェクトをレプリケートできます。
* データ主権法に準拠する
    * データの複数のコピーを特定のリージョン内の複数の異なる AWS アカウントに保存することを義務付けられる場合があります。同一リージョンレプリケーションを使用すると、コンプライアンス規制によりデータを国外に持ち出すことが許可されていない場合に、重要なデータを自動的にレプリケートできます。

#### レプリケーションの要件
* ソースバケットの所有者は、自分のアカウントに対して送信元と送信先の AWS リージョンを有効にする必要があります。
* レプリケート元とレプリケート先の両方のバケットで、バージョニングを有効にする必要があります。
* Amazon S3 には、ユーザーに代わってレプリケート元バケットのオブジェクトをレプリケート先バケットにレプリケートするアクセス許可が必要です。
* ソースバケット所有者がバケット内のオブジェクトを所有していない場合、オブジェクト所有者は、オブジェクトアクセス今ロールリスト ( ACL) を使用して、バケット所有者に READ 権限と READ_ACP 権限を付与する必要があります。
* ソースバケットで Amazon S3 オブジェクトロックが有効になっている場合は、宛先バケットでもオブジェクトロックが有効になっている必要があります。

#### Amazon S3 のパフォーマンスガイドライン
* ストレージ接続を水平にスケールする
    * 多くの接続間にリクエストを分散することが、パフォーマンスを水平にスケールする一般的な設計パターンです。ハイパフォーマンスアプリケーションを構築する際、Amazon S3 を従来のストレージサーバーのような単一のネットワークエンドポイントとしてではなく、非常に大きな分散システムとして考えてください。複数の同時リクエストを Amazon S3 に発行するとで、最適なパフォーマンスを実現できます。これらのリクエストを個々の接続間に分散して、Amazon S3 からアクセス可能な帯域幅を最大化します。Amazon S3 には、バケットへの接続数に制限はありません。
* 同じ AWS リージョンで Amazon S3 (ストレージ) と Amazon EC2 (コンピューティング) を組み合わせる
    * S3 バケット名はグローバルに一意ですが、各バケットはバケットの作成時に選択したリージョンに保存されます。パフォーマンスを最適化するには、可能であれば、同じ AWS リージョン内の Amazon EC2 インスタンスからバケットにアクセスすることをお勧めします。これにより、ネットワークレイテンシーとデータ転送費用を低減できます。
* Amazon S3 Transfer Acceleration を使用して距離によるレイテンシーを最小限に抑える
    * Amazon S3 Transfer Acceleration は、クライアントと S3 バケットとの間で、長距離にわたる高速、簡単、かつ安全なファイル転送を管理します。Transfer Acceleration では、Amazon CloudFront の世界中に分散したエッジロケーションが利用されています。エッジロケーションに到着したデータは、最適化されたネットワークパスで Amazon S3 にルーティングされます。Transfer Acceleration は、大陸間で定期的にギガバイトからテラバイト単位のデータを転送するのに最適です。また、中央のバケットに対して世界中のお客様からアップロードが行われるクライアントにも役立ちます

#### Amazon S3 のパフォーマンス設計パターン
* 頻繁にアクセスされるコンテンツにキャッシュを使用する
    * Amazon S3 にデータを保存する多くのアプリケーションは、ユーザーから繰り返しリクエストされるデータの「作業セット」を提供します。ワークロードが一般的な一連のオブジェクトに対して繰り返された GET リクエストを送信すると、Amazon CloudFront、Amazon ElastiCache、AWS Elemental MediaStore などのキャッシュを使用してパフォーマンスを最適化できます。キャッシュ導入が成功すると、レイテンシーが低くなり、データ転送速度が速くなります。キャッシュを使用するアプリケーションはより少ない直接リクエストも Amazon S3 に送信します。これにより、リクエスト費用を削減できます。
Amazon CloudFront は、地理的に分散された接続ポイント (PoP) の大規模なセットで Amazon S3 からデータを透過的にキャッシュする高速なコンテンツ配信ネットワーク (CDN) です。複数のリージョンから、またはインターネット経由でオブジェクトがアクセスされる可能性がある場合、CloudFront を使用すると、オブジェクトにアクセスするユーザーの近くにデータをキャッシュできます。これにより、人気のある Amazon S3 コンテンツのハイパフォーマンスな配信が可能になります。CloudFront の詳細については、Amazon CloudFront 開発者ガイドを参照してください。Amazon ElastiCache はマネージド型インメモリキャッシュです。ElastiCache を使用すると、メモリにオブジェクトをキャッシュする Amazon EC2 インスタンスをプロビジョニングすることができます。このキャッシュにより、GET レイテンシーが数桁減少し、ダウンロードスループットが大幅に向上します。ElastiCache を使用するには、Amazon S3 からホットオブジェクトをリクエストする前にキャッシュへのホットオブジェクトの入力とホットオブジェクトのキャッシュのチェックの両方を行うアプリケーションロジックを変更します。ElastiCache を使用した Amazon S3 GET パフォーマンスの向上の例については、ブログ記事「Turbocharge Amazon S3 with Amazon ElastiCache for Redis」を参照してください
AWS Elemental MediaStore は、Amazon S3 からのビデオワークフローとメディア配信用に特別に構築されたキャッシュおよびコンテンツ配信システムです。MediaStore には、特にビデオ用のエンドツーエンドのストレージ API が用意されています。MediaStore の詳細については、AWS Elemental M
  * キャッシュを使いましょう。cloudfrintとelasticash 

* Amazon S3 Transfer Acceleration を使用して地理的に分散したデータ転送を高速化する
    * Amazon S3 Transfer Acceleration は、Amazon S3 を使用して、世界中に分散したクライアントとリージョンのアプリケーション間の地理的距離によるレイテンシーを最小限に抑える、または排除する点で有効です。Transfer Acceleration では、データ転送に CloudFront の世界中に分散したエッジロケーションを使用します。AWS エッジネットワークでは、50 を超えるロケーションに接続ポイントがあります。現在、このネットワークは、CloudFront でコンテンツを配信して Amazon Route 53 に対する DNS クエリに迅速な応答を提供するために使用されています。
このエッジネットワークは、Amazon S3 との間のデータ転送の高速化にも役立ちます。これは、大陸全域または大陸間でデータを転送する、高速なインターネット接続がある、大きなオブジェクトを使用する、またはアップロードするコンテンツが多数あるアプリケーションに最適です。エッジロケーションに到着したデータは、最適化されたネットワークパスで Amazon S3 にルーティングされます。一般的に、Amazon S3 リージョンから遠いほど、Transfer Acceleration を使用して期待できる速度の向上が高くなります

### S3
https://aws.amazon.com/jp/blogs/news/webinar-bb-s3-usecase-2018/

**各ストレージの特徴**

* オブジェクトストレージ
    * 大量のデータを、速く、安く、安全に保管するためのストレージ製品です。大容量化するデータ保存のニーズに対応できなくなった従来のファイルシステムの代替として、現場幅広いシーンで注目
    * ディレクトリ構造で管理するファイルストレージとは異なり、データを「オブジェクト」という単位 で扱います。データサイズやデータ数の保存制限がないため、大容量データの保存に適している
        * 従来のファイルシステムのような階層構造が無く、全てのデータを一つのストレージプールで保存することが可能
    * データごとにIDとメタデータ(属性情報)を付与しながら管理するので、こうした問題にも難なく対応
* ブロックストレージ(SCSI)
    * ファイルストレージのように単一のデータパスに頼らないため、データ取得が迅速になります。各ブロックは独立して存在し、パーティション化することで、異なるオペレーティングシステムでアクセスできます。このため、ユーザーはデータを自由に構成できるようになります。効果的で信頼性の高いデータ保存方法で、使用と管理が容易
    * 大規模なトランザクションを実行する企業や、大規模なデータベースをデプロイする企業に適しています。保存する必要があるデータが多いほど、ブロックストレージの利点が引き出される
* ファイルストレージ(SMB/NFS)
    * NASで使われている古代のストレージ
    * ファイルベースのストレージ・システムは、容量を追加してスケールアップするのではなく、システムを増設してスケールアウトする必要があります。


**S3のユースケースは以下の３パターン**

* Webサーバのコンテンツオフロード
* データ保護移行
* データレイク・DB

#### Amazon S3 Transfer Acceleration
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/transfer-acceleration.html![DX.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/449fce11-0105-d580-1b8e-b2608731c7b1.png)


> Amazon S3 Transfer Acceleration を使用すると、クライアントと S3 バケットの間で、長距離にわたるファイル転送を高速、簡単、安全に行えるようになります。Transfer Acceleration では、Amazon CloudFront の世界中に分散したエッジロケーションを利用しています。エッジロケーションに到着したデータは、最適化されたネットワークパスで Amazon S3 にルーティングされます。

##### Amazon S3 Transfer Acceleration を使用する理由

* 中央のバケットに対して世界中のお客様からアップロードが行われる。
* 大陸間で定期的にギガバイトからテラバイト単位のデータを転送する。
* Amazon S3 へのアップロード時にインターネット経由で利用可能な帯域幅を十分に活用できていない。


### マルチパートアップロードの概要
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/mpuoverview.html

##2 m
ある会社はオンプレからAWSへの移行を実施している。会社はオンプレから4週間以内(30日)にデータをS3へ移行する必要がある。データは900TBで100mbps(80)のリンクでインターネットに繋がる。リンクのスループットの最大20%が既存システムによってリアルタイムで使用されている。
特定の機関にデータ移行を行うのに最もコスト効率が良い選択はどれか？

* 複数のAWS　Snowballデバイスを注文してデータを配送する。
    * 五万/台
* マルチパートアップロードを使用して既存リンク上でデータを転送する
    * 120日かかる
* DXを敷設してデータをアップロードする。
    * 選択
    * 二万五千円
    * 正解
* AWSVPN環境をセットアップしてデータをアップロードする。
    * 120日かかる

### DXの導入と売り方
* AWSとのネットワーク接続には、”3つ”の方式
    * DX
    * IPSEC VPN
    * インターネット
* AWS Direct Connectに接続するには「接続のための接続」が必要

![DXnet.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/92ff9376-0be5-d1fa-ba16-e2c74194b0a9.png)


* AWS Direct Connectのメニューは「10Gbsp」と「1Gbps」の2種
* お勧めのAWS Direct Connectネットワーク構成
    * WAN接続型
    * データセンター拡張型
    * 専用線敷設型

![DX.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/b83f4bb2-30f2-d2cc-8fef-ca48cff5198c.png)


##3
不正リクエストをブロックするには

* cfnでelbをオリジン設定。shield設定
* lbに文字列一致条件を指定したWAFルールを追加して不正リクエストをブロックする。
* lambda作成してebのアクセスログから不正なリクエストを特定し、悪意のあるトラフィックのソースIPアドレスをブロックするようにelbに関するWAFルールを更新する。
* cdnでelbをオリジン設定。lambdaでcfから不正なリクエストを特定しelbに関するWAFルール更新。