自分用のメモに
ゴール
- 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_v2
のname
の指定はダッシュボードに表示される名前ではなく、instance_name_tag
で指定しないといけませんでした。
flavorでg-512mbを使うときはimageに注意!
flavorでg-512mb
を使うとき、diskのサイズが足りないらしくエラーが出てしまうので、imageの末尾が-20gb
となっているやつを使う必要がありました。
キーペアはapiで作らないと取得できない!?
最初、*.tf
でopenstack_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を操作する