2023 年に DevOps エンジニアになる方法

2023 年に DevOps エンジニアになる方法

このガイドでは、さまざまな組織での DevOps エンジニアとしての私の経験と、DevOps エンジニアになるためのヒントを共有します。これは、DevOps エンジニアリングのキャリアを開始するための包括的なロードマップです。DevOps 分野は、給与が高くキャリアアップの可能性があるため、現在 IT 業界で非常に人気のある分野です。DevOps エンジニアになるにはどうすればよいかよく尋ねられます。「DevOps エンジニア」や「DevOps チーム」などというものは存在しないと主張する人もいますが、この用語は業界で広く受け入れられています。DevOps の哲学を理解し、タイトルに固執しないことが重要です。

この記事には、DevOps エンジニアが所属する可能性のあるさまざまなチームに関する情報も含まれています。DevOps が包含するものについては、単なる自動化に関するものであるという考えなど、多くの誤解があります。ただし、DevOps は実際には、ソフトウェア配信とインフラストラクチャ変更の自動化を通じて、開発者、QA チーム、パフォーマンス チームなどを含む IT プロフェッショナル間のコラボレーションとコミュニケーションを改善することに焦点を当てた哲学です。Wikipedia によると、DevOps は「ソフトウェアの配信とインフラストラクチャ変更のプロセスを自動化しながら、ソフトウェア開発者やその他の情報技術 (IT) 専門家のコラボレーションとコミュニケーションを重視する文化、運動、または実践」です。添付の傾向グラフに示されているように、採用率は長年にわたって着実に増加しています。

DevOpsエンジニアとは何ですか?

DevOps エンジニアとは、強力な共同作業スキルを持ち、組織内での DevOps 実践の実装をサポートするために新しいテクノロジーや手法に喜んで適応する人です。技術的な観点から見ると、DevOps エンジニアは、システム、自動化ツール、継続的統合ツール、バージョン管理システム、監視および可観測性ツール、ネットワーキング、およびプロジェクト管理ソフトウェアについて十分に理解している必要があります。DevOps エンジニアの役割には、人間の介入を最小限に抑えて小規模なアップデートやリリースを処理できる継続的インテグレーションおよび継続的デリバリー パイプラインの設計と開発が含まれます。これには、さまざまなチームの働き方における文化的な変化が必要であり、場合によってはさまざまなチームと話し合い、問題点について話し合い、解決策を見つけるために協力する必要があるかもしれません。DevOps エンジニアの最終目標は、反復的なタスクを自動化し、エンジニアリングとイノベーションにより多くの時間を費やすことです。

DevOps エンジニアになるにはどうすればよいですか?

DevOps エンジニアとして成功するには、DevOps 文化を理解する必要があります。DevOps 文化では、さまざまなチームが共通の目標に向かって協力し、IT チーム間に非難の文化が欠如しています。DevOps エンジニアとして、「それは私の仕事ではない」と言わずに、進んで他の人を助け、協力する必要があります。DevOps の文化的側面を理解することは初心者にとっては難しいかもしれませんが、オペレーティング システム、ネットワーキング、プログラミングなどの中核となる IT 概念の強固な基盤を構築することに重点を置くことが重要です。IT リーダーと意思決定者は、混乱やサイロ化された構造を避けるために、DevOps ツールセットを導入する前にチーム全体が DevOps 文化について確実に教育されるようにする必要があります。DevOps 文化を理解することは、プロジェクトの問題について他人のせいにする傾向を防ぎ、責任のない事後分析などを通じて問題解決と分析に協力的なアプローチを採用するのにも役立ちます。DevOps は単なる継続的インテグレーション/継続的デリバリーとインフラストラクチャの自動化ではなく、IT プロフェッショナル間のコラボレーションとコミュニケーションの向上に焦点を当てた全体的な哲学であることを認識することが重要です。Puppet の「State of DevOps」レポートは、エンジニアやリーダーが DevOps の文化と実践について学ぶために推奨されるリソースです。

Linuxを学ぶ

今日の世界では、さまざまな Linux/Unix システム、特に RHEL、Centos、Ubuntu、CoreOS などの組織で広く使用されているシステムについて、しっかりと理解し、実践的な知識を持つことが非常に重要です。Linux Foundation のケーススタディによると、パブリック クラウドのワークロードの 90% が Linux で実行されており、Redhat の調査では、パブリック クラウドで使用されているさまざまな Linux ディストリビューションが示されています。*nix の世界ではグラフィカル ユーザー インターフェイスが一般的に使用されていないため、Linux の学習に集中し、ターミナル コマンドの使用に習熟することが非常に必要です。Vagrant の VirtualBox などのツールや、AWS、GCP、Azure などのクラウド サービスを使用して Linux サーバーを起動し、これらのシステムを使用して実際の体験を得ることができます。

DevOps エンジニアとして Linux に習熟するには、次の概念を理解する必要があります。

  • Linuxの起動プロセス
  • システムド
  • Apache、Nginx、Tomcat などの Web サーバーの仕組み
  • Linuxプロセス
  • SSH
  • 異なるファイルシステム
  • システムのロギング、監視、トラブルシューティング
  • SSL、TLS、TCP、UDP、FTP、SFTP、SCP、SSH などの主要なプロトコル
  • サービス管理 (Initd および Systemd を使用してサービスを作成および構成する方法を含む)
  • ロード バランサーとリバース プロキシ (Nginx や HA プロキシなど) のセットアップと構成、およびロード バランシングで使用されるアルゴリズム
  • Linuxのパフォーマンスを最適化する方法
  • PostgreSQL などのデータベースのセットアップと管理
  • トラブルシューティングのヒント

これらの概念を理解することに加えて、Web サーバー上で静的または動的 Web サイトをホストし、さまざまな構成を試し、問題を壊したり修正したりすることでトラブルシューティングを行う方法を学ぶ実践的な経験を積むことも重要です。

インフラストラクチャコンポーネントがどのように機能するかを学ぶ

DevOps エンジニアとして、クラウド環境に存在するかオンプレミスのデータセンターに存在するかに関係なく、組織を構成するインフラストラクチャ コンポーネントについて幅広く理解することが重要です。これを理解することで、適切な質問をすることができ、ネットワーク チームやセキュリティ チームと効果的に連携できるようになります。たとえば、インフラストラクチャに関する知識の強固な基盤があれば、単に何かが機能していないことを伝えるのではなく、初期のトラブルシューティングの取り組みについて詳細に説明できるようになります。これは、より生産的で効率的な解決プロセスを促進するのに役立ちます。

クラウド コンピューティングと仮想化を学ぶ

クラウド コンピューティングと仮想化は、最新の DevOps 実践の基礎です。これらの概念をしっかりと理解するには、クラウド コンピューティングの基礎を築くことができる Virtualbox や Vagrant などのツールを使用して仮想化について学ぶことから始めることをお勧めします。クラウド コンピューティングに関しては、クラウド プラットフォームで学習して認定を取得することが重要ですが、試験ダンプを使用して認定試験に合格するだけでは必ずしもスキル セットの価値が高まるわけではないことに注意することが重要です。代わりに、積極的に学習して内容を理解することが推奨されます。Statista のレポートによると、AWS は現在、パブリック クラウド市場シェアの過半数を保持しています。

クラウド コンピューティングに習熟するには、AWS などのパブリック クラウド プラットフォームを選択し、実践的な経験と実験を通じてそのすべてのコア インフラストラクチャ サービスについて学ぶことをお勧めします。また、AWS re:Invent ビデオを視聴したり、他の組織が AWS のサービスを使用してアプリケーションをホストしている方法を確認したりすることで、多くのことを学ぶことができます。これらのビデオは、オンライン トレーニング コースでは得られない、AWS で本番ワークロードを実行する方法についての貴重な洞察を提供します。GCP 認定者になる予定がある場合は、Google Next ビデオを見てプラットフォームについて詳しく学ぶことができます。認定試験は、特定のクラウド プラットフォームに関する知識とスキルを評価する方法として役立ちます。

自動構成を学ぶ

インフラストラクチャ自動化ツールは現代の組織の重要な側面となっており、インフラストラクチャの導入には不変のインフラストラクチャ モデルがよく使用されます。Redhat のレポートによると、多くの組織が自動化への取り組みに投資しています。サーバーの構成からアプリケーションの構成と展開に至るまで、自動化が不可欠です。自動化ツールを学習するには、公式ドキュメントまたはコースから基本を学び、自動化スクリプトを作成する前にシステムを手動で構成することで実践的な経験を積むことをお勧めします。テスト駆動のインフラストラクチャ開発を学習し、Ansible-test や terratest などのテスト ツールを使用することも重要です。コミュニティ モジュールは、複雑なロジックを学習するための貴重なリファレンスとして機能しますが、これらのモジュールを使用する場合は、各コードの機能を理解することが重要です。

コンテナオーケストレーションと分散システムを学ぶ

分散システムはスケーラブルなインフラストラクチャの重要な部分であり、Kubernetes などのマイクロサービス用のツールの多くは本質的に分散されています。したがって、分散システムの概念をしっかりと理解することが重要です。Docker や Podman などのコンテナー テクノロジーもますます一般的になってきており、この分野で実践的な知識を得ることで、就職市場での競争力を高めることができます。コンテナーについて十分に理解したら、マイクロサービス ベースのアーキテクチャに適した Kubernetes や Docker Swarm などのコンテナー オーケストレーション ツールについて学習し始めることができます。Kubernetes は特に人気があり、検索傾向が高まり、エンジニアや大学卒業生の間で関心が高まっています。特定の分野に特化できるように、CKA、CKAD、CKS などのさまざまな Kubernetes 認定オプションがあります。サービス メッシュは、コンテナーの世界ではより高度なトピックです。サービス メッシュ ツールを学習する前に、コンテナー オーケストレーションとマイクロサービス ベースのアーキテクチャで強固な基盤を構築することをお勧めします。CNCF Foundation は多くのサービス メッシュ ツールを提供しているため、自分にとって最適なツールを調べて選択すると便利です。

ロギング、モニタリング、可観測性

可観測性、ロギング、モニタリングは、あらゆるインフラストラクチャの基本的なコンポーネントです。インフラストラクチャにデプロイされたすべてのアプリケーションはログとメトリクスを生成し、これらは通常、組織のアーキテクチャと設計に基づいてログ インフラストラクチャに保存されます。一般的なログ スタックには Splunk や ELK が含まれますが、Loggly のような SaaS オプションもあります。モニタリングに関しては、Prometheus や Nagios などのオープンソース ツールだけでなく、AppDynamics、Datadog、SignalFx などのエンタープライズ オプションもあります。開発者、運用チーム、セキュリティ チームは、アプリケーションとインフラストラクチャの監視、トラブルシューティング、監査を行うためにログ システムに依存しており、ログ データは AIOPS にとって重要です。ミッションクリティカルなアプリケーションは、多くの場合、ログ ソースまたはアプリケーション メトリックからのデータを表示するダッシュボードを使用して 24 時間年中無休で監視されます。アラート システムは、Slack、Jira チケット、電子メール、ServiceNow インシデント チケット、電話などの方法で通知をトリガーするためにも使用されます。DevOps エンジニアとして、非運用環境および運用環境でログをクエリし、問題をトラブルシューティングすることが重要です。正規表現を深く理解していると、ログ ツールでログをクエリするときに役立ちます。

セキュリティのベスト プラクティスを学ぶ (DevSecOps)

DevSecOps には、DevOps プロセスのあらゆる段階にセキュリティ プラクティスを組み込むことが含まれます。集中型セキュリティ チームの従来のモデルは、各デリバリー チームが DevOps 実践において適切なセキュリティ制御を考慮できるようにするフェデレーション モデルに移行する必要があります。DevSecOps の重要な側面は、セキュリティへのシフトレフト アプローチであり、これには設計および開発フェーズでセキュリティを考慮することが含まれます。Cloud Security Alliance は、セキュリティを後から追加するのではなく、最初からセキュリティを設計することを推奨しています。Cloud Security Alliance が発行した DevSecOps の 6 つの柱では、DevOps にセキュリティを組み込むための重要な実践方法が概説されています。アプリケーションとインフラストラクチャコンポーネントの機密管理は、標準的なセキュリティ慣行に従う必要があり、ゼロトラストセキュリティ慣行も考慮される場合があります。Hashicorp Vault は、環境秘密を管理するためのさまざまなワークフローを提供する秘密管理ツールです。Salt Security が発表した API セキュリティ ステータス レポートによると、API 攻撃は近年 681% 増加し、大幅に増加しています。

コードとスクリプトを学ぶ

DevOps エンジニアは CI/CD ワークフローでスクリプトを頻繁に使用するため、強力なスクリプト スキルが必要です。Bash/Shell、Python、Golang などの一般的なスクリプト言語を学習することをお勧めします。また、DevOps エンジニアがトラブルシューティングを行ったり、開発者と効果的に共同作業したりするために、プログラミングと API をよく理解していることも役に立ちます。DevOps エンジニアにとって、開発プロセスと関連するコンポーネントをより深く理解するには、独自のアプリケーションを最初から開発することが有益です。カスタム機能には、コーディングまたはスクリプトのスキルが必要な場合もあります。

これらの言語は自動化ツールやプロセスでよく使用され、組織のニーズに合わせてこれらのツールの機能をカスタマイズおよび拡張するのに役立ちます。さらに、プログラミングと API をよく理解していれば、開発者とより効果的に連携し、Kubernetes などの複雑なテクノロジを理解するのに役立ちます。アプリケーションをゼロから開発した経験があることも役に立ちます。これにより、開発プロセスをより深く理解し、開発者とより効果的に対話できるようになります。Golang は DevOps の世界で特に人気があり、多くのツールやテクノロジーがこの言語で書かれています。

Git、GitOps を学び、ドキュメントを作成する

つまり、GitOps は、Git と継続的デプロイメント ツールを使用して、クラウド ネイティブ アプリケーションの運用を管理する方法です。開発者が使い慣れたツールを活用し、開発者にとって使いやすいように設計されています。これは業界内で増えつつある慣行であり、将来的にはさらに広く使用されることが予想されます。DevOps エンジニアにとって、GitOps と、GitOps を使用してインフラストラクチャとアプリケーションを管理する方法を理解することは非常に重要です。

DevOps エンジニアとして、特にコード ベースに関する作業を文書化することが重要です。README ファイルにはコードの目的と使用法が明確に説明されており、あなたや将来そのコードを使用したいと考えている他の人にとって役立ちます。作業を文書化すると、重要な情報が失われたり忘れられたりすることがなくなり、他の人がコードを理解し、使用しやすくなります。

エンドツーエンドのアプリケーション配信ライフサイクルを理解する

アプリケーション配信プロセスを理解するには、継続的インテグレーション、配信、およびデプロイメントに精通している必要があります。開発、構築、テスト、展開、承認、検証のプロセス中にこれらの概念がどのように連携するかを読むと役立ちます。

アプリケーションの開発とリリースのライフサイクルに関連する重要なポイントには、計画と承認のプロセス、セキュリティとコンプライアンスの対策、構成と機密情報の管理、品質保証とテスト、監視とパフォーマンスの測定、運用環境へのリリースと潜在的なロールバックの処理などがあります。これらのトピックを理解すると、さまざまな組織でアプリケーションがどのように開発およびリリースされるかを理解するのに役立ちます。

DevOps と SRE

サイト信頼性エンジニアリング (SRE) は、開発と運用の改善を通じてソフトウェア システムの信頼性と安定性を向上させることに焦点を当てた一連の実践と哲学です。これは、より優れたソフトウェアをより迅速に提供するために、開発チームと運用チーム間のコラボレーションの重要性を強調するために Google で開発されました。SRE と DevOps は競合するものではなく、組織の壁を打ち破り、ソフトウェア開発と運用の全体的な効率と有効性を向上させることを目的とした補完的なアプローチです。

さまざまなタイプの「DevOps チーム」

組織内のさまざまなチームに「DevOps」というラベルが付けられている場合がありますが、その役割と責任は異なる場合があります。中央プラットフォーム チームは、オンデマンドでインフラストラクチャをプロビジョニングし、継続的なサポートと監視を通じて運用システムが 24 時間利用できるようにする責任を負います。

  • DevOps チームは開発者と緊密に連携して、エンドツーエンドのアプリケーション配信を処理します。
  • アプリケーション運用チームは、決済チームなど、特定のドメイン内でのアプリケーションの展開と管理に重点を置いています。
  • SRE チームは自動化、可用性、パフォーマンス、その他の運用面に重点を置き、開発者と緊密に連携して問題を解決します。
  • 専任のサポート チームが運用サポート チケットを処理し、重大度に基づいて問題を適切なチームに転送します。

経験豊富な候補者にとって、組織に参加する前に DevOps チームの具体的な責任を理解することが重要です。

開発エンジニアの役割と責任

言い換えると、DevOps エンジニアとして、新しい組織における自分の役割と責任を理解することが重要です。これは、学習やキャリアの目標をこれから行う仕事と一致させるのに役立ちます。

重要な問題を解決します。

  1. 日々のプロジェクト活動はどのようなものですか?
  2. アクティブな自動化作業はありますか? それともメンテナンス プロジェクトですか?
  3. プロジェクトでは現在どのような DevOps ツールが使用されていますか?
  4. 新しい移行または開発活動が進行中ですか?
  5. プロジェクトの将来のロードマップは何ですか?
  6. オンコールサポートにはどれくらい時間がかかりますか? オンコールサポートには報酬はありますか?
  7. ローテーションの夜勤はありますか?
  8. 労働時間は固定ですか、それともプロジェクトが変わると変わりますか?
  9. 週末に働く文化はありますか?
  10. チームの規模について聞いてください...もちろん、火傷はしたくないです! 「!

考慮すべき重要な点としては、日々のプロジェクト活動、使用されている DevOps ツール、プロジェクトの将来のロードマップ、チームの規模などが挙げられます。また、オンコールサポートや夜間勤務または交代勤務の可能性についても注意する必要があります。週末の仕事に関する文化を考慮することも重要です。参加するチームによっては、プラットフォーム エンジニアリング、アプリケーションの開発とサポート、メンテナンスとトラブルシューティングなどが担当する場合があります。自分の仕事が自分の健康と幸福に与える影響を認識することも重要です。

DevOps エンジニアとして、ほとんどの自動化の取り組みは 1 回限りのアクティビティであることを理解することが重要です。ただし、一部の例外を除き、プロジェクトを支援するオンコール活動に参加する準備もしておかなければなりません。所属しているチームに応じて、あなたの責任は異なる場合があります。たとえば、プラットフォーム エンジニアリング チームの一員である場合は、プラットフォーム ツールの構築の一環として、継続的な開発とイノベーションに携わる可能性があります。AppOps チームの一員である場合は、プラットフォーム チームが開発したツールを使用して作業し、プロジェクトについて学ぶために毎日の会議に参加する機会があるでしょう。サポート チームの一員であれば、問題のトラブルシューティングに役立つゲーム マニュアルを持っている可能性がありますが、設計に関する議論に参加する機会は少ないかもしれません。DevOps エンジニアのポジションを検討するときは、所属するチームの種類を考慮することが重要です。

DevOps エンジニアに関するよくある質問

DevOps に参加するにはどうすればよいですか?

DevOps に参加するにはいくつかの方法があります。すでに開発、QA、パフォーマンス、またはサポートに従事している場合は、DevOps に移行するためにインフラストラクチャの自動化と CI/CD を学ぶことができます。始めたばかりの場合は、プログラミング、オペレーティング システムの概念、クラウド コンピューティング、コンテナー テクノロジの学習に重点を置く必要があります。DevOps の仕事に応募する前に、実際のプロジェクトに取り組むことも役立ちます。

DevOps の役割にはコーディングが必要ですか?

それは取り組んでいる特定のプロジェクトによって異なります。一部の DevOps ポジションでは、インフラストラクチャ自動化および CI/CD 用のカスタム ソリューションを開発するためのコーディング スキルが必要な場合があります。一般に、DevOps の面接の多くにはコーディングまたはスクリプトのラウンドが含まれるため、ある程度のコーディングの知識があることが望ましいです。

DevOpsエンジニアは何をするのですか?

DevOps エンジニアは、開発者および部門横断的なチームと協力して、CI/CD プロセスを合理化し、反復的なタスクを自動化します。また、実稼働および非実稼働プラットフォームとアプリケーションのトラブルシューティングと監視も担当します。

DevOpsにはどのようなスキルが必要ですか?

DevOps の役割には、プログラミング、オペレーティング システムの概念、分散システム、ネットワーキング、モニタリング、トラブルシューティング、コンテナ テクノロジ、インフラストラクチャの自動化、構成管理、バージョン管理、Jenkins や GitLab CI などの CI/CD ツールの知識など、いくつかのスキルが重要です。そしてGitHubアクション。

DevOps エンジニアにとって最適な認定資格は何ですか?

DevOps エンジニア向けの認定資格は数多くありますが、どの資格が最適であるかは、興味やキャリア目標によって異なります。たとえば、クラウド テクノロジーで働きたい場合はクラウド認定が最も有益である可能性があり、コンテナ テクノロジーに興味がある場合は Kubernetes 認定がより役立つ可能性があります。さまざまな認定オプションを調べて、自分の興味やキャリア目標に合ったものを選択することをお勧めします。

学習結果を記録する

自分の学習過程を文書化し、他の人と共有することは、他の人を助け、自分自身の個人的なブランドを作成するため、非常に重要です。WordPress や Medium などのプラットフォームでブログをセットアップするには 30 分もかかりません。新しい DevOps の概念やツールを学びながら、それらについて書くことは、自分自身や他の人の参考になります。LinkedIn グループ、Dzone、またはその他のオンライン コミュニティで記事を共有することも、リーチを拡大するのに役立ちます。結論は

DevOps に関連するツールやプロセスは、この記事で説明したものに限定されるものではなく、この分野で使用できるオープンソース ツールやテクノロジーは他にもたくさんあることに注意してください。DevOps の取り組みを始めることを決めるときは、自分の目標と興味を考慮し、どのツールとテクノロジーが役立つかに焦点を当ててください。

最高の DevOps 学習リソース:

  1. DevOps の文化と考え方 [Coursera]
  2. フェニックス プロジェクト [おすすめの電子書籍]
  3. Linux 入門 [edX]
  4. DevOps のシェル スクリプトを学習する
  5. Bash プログラミングの完全ガイド
  6. 5日間でLinuxを学ぶ [Udemy]
  7. Linux Foundation 認定システム管理者 (LFCS)
  8. Udacity のコンピューター ネットワーキング コース [無料]
  9. Virtualbox チュートリアル
  10. 初心者のための Vagrant チュートリアル
  11. Udemy AWS 認定コース
  12. Google 認定アソシエイト クラウド エンジニア認定資格
  13. Microsoft Azure — 初心者ガイド + AZ-900 準備
  14. Udacity クラウド DevOps エンジニア Nanaodegree
  15. DevOps を学ぶ: Terraform を使用したインフラストラクチャの自動化
  16. まったくの初心者のための Ansible — ハンズオン — DevOps
  17. まったくの初心者のための Docker
  18. Dockerイメージを構築する方法
  19. 初心者向けのポッドマンチュートリアル
  20. Kubernetes を学ぶ方法 — 包括的なロードマップ
  21. 初心者向け Kubernetes チュートリアル: 29 スタートガイド
  22. 最高の Kubernetes コース
  23. Kubernetes の困難な道
  24. Elastic Stack — 詳細と実践
  25. Prometheus による監視とアラート
  26. モニタリングの技術 [電子書籍]
  27. 正規表現 (Regex) のチュートリアル
  28. DevOps の測定: モニタリングと可観測性
  29. HashiCorp Vault: 上級コース
  30. ボールトのチュートリアル
  31. コンテナのセキュリティとは何ですか?
  32. Kubernetes ボールトセットアップガイド
  33. Vault インジェクターのチュートリアル
  34. オンラインでコーディングを学べる 30 以上の Web サイト
  35. Python ブートキャンプを完了する: Python 3 でゼロからヒーローになる
  36. コーディング方法を学ぶ: Google の Go (golang)
  37. Linux シェル スクリプト: プロジェクトベースの学習アプローチ
  38. DevOps のために Git を学ぶ方法
  39. Git Complete: Git のステップバイステップガイドの決定版
  40. すべての開発者と管理者が知っておくべき Git の基本

 

おすすめ

転載: blog.csdn.net/jeansboy/article/details/131719484