ジュニアDevOpsエンジニア面接の質問と回答

Milad Bonakdar
著者
Linuxのトラブルシューティング、Git、CI/CD、Docker、クラウド基礎、Terraform、監視、Kubernetes、Bashを実践的な質問で対策します。
要点
ジュニア DevOps の面接では、問題を落ち着いて切り分けられるか、ソフトウェアデリバリーの流れを説明できるか、本番に近いツールを安全に扱えるかが見られます。Linux のサービスとログ、Git、CI/CD、Docker、クラウド基礎、Terraform、監視、Kubernetes、構成管理、Bash の質問を想定しましょう。
このガイドでは、答えだけでなく考え方も練習します。最初に何を確認するか、どのログを見るか、いつロールバックするか、どのタイミングで追加情報を求めるかを説明できるようにしましょう。
Linux の基礎
1. DevOps エンジニアとして日常的に使用する一般的な Linux コマンドについて説明してください。
回答: DevOps 作業に不可欠な Linux コマンド:
頻度: 非常に多い
難易度: 簡単
2. Linux で起動しないサービスをどのようにトラブルシューティングしますか?
回答: 体系的なトラブルシューティングのアプローチ:
よくある問題:
- 構成構文エラー
- ポートが既に使用中
- 権限拒否
- 依存関係の欠落
- ディスク容量の不足
頻度: 非常に多い
難易度: 中
Git によるバージョン管理
3. 基本的な Git ワークフローと一般的なコマンドについて説明してください。
回答: 日常的な DevOps タスクの Git ワークフロー:
ベストプラクティス:
- 明確なコミットメッセージを書く
- 頻繁にコミットし、定期的にプッシュする
- 機能ブランチを使用する
- プッシュする前にプルする
- コミットする前に変更を確認する
頻度: 非常に多い
難易度: 簡単
4. Git でマージコンフリクトをどのように解決しますか?
回答: ステップごとのコンフリクト解決:
コンフリクトマーカー:
<<<<<<< HEAD- 現在のブランチ=======- セパレータ>>>>>>> branch-name- 取り込む変更
頻度: 多い
難易度: 簡単~中
CI/CD の基礎
5. CI/CD とは何ですか?また、なぜ重要ですか?
回答: CI/CD は、継続的インテグレーション(Continuous Integration)と継続的デプロイメント/デリバリー(Continuous Deployment/Delivery)の略です。
継続的インテグレーション(CI):
- すべてのコミットでコードを自動的にビルドおよびテスト
- バグを早期に発見
- コードが適切に統合されることを確認
継続的デプロイメント(CD):
- テストに合格した後、自動的に本番環境にデプロイ
- リリースサイクルを高速化
- 手動エラーを削減
利点:
- フィードバックループの高速化
- 統合問題の軽減
- 自動テスト
- 一貫性のあるデプロイ
- 市場投入までの時間短縮
頻度: 非常に多い
難易度: 簡単
6. GitHub Actions を使用した基本的な CI/CD パイプラインについて説明してください。
回答: GitHub Actions ワークフローの例:
重要な概念:
- トリガー: パイプラインの実行タイミング(プッシュ、PR、スケジュール)
- ジョブ: 並行して実行できる独立したタスク
- ステップ: ジョブ内の個々のコマンド
- アーティファクト: ジョブ間で渡されるファイル
頻度: 非常に多い
難易度: 中
Docker とコンテナ化
7. Docker とは何ですか?また、なぜコンテナを使用するのですか?
回答: Docker は、コンテナでアプリケーションを開発、出荷、実行するためのプラットフォームです。
コンテナ vs VM:
- コンテナはホスト OS カーネルを共有(軽量)
- VM は完全な OS を含む(重量)
- コンテナは数秒で起動
- リソースの利用効率が向上
利点:
- 一貫性: どこでも同じ環境
- 分離: アプリケーションが干渉しない
- 移植性: どこでも実行可能
- 効率性: 軽量で高速
頻度: 非常に多い
難易度: 簡単
8. 一般的な Docker コマンドについて説明してください。
回答: 必須の Docker コマンド:
頻度: 非常に多い
難易度: 簡単
9. Web アプリケーションとデータベース用の Docker Compose ファイルを作成してください。
回答: マルチコンテナアプリケーションの例:
重要な概念:
- services: コンテナを定義
- depends_on: サービスの依存関係
- volumes: 永続的なデータストレージ
- environment: 環境変数
- ports: ポートマッピング
- restart: 再起動ポリシー
頻度: 多い
難易度: 中
クラウドの基礎
10. IaaS、PaaS、SaaS の違いについて説明してください。
回答: クラウドサービスモデル:
IaaS(Infrastructure as a Service):
- 提供:仮想マシン、ストレージ、ネットワーク
- 管理:OS、ランタイム、アプリケーション
- 例:AWS EC2、Azure VM、Google Compute Engine
- ユースケース:インフラストラクチャの完全な制御
PaaS(Platform as a Service):
- 提供:ランタイム環境、データベース、ミドルウェア
- 管理:アプリケーションとデータ
- 例:AWS Elastic Beanstalk、Heroku、Google App Engine
- ユースケース:インフラストラクチャではなくコードに集中
SaaS(Software as a Service):
- 提供:完全なアプリケーション
- 管理:ユーザーデータと設定
- 例:Gmail、Salesforce、Office 365
- ユースケース:すぐに使えるアプリケーション
頻度: 多い
難易度: 簡単
11. DevOps エンジニアが知っておくべき基本的な AWS サービスは何ですか?
回答: 必須の AWS サービス:
コンピューティング:
- EC2: 仮想サーバー
- Lambda: サーバーレス関数
- ECS/EKS: コンテナオーケストレーション
ストレージ:
- S3: オブジェクトストレージ
- EBS: EC2 用のブロックストレージ
- EFS: 共有ファイルストレージ
ネットワーク:
- VPC: 仮想プライベートクラウド
- Route 53: DNS サービス
- CloudFront: CDN
- ELB: ロードバランシング
データベース:
- RDS: マネージドなリレーショナルデータベース
- DynamoDB: NoSQL データベース
DevOps ツール:
- CodePipeline: CI/CD サービス
- CodeBuild: ビルドサービス
- CloudWatch: モニタリングとロギング
- IAM: アクセス管理
例:AWS CLI で EC2 インスタンスを起動:
頻度: 非常に多い
難易度: 中
Infrastructure as Code
12. Infrastructure as Code(IaC)とは何ですか?また、なぜ重要ですか?
回答: IaC とは、手動プロセスではなく、コードを通じてインフラストラクチャを管理することです。
利点:
- バージョン管理: インフラストラクチャの変更を追跡
- 再現性: 同一の環境を作成
- 自動化: 手動エラーを削減
- ドキュメント: コードがドキュメントとして機能
- 一貫性: どこでも同じ構成
一般的な IaC ツール:
- Terraform: マルチクラウドプロビジョニング
- Ansible: 構成管理
- CloudFormation: AWS 固有
- Pulumi: コードベースの IaC
Terraform の例:
頻度: 非常に多い
難易度: 中
13. 基本的な Terraform ワークフローについて説明してください。
回答: Terraform ワークフローの手順:
Terraform ファイル構造:
変数の例:
頻度: 多い
難易度: 中
モニタリングとロギング
14. Web アプリケーションで監視するメトリックは何ですか?
回答: 主要な監視メトリック:
アプリケーションメトリック:
- 応答時間/レイテンシ
- リクエストレート(1 秒あたりのリクエスト数)
- エラーレート(4xx、5xx エラー)
- スループット
システムメトリック:
- CPU 使用率
- メモリ使用量
- ディスク I/O
- ネットワーク I/O
インフラストラクチャメトリック:
- コンテナ/ポッドの状態
- サービスの可用性
- ロードバランサーのヘルス
Prometheus クエリの例:
アラートのしきい値:
- 応答時間 > 500ms
- エラーレート > 1%
- CPU 使用率 > 80%
- メモリ使用量 > 85%
- ディスク使用量 > 90%
頻度: 多い
難易度: 中
15. 複数のサーバーからのログを一元化するにはどうすればよいですか?
回答: 一元化されたロギングアーキテクチャ:
一般的なスタック(ELK):
- Elasticsearch: ログを保存してインデックスを作成
- Logstash/Fluentd: ログを収集して処理
- Kibana: ログを可視化して検索
Filebeat 構成の例:
ベストプラクティス:
- 構造化ロギング(JSON)を使用
- 相関 ID を含める
- 保持ポリシーを設定
- 戦略的にインデックスを作成
- ログボリュームを監視
頻度: 多い
難易度: 中
Kubernetes の基礎
16. Kubernetes とは何ですか?また、その基本的なコンポーネントは何ですか?
回答: Kubernetes は、コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するコンテナオーケストレーションプラットフォームです。
基本的なコンポーネント:
コントロールプレーン:
- API サーバー: すべてのコマンドのエントリポイント
- etcd: クラスターデータ用のキーバリューストア
- スケジューラー: ポッドをノードに割り当て
- コントローラーマネージャー: 必要な状態を維持
ワーカーノード:
- kubelet: ノード上のポッドを管理
- kube-proxy: ネットワークルーティング
- コンテナランタイム: containerd や CRI-O などの CRI ランタイムでコンテナを実行
基本的な Kubernetes オブジェクト:
1. ポッド:
2. デプロイメント:
3. サービス:
一般的な kubectl コマンド:
頻度: 非常に多い
難易度: 簡単
構成管理
17. Ansible の基本について説明し、簡単なプレイブックを作成してください。
回答: Ansible は、SSH を使用してサーバーを構成する、エージェントレス構成管理ツールです。
重要な概念:
- インベントリ: 管理するサーバーのリスト
- プレイブック: タスクを定義する YAML ファイル
- モジュール: 再利用可能な作業単位
- ロール: 整理されたタスクのコレクション
インベントリファイル:
簡単なプレイブック:
テンプレートの例:
プレイブックの実行:
Ansible ロールの構造:
ロールの使用:
アドホックコマンド:
頻度: 多い
難易度: 中
スクリプトと自動化
18. 一般的な DevOps タスクを自動化する bash スクリプトを作成してください。
回答: bash スクリプトは、DevOps の自動化に不可欠です。
例 1:バックアップスクリプト
例 2:ヘルスチェック スクリプト
面接では短いスクリプトでも構いません。エラー処理、終了コード、ログ出力、安全なテスト方法を説明できることが重要です。
出題頻度: 非常に高い
難易度: 中
まとめ
Git リポジトリ、テスト、CI ワークフロー、Dockerfile、簡単なデプロイ先、ログやメトリクスを含む小さなプロジェクトを準備しましょう。ジュニア職では、すべてのコマンドを暗記するよりも、問題を安全に切り分ける手順を説明できることが大切です。


