0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWSで使用するOSの選び方を調べてみた

0
Posted at

AWSで使用するOSの選び方を調べてみた

AWSでEC2やECS、EKSなどを構築する際、どのOSを選択すればよいのでしょうか。

Amazon Linux、Ubuntu、RHEL、Windows Serverなどの選択肢がありますが、単純に特徴を比較するだけでは判断できません。

実際の開発現場では、社内リポジトリの構成、使用するミドルウェア、既存の運用スクリプト、サポート期間などを確認する必要があります。

今回は、AWSでOSを選定する際に、具体的に何を確認し、どのように判断するのかを調べてみました。

OS選択の基本的な判断基準

判断項目 確認する内容
アプリケーション 対応OS・バージョン・CPUアーキテクチャ
社内リポジトリ Dockerfile、Terraform、Ansible、Shell Script
パッケージ管理 apt、dnf、rpm、deb
運用体制 社内の構築実績、監視ツール、障害対応手順
サポート期間 セキュリティ更新、EOL、延長サポート
費用 OSライセンス、商用サポート、運用コスト

特に既存システムの移行や追加構築では、社内リポジトリの内容が重要な判断材料になります。

EC2でOSを選ぶ場合

EC2では、AMI(Amazon Machine Image)を通じてOSを選択します。

代表的なLinux系OSを比較します。

判断項目 Amazon Linux 2023 Ubuntu LTS RHEL
OSライセンス 追加ライセンス費用なし 通常版は無料 有料
標準サポート 5年間 5年間 メジャーバージョンごとに異なる
パッケージ管理 dnf apt dnf
パッケージ形式 rpm deb rpm
商用サポート AWSサポート Canonical Red Hat
主な選定理由 AWS中心の新規構築 Ubuntu向けの既存構成・動作保証 RHEL認定製品・企業標準

※費用・サポート内容はバージョンや契約によって異なります。

社内リポジトリから判断する

例えば、GitHubなどの社内リポジトリに以下のファイルが存在する場合、OS選定の判断材料になります。

確認するファイル 記述例 判断できること
Dockerfile FROM ubuntu:24.04 コンテナ内でUbuntuを使用
playbook.yml ansible.builtin.apt Debian・Ubuntu系のパッケージ管理に依存
setup.sh apt-get install nginx Ubuntuなどのapt系OSを想定
main.tf UbuntuのAMI IDを指定 EC2のホストOSにUbuntuを使用
README.md Ubuntu 24.04 LTS 開発・動作確認環境としてUbuntuを指定
.github/workflows/*.yml runs-on: ubuntu-24.04 CIの実行環境がUbuntu
.deb Ubuntu向けパッケージ Debian・Ubuntu系のパッケージを利用
.rpm RHEL向けパッケージ RPM系OSを利用する可能性

ただし、DockerfileやGitHub ActionsでUbuntuを使用しているだけでは、EC2のホストOSまでUbuntuにする必要はありません。

ホストOSの選定では、TerraformやAnsible、EC2上で直接実行するShell Scriptを優先して確認します。

Terraformから判断する例

例えば、Terraformに以下の記述がある場合です。

resource "aws_instance" "web" {
  ami           = "ami-xxxxxxxxxxxxxxxxx"
  instance_type = "t3.micro"
}

ami に指定されたAMI IDから、OSを確認できます。

AMI IDだけではOSの種類が分からないため、AWS CLIなどで確認します。

aws ec2 describe-images \
  --image-ids ami-xxxxxxxxxxxxxxxxx \
  --query 'Images[*].[Name,Description,PlatformDetails]'

既存環境がUbuntuのAMIを使用している場合、同じOSを選ぶことで構築手順や運用方法を統一できる可能性があります。

ただし、AMIはリージョンによってIDが異なるため注意が必要です。

Ansibleから判断する例

- name: Install nginx
  ansible.builtin.apt:
    name: nginx
    state: present
    update_cache: yes

この場合、apt を利用しているため、UbuntuやDebian系OSを想定した処理と判断できます。

Amazon Linuxでは通常 dnf を使用するため、そのままでは実行できません。

既存のAnsibleを変更せず利用したい場合、Ubuntuが有力な候補になります。

一方、OSの変更を前提としているなら、Ansible側を修正する選択肢もあります。

Shell Scriptから判断する例

Ubuntu系の場合:

sudo apt-get update
sudo apt-get install -y nginx

Amazon Linux 2023の場合:

sudo dnf install -y nginx

RHELの場合:

sudo dnf install -y nginx

同じnginxをインストールする処理でも、OSによって使用するコマンドが異なります。

そのため、既存の構築スクリプトがどのOSを想定しているか確認する必要があります。

実際の判断例

ケース1:AWSで新規Webサーバーを構築する

  • 特定のOSに依存するソフトウェアがない
  • 社内に既存の構築スクリプトがない
  • AWS上で運用することが前提

この場合、Amazon Linux 2023を第一候補にします。

ケース2:社内リポジトリにUbuntu向けAnsibleが存在する

  • ansible.builtin.apt を使用
  • Ubuntu 24.04 LTSで動作確認済み
  • 運用担当者がUbuntuに慣れている

この場合、Ubuntu 24.04 LTSを第一候補にします。

ケース3:業務ソフトウェアがRHEL 9のみを正式サポートする

  • ベンダーの動作保証が必要
  • RHEL 9向けのRPMパッケージが提供されている
  • 商用サポートが必要

この場合、RHEL 9を選択します。

参考資料:

ECSでOSを選ぶ場合

ECSでは、まずEC2起動タイプとFargate起動タイプのどちらを使用するか確認します。

EC2起動タイプ

OS 選択する基準
Amazon Linux 一般的なLinuxコンテナの実行、ホストOSのカスタマイズ
Bottlerocket コンテナ専用OSでホストの変更を最小限にしたい
Windows Server Windowsコンテナを実行する必要がある

社内リポジトリから判断する

確認するファイル 記述例 判断できること
Dockerfile FROM mcr.microsoft.com/windows/servercore Windowsコンテナが必要
Dockerfile FROM ubuntu:24.04 Linuxコンテナを使用
task-definition.json "operatingSystemFamily": "LINUX" ECSタスクのOSがLinux
task-definition.json "cpuArchitecture": "ARM64" Arm64対応の実行環境が必要
Terraform requires_compatibilities = ["FARGATE"] Fargateで実行する設定

例えば、Dockerfileに以下の記述がある場合です。

FROM mcr.microsoft.com/windows/servercore:ltsc2022

Windowsコンテナを使用しているため、Windows対応の実行環境が必要になります。

一方、以下の場合はLinuxコンテナです。

FROM ubuntu:24.04

ただし、Linuxコンテナだからといって、ホストOSをUbuntuにする必要はありません。

Amazon LinuxやBottlerocketなどでも、対応するLinuxコンテナを実行できます。

Bottlerocketを選ぶ判断

Bottlerocketはコンテナ実行に特化したOSです。

例えば、以下の条件なら候補になります。

  • EC2上でコンテナのみを実行する
  • ホストOSへのソフトウェア追加が不要
  • OSの変更を最小限にしたい
  • 既存の監視・セキュリティツールがBottlerocketに対応している

逆に、ホストOSに独自のパッケージや管理ツールをインストールする必要がある場合、Amazon Linuxなどを検討します。

Fargate起動タイプ

FargateではホストOSを直接管理しません。

そのため、主に以下を確認します。

  • LinuxコンテナかWindowsコンテナか
  • CPUアーキテクチャはx86_64かArm64か
  • コンテナイメージが実行環境に対応しているか
  • Fargateで必要な機能を利用できるか

参考資料:

EKSでOSを選ぶ場合

EKSでは、Kubernetesのワーカーノードに使用するOSを検討します。

OS 選択する基準
Amazon Linux 一般的なLinuxノードを構築したい
Bottlerocket コンテナ専用OSで運用したい
Windows Server Windowsコンテナを実行したい

ただし、利用するノードの管理方式によって、選択できるOSは異なります。

社内リポジトリから判断する

確認するファイル 記述例 判断できること
Kubernetesマニフェスト nodeSelector Podが特定のOSを要求しているか
Helm Chart nodeSelector デプロイ対象ノードのOS
Terraform ami_type = "AL2023_x86_64_STANDARD" Amazon Linux 2023を使用
Terraform ami_type = "BOTTLEROCKET_x86_64" Bottlerocketを使用
DaemonSet ホスト上のファイルや機能を参照 ホストOSとの互換性確認が必要

例えば、Kubernetesマニフェストに以下の記述がある場合です。

nodeSelector:
  kubernetes.io/os: linux

このPodはLinuxノードを対象にしています。

一方、以下の場合はWindowsノードを対象にしています。

nodeSelector:
  kubernetes.io/os: windows

このように、既存のKubernetesマニフェストからOS要件を確認できます。

ただし、Linuxノードを指定しているだけでは、Amazon LinuxとBottlerocketのどちらを選ぶかまでは判断できません。

その場合は、DaemonSetや監視エージェント、ホストOSのカスタマイズ要件を確認します。

実際の判断例

ケース1:既存の監視エージェントをホストOSに導入する

監視エージェントがAmazon Linuxに対応している場合、Amazon Linuxを候補にします。

ケース2:コンテナ専用ノードとして運用する

ホストOSに独自のソフトウェアを導入する必要がなければ、Bottlerocketを候補にします。

ケース3:Windowsコンテナを実行する

Windows Serverノードを検討します。

ただし、KubernetesのバージョンやWindowsノードの機能制限を確認する必要があります。

参考資料:

LambdaでOSを選ぶ場合

Lambdaでは、EC2のようにOSを自由に選択できません。

そのため、OSの種類よりもランタイムやライブラリとの互換性を確認します。

社内リポジトリから判断する

確認するファイル 記述例 判断できること
template.yaml Runtime: python3.12 Pythonランタイムを使用
serverless.yml runtime: nodejs22.x Node.jsランタイムを使用
Dockerfile FROM public.ecr.aws/lambda/python:3.12 Lambda対応のベースイメージを使用
requirements.txt numpy など ネイティブライブラリの互換性確認が必要
Terraform architectures = ["arm64"] Arm64対応の依存ライブラリが必要

例えば、Dockerfileに以下の記述がある場合です。

FROM public.ecr.aws/lambda/python:3.12

AWSが提供するPython 3.12向けのLambdaベースイメージを使用しています。

この場合、ベースイメージのOS環境に対応したライブラリを使用する必要があります。

また、ネイティブライブラリを使用する場合、CPUアーキテクチャとの互換性も重要になります。

参考資料:

RDSやS3の場合

RDSやS3では、基盤OSを利用者が選択する必要はありません。

サービス OS選択 主な判断項目
RDS 不要 DBエンジン、バージョン、互換性
S3 不要 ストレージクラス、アクセス権限、保存期間

例えば、RDSでMySQLを利用する場合、OSではなくMySQLのバージョンやアプリケーションとの互換性を確認します。

参考資料:

まとめ

AWSでOSを選択する際には、OSそのものの特徴だけでなく、社内リポジトリや既存のインフラ構成を確認することが重要です。

例えば、EC2で新しいサーバーを構築する場合でも、社内にUbuntu向けのAnsibleやShell Scriptが存在するなら、Ubuntuを選択する合理的な理由になります。

一方、特定のOSに依存するソフトウェアがなく、AWS中心の新規構築であれば、Amazon Linux 2023が有力な候補になります。

ECSやEKSでは、コンテナのOSとホストOSを区別し、実行方式や運用ツールとの互換性を確認する必要があります。

OSを選定する際は、単に「どのOSがよいか」ではなく、「既存の構成やアプリケーションの要件から、なぜそのOSを選ぶのか」を説明できることが重要です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?