2020.10.08

月額1200円で使えるDevOpsサンドボックス環境を作ってみた

TL;DR

  • 次世代システム研究室に配属された新卒メンバーにOJTを実施した
  • DevOpsを入門レベルから学習するための環境をConoHaで構築した
  • 同じ環境をConoHaに構築するための手順とサーバー構成の簡単な説明

はじめに


こんにちは。次世代システム研究室のT.Tです。

今年は次世代システム研究室に新卒メンバーが2名配属されました。GMOインターネットグループの合同研修と次世代システム研究室のWebアプリケーション開発研修を経て、8月からは自分と同じプロジェクトでOJTを行うことになり、DevOpsをテーマとしたOJTを実施する計画になっていました。

今回初めて私が一部指導員を担当することになりタスクのアサインを検討しましたが、プロジェクトが安定運用フェーズにあるため業務上のタスクだけでは新規開発部分をカバーするのが難しい状況でした。

Webアプリケーション開発研修ではサーバー構築や非機能要件含めて基本的な部分は完了しているので、これまでの研修を補完する形で新規開発用の開発研修を考えて導入してみました。内容としては以前紹介した平和チャレンジにマッチングAPIを追加開発するもので、マイクロサービスやAPI設計、RDBのテーブル設計、Ansibleでの環境構築を盛り込んで実施しました。

マッチングAPIの開発は計画通り完了して、これまでの研修やOJTを通してDevOpsのエッセンス的な部分は一通り学べたかと思います。さらにこれから開発を継続して公開サーバーにデプロイして運用すると、よりDevOpsの学習になるだろうと考えてそのための環境を構築しました。一つの環境だけではなく、複数の環境で動くようにサーバーを構成して、アプリケーションに新機能を開発してそれぞれの環境で稼働させるところが第一歩になると捉えています。

本ブログでは、そのDevOpsの第一歩となる部分を学習するための環境を構築する手順を紹介したいと思います。

稼働環境の紹介

今回紹介する手順で構築した環境がここで稼働しています。
http://150.95.214.93:8080/
※個人アカウントのConoHaの環境です。

ソースコード

開発研修で開発したものと合わせてpinfu-challenge-advanceに公開しています。

サーバー構成

稼働する環境はローカル環境と本番環境だけにして学習しやすい構成にしています。サーバー構成もゲームを動かすための最小構成で、ciサーバーとgameサーバーが1台ずつの構成です。以前投稿したブログでは商用環境を想定した内容で入門レベルとしては少し複雑な感もあったので必要最低限の構成を採用しました。用意する公開サーバーも2台で済むのでコスト面でも大きなメリットがあります。

構成要素

今回の構成ではアプリケーション(平和チャレンジ)も稼働するようにしています。このアプリケーションはサーバーサイドはDockerとDocker Compose、Golang、Pythonで動くので低スペックのサーバーインスタンスでも稼働できます。特に個人でサーバーを立てる場合はサーバーコストを抑えられるのは助かりますね。

環境構築


ローカル環境構築

VirtualBoxとvagrantがインストールされている環境で利用できます。macOS系で構築する際のコマンドです。
$ git clone https://github.com/pekkott/pinfu-challenge-advance.git pinfu-challenge
$ cd pinfu-challenge
$ vagrant up
$ vagrant ssh ci
$ cd pinfu-challenge
$ ansible-galaxy install -p roles -r requirements.yml
$ ansible-playbook -i hosts.local provision.yml --become

ConoHa環境構築


サーバー追加
ConoHaのコンソールにログインしてサーバーを作成します。

最小のサーバースペックはなんとCPU 1Core、メモリ 512MB、SSD 30GBです。十分なスペックなのでこのサーバーインスタンスで、ciサーバーとgameサーバー用に2台作成します。1台辺り月額620円と安価です。

プライベートネットワークの設定
ConoHaのサポートサイトのプライベートネットワークを使うを参考にしてプライベートネットワークを構築します。playbookはciサーバーが192.168.0.1、gameサーバーが192.168.0.2の構成を前提とした内容になっているので、リポジトリの設定で使う場合はこのIPアドレスに合わせる必要があります。

sshの設定
ciサーバー
# ssh-keygen -t rsa -b 2048 -C "[email protected]"
gameサーバー
# vi ~/.ssh/authorized_keys
ciサーバーの/root/.ssh/id_rsa.pubの内容をコピーして保存する

rootのsshパスワード認証の無効化
ciサーバー、gameサーバー
# vi /etc/ssh/sshd_config
# sed -i -e 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
# systemctl restart sshd

管理ユーザー作成
ciサーバー
# yum install -y git ansible
# git clone https://github.com/pekkott/pinfu-challenge-advance.git pinfu-challenge
# cd pinfu-challenge
# ansible-playbook -i hosts.production create-ci-account.yml --become
# cd ..
# rm -rf pinfu-challenge

管理ユーザーのssh設定
クライアント環境
$ ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa_pinfuchan -C "[email protected]"
~/.ssh/id_rsa_pinfuchan.pubの内容をciサーバーの/home/pinfuchan/.ssh/authorized_keysに追記する
~/.ssh/configに接続先を設定する(XXX.XXX.XXX.XXXはciサーバーのグローバルIPアドレス)
Host XXX.XXX.XXX.XXX
    HostName XXX.XXX.XXX.XXX
    User pinfuchan
    IdentityFile ~/.ssh/id_rsa_pinfuchan
    Port 22

サーバー構成のデプロイ
$ ssh XXX.XXX.XXX.XXX
$ ssh 192.168.0.2
$ git clone https://github.com/pekkott/pinfu-challenge-advance.git pinfu-challenge
$ exit
$ git clone https://github.com/pekkott/pinfu-challenge-advance.git pinfu-challenge
$ cd pinfu-challenge
$ ansible-galaxy install -p roles -r requirements.yml
$ ansible-playbook -i hosts.production provision.yml --become

まとめ

DevOpsを継続して学習する環境を用意することが出来ました。今後は週末有志で集まってブラッシュアップタスクをこなしながら引き続きスキルアップしていく予定です。そして、この環境の素晴らしいところはなんと言ってもインストラクターぽい人がただで付いてくることです。その実ただの老害かもしれませんが(笑)。

次世代システム研究室では、アプリケーション開発や設計を行うアーキテクトを募集しています。アプリケーション開発者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。

皆さんのご応募をお待ちしています。

参考リンク

  • Twitter
  • Facebook
  • はてなブックマークに追加

グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。

 
  • AI研究開発室
  • 大阪研究開発グループ

関連記事