FJcloud実践
開発者向けFJcloud-Vスタートアップガイド~サーバー構築編~
こんにちは。日本仮想化技術株式会社の水野です。
本記事ではFJcloud-Vをはじめて使う人、主にクラウドの経験がない開発者を対象に、Linuxサーバーを立ち上げる手順を紹介します。
目次
クラウドで開発・検証環境を作るメリット
クラウド最大のメリットは、必要なリソースをオンデマンドに確保し、不要になったら使い捨てられるという柔軟さです。そして費用も使ったリソース分だけを支払えばよいため、最適化がしやすく無駄がありません。
こうした特徴からクラウドは、「一時的に利用したい開発・検証環境」と、すこぶる相性がよいプラットフォームだと言えるでしょう。
筆者はOps寄りのエンジニアのため、インフラの視点から見てみましょう。
最近ではサーバーの構築はIaCでコード化したり、アプリケーションはコンテナとしてパッケージングするのが一般的で、サーバー上で直接コマンドを実行する機会は減ってきています。ですがいきなりAnsibleのコードや、Dockerfileを書き始めるわけではありません。まずは従来通り手動で環境のセットアップやアプリのインストールを行ってみて、最適な手順を確立してから、その手順をコードに落とし込むというプロセスを踏むのが一般的です。
ここで大切なのが、「最適な手順の確立」の部分です。ここでは何度も試行錯誤を行うことになりますが、その試行は毎回、クリーンな環境で行わなくては意味がありません。つまりまっさらな環境を、高速に、何度でも立ち上げられる必要があります。そして、その要望にマッチするのがクラウドというわけです。
オンプレミスじゃだめなの?
自分が作業するだけの環境なら、わざわざお金をかけてクラウド上に構築しなくてもいいのでは? と思う人もいるでしょう。
もちろんオンプレミスに開発サーバーを用意しても構いません。ですが物理サーバーの調達や継続運用はコストもかかる上、なにより面倒です。また一時的な使用に留まるのであれば、使い終わってからの後片付けも頭の痛い問題です。
オンプレミス開発・検証環境の問題点
オンプレミスの物理サーバーでは、OSのインストールにもひと手間かかります。前述の通り、検証はクリーンな環境で何度も試行錯誤を行う必要があります。そのため新規のサーバーを高速に起動できたり、クリーンな状態のスナップショットに巻き戻す機能がないと、効率が非常に悪くなります。つまりオンプレミスを使う場合であっても、なんらかの仮想化基盤の導入は必須だと言ってよいでしょう。
開発用PCに、VirtualBoxなどの仮想化ソフトウェアをインストールして利用する手もあります。ですが開発用PCに、サーバーの動作に割くリソースの余裕があるとは限りません。また最近のMacのように、ARMアーキテクチャのPCを使っている場合は、そもそもx86_64のサーバーが動かしづらいケースもあるでしょう。
クラウドは、こうした細かい課題をすべて解決してくれます。そしてコスト面でも、構築や後片付けの手間も含めて考えれば、クラウドの方が有利だと言えるでしょう。
FJcloud-Vにサーバーを立ち上げよう
FJcloud-Vで検証作業用のLinuxサーバーを構築
それでは検証作業に使うLinuxサーバーを用意するというシナリオで、FJcloud-V上にサーバーを立ち上げてみましょう*1。
まずコントロールパネルにログインします。続いて、リージョンを選択します。画面右上のプルダウンをクリックして、サーバーを立てるリージョンを選択してください。
今回はeast-1を選択しました。別のージョンを使いたい場合は、適宜読み替えてください。
続いて左上のプルダウンから、サービスを選択します。「コンピューティング・コンテナ」→「コンピューティング」を開いてください。
サーバーの作成は「コンピューティング」から行います。
サーバー作成
左側のペインに、コンピューティングサービスが持つ機能の一覧が表示されます。「サーバー」をクリックしてから、「サーバー作成」をクリックします。
「サーバー作成」ボタンをクリックします。
サーバー作成ダイアログが開くので、ここからは対話的にサーバーの設定を行っていきます。まずサーバーのOSを選択します。ここではUbuntu Server 22.04 LTSを選択しました。
OSは自身の目的に合ったものを選びましょう。ここではUbuntuを選択しました。
続いてサーバーを作成するゾーンとタイプを選択します。ゾーンはどこでも構いませんが、今回はeast-11を選択しました。今回はあくまで紹介が目的なので、サーバータイプも一番安価なc2r-smallとしました。
east-1以外のリージョンを選択している場合は、ゾーンもそれに合わせて変わります。適宜読み替えてください。またサーバータイプは検証したい内容に合わせて、CPUやメモリ量から最適なものを選ぶようにしましょう。
サーバーの設定
続いてのサーバー設定は、少しやることが多いです。まず「サーバー名」を入力します。コントロールパネル上に複数のサーバーが並んでも判別がつくよう、わかりやすい名前にしましょう。「メモ」にサーバーの少し詳しい説明を書いておくのもおすすめです。
「料金プラン」は「従量」と「月額」が選択できます。意味は文字通りで、従量は1時間単位での課金、月額は1ヶ月単位での課金となります。そのため一時的な利用であれば、絶対に「従量」を選択してください。ただし24時間起動しっぱなしにする場合、月額の方がやや安価になる価格設定となっています。そのため絶対に停止しないことが確実なサーバーであれば、お得な「月額」を選択するのがよいでしょう。
SSHキー作成
このサーバーにログインするためのSSHキーを作成します。「SSHキー」の右側にある「+」ボタンをクリックしてください。キーの名前とパスフレーズを入力してから「SSHキー作成」をクリックします。
作成したタイミングで、ブラウザがSSHキーの秘密鍵をダウンロードします。これは厳重に保存しておいてください。
ファイアウォール作成
サーバーに適用するファイアウォールを作成します。 「ファイアウォール」の右側にある「+」ボタンをクリックしてください。 「グループ名」には、わかりやすい名前をつけます。ここではサーバー名と同じにしました。
続いて「INルール追加」をクリックして、サーバーに対して許可するインバウンドの通信ルールを設定してください。なおOUTルールは設定しなくて構いません。OUTルールがひとつも設定されていない場合は、すべてのアウトバウンド通信が暗黙的に許可されます。ルールの追加が完了したら、「ファイアウォール作成」をクリックします。
ここでは自宅からの通信のみを許可するよう、プロトコルに「ANY」、接続元種別に「接続しているIP」を設定しました。
ネットワークの設定
最後にネットワークを設定します。今回のサーバーはインターネットに直接接続するため、グローバルIPアドレスを「自動割り当て」にしておきます。
別途付替IPアドレス(固定のIPアドレス)を確保して、サーバーに関連づけることもできます。サーバーのIPアドレスが変化するのは好ましくないため、長期間運用するのであれば検討してみましょう。
最後に「確認」をクリックすると、最終的な確認画面が表示されます。これで問題なければ「作成する」をクリックしてください。
設定に間違いがないか確認しておきましょう。特に料金プランには注意しましょう。
サーバーを起動
しばらく待つと、サーバーが起動します。サーバーに割り当てられたグローバルIPアドレスに対し、先ほどダウンロードした秘密鍵を使ってSSH接続すれば、あとは自由にサーバーを操作することができます。サーバーへのSSH接続については、以下のドキュメントも参照してください。
これだけで、自由にいじって使い捨てられるサーバーが手に入りました。しかもかかるコストは1時間あたりたったの3円です*2。倉庫から余ったPCを持ち出してきてセットアップしたり、開発用PCのメモリを仮想マシンに割くくらいなら、もうクラウドでいいや、ってなりますよね!?
Terraformで自動化してみた
クラウドでのサーバーの構築は非常に簡単ですが、何度も繰り返すとなると、手作業でのポチポチは面倒です。また手作業ゆえ、ミスが起きることもあるでしょう。そのためこうした作業はコード化、自動化するのが定石です。本記事ではオマケとして、前述のサーバーを構築するTerraformのコードを紹介します*3。
SSH鍵とファイアウォールを作成した上で、サーバーを起動するTerraformのコードは以下になります。
terraform {
required_version = "~> 1.6"
required_providers {
nifcloud = {
source = "nifcloud/nifcloud"
version = "~> 1.12.0"
}
}
}
locals {
region = "jp-east-1"
zone = "jp-east-11"
image_name = "Ubuntu Server 22.04 LTS"
instance_type = "c2r-small"
instance_accounting_type = "2"
private_key_name = "nifcloud_rsa"
private_key_algorithm = "RSA"
private_key_rsa_bits = 4096
source_ip = "203.0.113.1" # ソースIP、適宜書き換えてください
}
provider "nifcloud" {
region = local.region
}
data "nifcloud_image" "ubuntu" {
image_name = local.image_name
}
resource "nifcloud_instance" "ubuntu" {
instance_id = "ubuntu"
availability_zone = local.zone
image_id = data.nifcloud_image.ubuntu.id
key_name = nifcloud_key_pair.ubuntu.key_name
security_group = nifcloud_security_group.ubuntu.group_name
instance_type = local.instance_type
accounting_type = local.instance_accounting_type
network_interface {
network_id = "net-COMMON_GLOBAL"
}
network_interface {
network_id = "net-COMMON_PRIVATE"
}
}
resource "nifcloud_key_pair" "ubuntu" {
key_name = "ubuntu"
public_key = base64encode(tls_private_key.rsa.public_key_openssh)
}
resource "local_sensitive_file" "private_key" {
content = tls_private_key.rsa.private_key_openssh
filename = "${path.module}/${local.private_key_name}"
file_permission = "0600"
}
resource "tls_private_key" "rsa" {
algorithm = local.private_key_algorithm
rsa_bits = local.private_key_rsa_bits
}
resource "nifcloud_security_group" "ubuntu" {
group_name = "ubuntu"
availability_zone = local.zone
}
resource "nifcloud_security_group_rule" "ubuntu" {
security_group_names = [nifcloud_security_group.ubuntu.group_name]
type = "IN"
protocol = "ANY"
cidr_ip = local.source_ip
}
上記コードをmain.tf
という名前で保存した上で、以下のコマンドを実行してください。なおTerraformはバージョン1.6以上を想定しています。またクラウドを操作するためのクレデンシャルは、環境変数でエクスポートしておいてください。
$ export NIFCLOUD_ACCESS_KEY_ID=アクセスキー
$ export NIFCLOUD_SECRET_ACCESS_KEY=シークレットキー
$ terraform init
$ terraform plan
$ terraform apply
無料トライアルのご紹介
ただいま国産クラウド「FJcloud-V」を無料でお試しできます。詳しくはこちら。
*1:ここでは執筆の都合上、FJcloud-Vではなくニフクラを使っています。とはいえ作業の内容は同じになります。
*2:c2r-smallの場合です。
*3:ただしあくまで「わかってる人」向けのオマケのため、Terraformの使い方やクレデンシャルの発行方法などについては省略します。そういうこともできるんだ、程度に流し読みしていただければ幸いです。