Fujitsu Cloud Direct ブログ

初心者エンジニア向け技術ブログ

【開発者向け】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接続については、以下のドキュメントも参照してください。

docs.nifcloud.com

これだけで、自由にいじって使い捨てられるサーバーが手に入りました。しかもかかるコストは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

Terraformについては、こちらのレポートも合わせて参照してください。

blog.clouddirect.jp.fujitsu.com

無料トライアルのご紹介

ただいま国産クラウド「FJcloud-V」を無料でお試しできます。詳しくは↓のバナーをクリックしてください。

*1:ここでは執筆の都合上、FJcloud-Vではなくニフクラを使っています。とはいえ作業の内容は同じになります。

*2:c2r-smallの場合です。

*3:ただしあくまで「わかってる人」向けのオマケのため、Terraformの使い方やクレデンシャルの発行方法などについては省略します。そういうこともできるんだ、程度に流し読みしていただければ幸いです。