通信効率を上げるためにAWS Global Acceleratorを導入する

## AWS Global Acceleratorとは

わかりやすい記事を一旦抜粋します。

>Global Accelerator を使用すると、ユーザーのトラフィックはインターネットから Amazon のプライベートグローバルネットワークに移動し、90 を超えるグローバルエッジロケーションを経由して、アプリケーションのオリジンに転送されます。AWS Global Accelerator は迅速にセットアップでき、トラフィックのパフォーマンスを最大 60％ 向上します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/f09a2db3-0e9a-2802-5057-025240f9457c.png)
↑出典： [公式](https://aws.amazon.com/jp/global-accelerator/?blogs-global-accelerator.sort-by=item.additionalFields.createdDate&blogs-global-accelerator.sort-order=desc&aws-global-accelerator-wn.sort-by=item.additionalFields.postDateTime&aws-global-accelerator-wn.sort-order=desc)より抜粋

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/5c9f217b-fd3f-6ce6-32c9-c260219c27eb.png)


↑出典: 
https://dev.classmethod.jp/articles/aws-globalaccelerator-speed-comparison/#toc-6
https://d1.awsstatic.com/events/jp/2018/reinvent/Osaka_track2_1%20Compute_Network-reInvent2018-recap.pdf


- 要はAWS Global Acceleratorを使うと、最短距離でAWSのサーバー(ALB配下のEC2やECS)に、通常のインターネット経由よりも速くサーバーに到達することができるため、レイテンシーが向上する。
- 日本のサーバー（東京リージョン）で、海外のお客さん向けのサイトなど、現地からのアクセスがメインのサイトを運用する場合に、独自のファイアーウォールを使って通信を規制している国などからのアクセスの場合、日本のサーバーへのアクセス時に著しくレイテンシーが落ちるなどのリスクを軽減することができる。（AWSが提供するネットワークを優先的に通ることができるため）
    - 海外の現地にサーバーを立てたりとか、プロキシサーバーを別途たててそこを経由してレイテンシーを上げる努力をするみたいなことも必要なくなる。
    - 現地にサーバーを立てるのに申請や免許が必要な国もあったりして、現地サーバーを立てることができず、日本や近くの国（リージョン）にサーバーを建てるしかないがレイテンシーが心配という場合にAWS Global Acceleratorを使うと良いかもしれない
- 単に通信の効率が良くなる以外にも副産物がある
    - 固定のIPが２つ払い出されるので、それをALBと紐づけることで、結果的にALBに固定IPでアクセスできるようになる。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/6319475f-baa4-e5b9-826c-f58113d1beca.png)

    - 通常はRoute53のAレーコードにALBのFQDN(dualstack.hogehoge429819601.ap-northeast-1.elb.amazonaws.comみたいなドメイン)を紐づけることが多いが、ALBのIPドレス自体固定ではなかったりするところで、Global Acceleratorを噛ませることで固定のIPに常にルーティングすることができる
    - Global Acceleratorには複数のエンドポイント（ロードバランサー）を紐づけて、リクエストの重み付けができるので、複数ロードバランサーを作って、新バージョンのアプリと旧バージョンのアプリを並行稼働してリクエストを振り分けることができる（ALBのルールで設定するのと同じようなことができる。）


料金: https://aws.amazon.com/jp/global-accelerator/pricing/

## AWS Global Accelerator側からの導入
https://docs.aws.amazon.com/ja_jp/global-accelerator/latest/dg/getting-started.html

- アクセラレーターの作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/35e04267-a43d-cae4-506a-07fd8dd60d7f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/ae325fa3-6d46-f4ec-cb34-602c549c340b.png)


- リスナーの設定
    - TCPの80,443portを設定
    - ALB側のリスナーに上記のルールを設定しているため

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/d210b38f-6133-7dff-ead2-40c1d7816546.png)


- エンドポイントグループを作成
    - 一つだけ追加
    - エンドポイントグループにロードバランサーのエンドポイントを複数紐づけたりも可能

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/d79d0d7f-492a-9a64-24c0-ef49d499c352.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/a54986de-1bac-23db-2a1d-b11e4603bf3c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/2f21e9a6-3191-1eae-13b0-f8632303c1a2.png)


- エンドポイントグループ内にエンドポイントを追加
    - エンドポイントにALBを選択
    - 複数のALBを登録してリクエストの重み付けをしたりできるのが大きな特徴
        - ウェイトを使用すると、エンドポイントグループ内のリソースにルーティングするトラフィックの割合を選択できる。
        - ロードバランサーを複数作ってアプリケーションの新バージョンのテストをするときなどに重み付けの調整ができたりするので便利
        - 重み付けの合計が255になるように調整
        - 重みを変えていくことで徐々にバランスを調整することが可能
        - エンドポイントにトラフィックを送信しないようにしたい場合は、そのリソースの重みを0にする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/64708735-6c90-500d-303b-42f807c8f047.png)



## ALB側から設定してAWS Global Acceleratorを導入する方法
色々書いてきたが、ALB側からもボタンポチッで実は設定が可能かつ、設定がこっちの方が簡単。

### 流れ
- ロードバランサーの詳細にある統合サービスからGlobal Acceleratorを申し込む
- Global Acceleratorはoregonリージョンになる。申し込むと固定IPが2個払い出され、それを該当のリージョン（東京リージョン）で運用中のALBと自動で紐づけてくれる（Global Acceleratorのエンドポイントを作成してそこにロードバランサーを勝手に登録してくれる）

### EC2に紐づくロードバランサー 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/7a8ca737-ba2f-1405-6395-5a1994327359.png)


紐づけるとこうなる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/4cc65656-e1bb-3f68-924e-bbc973d65aa8.png)


## route53での設定（共通）
- global acceleratorの設定が、Deployedになって反映されてからroute53への紐付けを行う。
- global acceleratorを適用したいドメインのAレコードに紐づける
- 値/トラフィックのルーティング先をALBではなくglobal accelerratorのに変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/cdab0302-fdf1-7618-760d-3f78c6a9dbfc.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/0b937803-eb6a-ed24-b105-0093fef27883.png)


- route53のホストゾーン内のレコードがこうなっていればオッケー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/4322bf77-01ae-47ff-350d-b3c5cb49e097.png)




- 同じサーバーに向いているが違うドメインを作ってdigで確認

```bash
$ dig {ALBのドメインがAレコードに登録されているドメイン名}

// ざっくり以下のような感じの情報が返ってくる
;; ANSWER SECTION:
hoge.com. 300 IN	CNAME	dualstack.hoge-2102931581.ap-northeast-1.elb.amazonaws.com.
dualstack.hoge-2102931581.ap-northeast-1.elb.amazonaws.com.	60 IN A	54.150.111.111(適当な数字に置き換えている)←ALBにAWS上で自動で振られたIPアドレスになっている
dualstack.hoge-2102931581.ap-northeast-1.elb.amazonaws.com.	60 IN A	52.160.111.111(適当な数字に置き換えている)←ALBにAWS上で自動で振られたIPアドレスになっている



$ dig {Global AcceleratorのエンドポイントをAレコードに登録したドメイン名}

// ざっくり以下のような感じの情報が返ってくる
;; ANSWER SECTION:
huga.com. 300 IN	A	75.2.90.111(適当な数字に置き換えている)←AWS Global Accelerator作成時に振られた固定IPになっている
huga.com. 300 IN	A	99.83.227.111(適当な数字に置き換えている)←AWS Global Accelerator作成時に振られた固定IPになっている


```

## アクセス速度の検証

- 自分はどうしても現地国から実際にアクセスした際に、遅延がないか見たかったため、現地スタッフに実際に現地からAWS Global Acceleratorを紐付けたサイトドメインと、そうでないALBに向いたドメインを直接アクセスしてもらい、検証ツールのNetworkタブを見てもらって速度を検証したりした。

## 参考記事
https://dev.classmethod.jp/articles/aws-globalaccelerator-speed-comparison/