先日のConoHaでMCサーバの続きとして、ConoHa API等を用いてVPS契約〜MCサーバの起動までの自動化を試みる。
手順
参考: ConoHa ドキュメント: APIでVPSを作成する
APIユーザの作成
まずは、APIユーザをダッシュボードから作成しておく。これはマニュアルの操作が必要。 どうやら、1つのユーザしか作成できない模様。
APIユーザを作成すると、以下が表示される。
- ユーザー名
- ユーザーID
- パスワード
また、後々必要になる「テナント名」「テナントID」も控えておく。
トークンの発行
https://identity.c3j1.conoha.io/v3/auth/tokensにリクエストを送信する。
curl -i -X POST -H "Accept: application/json" -H "Content-Type: application/json" -d "{\"auth\": {\"identity\": {\"methods\": [\"password\"],\"password\": {\"user\": {\"id\": \"ユーザーID\",\"password\": \"パスワード\"}}},\"scope\": {\"project\": {\"id\": \"テナントID\"}}}}" https://identity.c3j1.conoha.io/v3/auth/tokens実行すると、トークン情報が含まれたレスポンスが返ってくる。
HTTP/1.1 201 Created
server: nginx
date: Mon, 31 Mar 2025 02:25:57 GMT
content-type: application/json
content-length: 2769
x-subject-token: トークン情報
vary: X-Auth-Token
x-openstack-request-id: req-から始まるリクエストID
cache-control: no-store
x-frame-options: DENY
x-content-type-options: nosniff
ボリュームタイプ名の確認
参考: ConoHa ドキュメント: ボリュームタイプ一覧取得
参考: APIでVPSを作成するによると、ボリュームタイプの一覧を取得しているので、それに従う。既知の場合はスキップしていいのだろうか…
curl -X GET \
-H "Accept: application/json" \
-H "X-Auth-Token: \"トークン情報\"" \
https://block-storage.c3j1.conoha.io/v3/テナントID/types成功すると、以下のレスポンスが返される(整形した)。
{
"volume_types": [
{
"description": "..." or null,
"id": ボリュームタイプID,
"is_public": true,
"name": ...,
"os-volume-type-access:is_public": true
}, ...
]
}
必要なのはnameがc3j1-ds02-bootのものなので、そのidを控えておく。
(ちなみに、初回実行時はトークンの有効期限が切れていたため、以下のレスポンスが得られた。)
{"code": 401, "error": "Failed to validate token"}
イメージIDの確認
ここではUbuntuを使いたいため、nameで指定する。指定しなければ、全てのimageの情報が返される。 Ubuntuには現在バージョンが24.04, 22.04, 20.04(すべてx86_64)があるが、24.04を指定する。
一度リストアップした後、欲しい情報のnameがvmi-ubuntu-24.04-amd64だと判明したので、イメージ情報を取得する。
curl -X GET \
-H "Accept: application/json" \
-H "X-Auth-Token: \"トークン情報\"" \
https://image-service.c3j1.conoha.io/v2/images?name=vmi-ubuntu-24.04-amd64&status=activeレスポンスは以下の通り(整形済み、一部...に置換)。
{
"images": [
{
"status": "active",
"name": "vmi-ubuntu-24.04-amd64",
"tags": [
"display_order=140",
"service_type=vps",
"dst_name=Ubuntu",
"dst_version=24.04"
],
"container_format": "ovf",
"created_at": "2024-07-10T03:17:53Z",
"disk_format": "qcow2",
"updated_at": "2024-07-10T03:20:59Z",
"visibility": "public",
"self": "/v2/images/イメージID",
"min_disk": 30,
"protected": false,
"id": イメージID,
"file": "/v2/images/イメージID/file",
"checksum": ...,
"os_type": "linux",
"os_hash_algo": "sha512",
"os_hash_value": ...,
"os_hidden": false,
"owner": ...,
"size": 3260874752,
"min_ram": 1024,
"schema": "/v2/schemas/image",
"virtual_size": null,
"architecture": "x86_64"
}
],
"schema": "/v2/schemas/images",
"first": "/v2/images?name=vmi-ubuntu-24.04-amd64"
}
ブートストレージの作成
curl -X POST \
-H "Accept: application/json" \
-H "X-Auth-Token: \"トークン情報\"" \
-d "{\"volume\": {\"size\": 100,\"description\": null,\"name\": \"boot-volume-nametag\",\"volume_type\": \"c3j1-ds02-boot\",\"imageRef\": \"イメージID\"}}" \
https://block-storage.c3j1.conoha.io/v3/テナントID/volumesセキュリティグループの確認
事前にダッシュボードで作成した(ConoHaでMCサーバ)セキュリティグループを適用する。その名前を控えておく。
curl -X GET \
-H "Accept: application/json" \
-H "X-Auth-Token: トークン情報" \
https://networking.c3j1.conoha.io/v2.0/security-groups?name=セキュリティグループ名レスポンス(整形済み、一部...に置換)
{
"security_groups": [
{
"id": セキュリティグループID,
"name": セキュリティグループ名,
"tenant_id": テナントID,
"description": セキュリティグループの説明,
"shared": false,
"security_group_rules": [
{
"id": "26078b8b-6097-46e6-ba86-c89578022c73",
"tenant_id": テナントID,
"security_group_id": セキュリティグループID,
"ethertype": "IPv4",
"direction": "ingress",
"protocol": "tcp",
"port_range_min": 22,
"port_range_max": 22,
"remote_ip_prefix": ...,
"remote_group_id": null,
"project_id": テナントID
},...
],
"project_id": テナントID
}
]
}
プランのフレーバーIDの確認
今回はメモリ2GBのプランを選択する。
参考記事によると、2GBのプランのflavor名は「g2l-t-c3m2」なので、一覧の中から当てはまるものを探す。
curl -X GET \
-H "Accept: application/json" \
-H "X-Auth-Token: トークン情報" \
https://compute.c3j1.conoha.io/v2.1/flavorsレスポンス(整形済み、一部...に置換)
{
"flavors": [
{
"id": フレーバーID,
"name": フレーバー名,
"links": [
{
"rel": "self",
"href": ...
},
{
"rel": "bookmark",
"href": ...
}
]
},...
}
ちなみに、名前で指定するやり方はなく、IDが分かればエンドポイントの末尾に/v2.1/flavors/フレーバーIDのように指定すれば詳細な情報が見える。
curl -X GET \
-H "Accept: application/json" \
-H "X-Auth-Token: $AUTH_TOKEN" \
https://compute.c3j1.conoha.io/v2.1/flavors/フレーバーID{
"flavor": {
"id": フレーバーID,
"name": フレーバー名,
"ram": ...,
"disk": 0,
"swap": "",
"OS-FLV-EXT-DATA:ephemeral": 0,
"OS-FLV-DISABLED:disabled": false,
"vcpus": ...,
"os-flavor-access:is_public": true,
"rxtx_factor": 1.0,
"links": [
{
"rel": "self",
"href": ...
},
{
"rel": "bookmark",
"href": ...
}
]
}
}
どのプランがどのフレーバー名を示しているかの情報は見つからなかった。
g2l-t-c3m2のc3m2はCPUが3つとメモリが2GBだと推測できるが、他のg2lやtは何を指しているんだろうか。
追記: 記事によると、
lはLinuxでwはWindowsみたい。
ちなみに、c3m2は
g2l-t-c3m2g2l-p-c3m2g2w-t-c3m2g2w-p-c3m2
の4種類が見つかった。
VPSの作成
これまで得た情報でVPSを作成します。この操作は料金が発生するので注意。
必要な情報を以下に示します。
- トークン情報
- フレーバーID(料金プラン)
- サーバーのrootのパスワード(自由に設定して良い)
- 作成したブートストレージのID
- セキュリティグループ名
- 公開鍵の名前(ダッシュボードに登録済みのもの、optional)
curl -X POST \
-H "Accept: application/json" \
-H "X-Auth-Token: トークン情報" \
-d "{\"server\": {\"flavorRef\": \"フレーバーID\",\"adminPass\": \"サーバーのrootのパスワード\",\"block_device_mapping_v2\": [{\"uuid\": \"ブートストレージのID\"}],\"metadata\": {\"instance_name_tag\": \"test-vps\"},\"security_groups\": [{\"name\": \"セキュリティグループ名\"}],\"key_name\": \"公開鍵の登録名\"}}" \
https://compute.c3j1.conoha.io/v2.1/servers成功したレスポンス(一部...に置換)
{
"server": {
"id": サーバのID,
"links": [
{
"rel": "self",
"href": ...
},
{
"rel": "bookmark",
"href": ...
}
],
"OS-DCF:diskConfig": "MANUAL",
"security_groups": [],
"adminPass": rootのパスワード
}
}
前回のイメージを適用したい
力尽きたので、また今度。