はじめに
組織に、クラウドエンジニア (クラウド技術者) は足りているでしょうか。
クラウド技術が当たり前になり、2010年代後半には「クラウドファースト」が謳われるようになりました。これに加えて「クラウドネイティブ」という言葉も使われるようになり、 2022年5月にはデジタル庁が「クラウドスマート」 (クラウドを賢く適切に利用する) を方針として打ち出すに至っています。
クラウドエンジニアが足りない、という悩みは、ある規模以上のIT資産を持つ企業や官公庁にとって、ここ数年に渡り慢性的な症状です。この病には、どのように対処すべきでしょうか。
クラウドエンジニアを育てる唯一の方法
ITエンジニアをクラウドエンジニアとして育成するには、以下の方法を取ります。
1.クラウド以外の既存技術を広く浅く理解してもらう。
具体的には以下となります。
Ⅰ.ITインフラ技術に関する基礎的な知識
■ネットワーク (TCP/IP)
■OSS (OS / ミドルウェア)
■認証・認可と証跡管理
Ⅱ.アプリケーションとデータに関する基礎的な知識
■コーディング (言語を問わない)
■関係データベース (RDBMS の仕組みとデータモデリング)
■Web API (REST)
Ⅲ.システム運用に関する基礎的な知識
■システム開発のプロセス
■モニタリング
■定常作業と自動化
2.企業で利用するパブリッククラウドに関する初歩的な研修を受講してもらう
これだけです。なお、上記 1. と 2. のうち、重要性や所要時間の比重としては 9:1 くらいの感覚です。 1. の「クラウド以外の既存技術」に関して主要項目だけリストしましたが、いずれも深い知識を指してはおらず、あくまで基礎知識と概念の理解のみを必要としています。
「クラウドエンジニアが足りない」という悩みは、実際には「システムエンジニアとしての基礎知識を広く浅く持っている技術者がいない」ことが原因であると考えられます。これについて、もう少し詳しくご説明します。
そもそもクラウドエンジニアとは何か
「足りない」と言われているクラウドエンジニアとは、そもそもどのような人を指しているのか、という点から整理すれば、先に提示した解決策に繋がります。おそらく、多くの組織の経営層、 ITマネジメント層、あるいは現場レベルにおいても、クラウドエンジニアを明確に定義できていません。
本稿では、以下のように定義します。
クラウドエンジニアとは、以下のすべての項目について、管理と実行の能力を持った技術者です。
A.クラウド環境の設計・構築 (アーキテクト)
B.クラウド環境における開発 (デベロッパー)
C.クラウド環境の管理・運用 (アドミニストレーター)
上記では A.~C.と大きく3つの技術分野を定義し、その「すべて」の能力を持っている人物をクラウドエンジニアとして定義しています。どれか一つではなく、すべてというのがポイントです。
A.~C.のすべてを身につけるのは不可能と思われるかもしれません。しかし、全てを高いレベルで身につけている必要はありません。最低、どれか一つは突出しているべきですが、残りは基礎的なレベルでも構いません。ただし、「A.~C.の一つだけを身につけているが他は分からない」ではクラウドを扱うことはできません。
反対に、例えば A.とC.の能力がある程度あれば、B.に関しては開発ベンダーにアウトソースし、重要なポイントの管理・監督や重要な「ジャッジ」を内部メンバーで行うことができます。
なぜ必要な知識分野が広いのか
なぜ、このように必要な知識分野が広いのでしょうか。
クラウド以前の従来型開発においては前述のA.~C.は全く別々のスキルでした。チームが分かれており、インフラエンジニアはインフラのことを、プログラマーはプログラミングだけを、運用部隊は運用だけを行っていました。しかしクラウドスマートの時代において、これは当てはまりません。
Amazon Web Services (AWS) や Google Cloud (旧称GCP) は、全てのリソースをWeb API経由で操作することが前提となっています。仮想サーバーやストレージは、Web APIを経由してプログラマブルに操作できるからこそ、クラウドらしい柔軟性やスケーラビリティをフルに活用することができます。 AWSやGoogle Cloud にはWebブラウザから操作できるコンソール画面が用意されていますが、これはWeb APIをブラウザ経由でコールするためのインターフェイスにすぎません。クラウドサービスは基本的に、アプリケーション開発者が容易にインフラを準備して活用できるように設計されています。
そのため、従来のようなインフラのみを扱うエンジニアは不要となり、コードの書けないインフラエンジニアは淘汰されていくことになります。インフラエンジニアには最低限のコーディングスキルやWebシステムに対する理解が求められます。さらに、インフラエンジニアの役割はもはや「物理機器の設置や設定、配線」ではなく「システムがコスト的・パフォーマンス的・セキュリティ的に最適に稼働するにはどのようなインフラアーキテクチャを取るべきか」といった課題を扱うことが求められるため「アーキテクト寄り」となります。
またこのクラウドの設計思想は、プログラマーにある程度のインフラ知識さえあればインフラ構築が容易にできることを意味しています。
これらが A.アーキテクト と B.デベロッパーの単一化に繋がります。
また 2010年初頭以降、インターネットとモバイル端末の発達によりビジネスの変化のスピードが早まり、それに追従してアプリケーションの開発スピードとデプロイ頻度の向上が求められるようになりました。これは DevOpsと呼ばれる、開発と運用の単一チーム化という文化を作り出しました。
これは B.デベロッパー と C.アドミニストレーターの単一化を意味します。
パブリッククラウドにおけるシステムアーキテクチャを検討する際は、クラウドサービスの製品仕様をよく理解し、運用性を重視した設計とする必要があるため、自然とA.アーキテクトと C.アドミニストレーターの知識領域は重複します。
これが A.アーキテクト と C.アドミニストレーターの単一化が求められる背景です。
このようにして、クラウド時代では、一人のクラウドエンジニアが A.~C.の役割をある程度担えることが理想です。これが「クラウドエンジニアを育てる唯一の方法」の項で挙げた、「クラウド以外の既存技術」の I.~III. と対応しています。
基礎的なエンジニアリング力の重要性
再掲ですが、クラウドエンジニアが持っているべき最低限の知識分野は、以下です。
Ⅰ.IT インフラ技術に関する基礎的な知識
Ⅱ.アプリケーションとデータに関する基礎的な知識
Ⅲ.システム運用に関する基礎的な知識
これらの全てに対して基礎レベルの知識があれば、どんなクラウドサービスでも、容易にキャッチアップすることができます。
なぜならAWSであろうとGoogle Cloudであろうと、以下のような特徴は共通だからです。
■仮想化技術をベースとしたスケーラブルなインフラ
■Web APIによるプログラマブルな操作
■認証、認可、証跡管理、セキュリティ等の基礎的な仕組み
I.~ III.の基礎知識がある人であれば、どのクラウドサービスであってもその根底に流れる哲学を理解し、適切な設計・利用ができるはずです。
逆に、クラウドサービスだけを学習している技術者がなかなかキャッチアップできないという場合、こういった基礎知識が欠如していることが多いのです。
アプリケーションやDMBSの仕組みを知らないインフラエンジニアが AWSやGoogle Cloudの学習をしても、 Web APIの仕組みや背後に隠れているデータ構造・データベースの仕組みが分からないため「なぜこうなっているのか」「これには何の意味があるのか」が想像できません。結果としてなかなか学習が進まないので、活用もできません。同じように TCP/IP の基本を知らないプログラマーがクラウドの学習をしても、 VPCやファイアウォールで躓くでしょう。
裏を返せば、これらの基礎知識を持っている人であれば、クラウドへのキャッチアップは容易です。
クラウドエンジニアの育て方
前述の経緯から、クラウドエンジニアには広い知識が求められます。しかし、だからといって天才的な才能を持つ人物だけしかクラウドエンジニアになれないわけではありません。 A.~C. や I.~III. のうち、最低でもどれか一つは突出しているべきですが、その他の分野は基礎レベルでも問題ないのです。
もし組織にいるエンジニアのほとんどがシステム管理者やインフラエンジニアであれば、コーディングスキルの基本を学習してもらうことから始められます。一例ですが BashやPythonは、各種クラウドサービスで SDKが提供されているためインフラ構築のコード化スキルにも繋がりますし、プラットフォームを問わないため、最初に学ぶコーディングスキルとしてコストパフォーマンスが良いと言えるでしょう。
どの組織でも教育コストの捻出は悩ましいですが、もし既にクラウドサービスを使っていれば、クラウドリソースの一覧化スクリプトなどの自動化ツールを社内開発するなどから始めてもよいでしょう。
組織にいるプログラマにインフラの知識をつけて欲しい場合も考えます。 TCP/IPなどのネットワークの基本を解説する書籍は多数あるうえ、システム開発現場においてシステムインフラと関わる機会は多くあるはずです。ネットワーク関係の学習を奨励することに加えて業務でのインフラチームとの新しい関わり方の創出などで、インフラを意識する機会を増やすことから試すのも一手です。
このようにして、組織にいる IT 技術者に I.~III. の広く浅い知識を持ってもらうことが始めのステップとなります。
そのエンジニアたちに対して、各種クラウドベンダーやパートナーが提供している有償・無償の基礎トレーニングを受講してもらうことで、クラウドエンジニアの土壌はできあがります。繰り返しですが、基礎的なIT知識があればクラウド技術へのキャッチアップは難しくありません。
外部の力を借りる
社内にエンジニアの技術的な指導者となりえる人物がいないことも、多くの企業で聞かれる悩みの一つです。
最新技術に関する知見を持つビジネスパートナーの力を借りて組織をクラウド化・モダン化する手法は、 Google が発表したクラウド導入フレームワークである The Google Cloud Adoption Framework で取り上げられています。
以下の記事 「2-3-8. 外部の知見」 をご参照ください。
Googleのクラウド導入フレームワークを翻訳して紹介
内製化を原則としつつ、外部のパートナ−に準委任契約で以下を担ってもらうことで、組織の独り立ちまでの支援をしてもらうことが可能です。
■トレーニング / ハンズオン
■アーキテクチャ検討への参加
■設計レビュー
■クラウド導入戦略に対する相談
■その他、技術全般の相談
往々にして企業 IT は同一技術、同一システムを扱い続ける関係上、文化もスキルも固定化します。外部ベンダーが新しい風を吹き込んでくれることを期待することは、有用な育成戦術の一つです。
[PR]提供:G-gen