3月15日 - 作業備忘録
目的
- 自前の MacBook Air (2018) が非力なため、開発環境として心許ない。
- Web サーバーとして ConoHa を借りているが、常時必要なわけではなく、費用を抑えておきたい。
- ConoHa + Terraform を使って、簡単に
apply/destroyできる環境を整える。
実施したこと
開発環境のセットアップ
hashicorp/terraformの Dev Container をセットアップした。- コンテナイメージ
hashicorp/terraformを GitHub にて確認したところ Alpine Linux であったため、postCreateCommandをapt-getからapkに変更した。 apkにてcurlコマンドをインストールし、Terraform の設定時に利用する OS イメージの一覧を取得するスクリプト (get_imagelist.sh) を作成した。- OS の SSH 鍵を設定するために
mk_key.shも合わせて作成した。
- コンテナイメージ
Terraform 設定
以下の記事を参考に、Boot Volume・Security Group・SSH Key を設定し、Compute Instance を作成する Terraform 設定を行った。
参考記事: https://developers.gmo.jp/technology/47155/
ポイント1: 認証情報の管理
terraform.tfvars にパスワードなどの情報を集約した上で、.gitignore にてファイルがリポジトリにアップロードされないよう設定した。
conoha_v3_auth_url = "https://identity.c3j1.conoha.io/v3"
conoha_v3_tenant_name = "XXXXXXXXXXXX"
conoha_v3_user_name = "XXXXXXXXXXXX"
conoha_v3_password = "XXXXXXXXXXXX"
ポイント2: Security Group への IP アドレス制限の追加
Security Group のモジュールに remote_ip_prefix を追加し、接続元 IP アドレスによるアクセス制限を設けた。
修正前
resource "openstack_networking_secgroup_rule_v2" "secgroup_rule" {
count = length(var.rules)
direction = var.rules[count.index].direction
ethertype = var.rules[count.index].ethertype
protocol = var.rules[count.index].protocol
port_range_min = var.rules[count.index].port_range_min
port_range_max = var.rules[count.index].port_range_max
security_group_id = openstack_networking_secgroup_v2.secgroup.id
}修正後
resource "openstack_networking_secgroup_rule_v2" "secgroup_rule" {
count = length(var.rules)
direction = var.rules[count.index].direction
ethertype = var.rules[count.index].ethertype
protocol = var.rules[count.index].protocol
port_range_min = var.rules[count.index].port_range_min
port_range_max = var.rules[count.index].port_range_max
remote_ip_prefix = var.rules[count.index].remote_ip_prefix
security_group_id = openstack_networking_secgroup_v2.secgroup.id
}