The Cloud Native Engineer Role (日本語訳)

この記事は [Catalin Jora氏](https://twitter.com/JoCatalin)が投稿した 「[The Cloud Native Engineer Role](https://container-solutions.com/the-cloud-native-engineer-role/)」の翻訳記事です。
日本語訳及び公開にあたっては、 Catalin Jora氏及びCatalin Jora氏を通して [Container Solutions社](https://container-solutions.com/)に許可をいただきました。

クラウドネイティブなエンジニアの役割を考えるにあたり、簡潔にまとめられた記事があったため今回翻訳させていただきました。
誤訳やもっと最適な訳し方がありましたらコメントや編集リクエストいただけると幸いです。

---
# The Cloud Native Engineer Role
クラウドコンピューティングによって、ソフトウェアエンジニアとシステム管理者に求められるスキルは変化しました。新しい技術を継続的に研究・採用しなかったIT部門は、通常「クラウドへの移行」を決断するときに躊躇します。クラウドネイティブなIT部門は、新しい環境であるクラウドを活用するために、彼らのソフトウェアをリファクタリング、リパッケージングする新しいスキルを求めています。それらのスキルと役割についてこの記事の中でお話ししていきます。ここでは、この役割を**クラウドネイティブエンジニア**[^1] と呼びます。

**クラウドネイティブエンジニアは、CIやCDなどを通してリポジトリからアプリケーションを利用する必要があります。クラウドネイティブエンジニアは、このパイプラインが実行される間、アプリケーションのコードがビルドされ、テストを通過し、安全にデブロイされプロダクション環境に至るまで保護されることを確認します。**

クラウドネイティブに関連する[技術リスト](https://qiita-image-store.s3.amazonaws.com/0/149365/95220390-5835-1466-7dea-c0d5edcdd90e.png)は多岐に渡ります[^2]:
![CloudNativeLandscape_latest.png](https://qiita-image-store.s3.amazonaws.com/0/149365/95220390-5835-1466-7dea-c0d5edcdd90e.png)


でも心配しないでください。あなたはこれら全てを知る必要はありません。あなたは未経験の採用担当が期待するような「3年以上の業務経験」を持つことはできません。なぜなら、これらはとても新しい領域だからです。ちなみに、他に[サーバーレス](https://qiita-image-store.s3.amazonaws.com/0/149365/1f2bd598-1b63-ee70-d796-ed6a545e2e74.png)のマップもあります。

それでは、全てのクラウドプロジェクトに必要な構成要素、つまりクラウドネイティブエンジニアに必須の**スキルセット**[^3]を一つずつ見ていきましょう。

## ソフトウェアアーキテクト（モノリシックからマイクロサービスとサーバーレスへ）
まず初めに、あなたがマイクロサービスアーキテクチャかモノリシックのどちらを扱っているのかを明らかにする必要があります。もしあなたが新規開発プロジェクトにアサインされてなければ、あなたは多くの時間をかけてプロジェクトをモノリシックからマイクロサービスに移行させなければならないでしょう。もしマイクロサービスに関する知識がなければ、ここから https://microservices-demo.github.io マイクロサービスデモアプリをチェックしてください。
マイクロサービスとは何かを理解するために、[Martin Fowler氏](https://twitter.com/martinfowler)のこの件に関する[記事](https://www.martinfowler.com/articles/microservices.html)を読んでください。[Sam Newman氏](https://twitter.com/samnewman)の[本](https://samnewman.io/books/building_microservices/)は、この分野における「聖書（バイブル）」と言えるでしょう。

## ソフトウェア構築（開発とビルドスクリプト）
どのタイプのアーキテクチャを扱っているのかが分かったら、あなたはそのプロジェクトの実行方法と構築方法の基本的な理解が必要です。もしあなたがアプリケーションの調整/デバッグをする必要があるなら、プロジェクトで使われているプログラミング言語の知識や経験が必要です。

## パッケージング（コンテナ: Docker | サーバーレス）
クラウドネイティブでは、アプリケーションはコンテナとして提供されます（サーバーレスも注目を集めています）。そのため、あなたはアプリケーションを理解し、これらの新しい標準でパッケージングする必要があります。私の同僚である[Adrian Mouat氏](https://twitter.com/adrianmouat)の著書「[Using Docker](http://shop.oreilly.com/product/0636920035671.do)」は、それらを素早く習得するための最良のオプションでしょう。

## CI/CD （JenkinsのようなCI/CDツール、 GitLab、 Travis などなど）
アプリケーションとインフラそれぞれのコードを書いたら、あなたはそれをどこかにデプロイする必要があります。ほとんどの「古い」CIツールは今だに使われており、利用者たちはそれを継続的に提供する方法を習得しています。新しいツールが色々登場しましたが、Jenkinsに取って代わるものがないため、それがまだ標準とされています。CIツールは提供プロセス全体を推進するため、良いパイプラインを設計することで開発者のエクスペリエンスが向上し、障害やバグへの対応も早くなります。全ての種類のテストとコード品質管理ツールもここで統合されなければなりません。

## コンテナスケジューラー、オーケストレーター（Kubernetes、Docker Swarm、DC/OS）
アプリケーションをコンテナにパッケージする場合、それらのライフサイクルを理解する必要があります。[Kubernetes](https://www.kubernetes.io/) はこの分野で標準になりつつあり、全ての主要なクラウドプロバイダでマネージドソリューションが提供されています。基本的な[チュートリアル](https://kubernetes.io/docs/tutorials/)をチェックするか、あなたがこのタイトルにもっと深く入り込むつもりならトレーニングを探してください。一度そのアプリがデプロイされれば、あなたの新しい遊び場として利用することができます。

## インフラ構築（オペレーションパート）
それでは、あなたは動作するいくつかのアプリケーションのコードを持っているとします。あなたの次のステップ（新規開発プロジェクトでは最初のステップ）は、そのコードを動かすインフラストラクチャを構築することです。
これにはマネージドサービス及び不十分な箇所のためのコード作成が含まれます。[Terraform](https://www.terraform.io/)、[Cloud Formation](https://aws.amazon.com/cloudformation/)、[Ansible](https://www.ansible.com/)のようなツールがこの領域ではお馴染みです。

## モニタリング＆オブザーバビリティ
分散システムでは監視が中心的な役割を果たします。古いツールでは新しいランドスケープに追いつくことができなかったため、あなたが使っているクラウドで提供されているSaaSのソリューションを検索したり、または（[Prometheus](https://prometheus.io/) / [Grafana](https://grafana.com/) のような）オープンソースプロジェクトに頼る必要があります。

## クラウドコンピューティング構成要素
ほとんどの会社ではインフラストラクチャは、APIやクレデンシャル、使用状況を追跡できる請求書に置き換えられます。
使用しているクラウド/インフラストラクチャプロバイダーが何であれ、コンピューティングユニット、データベース、ストレージ、ネットワークなどのクラウドコンピューティングの根本を理解することは必須です。新しいサービスの価格設定を理解しておくと月末の厄介な驚きを避けるのに役立ちます。

IT部門がこれらの項目を実装したら、上記の項目以外にも、以下のような領域が注目されています。

- アプリケーションのデプロイパターン
  - カナリアデプロイ
  - Blue/Green
  - GitOps
  - マイクロサービスアーキテクチャーの為のネットワーキング
- サービスメッシュ（[Istio](https://istio.io/)、[Envoy](https://www.envoyproxy.io/)）
- クラウドアーキテクチャーのセキュリティ
  - コンテナの脆弱性スキャン
- 機密情報管理

クラウドコンピューティングへの移行によって、新しいプラットフォームでアプリケーションを開発及び運用するために必要とされるスキルも同様に変化します。継続的な学習はあなたが技術に追いつくことができる唯一の方法です。今の職場でそれができない場合、おそらく他の場所で新しくチャレンジする時が来たのでしょう。

[^1]: この範囲におけるスキルセットと役割は、Googleの[サイト信頼性エンジニア](https://landing.google.com/sre/sre-book/chapters/introduction/)の役割とは異なります:「SREはソフトウェアエンジニアにオペレーションチームの設計を依頼したときにできるものです」 -  Benjamin Treynor Sloss  -  SRE設立者。 DevOpsエンジニアは名前や役割があいまいで、比較するには漠然としていて奇妙な存在ですが、いくつかのスキルは重複しています。

[^2]: 筆者注： 元記事の画像をそのまま載せましたが、最新版は[さらに細かくなっています。](https://github.com/cncf/landscape/#current-version)

[^3]: クラウドネイティブランドスケープより短いですが、このリストもまた、膨大です。私は最初に同僚のためにそれを組み立てました（Hi [Riccardo](https://twitter.com/riccardomc)!）。しかし、これはこの方面でキャリアアップを狙う全ての人々に役立つものです。ほとんどの人は基本を知っていて、興味を持っているいくつかの領域について深い知識を持っています。



新たなチャレンジを探してますか？私たちは待ってます！