为了使用conoha,创建terraform文件
首先
通过使用Terraform,在Conoha上成功创建了实例。
根据这些信息,创建用于学习目的的Terraform资料以生成实例。
– 机器规格
-
- OS : MacBook
-
- terraform: v0.11.13
- cloud : conoha VPS
菜单
本页面将介绍以下内容。
-
- 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とかで管理したくないんよな。さてどうするか。
moduleって何?レベルなので他の何かをもう少し覚える。
ベストプラクティクスなのがあるはずなので探してみる。
使用 Terraform 进行变量管理
根据前述的方针,按以下方式准备了文件。
创建variable.tf
要点是使用地图按分类进行定义。
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文件
在当前目录下创建一个rc文件。
定义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 创建。
– 添加群组
将自动添加的默认规则设定为删除。
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}"
}
– 应用规则
在安全组中定义前面提到的组名。
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创建资源。
成功创建了4个资源,包括sec_group&rule、keypair和instance。
Apply complete! Resources: 4 added, 0 changed, 0 destroyed.
azuki@maki-mac:~/Deployments/terraform$
– 验证SSH连接
ssh连接成功。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 的4个资源,并成功地删除了它们。
Destroy complete! Resources: 4 destroyed.
azuki@maki-mac:~/Deployments/terraform$
azuki@maki-mac:~/Deployments/terraform$
请参考该页面
-
- 全般
terraformを使ってconohaでinstance生成
Terraform職人入門: 日々の運用で学んだ知見を淡々とまとめる
Terraform で変数を使う
変数系操作
Terrafromで環境変数の値を利用する
mapを使った読みやすいterraform variablesの書き方
terraform resource
openstack_networking_secgroup_rule_v2(グループの追加もここに書いてある)