本記事ではConoHa VPS Ver.3.0とTerraformを用いたインフラ管理の導入とシンプルなサーバーの構築方法を解説します。初めての方向けに環境構築や基礎的な設定手順を説明し、実際のサンプルコードを用いて進行します。
後編の「GPUサーバー構築と運用ガイド」も併せてご覧ください。
二部構成の本シリーズで、Terraformでのインフラ自動化を学ぶことができます。
目次
1. はじめに:ConoHaとTerraformの強力な組み合わせ
クラウドインフラの管理と自動化は、現代のITインフラの運用において非常に重要です。ConoHaは、日本国内で提供されているクラウドサービスの中でも、その使いやすさとコストパフォーマンスの高さから、多くのユーザーの皆様にご利用いただいております。
本記事では、ConoHa VPS Ver.3.0とTerraformを組み合わせることで、GPUサーバーを効率的に構築・管理する方法を二部構成でご紹介します。
本記事の目的と対象読者
この記事は、以下のような方々を対象としています。
- クラウドインフラの自動化に興味のある初心者から中級者のエンジニア
- DevOps実践者やインフラ管理者
- 高性能なGPU環境を手軽に構築したい研究者や開発者
- ConoHa VPSをより活用したい方
本記事ではConoHaやTerraformにあまり触れたことない方への解説も記載しています。TerraformからConoHaを利用するための公開リポジトリの使い方を手っ取り早く知りたい方はクイックスタート:1GBプランのサーバーをさくっと構築の章からご覧ください。
公開リポジトリの紹介とその特徴
本記事で使用するコードと設定ファイルは、以下のGitHubリポジトリで公開しています:
GitHub – skworks33/terraform-conoha-v3-api
ConoHa VPS Ver.3.0の魅力
2023年にバージョン3としてバージョンアップされたConoHa VPSには以下のような特徴があります。
- 時間課金制により必要な時だけ利用、初期費用なし
- 無料で利用可能なパブリックAPI
- ストレージがローカルストレージから分散ストレージとなり耐障害性向上
- NVIDIA GPU搭載サーバーが利用可能
Terraformによるインフラ管理のメリット
Terraformを使用することで、以下のようなメリットが得られます。
- インフラのコード化 (Infrastructure as Code)
環境構築の再現性が向上
バージョン管理によるインフラの変更履歴の追跡が容易 - 自動化と効率化
複雑なインフラ構成も短時間で構築可能
人的ミスの削減とプロビジョニング時間の短縮 - 状態管理
インフラの現在の状態を常に把握可能
複数人での協調作業がスムーズに
2. 環境構築:スムーズな開始のために
Terraformのインストール
以下はMacOSにHomebrewを使用してTerraformをインストールする際のコマンド例です。
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
Terraformのインストールについての詳細な手順は、公式ドキュメントを参照してください。
ConoHa APIの認証情報の取得
ConoHaのAPIを利用するためには、「ConoHaのアカウント作成 → APIユーザーの作成 → APIユーザーの認証情報取得」の手順を踏む必要があります。
まず、ConoHaに初めて触れる方はアカウント登録ページからアカウントを作成します。
アカウント作成完了後、ConoHa VPSのコントロールパネルにログインすると「バージョン切替」のボタンが左下に表示されますので、以下のように「新バージョン(Ver.3.0)」を選択します。
次に、左メニューの「API」を選択し、「+ ユーザー」をクリックします。
パスワードの入力を求められますので入力し「保存」をクリックします。
「成功しました」というポップアップが表示されればAPIユーザ作成の完了です。
最後に「API」情報画面からテナントやユーザなどの、Terraform利用に必要な各種認証情報をメモします。
これでConoHa APIの認証情報の取得は完了です。
OpenStack CLIのインストール (オプション)
OpenStack CLIは、本記事で紹介しているサンプルコードをカスタマイズしたい場合や、トラブルシューティングの際に活用できるツールです。詳細やインストール方法については後編末巻の「OpenStack CLIの活用シナリオとセットアップ方法」を参照してください。
3. Terraform基礎:ConoHaリソース管理の第一歩
このセクションでは、Terraformの基本的な概念とTerraformからConoHaを利用するための方法について解説します。
Terraformの主要な概念とHCL文法の簡単な解説
Terraformは、宣言型のアプローチでInfrastructure as Code (IaC) を実現可能なツールです。以下で主要な概念と、使用する設定言語であるHashiCorp Configuration Language (HCL) の基本について説明します。
主要な概念
- リソース (Resource) : インフラの構成要素 (例:仮想マシン、ネットワーク)
- プロバイダー (Provider) : 特定のクラウドプロバイダーやサービスとの連携を可能にするプラグイン
- モジュール (Module) : 再利用可能なTerraformコードの集まり
- 状態 (State) : Terraformが管理するリソースの現在の状態
HCL文法の基本
HCLは読みやすく書きやすい設定言語です。以下に基本的な構文を示します:
# リソースの定義
resource "openstack_compute_instance_v2" "example" {
name = "example-instance"
image_id = "uuid-of-image"
flavor_id = "flavor-id"
network {
name = "your-network"
}
}
# 変数の定義
variable "instance_count" {
type = number
default = 1
}
# 出力値の定義
output "instance_ip" {
description = "The IP address of the created instance."
value = openstack_compute_instance_v2.example.access_ip_v4
}
OpenStackプロバイダーの設定と主要リソースの定義方法
TerraformからConoHaのインフラを操作するには、OpenStack Providerを利用するのが最適です。ConoHaはOpenStackを基盤とし、OpenStackに準拠したAPIを提供しているためです。1
プロバイダーの設定
terraform {
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
version = "~> 2.0.0"
}
}
}
provider "openstack" {
domain_name = "gnc" # ConoHa VPS は gnc 固定
auth_url = var.conoha_v3_auth_url
tenant_name = var.conoha_v3_tenant_name
user_name = var.conoha_v3_user_name
password = var.conoha_v3_password
}
ブート用ボリューム作成の定義例
resource "openstack_blockstorage_volume_v3" "volume" {
name = var.boot_volume_name
size = 100
image_id = data.openstack_images_image_v2.image.id
volume_type = var.boot_volume_type_name
}
インスタンス (サーバー) 作成の定義例
resource "openstack_compute_instance_v2" "instance" {
name = var.instance_name
flavor_id = data.openstack_compute_flavor_v2.flavor.id
key_pair = openstack_compute_keypair_v2.keypair.name
security_groups = [
var.default_security_group
]
admin_pass = var.instance_root_password
metadata = {
instance_name_tag = var.instance_name
}
user_data = data.template_file.user_data.rendered
block_device {
uuid = openstack_blockstorage_volume_v3.volume.id
source_type = "volume"
destination_type = "volume"
}
depends_on = [
openstack_compute_keypair_v2.keypair,
openstack_blockstorage_volume_v3.volume
]
}
ステートファイルの重要性と効果的な管理手法
Terraformは現在のインフラ状態をステートファイル (terraform.tfstate
) に保存します。このファイルはリソースの現在の状態を記録しており、リソースの追跡、差分の検出、大規模なインフラの管理を効率化するために重要となります。
ステートファイルの管理には以下のポイントがあります。
- Backend Configuration: デフォルトではローカルディスクに保存されますが、オブジェクトストレージやTerraform Cloudなどのリモートに保存する方法があります。
- State Locking: Terraformには同時編集による競合を防ぐためにステートをロックする機能があります。
- Protecting sensitive data: ステートファイルには機密情報が含まれるため、用途によっては難読化や適切な保存先を選択する必要があります。
4. クイックスタート:1GBメモリプランのサーバーをさくっと構築
このセクションでは、公開リポジトリのサンプルコードを使用して、ConoHa上に基本的なサーバーを素早く構築する方法を説明します。
本手順で以下のリソースが作成されます。
- サーバーに接続するためのSSHキーペア
- サーバーに設定するセキュリティグループ
- 100GBのブートボリューム (OSイメージはUbuntu22.04)
- 上記リソースを用いた「2vCPU, 1GB RAM」のサーバー1台
またConoHaで作成するサーバーはcloud-initが稼働していますので、任意のuser-dataスクリプトを指定することで、サーバーの起動時に内部でスクリプトが実行され、サーバーのセットアップを自動化する事ができます。本サンプルでは以下の「ホスト名を任意の名前に設定する」スクリプトをTerraformから指定しています。
#cloud-config
merge_how:
- name: list
settings: [append]
- name: dict
settings: [no_replace, recurse_list]
runcmd:
- |
hostnamectl set-hostname ${hostname} --static
hostnamectl set-hostname ${hostname} --transient
1. リポジトリのクローン
まず、GitHubからリポジトリをクローンします。ターミナルで以下のコマンドを実行してください。
git clone https://github.com/skworks33/terraform-conoha-v3-api.git
cd terraform-conoha-v3-api
2. 認証情報の設定
ConoHa APIの認証情報の取得のセクションで取得したConoHaの認証情報とサーバー作成に必要な変数を環境変数として設定、またはterraform.tfvars
ファイルに記述します。2
オプション1: 環境変数の使用
環境変数を使用すると、機密情報をコードに直接記述せずに済みます。
export TF_VAR_conoha_v3_auth_url="https://identity.c3j1.conoha.io/v3"
export TF_VAR_conoha_v3_tenant_name="gnct********"
export TF_VAR_conoha_v3_user_name="gncu********"
export TF_VAR_conoha_v3_password="****************"
export TF_VAR_ssh_keypair_name="your-terraform-keypair-name"
export TF_VAR_ssh_keypair_public_key="ssh-rsa AAAAB3NzaC1yc2EAAAA..."
export TF_VAR_boot_volume_name="your-terraform-boot-volume-name"
export TF_VAR_instance_name="your-terraform-instance-name"
export TF_VAR_instance_root_password="****************"
オプション2: terraform.tfvarsファイルの使用
terraform.tfvars
ファイルを作成し、必要情報を記述します:
conoha_v3_auth_url = "https://identity.c3j1.conoha.io/v3"
conoha_v3_tenant_name = "gnct********"
conoha_v3_user_name = "gncu********"
conoha_v3_password = "****************"
ssh_keypair_name = "your-terraform-keypair-name"
ssh_keypair_public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAA..."
boot_volume_name = "your-terraform-boot-volume-name"
instance_name = "your-terraform-instance-name"
instance_root_password = "****************"
注意点:
terraform.tfvars
はGit等のバージョン管理システムへのコミットを防ぐため.gitignore
ファイルに追加することをお勧めします。ssh_keypair_public_key
には、SSH接続時に用いるキーペアの公開鍵の内容を記入してください。instance_root_password
は十分に強力なパスワードを設定してください3。
3. Terraformの初期化
プロジェクトディレクトリで以下のコマンドを実行し、Terraformを初期化します:
terraform init
4. 設定の確認
実行計画を確認して、作成されるリソースを事前に把握します:
terraform plan
5. アクションの実行
問題がなければ、以下のコマンドでアクションを実行します:
terraform apply
確認メッセージが表示されたらyes
と入力し、Apply complete!
が表示されるまで待ちます。
正常に完了した場合、最終的に以下のような出力になります。もし問題が発生した場合はエラー内容を確認してください。また、後編巻末のトラブルシューティングも参考にしてください。
Apply complete! Resources: 5 added, 0 changed, 0 destroyed.
Outputs:
instance_id = "4ac99b67-3e88-4c4c-a088-0aeb63dd1051"
instance_ip = "xxx.xxx.xxx.xxx"
6. 作成されたリソースの確認
Terraformの実行が完了したら、ConoHaのコントロールパネルにログインして、実際に作成されたリソースを確認してください。また、terraform show
コマンドを使用して、現在の状態を表示することもできます:
terraform show
7. クリーンアップ
作成したリソースが不要になった場合は、以下のコマンドで全てのリソースを削除できます:
terraform destroy
このコマンドを実行すると、Terraformで管理されているすべてのリソースが削除されます。
以上の手順で、ConoHa上に基本的なサーバーを素早く構築することができます。環境変数とterraform.tfvars
ファイルのどちらを使用するかは、セキュリティ要件や個人の好みに応じて選択してください。
5. まとめ
本記事ではConoHa VPS Ver.3.0とTerraformを組み合わせて、効率的にインフラを構築する方法について解説しました。
ConoHa VPSは、日本国内で提供されている使いやすいクラウドサービスです。一方で、TerraformはIaCを実現する強力なツールです。これらを組み合わせることで、リソースの作成・管理を自動化し、再現性の高い環境を構築できます。
後編「GPUサーバー構築と運用ガイド」では、NVIDIA L4 GPU搭載サーバーの構築例を用いて、より実用的なConoHaとTerraformの組み合わせ方を解説します。ぜひご覧ください。
- ConoHa独自の機能や仕様上の制約により、OpenStack Providerでは動作しない機能も存在します。 ↩︎
- 別の方法として、
terraform apply
コマンド実行時のオプションとして指定することもできます。詳しくは公式ドキュメントをご確認ください。未指定かつデフォルト値が存在しない場合はコマンド実行時に入力を求められます。 ↩︎ - ConoHaでは、公開鍵を指定してサーバー作成を行った際は自動的にSSH時のパスワード認証は無効となりますが、万が一有効化する場合に備え、セキュリティを考慮したパスワードが必要です。 ↩︎
後編
後編の「GPUサーバー構築と運用ガイド」も併せてご覧ください。
二部構成の本シリーズで、Terraformでのインフラ自動化を学ぶことができます。
ブログの著者欄
採用情報
関連記事
KEYWORD
CATEGORY
-
技術情報(433)
-
イベント(159)
-
カルチャー(36)
-
デザイン(17)
TAG
- 5G
- Adam byGMO
- AI
- AWX
- BIT VALLEY
- blockchain
- ChatGPT
- cloudnative
- CloudStack
- CM
- CNDO
- CNDT
- CODEGYM Academy
- ConoHa
- CS
- CSS
- CTF
- DC
- Designship
- Desiner
- DevSecOpsThon
- Docker
- DTF
- GitLab
- GMO Developers Day
- GMO Developers Night
- GMO GPUクラウド
- GMO Hacking Night
- GMO kitaQ
- GMO SONIC
- GMOアドパートナーズ
- GMOアドマーケティング
- GMOイエラエ
- GMOグローバルサイン
- GMOソリューションパートナー
- GMOデジキッズ
- GMOブランドセキュリティ
- GMOペイメントゲートウェイ
- GMOペパボ
- GMOリサーチ
- Go
- GTB
- Hardning
- Harvester
- HCI
- iOS
- IoT
- ISUCON
- JapanDrone
- Java
- JJUG
- K8s
- Kids VALLEY
- LLM
- MetaMask
- MySQL
- NFT
- NVIDIA
- OpenStack
- Perl
- PHP
- PHPcon
- PHPerKaigi
- QUIC
- Rancher
- RPA
- Ruby
- Selenium
- Spectrum Tokyo Meetup
- splunk
- SRE
- SSL
- Terraform
- TLS
- TypeScript
- UI/UX
- VLAN
- VS Code
- アドベントカレンダー
- インターンシップ
- オブジェクト指向
- オンボーディング
- お名前.com
- カルチャー
- コンテナ
- スクラム
- スペシャリスト
- セキュリティ
- ソフトウェアテスト
- チームビルディング
- ドローン
- ネットワーク
- プログラミング教育
- ブロックチェーン
- ミドルウェア
- モバイル
- ゆめみらいワーク
- リモートワーク
- 京大ミートアップ
- 基礎
- 多拠点開発
- 大学授業
- 宮崎オフィス
- 応用
- 技育プロジェクト
- 新卒
- 暗号
- 機械学習
- 決済
PICKUP