クラウドエンジニアも基礎学習は大事と言う話

## はじめに

この記事では、エンジニア経験5年目の筆者が開発エンジニアから4年目にクラウドエンジニア(AWSが主)へキャリアチェンジした際に気づいた「基礎学習」が、如何に大事で一人前のクラウドエンジニアになるための近道であるかを伝えるためにAIに要約（例え話多め）してもらい執筆しました。これからクラウドエンジニアデビューする方々に向けて「基礎学習」がどれほど大事で役立つかをお伝えし、基礎をしっかりと身につけることで公式ドキュメントや技術記事をより効果的に理解し、実務で活躍する力を養うことを目的としています。

また、以下の内容についてはこの記事では取り扱いませんので、予めご了承ください。

1. **AWS以外のクラウドサービス**
    - AWS以外のクラウドサービス（例えば、Google Cloud PlatformやMicrosoft Azure）については触れません。

2. **専門用語の詳細な説明**
    - 記事内に出てくる各専門用語については説明いたしません。詳細は生成AIさん(ChatGPTやClaude)に聞けば手とり足とり教えてくれますし、突っ込んだ技術話はしていませんので99%正確な回答が得れると思います。
    
3. **高度な技術トピック**
    - 基礎を超えた高度な技術トピックや応用的な内容については、この記事の範囲外としていますので有識者は物足りない内容になります。

## 基礎が大事な理由

クラウドエンジニアに限った事ではないですが、エンジニアとして活躍するためにはまず「基礎」がしっかりしていることが不可欠です。基礎がしっかりしていると、公式ドキュメントや技術記事、技術本を読んだ時の理解力や集中度が全く違います。基礎がわかっていないと公式ドキュメントや実務レベルの技術本を読むと眠くなったり、集中できないですし、業務中に分からないことがわからない状態に陥り苦痛です。(私がそうでした)
そうならない為に背伸びして小難しい学習は辞めてまずは地に足つけて基礎をしっかり学びましょう。

## クラウドエンジニアとして活躍するために必要な基礎

クラウドエンジニアとして活躍するためには、以下の基礎をしっかりと身につけることが一番の近道であり重要と私は思っています。

### 1. クラウドコンピューティングの基本概念

クラウドの仕組みや、オンプレミスとの違い、主要なクラウドサービスモデル（IaaS、PaaS、SaaS）について理解しておくこと。例えば、オンプレミスでは物理的なサーバーを自社で管理しますが、クラウドではインターネット経由でリソースを利用できます。これは、自宅で料理を作るのと、レストランで食事をする違いのようなものです。自宅で料理を作る場合、食材を買いに行ったり、調理器具を揃えたりする必要がありますが、レストランでは注文するだけで料理が提供されます。このように、クラウドを利用することで、自分で環境を整える手間を省くことができます。

また、クラウドのスケーラビリティも重要なポイントです。オンプレミスの環境では、リソースが不足した場合に新たにサーバーを購入し、設置する必要がありますが、クラウドでは必要に応じてリソースを簡単にスケールアップやスケールダウンできます。これは、レストランで大勢の客が来た時に、キッチンが自動的に拡張されるようなものです。このようにクラウドを利用していくうえでクラウドの利点を把握しておく事は必須といえます。

### 2. AWSの主要サービスの理解

主要なAWSサービス（EC2、S3、RDS、VPC、IAMなど）の基本的な使い方や設定方法を学ぶことが大切です。例えば、EC2は仮想サーバーを提供し、S3はデータを保存する場所を提供します。それぞれのサービスの設定方法や概要レベルを理解しておくと、必要な時に適切に利用できますし、どんな事がしたいかをググって調べる事ができます。

各サービスの特徴を理解することで、適切なサービスを選択し、効率的にシステムを構築することができます。例えば、RDS（Relational Database Service）は、データベースの管理を簡素化するためのサービスですが、AuroraやDynamoDBなど他のデータベースサービスもあります。それぞれのサービスの特徴を把握し、プロジェクトの要件に応じて最適な選択をすることが重要です。これは、料理を作る際に、レシピに合った調理器具を選ぶようなものです。例えば、スープを作るなら鍋を使い、ステーキを焼くならフライパンを使うといった具合です。

### 3. ネットワークの基礎

ネットワーキングの基礎知識（サブネット、IPアドレス、ルーティング、セキュリティグループ、NACLなど）を理解しておくことが求められます。例えば、VPC（Virtual Private Cloud）内でサブネットを作成し、セキュリティグループでアクセス制御を行うことができます。これは、町の計画のようなもので、道路（ネットワーク）を整備し、家（サーバー）を建て、交通ルール（セキュリティポリシー）を設定することで、効率的かつ安全に運用できます。

ネットワークの設計はシステム全体のパフォーマンスやセキュリティに大きな影響を与えます。例えば、適切なサブネットの分割やルーティング設定を行うことで、トラフィックを最適化し、システムのパフォーマンスを向上させることができます。また、セキュリティグループやNACL（Network ACL）を適切に設定することで、不正アクセスからシステムを守ることができます。これは、町の治安を守るために、警察の配置や監視カメラの設置を計画するようなものです。

### 4. セキュリティの基本原則

AWSのセキュリティベストプラクティスやIAMロールの設定、暗号化、監査ログの管理方法などを学ぶことが重要です。例えば、IAM（Identity and Access Management）を使ってユーザーやロールに対するアクセス権限を細かく設定することで、セキュリティを強化できます。これは、家の鍵を誰に渡すかを慎重に決めるのと同じです。全員に家の鍵を渡してしまうとセキュリティが保てません。

また、データの暗号化や監査ログの管理も重要なポイントで、データの暗号化を行うことで万が一データが盗まれた場合でも、内容が解読されるリスクを低減できます。監査ログの管理を適切に行うことで、システムの利用状況や不正なアクセスを監視し、問題が発生した際に迅速に対応することができます。これは、家の中に監視カメラを設置し、不審な動きを常にチェックするようなものです。

### 5. オートメーションとインフラストラクチャーコード

Infrastructure as Code（IaC）ツール（CloudFormationやTerraform）の基本的な使い方を習得し、環境の自動化を実現するためのスクリプトやテンプレートを作成する能力が必要で、CloudFormationを使うことでテンプレートに基づいてAWSリソースを自動的に作成・管理することができます。

オートメーションを活用することで、手動作業を減らし、人的ミスを防ぐことができ環境の再現性が高まるため、開発環境と本番環境の差異を減らすことができます。これにより、開発から本番リリースまでのサイクルを短縮し、より迅速に新機能や修正を提供できるようになります。これは、レシピを使って毎回同じ味の料理を作るようなもので、レシピがあれば誰でも同じ手順で料理を作ることができ味のブレがなくなります。

## 基礎がしっかりしていると得られるメリット

### 理解力の向上

基礎をしっかりと理解していると、新しい技術を学ぶ際にスムーズに理解できるようになります。既存の知識が新しい情報を受け入れるための土台となるためです。例えば、基本的なネットワーク知識があると、VPCの高度な設定やトラブルシューティングが容易になります。

また、新しい技術を学ぶ際にも基礎が役立ちます。例えば、コンテナ技術やサーバーレスアーキテクチャを学ぶ際にも、基本的なクラウドの概念やネットワークの知識があると理解がスムーズに進みます。これは、新しいゲームを始める際に基本的なルールを知っているとゲームの進行がスムーズになるのと同じで、基礎をしっかりと身につけておくことで新しい技術に対するキャッチアップが早くなり、技術の変化にも柔軟に対応できます。

### 問題解決能力の向上

基礎を理解していることで、トラブルシューティングや問題解決の際に迅速かつ的確に対応できるようになります。基礎知識があることで問題の原因を特定し、適切な解決策を見つけることが容易になります。例えば、EC2インスタンスが動作しない場合、ネットワーク設定やIAMポリシーを素早くチェックできます。

また、基礎を理解していることで問題の予防策を講じることもできます。セキュリティの基本原則を理解していれば、事前に適切なセキュリティ対策を講じることで、問題の発生を未然に防ぐことができシステムの安定運用を実現できます。

### 効率的な学習

基礎がしっかりしていると、学習の効率が大幅に向上します。基礎がない場合、理解するために多くの時間を費やしてしまい、学習のペースが遅くなることがあります。例えば、S3の基本的な使い方を理解していると、データライフサイクル管理やアクセス制御の高度な機能を学ぶ際にスムーズに進められます。これは、英単語を覚えてから英文を読むのと同じで、英単語を知らなければ文章を理解することはできません。

効率的な学習を実現するためには、計画的な学習が重要です。基礎をしっかりと固めた上で段階的に高度な技術を学んでいくことで、無理なくスキルを向上させることができます。例えば、クラウドの基本概念を理解した後に、主要なAWSサービスの使い方を学び、その後にオートメーションやセキュリティの高度なトピックに進むといったステップを踏むことで、効率的に学習が進められます。

クラウドエンジニアとして優れた成果を出すためには、まずは基礎をしっかりと固めることが不可欠です。基礎を身につけることで、より高度な技術を習得し、実際の業務で活躍できる力を養うことができます。基礎がしっかりしていると、新しい技術に対する適応力が高まり、技術の進化にも柔軟に対応できるでしょう。