この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
TL;DR
Webエンジニアは自分が自由に弄れるサーバを持っておこう。初心者への推奨はIDCFの500円サーバだ。
サンドボックス・サーバのススメ
Webエンジニアが知っておきたいことはなんだろう? アプリケーションのプログラミング、サーバやネットワークにミドルウェアといったインフラ、セキュリティ、フロントエンドの技術、UI/UXデザイン、有り体に言うと全部だ。せいぜい優先度の差があるだけだ。
だから、やはり手持ちの自由に使えるサンドボックスのようなサーバが一つくらいは必要だ。業務では触らない技術を試しに使ってみることも出来るし、Botやバッチを作成して働かせておくことも出来る。何より自分でWebサービスを構築することが出来るしね。
DockerやVagrant/VBといった仮想環境があるから問題ない? ネットワークに接続されて稼働し続けるサーバと仮想環境で発生し得る問題はかなり違うし、何より実際にサーバとして動いていないとサービスを稼働させてられない。だから仮想環境だけでは不十分だ。
ところで今やってるのは保守業務? それとも新規開発?
もし前者ならまさに業務と一致しているワケだ。やらない理由なんかある? 気になるあの問題を解決する新しい方法を自分の環境で先に検証してみよう。それに普段から実稼働するサーバに触れているから気軽に挑戦することが出来るでしょ?
もし後者なら業務では経験できない稼働サーバに触れることが出来るというワケだ。やらない理由なんかある? 特に新卒なら「プログラムを書いてローカルで動いた」のと「サーバ上で安定して実際に稼働し続ける」のにどれくらいの差があるかを知っておこう。
どこで作る?
色々な選択肢があるから自分で調べて選んでも良い。が、ここでは新卒エンジニアなど初心者向けということを前提にIDCF Cloudの500円サーバを勧めておく。
理由は3つある。「安い」「Iaas」「定額」だ。逆に他の有力な選択肢を選ばなかったことから説明していこう。
[Amazon EC2]
いいよね。無料期間が長いし、他のプロダクトグループもたくさんあって出来ることの幅が非常に大きい。それにAWSの採用率は業務でも高いし、これからも高まっていくだろう。ただ、初心者向けかというとそうじゃない。
特に定額ではない、というところがちょっと勧めにくかった。「間違って重ったい処理を走らせてCPU使ってしまった…」「しばらく放っておいたら脆弱性をつかれてBTC掘られてた…」といったミスで数百万の請求書に焦るのはよく聞く話である。オモチャには間違ってもいい奴を選びたい。
[Heroku]
いいよね。何も考えなくてもデプロイするだけで動くなんて最高じゃないか。Webサービスをデプロイしたいだけならね。OSやネットワークのレベルで操作できないPaaSはサンドボックスの趣旨から外れる。
というわけで、定額のIaaSで最小構成が有料期間でも安い、という基準でIDCF 500円サーバが出て来る。人間、何故か電子書籍の漫画を思いつきで購入は出来てもサーバに500円の課金をするのに抵抗感が生じてしまうこともあるが振り切ろう。
あ、念のため注意しておくとIDCFも完全な定額ではない。ネットワークの転送量が月に3TB超えてしまうとそれ以上は従量課金される。ネットワークの転送量でそれほど金額が飛び抜けることもないだろうが……。ちなみにこの課金は外部へ転送した分だけが計算される。例えばIDCF内に設置したDBサーバ – アプリサーバ間の通信などは関係ない。
最低限のセキュリティ
ここでは基本的な注意だけを書いていく。後は自分で調べたり転んで怪我をすることで覚えてほしい。
とりあえず、SSHだ。最低限やっておくことはポート番号をデフォルトから変えておくこと。これをサボってデフォルト設定のままSSH接続を許可していると驚くほど頻繁に何者かがマシンへの攻撃を試してくる。
ついでパスワード認証もやめたほうが良い。基本は公開鍵による認証だ。特に理由がなければIPも制限して自宅などからだけ接続可能にしておこう。その他の細かい設定は調べれば定番設定が出て来るはずだ。
いくらオモチャでも侵入されると他のサーバへの攻撃で踏み台にされたり色々と困ったことになる。備えよう。
その他にはログインの記録/認証失敗ログも発生時にメール通知したり、あるいはログイン時に簡単に参照できるようにスクリプトを組んだりしておくと便利かもしれない。(lastコマンドとか/var/log/secure*をgrep/tailするだけで出来る)
慣れてきたらmuninやnagiosといった監視ツールも使ってみよう。もしくは自分で作ってもよい。業務では許されない車輪の再発明やオレオレツールの作成が好きなだけ出来る。そう、サンドボックスのサーバならね。
予防も必要だが早めに気づくことで傷を浅く済ませることが出来る。
何をすればいい?
なんでも。ブログサービスを構築して自分のブログを書いてもいいし、お気に入りのサイトを監視してSlackへ通知するBotを作ってもいいし、身内専用のgitサービスを稼働させてもいいし、どこでも接続できる開発環境として扱っても良い。
自分がサーバを持っている、ということが普段見落としている「やってみたいこと」を気づかせるんだ。ハンマーを持っていれば何だって釘に見える、と言うようにサーバを持てば何でもコードで解決できることに見えてくる。サーバを持とう。