LoginSignup
14
8

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-09-20

自分用のメモに

ゴール

  • 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を操作する

14
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
8