dshimizu/blog

アルファ版

MSPJマイグレーションコンペティション2017winter へ参加してきました

2017年2月18日に開催され 「MSPJマイグレーションコンペティション2017winter」 というイベントに参加してきました。

リンク先にある通り、日本MSP協会のコンペティショングループという団体が主催する、次世代を担う若手運用技術者同士の交流・競争を通して日本のMSP事業者における運用技術の向上を目指したコンペティションです。

イベントの内容としては、イベント参加者で当日にランダムに3-4人くらいでチーム分けして、お代として用意された古いシステムをいい感じに新しい環境へ移行することを競う競技会です。 MSP事業者の運用技術向上とありますが、MSP事業者でなくても参加できますが若手(30歳以下)限定のイベントです。

参加しようと思ったきっかけ

ざっくりは以下のような動機からでした。

  • イベント内容が面白そう
  • 運用技術者の方との交流
  • 自分のスキルが社外の周りの方々と比べてどの程度なのか把握したい

競技内容について

競技の流れについては以下のようなものでした。

お題

10:00にイベントが開始され、まずお題についての説明がありました。

お客様が業務利用している想定の、とある社内システムを移行します。 具体的には今回は AWS で動く redmine その他もろもろを Azure へいい感じに移す、というものでした。 connpassのページにも記載されていますが、移行において以下のような要望が出されます。

<要望的な何か>
- 今の環境を新しい環境に完全移行して欲しいです。
- 実施した内容と結果については報告が欲しいです。
- システムを止めるときは利用者に告知が必要なので連絡が欲しいです。
- 昔から使っている古い環境なので、バージョンアップして欲しいです。
- できれば利用者に影響を出さないように切り替えたいです。
- できればサーバに関する資料があるとありがたいです。
- できれば今はまったくバックアップを取っていないのでバックアップを取れるようにしたいです
- できれば今後は利用者が増えるのでシステムを冗長化したいです。
- できれば新しいインフラエンジニアに引継ぎするために必要な情報がまとまっていると嬉しいです。

<担当者のコメント>
- 前任のインフラエンジニアが辞めちゃったのでこのシステムもう分かる人がいなくって。
- 結構前から使っているので環境も古くなっているみたいで、OSのサポートがもうすぐ切れるって話を聞いたものですから、セキュリティとか色々心配で何とかしたいんです。
- みんなこのシステムを結構便利に使っていてくれているようだから、システムを切り替えるときは連絡しないとなぁ。
- そうそう、近々新しいインフラエンジニアが入社予定だから、その方に引き継げるようになっていると嬉しいですね。

チーム分け

その後、当日の参加者でランダムにチーム分けされました。 今回のイベントでは参加者が27名だったので、3人×9チームに分かれて競技が開始されました。

競技開始

競技説明、チーム分けがあった後、各チームごとに席に着き、本イベント用のslackにチームごとのプライベートChannel、現行システムの情報、移行先となる情報が渡され、10:30頃から競技が開始されました。

移行元現行環境情報

移行元となる現行システムについて以下の情報が発注者(運営側)から渡されました。

- AWS上で某社の業務管理のためにチケット管理システムが動いています。
  - チケット管理システムには各チームの環境ごとにDNSレコードが登録されています。
- 社内利用のため、外部には公開していません。
- チケット管理システムはRedmine及びDBサーバ、チケットの更新通知を受信するためだけのメールサーバが動いています。
- Linuxサーバ1台
  - 運営用のxxxというユーザーがあります。移設先環境ではこのユーザに対しても考慮してください。
- 移設先環境含めた各種アクセス環境は別途運営より提示します。

上記のような情報に加えて、AWSコントロールパネルのアカウント情報、AWS EC2インスタンスDNS/OSアカウント情報が渡されました。

移行先環境情報

移行先については以下のような情報が発注者(運営側)から渡されました。

- Azureの環境を用意しています。
- Azureの利用には特に制約ありませんが、良識の範囲で使い、あまりに大量にリソースを作成したりはしないでください。
- 新サーバには元サーバと同じくxxxユーザを作成し、同じ鍵でログイン/パスワードなしでsudo su できるようにしてください
- 競技時間中であれば稼働サーバはいつ切り替えていただいても構いませんが、切り替えタイミングは連絡をしてください。
- コンペティション運営が移設後の環境を確認できるように必要な情報を提示してください。
  - 運営はxxxというユーザーを使っています。
  - 必要と思われる通信を許可してください。

上記のような情報に加えて、Azureコントロールパネルのアカウント情報が渡されました。

競技開始

現行環境確認

10:30頃から競技開始して、まず現行環境の確認から始めました。 OSのディストリビューションとそのバージョン, Webサーバソフトウェアとそのバージョンや設定、DBソフトウェアとそのバージョンや設定、Redmineのバージョン、その他動いているプロセスやログなど・・・ ホワイトボードが提供されたので、メモやらを描きながら検討を進めました。

ちなみにうちのチームに渡された現行環境の主な情報は以下でした。 (他チームもまったく同じだったのか不明)

プラットフォーム: AWS EC2インスタンス1台
OS: CentOS 5.3
Webサーバ: Apache2.2.3-22(CentOS標準RPMパッケージ)
DB: MySQL5.0.77-3(CentOS標準RPMパッケージ) 
    テーブルのストレージエンジンはInnoDB
Ruby: 1.9.3p194
Redmine: 2.0.0 (Apacheとの連携はPassenger)
Postfix: 2.3.3-2.1
Dovecot: 1.0.7-7
DNS: Route53で管理。設定管理は発注者(運営側)のみ。
その他: セキュリティグループで幾つかのIPからのSSHやHTTP, IMAPのアクセス制限

設計と構築

現行環境について一通り情報を集めきったところで、新環境をどうするかの検討を始めました。 時間がかなり限られていること、チームメンバーはみんなAzureの経験が少なかったことを考慮して、要望の中でMustな(必須でやるべき)要望と、Shouldな(した方が良い)要望を分けて、まずはMustな(必須でやるべき)要望をきちんと満たすように進め、余力があればShouldな(した方が良い)要望に取り掛かることにしました。

新しい環境はCentOSの当日時点の最新7.3で作ることにしました。 まずはメインのRedmineですが、普通に全部最新にして構築することも考えはしましたが、Redmineなんか1から構築するのは色々辛いし、チームメイトの中にdocker-compose に長けた方がいらっしゃったのもあって、Dockerを使って置き換えることにしました。関連ソフトウェアのバージョンは必ずしも最新ではなく、使うDockerイメージに依存する形としました。 Redmineには定期的にGetのリクエストが来ていましたが更新処理はなさそうだったので、Redmineのバックアップは任意のタイミングで公式の データのバックアップ方法 | Redmine.JP を元に実施してもらいました。

PostfixDovecotはそのままCentOS 7.3のパッケージでインストールしました。Postfixは現行設定をほぼコピーするだけでよかったですが、Dovecotは新バージョンで設定ファイルが細分化されていたりと若干ややこしかったです。元の環境のDovecotはなぜかプロセスが停止しており謎でしたが、とりあえずpam認証の設定を行いました。

細かいところではOSユーザの移行やNTPの設定、logwatchが動いていたのでその設定などもやりました。 データの定期バックアップもDockerの仕組みを使ってやりました。Docker便利。

合わせて作業報告書などのドキュメントの作成も進めました。

切り替え

途中色々はまったりしましたが、16時前くらいにAzure環境で1台のマシンでの環境構築を終え、もうあとは細かいところの確認とドキュメントの詰めに注力しながら、16時半前くらいにDNS切り替えを発注者(運営側)に依頼して切り替えを行いました。 一部Azureのセキュリティグループの設定に不備がありましたが、切り替えに伴うダウンタイム発生の可能性も伝えていたので何とか乗り切れました。 その後報告書を提出し、そのまま17:00を迎え競技は終了・・・。

競技終了/結果/懇親会

一応結果は準優勝でした。 振り返ると色々抜け漏れはありましたが、チームで協力して、短い時間の中ではMust要件を満たしつつ多少細かいところもケアできたのが良かったのかなと思ってます。

懇親会で1位だったチームの話を聞くと、AzureのLBやAzureFSをうまく使って良い感じの冗長化をやっていたとのことで、あの短い時間の中でAzureのサービスを使って良い感じにシステムを構築されたのはすごいなと思いました。 他のチームの方々の話も聞きましたが、結構Dockerを使っていたチームが多かったのは意外で印象的でした。

まとめ

限られた時間の中で必要な作業を行うには、技術スキルだけでなく優先度の判断や時間の使い方もかなり重要になり、オペレーションに関する幅広いスキルが求められました。また、当日その場で組まれたチームでの競技ということで競技開始当初は多少戸惑いもありました。しかしながらチームメイトにも恵まれて、優勝こそ逃しましたが、まずまず良い結果になってよかったです。 ただ、もっと長い時間がありきちんとした要望のある実務においては、システム構成などもっとしっかりとしたものにする必要があり、そのような状況ではまた求められるスキルはより正確で高度なものになるかと思います。今後も幅広い運用関連技術の向上に向けて精進したいと思います。

最後にイベント運営の日本MSP協会の皆様、チームメイトの皆様、参加者の皆様ありがとうございました。