Edited at

TerraformでConoHaのインスタンスを立ててみる

More than 1 year has passed since last update.

自分用のメモに


ゴール


  • ConoHaのインスタンスが作れる

  • ConoHaのインスタンスを消せる

  • 作ったインスタンスに公開鍵認証のsshで接続できる


試した環境

Ubuntu16.04 Desktop


構築手順


terraformコマンドを使えるようにする

ワンライナー

sudo echo ; zcat <( CURRR_VER=$(curl -s https://checkpoint-api.hashicorp.com/v1/check/terraform | jq -r -M '.current_version') ; curl -q "https://releases.hashicorp.com/terraform/$CURRR_VER/terraform_${CURRR_VER}_linux_amd64.zip" ) | sudo tee /usr/local/bin/terraform > /dev/null ; sudo chmod +x /usr/local/bin/terraform


api情報を調べる

ConoHaにログインして、"API"の画面から以下を調べておく


  • ユーザー名

  • パスワード

  • テナントID

  • エンドポイント

※ユーザー名とパスワードは"APIユーザー"のところで作れる


apiトークンを手に入れる

curl -X POST \

-H "Accept: application/json" \
-d '{"auth":{"passwordCredentials":{"username":"<ユーザー名>","password":"<パスワード>"},"tenantId":"<テナントID>"}}' \
https://identity.tyo2.conoha.io/v2.0/tokens \
| jq ".access.token.id"


使えるimage(OSのディストリビューション)の一覧を確認する

curl -X GET \

-H 'Content-Type: application/json' \
-H "Accept: application/json" \
-H "X-Auth-Token: <apiトークン>" \
https://compute.tyo2.conoha.io/v2/<テナントID>/images \
| jq ".images | sort_by(.name) | map(.name)"

今回はvmi-ubuntu-18.04-amd64-amd64-20gbを使いました


使えるflavor(VPSのプラン)の一覧を確認する

curl -X GET \

-H 'Content-Type: application/json' \
-H "Accept: application/json" \
-H "X-Auth-Token: <apiトークン>" \
https://compute.tyo2.conoha.io/v2/<テナントID>/flavors \
| jq ".flavors | sort_by(.name) | map(.name)"

今回はg-512mbを使いました


main.tfファイルを作る(例)

provider "openstack" {

user_name = "<ユーザー名>"
password = "<パスワード>"
tenant_name = "<自分のテナントID>"
auth_url = "https://identity.tyo2.conoha.io/v2.0" # ConoHaのエンドポイント(Identity Service)
}

resource "openstack_compute_keypair_v2" "keypair" {
name = "terraform-keypair" # 好きな名前
public_key = "<自分の共有鍵>"
}

resource "openstack_compute_instance_v2" "basic" {
name = "basic" # 好きな名前
image_name = "vmi-ubuntu-18.04-amd64-amd64-20gb"
flavor_name = "g-512mb"
key_pair = "terraform-keypair" # "openstack_compute_keypair_v2"のnameと合わせる

security_groups = [
"gncs-ipv4-ssh",
] # 22番ポートを許可する

metadata {
instance_name_tag = "test" # ダッシュボードではこの名前が表示される
}
}


terraformの実行

まずは初期化

terraform init

構築

terraform apply

※これを実行した時に表示されるCreation complete after 33s (ID: *****************)のIDをメモしておくこと

削除

terraform destory


ssh接続の確認

ipアドレスを確認

curl -X GET \

-H "Accept: application/json" \
-H "X-Auth-Token: <apiトークン>" \
https://compute.tyo2.conoha.io/v2/<テナントID>/servers/<terraform apply実行時のID> \
| jq ".server.addresses"

出てきたipv4アドレスで接続してみる

ssh root@<IPアドレス>

パスワードなし(公開鍵認証)でログインできるはず


ハマりどころ


ダッシュボードに表示されるサーバ名が指定できない

openstack_compute_instance_v2nameの指定はダッシュボードに表示される名前ではなく、instance_name_tagで指定しないといけませんでした。


flavorでg-512mbを使うときはimageに注意!

flavorでg-512mbを使うとき、diskのサイズが足りないらしくエラーが出てしまうので、imageの末尾が-20gbとなっているやつを使う必要がありました。


キーペアはapiで作らないと取得できない!?

最初、*.tfopenstack_compute_keypair_v2を記述せずにそのまま既存のkey_pairを使おうとしましたが、既存のkey_pairはwebからポチポチして作ったやつだったからか、うまく読み込んでくれませんでした。

なので、apiからkey_pairの作成をしたところ読みこむようになりました。

結局、key_pairもterraformで作れることがわかったので、あんまり問題にならないと思います。


ConoHaに書いてあるエンドポイントが違う

security_groupsで指定するやつは、Network Serviceのエンドポイントで確認できるのですが、コンソールで記載してあるエンドポイントが違っていて、取得できず困りました。


  • 記載されているエンドポイント→https://networking.tyo2.conoha.io

  • うまくいったエンドポイント→https://networking.tyo2.conoha.io/v2.0


参考

ConoHa API Documantation


OpenStack Provider


How to install Terraform in Ubuntu


TerraformでConoHaを操作する