はじめに
terraformを使ってconohaでinstance生成でinstance生成が出来た。
これらの情報を元に勉強用instance生成のためのterraform資材を作成する
- machine specs
- OS : MacBook
- terraform: v0.11.13
- cloud : conoha VPS
Menu
本ページでは以下の内容をやっていきます。
- terraform変数管理
- access_key等の情報は別ファイルで持たせる
- image_id/auth_url等はtfファイルで管理
- 足りてない機能の拡充
- セキュリティグループ&ルール(port22のみ解放)を追加(tfファイル更新)
- 動作確認
- applyによるリソース作成
- ssh接続確認
- destoryによる削除
結論
最低限の変数化とtfファイルの作成は行えた。
セキュリティグループはドキュメントが充実してたので100割パクリでいけたのが嬉しい。
- 今後の課題
- ぅーん。これじゃGUI行かないとIPわからんちん
- 一応、stateファイル見ればconohaからの情報(instanceのID, IPaddress等)が判る
- image/flavorは切り替えやすい様に別ファイルで定義してスイッチ出来る様にしたい。(centOSもつかいたいねん)
- SecurityGroupとかは毎回作らずに使いまわしたい。
- 「有れば作らない」、「Destroy時には削除しない。」
- id_rsaファイルとかはinstance生成時に配置とかしておきたい
- 多分user_dataとかいうので頑張るんだと思う。
- ただ、ird_rsa.pubの情報もあんまgithubとかで管理したくないんよな。さてどうするか。
- 多分user_dataとかいうので頑張るんだと思う。
- moduleって何?レベルなので他の何かをもう少し覚える。
- ベストプラクティクスなのがあるはずなので探してみる。
terraformの変数管理
前述の方針に則り、以下の様にファイルを用意した。
- variable.tf作成
要点はmapを使用して分類ごとに定義する。
variable "general_setting" {
type = "map"
default = {
path_pub_key = "~/.ssh/id_rsa.pub"
auth_url = "https://identity.tyo2.conoha.io/v2.0"
}
}
variable "conoha_config" {
type = "map"
default = {
image_id = "de03b36d-21d8-4e58-9b8e-24581dda86fa"
flavor_id = "d92b02ce-9a4f-4544-8d7f-ae8380bc08e7"
}
}
- .conoha.rc作成
current dirにrc fileを作成。
APIキー等を定義してそれらをsourceコマンドで読み込んで使用する。
azuki@maki-mac:~/Deployments/terraform$ cat ~/.terraform/.conoha.rc
export TF_VAR_C_TENANT_ID=XXXXXXXXXXXXX
export TF_VAR_C_USER_NAME=YYYYYYYYYY
export TF_VAR_C_PASSWORD=DDDDDDDDDDDDDDDD
azuki@maki-mac:~/Deployments/terraform$
セキュリティ設定
openstack_networking_secgroup_rule_v2を元に作成。
- グループ追加
デフォルトで勝手に付いてくるruleは削除する様に設定
resource "openstack_networking_secgroup_v2" "azuki_sec_group" {
name = "azuki_sec_group"
delete_default_rules = true
description = "My neutron security group"
}
- ルール追加
ポート番号22のみ許可。つまりping(icmp)は受け付けないはず
resource "openstack_networking_secgroup_rule_v2" "azuki_secgroup_rule01" {
direction = "ingress"
ethertype = "IPv4"
protocol = "tcp"
port_range_min = 22
port_range_max = 22
remote_ip_prefix = "0.0.0.0/0"
security_group_id = "${openstack_networking_secgroup_v2.azuki_sec_group.id}"
}
- ルール適用
security_groupsに前述で定義しているgroup名を定義する
resource "openstack_compute_instance_v2" "deploy_basic_instance" {
name = "azuki-vps"
image_id = "${lookup(var.conoha_config, "image_id")}"
flavor_id = "${lookup(var.conoha_config, "flavor_id")}"
key_pair = "terraform-keypair"
security_groups = [
"azuki_sec_group",
]
metadata {
instance_name_tag = "azuki-vps"
}
}
動作確認
- applyによるリソース作成
sec_group&ruleの作成及びkeypairとinstance作成の計4Resource無事成功。
Apply complete! Resources: 4 added, 0 changed, 0 destroyed.
azuki@maki-mac:~/Deployments/terraform$
- ssh接続確認
ssh接続OK。pingは想定通り失敗してくれた。
azuki@maki-mac:~/Deployments/terraform$ ssh root@118.27.8.155
Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-141-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
0 packages can be updated.
0 updates are security updates.
root@118-27-8-155:~# exit
logout
Connection to 118.27.8.155 closed.
azuki@maki-mac:~/Deployments/terraform$
azuki@maki-mac:~/Deployments/terraform$ ping -c 5 -W 5 118.27.8.155
PING 118.27.8.155 (118.27.8.155): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
--- 118.27.8.155 ping statistics ---
5 packets transmitted, 0 packets received, 100.0% packet loss
azuki@maki-mac:~/Deployments/terraform$
- destroyによるリソース削除
sec_group&ruleの作成及びkeypairとinstance削除の計4Resource無事成功。
Destroy complete! Resources: 4 destroyed.
azuki@maki-mac:~/Deployments/terraform$
azuki@maki-mac:~/Deployments/terraform$
参考ページ
- 全般
- [Terraform で変数を使う]
(https://qiita.com/ringo/items/3af1735cd833fb80da75) - 変数系操作
- terraform resource
- openstack_networking_secgroup_rule_v2(グループの追加もここに書いてある)