少し表現は異なるのですが「PaaSは勝手にアップグレードされてしまうのなら、どうやって事前にテストすればいいんでしょうか?」という趣旨の質問をたびたびされます。誰か特定の方に言われたから、というのではなく本当に多い話です。
- なにか変更を加える場合には必ず事前にテストをする
- そのために本番環境とは別に本番環境を模した環境を用意している
- まずテスト環境に変更を適用する、問題が見つからず全てテストが成功することが変更の絶対条件
というような運用を行なっている組織は実際のところ多いです。組織が大きくなったりシステムの重要度が上がってくるとさらに独立した環境がもう1つ、2つ増えるケースもあります。
このような組織では変更のためにかかる工数が大きく時間も必要なため、例えばWindows Serverを利用してシステムを構築しているけれども、セキュリティパッチも毎月は適用せずに数ヶ月に一度適用する…というような話もよく聞きます。
こうして、「変化」が稀にしかおきない、おこさない環境に慣れているとクラウドでは常識である「変化」に対して「知らないうちに勝手に環境に変化があるなんてどうやってテストしたらいいの?」という発想になると思います。この気持自体はよくわかります。
わたしも全てのシステムがクラウド上で変化し続けるようになるべきとはでは思っていないので、そういう「静的」なシステムおよびシステム運用があるのは良いと思うのですが、話をしているとそもそもAPIの概念を理解していないのでは?と思われる方もいらっしゃるのでその点に関してこのエントリでは書いておきたいと思います。
(ここからやっと本題です。)
どのような種類の変化でもなにか破壊的なことが起こるのではないかと思って「全部テスト」という発想になる方もいらっしゃるようですが、基本的にクラウド等で発生する変化にはあるお約束があります。それは「APIは変化させない」ということです。違う言い方をすると「APIさえ変化させなければ内部では何がどう変更されても構わない」ということです。
APIという言葉はプログラマーの方でないと馴染みがあまり無いかもしれません。Application Programing Interfaceの略なのですが、まぁ、ここでは「インターフェース」としましょう。「インターフェース」が外部との連携窓口になっています。
例えばわかりやすい例として車を例にあげましょうか。車は免許があればどの車でも運転できます(大型車とかそういうのはいったんおいておきます。)。最近だと自動運転などに代表されるように、おそらく車の内部のデジタル化が進み、そうとう内部的な変化はおきていると思います。それでも、ハンドルがあり、アクセルがあり、ブレーキがあり、免許さえもっていれば車の運転はどの車でも同じようにできます。この時、人にとっての車のインターフェースはハンドルであり、アクセスであり、ブレーキです。車の世代が代わったらハンドルの形も使い方も代わってしまう…というのでは毎回免許撮り直しになってしまいますが、そういうことにはならない約束になっています。
ちょっと話を変えて、クラウド上にPaaSサービスとしてSQL Databaseがあります。例えば、Databaseに接続して、SQLクエリを実行してテーブルの中身を取得する事を考えてみます。この時、クライアントとSQL Databaseとの接続にはADO.NET、ODBC、 JDBC等のAPIが使われています。これらはクライアントとデータベース間の接続のために標準化されているものであり、いかにPaaS側が「勝手に変化」しようとも、この接続方法自体は担保しつづけます。SQLのクエリに関してもPaaS側が「勝手に変化」したとしても昨日まで通っていたSQLクエリが実行できなくなるような変化はおきません。「こんな便利な追加されました!」という変化はあっても「ADO.NETでの接続はできなくなりました!」という変化はおきないんです。というか起こさないんです。
これは、車の内部が変化したとしても、ハンドル、アクセル、ブレーキの使い方が全く変化してしまって免許を新システムで取り直さないといけないような変化は車メーカーが起こさないことと一緒です。
どんな些細な変化であってもかならずテストを事前にしなければいけないと考えるのは、どんな車のマイナーチェンジであっても、必ず事前に試乗して今までどおりに運転できることを必ず試さなければいけないと主張することに似ています。もちろんそれが現実的に運用として回せるのであれば一番安全だとは言えるでしょうけれども、場合によってはそこまでのテストをする苦労をかけるくらいであれば、万が一の時にそなえて車をもう1台用意しておくことでバックアップ手段とするようなやり方も考えられるでしょう。
PaaSの変化にもルールがあります。それでも、長い目で見ればAPIの変化も伴う変化が発生するタイミングもあるでしょう。PaaSの裏側でメジャーバージョンアップが行われるようなときです。このような影響が考えられる変化が発生するときにはクラウドのPaaSであっても事前に予告がなされますし、事前にテストをするための方策等がアナウンスされます。
どのレベルの変化の時に、どのレベルでのテストを行うのか、万が一の時のためにどのようなバックアップ手段を用意しておくのか。クラウドを使いこなそうと思ったらクラウド時代の流儀に合わせる必要があることは確かです。
例えば、仮想マシンでWebサーバーとDBサーバーがあり、アプリケーションも自分たちで書いているとします。この時に例えば、DBサーバーだけPaaSに置き換えた時に、今後PaaSのDBサーバーの自動的な変化(進化)によってエンドユーザーに影響がでる可能性というのは、わたしの考えでほぼ皆無です(※私ならWebサーバーまでPaaSに置き換えたって大丈夫でしょう、というかぜひそうしましょうよという感じではあるのですが)。でも、このレベルでも「ありえない!」という反応になってしまう方も多く、このようなエントリを書いております。なかなか難しいものです。