ちょっと話題の記事

最小構成でAmazonLinux環境を構築してみた

2015.06.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

AWSチームのすずきです。

AWSより提供されているLinuxディストーションのAmazon Linux、

Amazon Linux AMIは、できるだけ軽量かつシンプルに設計されており、不必要なアプリケーションやサービスは全く入っていません。 参考:Amazon Linux AMIの提供開始

とされていますが、標準提供のAMIから更にパッケージが絞り込まれた「minimal」のAMIが、AWSより提供されています。

今回、「minimal」のAMIを用いて最小構成のAmazonLinux環境を構築する方法を紹介します。

起動方法

コミュニティAMIとして起動

「minimal」のAmazonLinuxのAMIは、パブリックなコミュニティAMIとして配布されています。

amzn-minimal-ami-00

amzn-minimal-ami-01

amzn-minimal-ami-02

  • オペレーティングシステムとして「Amazon Linux」を選択
  • AMIの検索フォームに「minimal 2015.03.[0-9]」を指定
  • フォームは正規表現が利用可能です。
  • 2015年現在、リリース版のAmazonLinuxのAMI名は「年.月.連番」が付与されて管理されています。
  • EC2のインスタンスタイプ、今回「t2.micro」を利用したため「HVM」を指定しました。

ストレージ設定

  • デフォルトのAmazonLinuxでは、ルートディスクのEBS領域は8GB確保されますが、 「minimal」では、EBS領域は2GBでの起動が可能です。

amzn-minimal-ami-04

  • 「minimal」のAmazonLinux、起動直後のルートディスク消費は約700MBです。
/dev/xvda1 2029372 706728 1285312 36% /
  • EBSの種類、SSDベースの「gp2」とした場合、バーストによりOS起動の高速化などが期待出来ます。 ただし、連続したIO処理やswapが多発する環境で利用した場合、小容量のgp2はクレジットが枯渇しやすく、性能低下のリスクにご注意下さい。 参考:Amazon EBSのGeneral Purpose(SSD)のバーストルールを理解する

  • ルートディスクの残量枯渇は、重篤なシステム障害原因となります。 EBS容量の拡張は可能ですが、長期の連続稼働が想定される環境では余裕をもった設定とする事をお勧めします。

デフォルトとminimalの違い

Amazon Linux 2014.03、2015年6月時点の差分は以下の通りでした。

パッケージ

デフォルトに存在し、minimalでインストールされないRPMパッケージは下記の通りでした。

minimal未導入
acl
acpid
alsa-lib
at
attr
aws-amitools-ec2
aws-apitools-as
aws-apitools-common
aws-apitools-ec2
aws-apitools-elb
aws-apitools-mon
aws-apitools-rds
aws-cfn-bootstrap
aws-cli
bc
bind-libs
bind-utils
cryptsetup
cryptsetup-libs
cyrus-sasl-plain
dbus
dejavu-fonts-common
dejavu-sans-fonts
dejavu-serif-fonts
device-mapper
device-mapper-event
device-mapper-event-libs
device-mapper-libs
device-mapper-persistent-data
diffutils
dmraid
dmraid-events
dump
ec2-net-utils
epel-release
fontconfig
fontpackages-filesystem
freetype
giflib
gpm-libs
irqbalance
java
javapackages-tools
jpackage-utils
kernel
kernel-tools
kpartx
lcms2
libICE
libSM
libX11
libX11-common
libXau
libXext
libXfont
libXi
libXrender
libXtst
libaio
libfontenc
libicu
libjpeg-turbo
libpipeline
libpng
libpsl
libxcb
libxslt
lsof
lvm2
lvm2-libs
man-db
man-pages
mdadm
nano
nc
ntsysv
numactl
openssh-clients
pam_ccreds
pam_krb5
pam_passwdqc
parted
perl
perl-Carp
perl-Digest
perl-Digest-HMAC
perl-Digest-MD5
perl-Digest-SHA
perl-Encode
perl-Exporter
perl-File-Path
perl-File-Temp
perl-Filter
perl-Getopt-Long
perl-HTTP-Tiny
perl-PathTools
perl-Pod-Escapes
perl-Pod-Perldoc
perl-Pod-Simple
perl-Pod-Usage
perl-Scalar-List-Utils
perl-Socket
perl-Storable
perl-Text-ParseWords
perl-Time-Local
perl-constant
perl-libs
perl-macros
perl-parent
perl-podlators
perl-threads
perl-threads-shared
psacct
python27-bcdoc
python27-boto
python27-botocore
python27-colorama
python27-crypto
python27-daemon
python27-dateutil
python27-devel
python27-docutils
python27-ecdsa
python27-imaging
python27-jmespath
python27-kitchen
python27-lockfile
python27-paramiko
python27-pip
python27-ply
python27-pystache
python27-rsa
python27-simplejson
python27-virtualenv
rmt
rng-tools
rsync
ruby
ruby20
ruby20-irb
ruby20-libs
rubygem20-json
rubygem20-psy
rubygem20-rdoc
rubygems20
screen
sgpio
tcp_wrappers
time
tmpwatch
traceroute
ttmkfdir
tzdata-java
unzip
vim-common
vim-enhanced
vim-filesystem
wget
word
xorg-x11-fonts-Type1
xorg-x11-font-utils
yum-utils
zip

サービス(chkconfig)差分

chkconfigで確認した、常駐サービスの違いは下記の通りでした。

minimal未起動サービス
acpid
atd
blk-availability
irqbalance
lvm2-monitor
mdmonitor
messagebus
rngd

ディスク使用状況(df)

  • minimal
ファイルシス 1K-blocks 使用 使用可 使用% マウント位置
/dev/xvda1 2029372 706728 1285312 36% /
devtmpfs 502340 56 502284 1% /dev
tmpfs 510092 0 510092 0% /dev/shm
  • デフォルト
ファイルシス 1K-blocks 使用 使用可 使用% マウント位置
/dev/xvda1 8123812 1144760 6878804 15% /
devtmpfs 500896 56 500840 1% /dev
tmpfs 510092 0 510092 0% /dev/shm

メモリ、プロセス(top)

  • minimal
Tasks: 58 total, 1 running, 57 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1020188k total, 319908k used, 700280k free, 6492k buffers
Swap: 0k total, 0k used, 0k free, 265172k cached
  • デフォルト
Tasks: 61 total, 1 running, 60 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.8%sy, 0.0%ni, 99.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1020188k total, 472204k used, 547984k free, 11572k buffers
Swap: 0k total, 0k used, 0k free, 405960k cached

パッケージ追加例

  • 「minimal」のAmazonLinux、yumレポジトリはAmazonLinuxのデフォルトと共通です。 任意のパッケージを追加インストールする事で、デフォルト環境相当として利用可能です。
sudo yum install
aws-cfn-bootstrap aws-cli ec2-net-utils
bind-utils traceroute nc wget
lsof parted rng-tools tmpwatch
bc diffutils time
openssh-clients psacct
unzip yum-utils zip
jq

yum clean all
  • 追加パッケージ概要
RPMパッケージ名 機能
aws-cfn-bootstrap CloudFormation ヘルパースクリプト
aws-cli AWS CLI
ec2-net-utils EC2のENI(NIC)自動設定
bind-utils DNS確認(dig, nslookup)
traceroute NWルーティング確認
nc Netcat(NW疎通確認)
wget HTTPダウンローダ
lsof ファイル利用中プロセス確認
parted parted(fdisk後継、パーティション設定ツール)
rng-tools 乱数発生用
rsync rsync、ファイル同期
tmpwatch tmpの自動消去
bc GNU's bc
diffutils A GNU collection of diff utilities
time GNU Time、コマンド実行時間の計測
openssh-clients SSHクライアント
psacct コマンド履歴取得
unzip ZIPファイル解凍
wget HTTPダウンローダ
yum-utils yum支援ツール
zip ZIP
jq JSON処理

まとめ

Amazon Linux環境を「minimal」のAMIを利用し、最小構成の状態から構築を行う事で、 不要なパッケージの導入を回避でき、リソースの節約が可能となります。 また、パッチ適用漏れに起因するセキュリティリスクの軽減や、 新旧バージョンの開発環境が混在する事による不具合回避などの副次効果も期待出来ます。

ただし、AmazonLinux上で稼働させるアプリケーションだけでなく、 構築や監視運用などに利用するツールがAmazonLinuxデフォルトのパッケージに依存している場合もありますので、 十分な事前検証の上、ご利用頂く事をお勧めします。