AWS Summit Onlineのちょっとしたメモ②

#AWS Summit Onlineのメモ
AWS Summit Onlineの気になったセッションを視聴してのちょっとしたメモになります。
###・AWS のサービスを使ったオンプレミスからのデータベース移行
◆AWSにデータベースを移⾏する際のパターンと移⾏⽅法
　
　パターン1：Re-Host
　オンプレミスのデータベースをなるべく環境を変えずにAWSに移行すること
　移行に対するリスクが小さい
　
　パターン2：Re-Architecture
　オンプレミスからAWSへの移行に合わせてアーキテクチャの変更をする
　例：ORACLEからPostgreSQLへ変更をすることができる
　エンジンの変更を行うので移行の際は検証をしっかりと行う必要がある
　
　パターン3：(Re-Host or Re-Platform) & Re-Architecture
　AWSへの移行の際はエンジンを変えずに、AWS上でエンジンを変更する
　
　移⾏の流れとAWSで提供するDB移⾏サービス
　　Schema Conversion Tool（SCT）
　　　Assessment（移行難易度の調査）
　　　Schema conversion（スキーマの移行）
　　　Code conversion（SQL、プロシージャーの移行）
　
　　Database Migration Service（DMS）
　　　Data migration（データの移行）
　　　Validation（データ移行の整合性をテスト）

◆SCT/DMSの概要
　
　Schema Conversion Tool
　データベースのスキーマを変換するツール
　ORACLE、MySQLなど様々なデータベースに対応している

　Database Migration Service
　データベースの中に格納されているデータをマイグレーションするサービス
　ダウンタイムを最小化したデータ移行が可能
　S3、Neptune、Kinesisなどのデータベース以外にも適応可能

◆SCT/DMSを活⽤したデータベース移⾏の具体例
　オンプレミスのORACLEからAurora PostgreSQLへの移行
　SCTでAssessment、Schema conversion、Code conversionの3ステップを行う
　DMSでData migration、Validationを行う
　
　SCTはオンプレミス側の端末にインストールしてデータベースに接続する
　DMSはAWS側にインスタンス作成
　AWS側のネットワークからオンプレミス側のデータベースに接続するので、
　VPNやDirect Connectなどのセキュアな接続環境が必要になる

　SCTによるデータベースの移⾏評価
　グラフィカルなアセスメントレポートを出力可能
　自動変換ができる割合や人の手でやらなければいけない割合が出力される

　Database Migration Playbook
　AWSがデータベース移行のベストプラクティスをまとめたもの

　SCTによるスキーマ、コード変換
　SCTで移行後のパフォーマンスが出るかは担保していないのでテストを行う必要あり

　DMSを使ったデータ移⾏⼿順のイメージ
　DMSインスタンスを作成
　DMSインスタンスからソースへ接続、ターゲットのデータベースへも接続する。接続する情報の事をエンドポイントと呼ぶ
　エンドポイントを使用して移行タスクを設定
　　Full Load：ある断面のデータを最初から最後まで移行する
　　Full Load + CDC：移行中にソースで発生する更新データも移行する
　　CDCのみ：ある時点からの差分のみ移行する
　移⾏タスクのモニタリング
　正しくタスクが動いているのか、ソース側で発生した更新データをどのくらいの遅延でレプリケーションできているか

　レプリケーションインスタンスの作成は適切なインスタンスクラス、ストレージ容量を指定する

　DMSを使った最⼩限のダウンタイムのデータ移⾏
　　1.初期データ移⾏（Full Load）
　　2.オンプレミスのデータ更新（CDC）
　　3.トランザクションログを参照し適応
　　4.オンプレミスに向いているアプリケーションの停止
　　5.差分データが無くなることをDMSで確認
　　6.差分データが適用された段階でアプリケーション再開
　4～6が最小限のダウンタイム

　DMSのデータ検証機能
　DMSの場合はデータのValidationはオプション
　データのValidationと移行は非同期
###・パケットの気持ちになって辿る Amazon VPC のルーティング
[引用資料](https://pages.awscloud.com/rs/112-TZM-766/images/AWS-08_AWS_Summit_Online_2020_NET01.pdf)

◆VPCの主要な概念
　AWSの各種サービスはリージョンというデータセンタークラスタで提供されている
　日本には東京リージョン、大阪ローカルリージョンがある
　リージョンの中にはアベイラビリティゾーン(AZ)というデータセンタクラスタがある
　AZは電源、ネットワークが独立しているので障害発生時に他のAZに影響が無いようにしている
　⾼可⽤性のためにマルチAZ構成を推奨している

　VPC
　リージョンの中でAZを跨いで構成できる独立したプライベートネットワーク領域

　サブネット
　VPCの中にルーティングポリシー単位で定義
　AZ単位で作成

　ルートテーブル
　VPCやサブネットでデフォルトで動作しているルータの経路情報を登録している
　EC2インスタンスから見るとデフォルトゲートウェイとして見える

　VPCには様々なゲートウェイがある(Internet Gateway,NAT Gateway,Virtual Private gateway,AWS Transit Gatewayなど)
　AWSの方で冗長化しているので使う側は考える必要が無い

◆オンプレミスネットワークとの⽐較で理解するVPC
　VPCを作ると→オンプレミスではDNSサーバを設定した状態に近い
　サブネットを作ると→オンプレミスではVLANやL2ネットワークを作ることに近い
　EC2を作ると→オンプレミスではスイッチにサーバを接続してOSをインストールした状態に近い

◆VPC通信の実際
　![WS000015.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/733c8706-e010-300f-573e-b29933b6b13b.jpeg)
　EC2 AからEC2 Bに対してHTTPアクセスする場合
　EC2 BのMACアドレスを知るためにEC2 AからブロードキャストでARPが飛ぶ
　Host Aはマッピングサービスという外部のWebサービスへの問い合わせに変換
　マッピングサービスからEC2 BのMACアドレスとHost BのIPアドレスが返ってくる
　返ってきた結果をARP ReplyとしてEC2 Aに渡す
　EC2 Aは実際に送りたいデータパケットを構成してEC2 Bに送る

![WS000000.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/8c2c133d-0102-1d39-6058-98fa4a4e7150.jpeg)
　Host AからHost Bにパケットを投げる際に元のパケットに対してVPC IDでカプセル化を行う
　VPC内の通信では正規のインスタンスからの通信かどうかValidationしている
　Host Bはマッピングサービスに正規のインスタンスかどうか問い合わせている
　問い合わせの結果から問題が無ければカプセル化を解いてEC2 Bにパケットを渡す
　普段は意識する必要のない通信
　VPCの上ではL2/L3の通信が行われている

◆VPCの全体像
　EC2インスタンスを収容するホスト群

　Edge
　Internet Gateway,Virtual Private Gateway,VPC Endpoint(Gateway)などをホストしている

　Hyperplane
　NAT Gateway,Transit Gateway,VPC Endpoint(Gateway)などをホストしている

◆クラウドネットワークを設計するときは
　主な設計パターン
　VPC←→インターネット
　VPC←→オンプレミス
　VPC←→VPC
　の3パターン
　ルータの役割を果たすコンポーネントがどこにあるか、どういった経路を持っているかを考える

◆パケットの気持ちで辿り設計を考えてみましょう
　1.VPC内からNAT GWを介してInternetにアクセス
　　パブリックサブネットにNAT GWを配置、EC2インスタンスをプライベートサブネットに配置
　　EC2は自分のサブネットの外にあるものはとにかくデフォルトゲートウェイに投げる
　　プライベートサブネットのルートテーブルにパケットを投げる
　　プライベートサブネットのルートテーブルにはNAT GW宛のルーティングを書いておく必要がある
　　ルートテーブルに従ってNAT GWにパケットを投げる
　　パケットを受け取ったNAT GWはパブリックサブネットのルートテーブルにパケットを投げる
　　(NAT GWはルーティングを行わない)
　　パブリックサブネットのルートテーブルはInternet GW宛のルーティングを書いておく必要がある
　　ルートテーブルに従ってInternet GWにパケットを投げる
　　Internet GWはAWSが管理しているのでそれ以降の経路はユーザ側で確認できない(する必要が無い)

　2.VPC内からVGWを介してオンプレミスにアクセス
　　AWS Direct Connect
　　専用線や閉域網を使用して自社とAWSを接続するサービス
　　Direct Connect Locationを介して接続する
　　BGPを使用して経路交換をしている

　　EC2インスタンスはルートテーブルにパケットを投げる
　　ルートテーブルには宛先がオンプレミスのサーバのIPアドレスはVGWにパケットを投げるルーティングを書いておく
　　ルートテーブルに従ってVGWにパケットを投げる
　　VGWにパケットが届くとVGWの経路情報に載っているBGPで通知されたオンプレミスのカスタマーゲートウェイに投げる
　　カスタマーゲートウェイにパケットが届いた後はAWSとは無関係な普通のルーティング

　3.VPC内からTGWを介して他のVPCにアクセス
　　Transit Gateway(TGW)
　　Transit Gatewayを作成するとデフォルトで1つのルートテーブルができる
　　必要に応じて複数のルートテーブルをホストできる
　　VRFのように1つのルータで複数のルーティングテーブルを持たせているイメージ
　　VPCと接続する際はAttachmentを作成
　　アソシエーションという設定でVPCの外に出るアウトバウンドの通信を制御
　　Attachmentから外に出るときにどのルートテーブルを使うかを指定できる
　　プロパゲーションという設定でインバウンドの通信を制御

![WS000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/6c1492ac-ddc2-d4d2-4e19-6efb203eb280.jpeg)
　　EC2 Aからサブネットのルートテーブルへパケットを投げる
　　ルートテーブルには宛先がVPC BのCIDRはTGWに投げるルーティングを書いておく
　　ルートテーブルに従ってTGWにパケットを投げる
　　パケットはAttachmentを介してTGWに届く
　　TGWはアソシエーションの設定に従ってルートテーブルを選択
　　プロパゲーションの設定でVPC Bへの経路が登録されているルートテーブルを選択する

◆まとめ
　AWSのルーティングに必要な知識はオンプレミスと同じ
　ルータの場所やパケットの動きを理解しておく
　オンプレミスとは違い可用性やスケーラビリティの設計はクラウドに任せられる