【ハンズオン】Trangit Gatewayの挙動についてチェックしてみよう！！！

記事を読んでいただきありがとうございます！
モブエンジニア（[@mob-engineer](https://qiita.com/mob_engineer))です！

今回は、AWS公式からUpされているTrangit Gatewayハンズオン記事をもとに**詰まるポイント**や**ユースケース**について考えてみたいと思います。

所見の方でサクッと読めるように平易な表現で執筆しておりますので、お気軽にお読みいただければ幸いです。

#### AWSハンズオンサイト

https://catalog.us-east-1.prod.workshops.aws/workshops/e0d1c19d-c80b-4695-a3fc-5c4a25132f47/ja-JP

#### クラスメソッドさん記事

https://dev.classmethod.jp/articles/aws-workshop-transit-gateway-handson01/

# 目次
- 対象読者
- 構成イメージ
- ハンズオン
    - その１：トランジットゲートウェイによるVPC間接続
    - その２：別のアカウントから VPC を追加する
    - その３：ルートテーブルを使用してトラフィックを分離する

- 所感

## 対象読者

次のような課題を抱えている方に本記事をお役立ていただければ幸いです。

- Trangit Gatewayをざっくり触ってみたい方
- 触りながらユースケースを考えてみたい方

## 構成イメージ

ハンズオンページに掲載されている図を抜粋いたしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/8605a4f4-61f9-487e-a3bd-919e1da7c4e8.png)

今回の構成として、バージニア北部リージョンと東京リージョンをTrangit Gatewayで接続したイメージとなります。

デプロイされるリソース一覧は次の通りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/2cf6c5ee-e463-4536-8eb7-383bf81653ec.png)


## ハンズオン

:::note info
ハンズオンを行う前に検証用のAWSアカウントをあらかじめ作成しておいてください。
AWS Organizationsを利用することで簡単に管理できると思います。
:::

:::note info
AWS Organizationsで作成したAWSアカウントへアクセス用にユーザアカウントを紐づけておくことを忘れないでください。
:::

### その１：トランジットゲートウェイによるVPC間接続

ハンズオン資料から今回行う構成について抜粋します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/d38aa46f-bba8-437d-a5c7-b331886e69d6.png)

- 最初にハンズオンページからCloudFormatinoのリソースをダウンロードしてください

https://catalog.us-east-1.prod.workshops.aws/workshops/e0d1c19d-c80b-4695-a3fc-5c4a25132f47/ja-JP/2-hands-on/2-1-lab1

- 検索ボックスに**CloudFormation**と入力します
- 検索結果より**CloudFormation**をクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/9e431278-aaed-40c2-a197-aace92dc115b.png)

- 右上の**スタックの作成>新しいリソースの作成**（標準）をクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/98cc7ddd-c955-4162-8124-37ed321a16c3.png)

- 下へスクロールし**テンプレートファイルのアップロード**のラジオボタンをクリックします
- **ファイルの選択**ボタンをクリックするとファイル選択が行えるため、先ほどダウンロードしたテンプレートファイルを選択します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/ff980b54-cb35-4982-aa96-192ff40528f4.png)

- 最下部へスクロールし**次へ**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/addd48b5-5dfc-4006-b7ae-29f5b95d4685.png)

- スタック名に**任意の名前**を入れておきます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/bfce5c53-76d9-4be6-b882-73e2e52093eb.png)

- 最下部へスクロールし**次へ**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/7cf12d9a-2f70-4d7a-bdd3-b61b337cdcb6.png)

- 最下部へスクロールし**AWS CloudFormation によって IAM リソースが作成される場合があることを承認します**のチェックボックスにチェックを入れます
- **次へ**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/c9b5e992-83c1-4dab-9dab-ab483d3eecab.png)

- 最下部へスクロールし**送信**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/b4292dbb-6955-4907-8659-7c315ac96808.png)

:::note info
設定画面について個人的に気になる箇所もいくつかあるので、
別途検証記事をまとめてみたいと思います。
:::

- スタック一覧へ遷移します
- 作成したスタックのステータスが**CREATE_COMPLETE**になっていることを確認します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/c4141a10-7277-401a-abe9-9d8e9f38c3b5.png)

- 検索ボックスに**EC2**と入力します
- 検索結果より**EC2**をクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/69fe001f-ab95-4b69-aff7-9bdafba9a467.png)

- 左側ペインより**インスタンス**をクリックします
- クリック後、2台インスタンスが立ち上がっていることを確認します
- Name末尾が**192-168-1-100**のインスタンスのチェックボックスをクリックし、**接続**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/34843a4e-b187-4b20-aedb-13552ec6839a.png)

- 接続方法が表示されます
- **セッションマネージャー**タブをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/3df3797a-2af3-4531-abfd-40178b98d9d9.png)

- **接続**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/a026088f-5ff3-43f5-ab72-9adfbc93c6d9.png)

- 対向機器への疎通確認を行います

#### ping 10.0.1.100

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/a6b9bfe1-af99-4921-ae38-4c802f52f731.png)

- インターネット抜けしているか確認を行います

#### ping aws.amazon.com

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/18eaf804-ea85-4f22-acda-e40ac046f498.png)

対向機器（10.0.1.100）も同様に疎通確認を行います。

#### ping 192.168.1.100

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/93e374c8-05af-40c5-83d5-4634e33ca6e9.png)

#### ping aws.amazon.com

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/c0f54c9d-b592-4aae-8acc-4715766235f6.png)

疎通確認をした結果として次の通りでした

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/ee03cc0b-aac2-4d47-a813-921e4a25e7d7.png)

それぞれのEC2インスタンスが所属しているVPCの設定についてみてみましょう

#### wstgwEc2Instance192-168-1-100

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/b17fe81b-d043-445f-af74-8173d0f613da.png)

#### wstgwEc2Instance10-0-1-100

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/6e11aefd-34d1-4e94-8e56-7f4a1f469ae5.png)

**wstgwEc2Instance10-0-1-100が所属しているVPCのルートテーブルにインターネットゲートウェイが存在しない**といった原因がわかりました。
ただし、今回のハンズオンではTrangit Gatewayを用いた設定のため**Trangit Gatewayルートテーブルの追加**を行います。

:::note info
インターネット抜けしていないなぁと思ったらインターネットゲートウェイを設定していないはよくあるケースですね。
:::

- 左側ペインより**Trangit Gatewayルートテーブル**をクリック
- 表示されているルートテーブルIDをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/ac3dc3ee-6256-4a01-9303-9832fe3713f1.png)

- 設定画面が表示されます
- **ルート**タブをクリックし、**静的ルートを作成**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/013ed744-7ffd-4b26-a9d0-ded472f557ae.png)

- 静的ルート設定画面が表示されます
- 次の画像の通り設定し、**静的ルートを作成**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/ad3e3a6b-9f6f-413c-98dd-81a826f8cb69.png)

- ルートが追加されていることを確認します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/d1b94277-217e-4e8e-83b5-ff6748b5958d.png)

この状態で先ほど失敗した疎通確認を行ってみたいと思います。

#### ping aws.amazon.com

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/ee305830-f026-406c-ba75-f9380bd45634.png)

無事疎通が取れるようになりました。

### その２：別のアカウントから VPC を追加する

次は別アカウントからVPCを追加して疎通確認を行ってみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/09bd867b-63d9-4bbf-a801-691ea38092ff.png)

:::note info
2つのアカウントを交互に操作するため、シークレットウインドウで使い分けすることをお勧めします。
:::

- あらかじめ作成した別アカウントへログインしました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/80b77ad9-8af0-41eb-84ec-d01d6ce39994.png)

- ラボ1と同じようにCloudFormationでリソースを作成します
- リソースに関しては以下URLを参考にしてください

https://catalog.us-east-1.prod.workshops.aws/workshops/e0d1c19d-c80b-4695-a3fc-5c4a25132f47/ja-JP/2-hands-on/2-2-lab2

- CloudFormationで一通り設定し実行しました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/d94f1275-2eaf-4b2b-a1b8-b38d9c258a8c.png)

:::note info
以下作業はアカウント1で行います。
:::

- VPCメニューの左側ペインより**Trangit Gateway**をクリックします
- 作成済みのTrangit Gatewayをクリックし、**アクション>Trangit Gatewayを共有**をクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/c23550d9-ffda-4e29-8732-22fecf9cab73.png)

:::note info
AWS Network Managerについてポップアップが表示されていたので検証してみたいと思います。
:::

- **リソース共有を作成**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/bb73e307-59b0-4b2a-9c7b-39bcbcc99c3b.png)

- リソース共有作成画面が表示されます
- 赤枠で囲っている通り設定後、**次へ**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/858e0ef0-2b27-4601-93b0-c4bbc7b7694c.png)

- デフォルト設定で問題ないため、**次へ**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/49aafa54-0033-4ec9-a36c-d78921a20706.png)

- 対向アカウントを登録し、**次へ**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/194cebc8-0fc9-42b2-9948-1d2133ad4113.png)

- リソースの共有が正常に作成されましたのポップアップが表示されていることを確認します
- ステータスが**アクティブ**になっていることを確認します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/1e0135f9-8778-4532-87e1-ca069b40a011.png)

:::note info
以下作業はアカウント2で行います。
:::

- 検索ボックスに**Resource Access Manager**と入力
- 検索結果より**Resource Access Manager**をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/3b5603e9-396f-40d7-be03-2c8aa528a404.png)

- 左側ペインの**リソースの共有**をクリック
- 表示されているリソース共有（wstgw-RAM）をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/7e06e2db-76e5-4198-98c6-8165d1fc21c5.png)

- 上部の**リソースの共有を承認**ボタンをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/eb84ddc5-23bc-455f-87a9-6cd67601244c.png)

- **リソースの共有を承認**のポップアップが表示される
- **承認**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/8ec9f383-1196-4877-b74a-f8b092e02ffa.png)

- ステータスが**アクティブ**になっていることを確認します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/a5f07fc7-466d-486e-a9a4-7a997de95bf0.png)

:::note info
アカウント間での承認対応はVPCピアリング設定でも行います。
:::

- 検索ボックスに**VPC**を入力します
- 検索結果より**VPC**をクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/d25239d0-65c9-412b-a26c-b901f4d0879f.png)

- 左側ペインの**Trangit Gatewayアタッチメント**をクリックします
- 画面上部の**Trangit Gatewayアタッチメントを作成**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/a16919e7-9fbd-43a1-852c-c240793c4737.png)

- 名前タグに**wstgwTgwVpcAttachmentPrivateVpc2**を入力します
- Trangit Gateway IDに**tgw-XX**を選択します
    - 今回のハンズオンでは一つだけでしか表示されません
- VPC IDに**wstgwPrivateVpc2**を選択します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/370a02d9-846c-4858-8c4f-8dcd7f9a09b3.png)

- サブネットIDに**wstgwPrivateVpc2TgwSubnet**を選択します
- 最下部の**Trangit Gatewayアタッチメントを作成**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/d1b167af-2d9f-47a4-a1eb-dbeba9881bcd.png)

- 一定時間経過後、作成したTrangit Gatewayアタッチメントの状態が**Available**になっていることを確認します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/44853f5e-0474-48a7-a7e5-1736c3499eed.png)

- 左側ペインの**ルートテーブル**をクリックします
- **wstgwRtbPrivateVpc2PrivateSubnet**のルートをクリックします
- 画面上部の**アクション>ルートを編集**をクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/f0c20bdf-ff64-4c4c-967e-02575280025e.png)

- **ルートの追加ボタン**をクリックするとルート追加ができます
- 赤枠の通りルートを追加します
- 追加したら**変更を保存**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/72143674-6910-4919-aeaf-aa5fff64884d.png)

- ルートが追加されていることを確認します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/bee9e214-fd68-4b37-ba29-88dd18265145.png)

それでは、アカウント１・アカウント２にあるEC2インスタンスの実行結果を見てみたいと思います。

:::note info
EC2インスタンスに以下パッケージをインストールしておくとPing実行が楽になります。
https://catalog.us-east-1.prod.workshops.aws/workshops/e0d1c19d-c80b-4695-a3fc-5c4a25132f47/ja-JP/4-tools/4-1-fping
:::

#### BoundaryVPC(192-168-1-100)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/e0b06a0f-d034-4c4c-96e6-e831fd4b3b60.png)

#### PrivateVPC1(10.0.1.100)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/ceb72691-39d1-405d-8f3c-49fa6965cf6e.png)

#### PrivateVPC2(10.1.1.100)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/558c5c04-1402-4dea-ae0b-6ca048600275.png)

とりあえず、各EC2インスタンス間とネットワーク抜けしていることは確認取れました。

### その３：ルートテーブルを使用してトラフィックを分離する

今までの構成はいわゆる**フルメッシュ構成**でしたが、
設計要件によっては**ハブとなるEC2を経由した通信**を求められる場合があります。（ハブandスポーク構成）

ハブandスポーク構成を実現するハンズオンを行っていきたいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/e6f4c6f7-ed59-4a0c-969b-c03c7eeee264.png)

:::note info
本セクションではアカウント1を操作します。
:::

- 左側ペインより**Trangit Gatewayルートテーブル**をクリックします
- 画面上部の**Trangit Gatewayルートテーブルを作成**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/93546c54-8b48-4feb-910f-994341f263e2.png)

- 名前タグに**wstgwRtbPrivateVPC**を入力します
- Trangit Gateway IDはプルダウンをクリックして表示されたものをクリックします
- 設定後、**Trangit Gatewayルートテーブルを作成**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/398982fa-8b78-4a6a-a759-095efa15b045.png)

- 左側ペインより**Trangit Gatewayアタッチメント**をクリックします
- 赤枠で囲っているアタッチメントIDをメモしておきます（削除するため）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/d25ba9fa-528d-4bea-adee-e23661455c3a.png)

- 左側ペインより**Trangit Gatewayルートテーブル**をクリックします
- Nameがブランクのルートテーブルをクリックします
- **関連付け**タブをクリックし先ほど控えたアタッチメントIDと同じものをチェック>関連付けを削除をクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/96aa52ce-391c-4b6d-9d4e-e4112dcebb2d.png)

:::note info
一個ずつしかアタッチメントは削除できません。
:::

削除完了後の関連付け状態

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/47b3fc73-9d7e-49f0-9122-0e045394fbf2.png)

- Nameがブランクでない方のルートテーブルをクリックします
- **関連付けを作成**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/c11c6ad7-9c95-4f88-822b-ce1137bbf7bc.png)

- 関連付けるアタッチメントのプルダウンを**VPC1で終わるもの**をクリックします
- **関連付けを作成**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/480751af-ee6e-4553-8433-cfbd31ba3cec.png)

- Nameがブランクでない方のルートテーブルをクリックします
- 画面上部の**アクション>静的ルートを作成**をクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/c9cf4e61-3341-4796-a2b4-e91544e8931e.png)

- CIRDに**0.0.0.0/0**を入力します
- アタッチメントのプルダウンを*VPCで終わるもの**をクリックします
- **静的ルートを作成**ボタンをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/596f97db-9496-49d4-8e4a-81e6bb907844.png)

- 同じ要領で**10.0.0.0/15**宛のルートは拒否する設定**を入れておきます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/2c9c1585-e284-4fc6-bbd2-c8fdfc87e9f0.png)

:::note info
今回の10.0.1.100と10.1.1.100のアドレス帯は10.0.0.0/15に含まれるため、
10.0.0.0/15をBlackhole処理すれば転送が拒否されます。
::::

それでは同じように疎通確認を行ってみます。

#### BoundaryVPC(192-168-1-100)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/ee11db93-55ed-443e-805a-1421c0961123.png)

#### PrivateVPC1(10.0.1.100)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/ba8a4b4a-f3e6-49e5-a0e1-a178c99c1e42.png)

#### PrivateVPC2(10.1.1.100)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/808a0b3c-c333-4410-ba79-4824127ad073.png)

:::note warn
ハンズオンと異なる挙動でしたので調査が必要だと思いました。
:::

## 所感

とりあえず一通りTrangit Gatewayの機能を理解するのであれば、本ハンズオンだけで事足りると思います。（うまくいかなかった個所は調査が必要ですが）

そのうえで、Trangit Gatewayを利用するユースケースとして次のようなパターンがあると考えています。

- 複数アカウントでのネットワーク利用がある場合
- ネットワークルートを一元管理したい場合
- トラフィックの監視について最低限行いたい場合

ただし、Trangit Gatewayのハンズオンを触ったうえで感じたこととして、**CloudFormatinoやCDKなどのIaCを活用しないと設定ミスが起きる可能性がある**といった印象を持ちました。（作業ステップ数が多いので）

また、詳細な挙動調査についても次回以降行っていきたいと思います。

最後まで記事をお読みいただきありがとうございました！！