Linode API を使って VLAN Only のインスタンスを作成する (Akamai)

Akamai クラウド・コンピューティング・サービス の Virtual LAN (VLAN) を使うと、プライベートネットワークを組むことができます。本記事は API を使って VLAN のみを利用するインスタンスを作成する方法を記載します。VLAN については下記の記事を参照ください。

https://qiita.com/110hideki/items/aead6f2bc9ff1563641c

記事では Cloud Manager を使った例を紹介していますが、今回は API を使った例を紹介します。公式ドキュメントは下記となります。

https://www.linode.com/docs/products/networking/vlans/guides/manage-vlans-using-linode-api/



# 前提条件
本記事では前回の記事 ([VLAN を設定する](https://qiita.com/110hideki/items/aead6f2bc9ff1563641c)) で作成した VLAN に対して、新たに 10.0.0.4/24 のインスタンスを作成する例です。

![VLAN_Diagram-today-scope.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264188/5b5037a2-ec57-b6e3-aec7-c0fcc58e66a5.jpeg)

# Postman で API をコールする

Linode API を確認するには Postman を利用すると便利です。下記の記事も参考にしてください。

https://qiita.com/110hideki/items/91491d684cd794632652

新しいインスタンスを作成するには ``POST /linodes/instances`` を使います。Postman を使った例です。

![postman-create-linode-instance.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264188/f4314b62-ea06-4b2e-6e6d-8e642b6bb5ac.jpeg)

Body に JSON ファイルを渡す必要があります。

![postman-create-linode-instance-body2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264188/bad75a61-5c86-97b1-3ae6-53350c4d32ef.jpeg)

Libode Create API の詳細は公式ドキュメントを参照してください。

https://www.linode.com/docs/api/linode-instances/#linode-create

下記の JSON は今回利用したサンプルデータです。
```json
{
	"booted": true,
	"label": "linode-ap-south-04-dmz",
	"type": "g6-nanode-1",
	"region": "ap-south",
	"group": "",
	"image": "linode/ubuntu22.04",
	"initrd": null,
	"run_level": "default",
	"virt_mode": "paravirt",
	"interfaces": [{
		"purpose": "vlan",
		"ipam_address": "10.0.0.4/24",
		"label": "myVLAN"
	}],
	"tags": [
		"vlan"
	],
	"root_pass": "YOUR_PASSWORD"
}
```
``interfaces`` に ``"purpose": "public"`` を登録しないことが重要です。

200 OK のステータスが返ってきたら成功です。応答ボディは以下のようになります。
```json
{
    "id": 45733969,
    "label": "linode-ap-south-04-dmz",
    "group": "",
    "status": "provisioning",
    "created": "2023-05-02T04:37:42",
    "updated": "2023-05-02T04:37:42",
    "type": "g6-nanode-1",
    "ipv4": [
        "192.53.XXX.XXX"
    ],
    "ipv6": "2400:8901::f03c:93ff:fe20:4763/128",
    "image": "linode/ubuntu22.04",
    "region": "ap-south",
    "specs": {
        "disk": 25600,
        "memory": 1024,
        "vcpus": 1,
        "gpus": 0,
        "transfer": 1000
    },
    "alerts": {
        "cpu": 90,
        "network_in": 10,
        "network_out": 10,
        "transfer_quota": 80,
        "io": 10000
    },
    "backups": {
        "enabled": false,
        "available": false,
        "schedule": {
            "day": null,
            "window": null
        },
        "last_successful": null
    },
    "hypervisor": "kvm",
    "watchdog_enabled": true,
    "tags": [
        "vlan"
    ],
    "host_uuid": "ce43a1484d96d475e52c04f5a8af944260173951"
}
```

Postman では Code snippet を作成する機能があり、cURL を選択すれば下記のコマンドを作成してくれます。

```
curl --location 'https://api.linode.com/v4/linode/instances' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_TOKEN' \
--data '{
	"booted": true,
	"label": "linode-ap-south-04-dmz",
	"type": "g6-nanode-1",
	"region": "ap-south",
	"group": "",
	"image": "linode/ubuntu22.04",
	"initrd": null,
	"run_level": "default",
	"virt_mode": "paravirt",
	"interfaces": [{
		"purpose": "vlan",
		"ipam_address": "10.0.0.4/24",
		"label": "myVLAN"
	}],
	"tags": [
		"vlan"
	],
	"root_pass": "YOUR_PASSWORD"
}'
```

# 作成後の Cloud Manager 
API 経由で新規インスタンスが作成されれば、 eth0 デバイスに VLAN のアドレスが割り当てられています。Configurations タブで確認します。
![api-vlan-only-instance-config2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264188/5fa5f5f1-28c4-4aa3-3e4d-9612314afd60.jpeg)


![api-create-linode-instance-eth0.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264188/52a874f4-f09d-fe47-7aa4-94341d4abe9f.jpeg)

Configurations タブでは Public IP が表示されていますが、安心してください。
![api-create-linode-instance-publicip.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264188/377e309a-a0ad-f7e1-444d-e3989c5d5acd.jpeg)

仕様上、Public IP はインスタンスに割り当てられていますが、eth デバイスに割り当てられていないため、Public IP は有効でありません。

```
% ping 192.53.174.146
PING 192.53.174.146 (192.53.174.146): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
```

```
% ping6 -c 5 2400:8901::f03c:93ff:fe20:4763
PING6(56=40+8+8 bytes) 240b:10:a060:b100:7c28:5fc7:baa:a162 --> 2400:8901::f03c:93ff:fe20:4763

--- 2400:8901::f03c:93ff:fe20:4763 ping6 statistics ---
5 packets transmitted, 0 packets received, 100.0% packet loss
```

同じ VLAN のホストにログインすれば、VLAN に割り当てられた IP アドレスに到達できます。
```
root@linode-ap-south-01-front:~# ping 10.0.0.4
PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data.
64 bytes from 10.0.0.4: icmp_seq=1 ttl=64 time=0.579 ms
64 bytes from 10.0.0.4: icmp_seq=2 ttl=64 time=0.345 ms
64 bytes from 10.0.0.4: icmp_seq=3 ttl=64 time=0.487 ms
```

# まとめ
API でも簡単に VLAN only のインスタンスを作成できます。VLAN を使うとプライベートネットワークを構成できるので、セキュアな環境を提供できます。VLAN 内のネットワークの転送は課金されません。また、高速なネットワーク通信も可能となります。

作成したインスタンスから外部に接続するには下記の記事を参考にしてください。

https://qiita.com/110hideki/items/851291f0d33acc577a82