1. はじめに
本記事執筆時点(2020年8月)では、IBM Cloud PortalからVPC版のVSIをプロビジョニングする際に、subnetの指定はできるがIPアドレスの指定をGUI画面で行うことはできない。
しかし、CLIやAPIで、primary_ipv4_address
フィールドを指定すれば、IPアドレスの指定はできる。参考API資料はこちら。
CLIでもibmcloud is instance-create
コマンドなどで実行できるのだが、その際にいちいち各種ID情報を取得してくるのが面倒である。そこで、今回は(多分一番簡単な方法だと思われる)APIを使ったやり方を紹介する。
(2020/09/18追記)
VSI注文後に、2つ目以降のvNICにIPアドレスを明示的に指定する方法は、こちらをご参照ください。
(2022/03/31追記)
今後はこちらを使う方が良さそうです。
IBM Cloud: VPCのVSIをIPアドレス指定(reserved IPを利用)でプロビジョニングする方法
2. 構成の作成とSample API callの生成
. IBM Cloud PortalからVPC版のVSIの注文画面で最終的にプロビジョニングしたい構成をいったんGUIベースで作った後、Get sample API call
を押下。
すると、以下のようなsample API callが出力されるので、このコードをコピーし、スクリプト(例えばvsi.sh)として保管する。
3. sample API callの修正
(省略)
"primary_network_interface": {
"name": "eth0",
"allow_ip_spoofing": false,
"subnet": {
"id": "02e7-ff96ff2a-fa27-4d88-b855-98fb85112636"
},
"security_groups": [
{
"id": "r022-1a2bb9f2-7647-4332-8a1b-eb925fb6e160"
}
]
},
(省略)
みたいになっている箇所を修正し、"primary_ipv4_address": "10.0.0.5",
みたいにIPアドレスを明示的に追加指定する。
(省略)
"primary_network_interface": {
"name": "eth0",
"primary_ipv4_address": "10.0.0.5",
"allow_ip_spoofing": false,
"subnet": {
"id": "02e7-ff96ff2a-fa27-4d88-b855-98fb85112636"
},
"security_groups": [
{
"id": "r022-1a2bb9f2-7647-4332-8a1b-eb925fb6e160"
}
]
},
(省略)
なお、指定するIPアドレスはここに記載されているとおり予約済みアドレスを避ける必要があることに注意。
例えば10.0.0.0/24
というsubnetでは以下が予約済みでありユーザーが利用することはできない。
10.0.0.0: Network address
10.0.0.1: Gateway address
10.0.0.2: reserved by IBM
10.0.0.3: reserved by IBM for future use
10.0.0.254: Broadcast address
4. IAMトークンの取得とスクリプトの実行
上記スクリプトを実行するためには、$iam_token
という変数名でIAMのトークンが設定されている必要があるので、以下でiam_token取得した後、シェルを実行してVSIをプロビジョニングする。(なお、IAM_TOKENの取得方法については、こちらも参考)
$ export iam_token=`ibmcloud iam oauth-tokens | awk '{printf $4}'`
$ sh vsi.sh
5. 結果の確認
指定した構成で作成された(今回の例では10.0.0.5
を指定したが、確かにそのとおりの構成になっている!)
#(参考)2つ目以降のInterfaceでのIPアドレスを指定する時。
1つ目のInterfaceでの指定と同様に"primary_ipv4_address"
を利用すれば良い。
"primary_network_interface": {
"name": "eth0",
"primary_ipv4_address": "10.0.0.100",
"allow_ip_spoofing": false,
"subnet": {
"id": "02e7-ff96ff2a-fa27-4d88-b855-98fb85112636"
},
"security_groups": [
{
"id": "r022-1a2bb9f2-7647-4332-8a1b-eb925fb6e160"
}
]
},
"network_interfaces": [
{
"name": "eth1",
"primary_ipv4_address": "10.4.0.100",
"allow_ip_spoofing": false,
"subnet": {
"id": "02e7-b50228c7-2431-4854-ad4c-b68f6c7382a7"
},
"security_groups": [
{
"id": "r022-1a2bb9f2-7647-4332-8a1b-eb925fb6e160"
}
]
}
],