AWS Wavelength を構築してみた

# はじめに

[AWS Wavelength](https://aws.amazon.com/jp/wavelength/) は、モバイルネットワークを利用したときに、従来のリージョンと比べてより低遅延でアクセスが出来る用になるサービスです。下のイメージ図がわかりやすいと思います。従来、5G や 4G ネットワークを使って AWS リージョンにアクセスすると、いわゆる「the internet」を経由していました。Wavelength で提供される Zone を利用することで、キャリアネットワークに閉じたアクセス経路になるため、より低遅延にアクセスが出来るようになります。

![image-20220227164650847.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/5d0085ed-c182-b022-1ec1-702e0561d72c.png)

引用 : https://www.slideshare.net/AmazonWebServicesJapan/aws-wavelength20210414



Wavelength のユースケースは、スマートファクトリー、コネクテッドカー、リアルタイムゲームなどが挙げられています。今回の記事では、Wavelength を使って KDDI 網の端末からアクセスを行ってみる内容になります。5G の端末は用意できなかったので、性能測定は行いませんのでご了承下さい。



# Wavelength を有効化

デフォルトでは、Wavelength は無効化されているので、有効化をしていきます。以前は事前承認が必要でしたが、オプトイン形式で簡単に有効化が出来るようになりました。

https://aws.amazon.com/jp/about-aws/whats-new/2021/05/aws-customers-now-self-opt-in-aws-wavelength-zones/

EC2 Dashboard を開き、右側にある Zones を選択します

![image-20220227101313221.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/9ebf4d2d-436b-87be-123d-cc1ec8ccecae.png)



Wavelength Zones にある Manage を押します

![image-20220227101332766.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/580ad131-906c-e3f8-1833-d41d313e800f.png)



KDDI のものを Enabled を押します

![image-20220227101358129.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/815da593-edfd-2242-1ccb-cb1690723fe7.png)



Enable と入力して Ok を押します

![image-20220227101421412.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/ae390a96-12e7-b8fe-8599-b4959fd70a5d.png)



自分の環境では、数分後 Enabled となりました

![image-20220227101502486.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/5afcaf93-c6cf-0253-be0e-f145a5b3ec1a.png)



# VPC の作成

Wavelength Zone の東京と大阪は、Tokyo Region の VPC に所属する Zone となります。[KDDI さんの Slideshare ](https://www.slideshare.net/ssuserc3e00b/aws-wavelength202012)から引用しますが、次の図にある通り、Wavelength Zone は、東京リージョンの VPC の中で、AZ と横並びに存在する Zone となっています。大阪リージョンの Wavelength Zone についても、大阪ではなく東京リージョンの VPC に所属する点は、若干紛らわしいので覚えておきましょう。

![image-20220227102321655.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/692eb35d-1713-681c-7c04-de0e0fd0af42.png)



VPC 内の AZ と Wavelength Zone は相互通信可能です。KDDI 網に参加している端末が、Wavelength の EC2 インスタンスにアクセスできます。(通常のインターネットの回線からは、ICMP しか通りません)

![image-20220227123742059.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/a54521b8-1cd7-3a80-2fcb-f6195970b29f.png)



ということで、まずは VPC を東京リージョン側で作成していきましょう。既に VPC を持っている場合は、既存のものを利用できます。

Create VPC を押します。

![image-20220227124304288.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/80290cae-9192-b092-95af-6dbb7c1e7910.png)



名前や CIDR を入力して、Create VPC を押します。

![image-20220227124506761.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/73f21d2d-ddf6-d38b-67f5-1d419aedd44e.png)



VPC が作成されました

![image-20220227124611441.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/807f3694-61f2-d7e2-fe01-7a10f1818df2.png)



# Subnet の作成

Wavelength Zone に紐づく Subnet を作っていきます。通常の AZ で作成するときの手順と同じです。

Create Subnet を押します。

![image-20220227124830247.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/ea95bd34-c964-3f6f-00fd-99a04ad5389a.png)



作成した VPC を選択します

![image-20220227124900669.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/e740405c-7afb-f441-66ba-09467741c28f.png)



パラメータを入れて Create Subnet を押します

- Subnet の名前
- **<u>Availability Zone の選択で、Wavelength Zone の東京を選ぶ</u>**
- CIDR を入力

![image-20220227125033397.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/e99c74a6-c77c-349f-418c-21dadcf495f6.png)



Wavelength Zone Tokyo の Subnet が出来ました。

![image-20220227125207633.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/1236b967-c7eb-d69c-3bd8-87ee70ef2e11.png)



同様に Wavelength Zone の Osaka 側も作成しました

![image-20220227125417155.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/81551cab-17b3-8d63-7c35-0a5c6827663f.png)



通常の Tokyo Region の AZ も作成しました

![image-20220227125528434.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/21900a7a-bdaa-2a0d-5c98-c184f609be14.png)



# Carrier Gateway の作成

Wavelength として必要な Carrier Gateway を作成します。KDDI さんのスライドを借りると、KDDI 網と接続するための Gateway です。通常の AZ だと Internet Gateway を使ってインターネットと通信をしますが、Wavelength の場合は、Carrier Gateway を使います。

![image-20220227102321655.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/13d0492f-7d0b-353e-2d61-348f6211971e.png)



それでは、Carrier Gateway を作成していきましょう。VPC のページで、Carrier Gateway の作成をしていきます。

![image-20220227130932346.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/3b55b116-90bc-07c3-b754-aaeb729df87b.png)



名前と VPC を選択して、Create を押します

![image-20220227131053921.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/71d39139-4552-5eaa-c0bb-87d3baacb6dc.png)



作成されました

![image-20220227131110633.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/d9a2eb0d-483d-f70e-f68b-8e2c29c3618d.png)



# Route Table を Subnet に紐づける

Carrier Gateway を作成したことで、自動的に 1 個の Route Table が作成されています。この Route Table を Subnet に紐づけます。

![image-20220227131321644.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/423eaa01-723f-c90e-ff30-769bed807fc7.png)



東京と大阪の Wavelength Zone に紐づく Subnet を選択します。

![image-20220227131438591.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/a9c77736-12bf-1856-6545-91e0ffe16b43.png)



# Wavelength Zone に EC2 インスタンスを作成

それでは、実際に Wavelengh Zone で EC2 インスタンスを作成していきます。通常の AZ と同様の操作で構築できます。EC2 のページで Launch instances を選択します

![image-20220227131837010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/02aafcc4-568e-45a0-2aa4-dfa51d86d5e2.png)



Amazon Linux 2 を選びます

![image-20220227134207840.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/f7448b8c-e191-3256-6093-0f1ba09bd603.png)



次に、EC2 インスタンスタイプを選んでいくのですが、Wavelength Zone で利用可能なインスタンスタイプについてです。次の URL で公開されています。

https://aws.amazon.com/jp/ec2/pricing/on-demand/

![image-20220227134313167.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/e3ef3fac-7b27-c059-1298-1ded90a5a7da.png)



上記の URL にある通り、次の 4 つを選択できます。

- t3.medium
- t3.xlarge
- g4dn.2xlarge
- r5.2xlarge



なお、上記以外の インスタンスタイプを選択すると、エラーになります。

![image-20220227134500706.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/0c039d77-a1aa-a351-e477-f061e435daeb.png)



今回は、t3.medium を選択していきます。

![image-20220227134817549.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/1383b78f-79ce-c438-fc61-e2ada05f0193.png)



VPC と Subnet を、Wavelength のものを選択します。

![image-20220227134923493.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/483c78ca-f2e8-9e5e-afe7-3231c6e7a5a5.png)



ストレージ容量などを選択して Next を押します

![image-20220227135037823.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/792e4e3a-8207-04a0-ac26-fdfa61c8d541.png)



Security Group の設定です。一旦、VPC 内部に限定したものを設定します。

![image-20220227135149773.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/80867c52-eb49-1430-7dbb-f8fd15f7b12e.png)



Launch を押します

![image-20220227135246266.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/beae1d71-ceab-2293-248b-1c4dc54f38ea.png)



キーペアを選択します。

![image-20220227135317479.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/f6c8aff1-195b-823a-73da-0fb9925b1e0e.png)



EC2 Instance が、Wavelength Zone 上で構成されました

![image-20220227135416002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/ae0ca5ed-ea89-c97b-d5a6-dfc183793deb.png)



同様に Wavelength Zone の大阪と、東京リージョン側の通常 AZ にも、EC2 Instance を作成しました

![image-20220227135802884.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/9f390893-07d1-a606-1a2e-2ee8e077b625.png)



# Wavelength Zone のインスタンスに SSH

Wavelength Zone に作成したインスタンスが正常に稼働しているか SSH をしてみましょう。自宅の PC はインターネットにつながっていますが、KDDI 網には接続していないので、東京リージョンの AZ に立てたインスタンスを踏み台にしてアクセスをしていきます。(記事では省略しますが、AZ 側ではInternet Gateway や Security Group など、SSH 接続をするための設定変更をしています)



## 東京AZ → Wavelength Zone 東京

Ping が正常に届きます。

```
[ec2-user@ip-10-10-100-102 ~]$ ping 10.10.0.55
PING 10.10.0.55 (10.10.0.55) 56(84) bytes of data.
64 bytes from 10.10.0.55: icmp_seq=1 ttl=64 time=5.56 ms
64 bytes from 10.10.0.55: icmp_seq=2 ttl=64 time=5.18 ms
64 bytes from 10.10.0.55: icmp_seq=3 ttl=64 time=5.16 ms
64 bytes from 10.10.0.55: icmp_seq=4 ttl=64 time=5.20 ms
^C
--- 10.10.0.55 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 5.161/5.278/5.560/0.178 ms
[ec2-user@ip-10-10-100-102 ~]$
```



Wavelength Zone 東京で稼働している EC2 インスタンスに、SSH が出来ました

```
[ec2-user@ip-10-10-100-102 ~]$ ssh ec2-user@10.10.0.55
Last login: Sun Feb 27 05:11:28 2022 from 10.10.100.102

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
```





## 東京AZ → Wavelength Zone 大阪

Ping が出来ています

```
[ec2-user@ip-10-10-100-102 ~]$ ping 10.10.1.248
PING 10.10.1.248 (10.10.1.248) 56(84) bytes of data.
64 bytes from 10.10.1.248: icmp_seq=1 ttl=64 time=11.6 ms
64 bytes from 10.10.1.248: icmp_seq=2 ttl=64 time=11.4 ms
64 bytes from 10.10.1.248: icmp_seq=3 ttl=64 time=11.4 ms
64 bytes from 10.10.1.248: icmp_seq=4 ttl=64 time=11.6 ms
64 bytes from 10.10.1.248: icmp_seq=5 ttl=64 time=11.4 ms
^C
--- 10.10.1.248 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 11.402/11.536/11.690/0.125 ms
[ec2-user@ip-10-10-100-102 ~]$
```



Wavelength Zone 大阪で稼働している EC2 インスタンスに、SSH が出来ました

```
[ec2-user@ip-10-10-100-102 ~]$ ssh ec2-user@10.10.1.248
Last login: Sun Feb 27 05:14:04 2022 from 10.10.100.102

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-10-10-1-248 ~]$
```



## WZ 大阪 → WZ 東京

なお、Wavelength Zone 東京と Wavelength Zone 大阪間は通信できません

```
[ec2-user@ip-10-10-1-248 ~]$ ping 10.10.0.55
PING 10.10.0.55 (10.10.0.55) 56(84) bytes of data.
^C
--- 10.10.0.55 ping statistics ---
8 packets transmitted, 0 received, 100% packet loss, time 7172ms

[ec2-user@ip-10-10-1-248 ~]$
```



# Elastic IP の作成

Elastic IP を作成して、Wavelength Zone の EC2 インスタンスに付与していきます。これを付与することで、KDDI 網から直接 Wavelength Zone のインスタンスへ接続が可能です。

Allocate Elastic IP address を選びます

![image-20220227142239099.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/6579466b-f367-2b0c-f5b8-d2d08ce2abeb.png)



Wavelength Zone 東京の Elastic IP を取得するために、Network Border Group の欄で、 `ap-northeast-1-wl1-nrt-wlz-1` を選びます。大阪の場合は `ap-northeast-1-wl1-kix-wlz-1` です。

![image-20220227142327958.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/3b432a79-c272-66c9-9396-19f744f04254.png)



Wavelength Zone の東京と大阪側の両方を取得しました

![image-20220227142541494.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/4ef1a0b9-0918-8b59-75dd-df0ca51b3a03.png)



取得した Elastic IP を選択して、EC2 インスタンスに Associate していきます

![image-20220227142908146.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/55e86a43-95d2-b5e8-94b0-2c353201a541.png)



Associate をします

![image-20220227142958188.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/5bb72ed9-0ef5-8214-503a-4a83e6a980e6.png)



同様に、Osaka の Elastic IP も EC2 インスタンスに付与します。



# 自宅から Ping で疎通確認

Wavelength Zone で稼働している EC2 インスタンスは、インターネットを経由しても ICMPであれば通信可能です。TCP/UDP はダメです。ここまでの設定の確認のため、自宅PC から Ping を行い、正常に通信できるか確認してみましょう

東京と大阪のそれぞれに Ping を打ちます。正常に疎通できれば、ここまでの設定は正しくできています。

```
ping <elastic IP>
```



# Nginx のインストール

Wavelength Zone でうごかしている 東京と大阪のEC2 インスタンスへ、Nginx を導入します

```
sudo amazon-linux-extras install nginx1 -y
```



root ユーザーにスイッチします

```
sudo su -
```



Index.html を書き換えます。`テストページです from Wavelength 東京` の文字は、大阪のときは書き換えます

```
cat <<'EOF' > /usr/share/nginx/html/index.html
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <title>テストページです from Wavelength 東京</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <style type="text/css">
            /*<![CDATA[*/
            body {
                background-color: #fff;
                color: #000;
                font-size: 0.9em;
                font-family: sans-serif,helvetica;
                margin: 0;
                padding: 0;
            }
            h1 {
                text-align: center;
                margin: 0;
                padding: 0.6em 2em 0.4em;
                background-color: #294172;
                color: #fff;
                font-weight: normal;
                font-size: 1.75em;
                border-bottom: 2px solid #000;
            }
            h1 strong {
                font-weight: bold;
                font-size: 1.5em;
            }
            /*]]>*/
        </style>
    </head>

    <body>
        <h1>テストページです from Wavelength 東京</h1>
    </body>
</html>
EOF
```



root から戻ります

```
exit
```



Nginx のサービスを起動します

```
sudo systemctl restart nginx
sudo systemctl enable nginx
```



# アクセス確認

KDDI 回線を持っている端末から、実際にアクセスしてみましょう。

まず東京です。正常にアクセスできました！環境的に 4G 回線になりますが、これでも正常にアクセスできています。なお、通常のインターネット回線からは接続できません。

![image-20220227164000524.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/b8c3a9c7-0669-705c-63e9-4456c47ea70f.png)



次に大阪です。これも同様にアクセスができました！

![image-20220227164050041.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/f7f8010d-4200-e1d2-33fc-9e920d3a3531.png)



# 検証を通じてわかったこと

- Wavelength Zone は、ネットワークキャリア網に参加している端末からアクセス可能
- 5G でも 4G でも接続可能
- the internet からはアクセスできない (ICMP のみ可能)
- Wavelength Zone の東京と大阪は、Tokyo Region の VPC に所属する
- Tokyo Region の AZ と、Wavelength Zone 間は問題なく通信可能
- Wavelength Zone の東京と大阪間は通信できない