Amazon Linux
Amazon Linux はアマゾン ウェブ サービス(AWS)が提供します。これは Amazon EC2 上で実行するアプリケーションのために安定した安全で高性能な実行環境を提供できるよう設計されています。またこれには、起動設定ツールおよび多くの AWS 人気ライブラリやツールなど、AWS の統合を容易にするいくつかのパッケージも含まれています。AWS は Amazon Linux を実行しているすべてのインスタンスの現行のセキュリティとメンテナンスの更新を提供します。CentOS (および同様のディストリビューション) で開発された多くのアプリケーションは、Amazon Linux で実行されます。
目次
Amazon Linux の入手可能性
AWS は Amazon Linux 2 と Amazon Linux AMI を提供しています。別の Linux ディストリビューションから Amazon Linux に移行する場合、Amazon Linux 2 に移行することをお勧めします。
Amazon Linux AMI の最後のバージョンである 2018.03 は、2020 年 12 月 31 日に標準サポートが終了します。詳細については、ブログ投稿「Amazon Linux AMI のサポート終了
詳細については、「Amazon Linux 2
Amazon Linux インスタンスへの接続
デフォルトでは、Amazon Linux はリモートルート SSH を許可しません。また、パスワード認証は、パスワードのブルートフォース攻撃を防ぐために無効になっています。Amazon Linux インスタンスへの SSH ログインを有効にするには、起動時にキーペアをインスタンスに提供する必要があります。インスタンスを起動するときに使用するセキュリティグループで、SSH アクセスを許可するよう設定する必要もあります。デフォルトでは、SSH を使用してリモートログインできる唯一のアカウントは ec2-user; です。このアカウントには sudo 特権もあります。リモートルートログインを有効にする場合は、キーペアおよびセカンダリユーザーを使用する場合よりも安全性が低いことに注意してください。
Amazon Linux イメージの特定
各イメージには、そのイメージを特定する一意の /etc/image-id
ファイルが含まれています。このファイルには、イメージに関する次の情報が含まれています。
-
image_name
、image_version
、image_arch
— イメージを作成するときに Amazon が使用したビルドレシピの値。 -
image_stamp
— イメージの作成中に生成されたランダムな一意の 16 進値. -
image_date
— YYYYMMDDhhmmss 形式の、イメージを作成した UTC 時間 -
recipe_name
、recipe_id
— イメージを作成するときに Amazon が使用したビルドレシピの名前と ID。
Amazon Linux には、インストールされている現在のリリースを示す /etc/system-release
ファイルが含まれています。このファイルは、yum を使用して更新され、system-release
RPM の一部です。
Amazon Linux には、CPE 仕様に従う、機械による読み取りが可能なバージョンの /etc/system-release
も含まれています。「/etc/system-release-cpe
」を参照してください。
Amazon Linux 2
現在のバージョンの Amazon Linux 2 用の /etc/image-id
の例を以下に示します。
[ec2-user ~]$
cat /etc/image-id
image_name="amzn2-ami-hvm" image_version="2" image_arch="x86_64" image_file="amzn2-ami-hvm-2.0.20180810-x86_64.xfs.gpt" image_stamp="8008-2abd" image_date="20180811020321" recipe_name="amzn2 ami" recipe_id="c652686a-2415-9819-65fb-4dee-9792-289d-1e2846bd"
現在のバージョンの Amazon Linux 2 用の /etc/system-release
の例を以下に示します。
[ec2-user ~]$
cat /etc/system-release
Amazon Linux 2
次は、Amazon Linux 2 の /etc/os-release
の例です。
[ec2-user ~]$
cat /etc/os-release
NAME="Amazon Linux" VERSION="2" ID="amzn" ID_LIKE="centos rhel fedora" VERSION_ID="2" PRETTY_NAME="Amazon Linux 2" ANSI_COLOR="0;33" CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2" HOME_URL="https://amazonlinux.com/"
Amazon Linux AMI
現在の Amazon Linux AMI 用の /etc/image-id
の例を以下に示します。
[ec2-user ~]$
cat /etc/image-id
image_name="amzn-ami-hvm" image_version="2018.03" image_arch="x86_64" image_file="amzn-ami-hvm-2018.03.0.20180811-x86_64.ext4.gpt" image_stamp="cc81-f2f3" image_date="20180811012746" recipe_name="amzn ami" recipe_id="5b283820-dc60-a7ea-d436-39fa-439f-02ea-5c802dbd"
現在の Amazon Linux AMI 用の /etc/system-release
の例を以下に示します。
[ec2-user ~]$
cat /etc/system-release
Amazon Linux AMI release 2018.03
AWS コマンドラインツール
Amazon Linux AMI または Amazon Linux 2 のデフォルトリポジトリには、AWS の統合および使用のための次のコマンドラインツールが含まれています。Amazon
Linux AMI のパッケージの詳細なリストについては、「Amazon Linux AMI 2017.09 パッケージ
-
aws-amitools-ec2
-
aws-apitools-as
-
aws-apitools-cfn
-
aws-apitools-elb
-
aws-apitools-mon
-
aws-cfn-bootstrap
-
aws-cli
Amazon Linux 2 および最小バージョンの Amazon Linux (amzn-ami-minimal-*
および amzn2-ami-minimal-*
) には、これらのすべてのパッケージが含まれているとは限りません。ただし、これらのパッケージは、次のコマンドを使用してデフォルトリポジトリからインストールできます。
[ec2-user ~]$
sudo yum install -y
package_name
IAM ロールを使用して起動したインスタンスの場合、認証情報ファイルのインストール後、AWS_CREDENTIAL_FILE
、JAVA_HOME
、AWS_PATH
、PATH
および製品固有の環境変数を準備するためのシンプルなスクリプトが組み込まれます。これにより、上記のツールの設定が簡素化されます。
また、次に説明するように、複数のバージョンの API と AMI ツールをインストールできるように、これらのツールの希望するバージョンにアクセスするシンボリックリンクを
/opt/aws
に配置しました。
/opt/aws/bin
-
インストールされている各ツールディレクトリにある、
/bin
ディレクトリへのシンボリックリンク。 /opt/aws/{apitools|amitools}
-
インストールされた最新バージョンにアタッチされている
name
-version
フォームとname
シンボリックリンクのディレクトリに製品がインストールされます。 /opt/aws/{apitools|amitools}/
name
/environment.sh-
/etc/profile.d/aws-apitools-common.sh
により使用され、EC2_HOME
などの製品固有の環境変数を設定します。
パッケージリポジトリ
Amazon Linux 2 および Amazon Linux AMI は、各 Amazon EC2 の AWS リージョンでホストされているオンラインパッケージリポジトリと一緒に使用するように設計されています。これらのリポジトリは、Amazon Linux 2 および Amazon Linux AMI パッケージの継続的な更新だけでなく、何百もの一般的なオープンソースのサーバーアプリケーションへのアクセスを提供します。リポジトリはすべてのリージョンに存在し、yum 更新ツールを使用してアクセスできます。各リージョンでリポジトリをホストしているため、データ転送料金なしで、更新を迅速にデプロイできます。
Amazon Linux 2 および Amazon Linux AMI のセキュリティと機能強化は定期的に更新されます。インスタンスでデータまたはカスタム設定を保存する必要がない場合は、最新の AMI を使用して新しいインスタンスを開始できます。インスタンスでデータまたはカスタム設定を保存する必要がある場合は、Amazon Linux パッケージリポジトリを介してこれらのインスタンスを維持できます。これらのリポジトリには、更新されたすべてのパッケージが含まれます。実行中のインスタンスにこれらの更新を適用するよう選択できます。新しいバージョンの AMI がリリースされても、古いバージョンの AMI と更新パッケージは引き続き利用できます。
インスタンスがリポジトリにアクセスするには、インターネットへのアクセスが必要です。
パッケージをインストールするには、次のコマンドを使用します。
[ec2-user ~]$
sudo yum install
package
Amazon Linux AMI の場合、Enterprise Linux (EPEL) リポジトリの追加パッケージへのアクセスが設定されていますが、デフォルトでは有効になっていません。Amazon Linux 2 は EPEL リポジトリを使用するように設定されていません。EPEL は、リポジトリのパッケージのほか、サードパーティ製のパッケージを提供します。AWS はサードパーティ製のパッケージをサポートしていません。EPEL レポジトリは、次のコマンドを使って有効にできます。
-
複数 Amazon Linux 2:
[ec2-user ~]$
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
-
Amazon Linux AMI の場合:
[ec2-user ~]$
sudo yum-config-manager --enable epel
Amazon Linux に必要なアプリケーションが含まれていない場合は、アプリケーションを Amazon Linux インスタンスに直接インストールするだけです。Amazon Linux はパッケージ管理に RPM と yum を使用しています。これは、新しいアプリケーションをインストールする最も簡単な方法です。Amazon Linux 中央リポジトリで利用可能なアプリケーションは多数あるので、アプリケーションがそのリポジトリで利用できるかどうかを最初に必ず確認する必要があります。これらのアプリケーションは、Amazon Linux インスタンスに簡単に追加できます。
実行中の Amazon Linux インスタンスにアプリケーションをアップロードするには、scp または sftp を使用し、インスタンスにログオンしてアプリケーションを設定します。組み込みの cloud-init パッケージから PACKAGE_SETUP アクションを使用して、インスタンスの起動時にアプリケーションをアップロードすることもできます。詳細については、「cloud-init」を参照してください。
セキュリティ更新プログラム
セキュリティの更新は、パッケージリポジトリと更新された AMI を使用して提供されます。セキュリティアラートは、Amazon Linux セキュリティセンター
Amazon Linux は、起動時にクリティカルまたは重要なセキュリティ更新をダウンロードおよびインストールするよう設定されています。起動後にユースケースに必要な更新を行うことをお勧めします。たとえば、起動時にすべての更新(セキュリティ更新だけでなく)を適用したり、各更新を評価してシステムに適用可能なもののみを適用することができます。これは、cloud-init
設定 repo_upgrade
を使用して制御されます。次の cloud-init 設定のスニペットは、インスタンス初期化に渡すユーザーデータテキストで設定を変更する方法を示しています。
#cloud-config
repo_upgrade: security
repo_upgrade
の有効な値は次のとおりです。
critical
-
まだ適用されていない緊急のセキュリティ更新プログラムを適用します。
important
-
まだ適用されていない緊急および重要なセキュリティ更新プログラムを適用します。
medium
-
まだ適用されていない緊急、重要、中レベルのセキュリティ更新プログラムを適用します。
low
-
低レベルのセキュリティ更新プログラムを含む、まだ適用されていないセキュリティ更新プログラムをすべて適用します。
security
-
Amazon によってセキュリティ更新としてマークされた保留中のクリティカルまたは重要な更新を適用します。
bugfix
-
Amazon によってバグフィックスとしてマークされた更新を適用します。バグフィックスは大きなサイズの更新セットで、セキュリティ更新および他のさまざまな小さなバグに対する修正が含まれます。
all
-
分類に関係なく、使用できる適切な更新すべてを適用します。
none
-
起動時に更新をインスタンスに適用しません。
repo_upgrade
のデフォルトの設定は security です。つまり、ユーザーデータに異なる値を指定しない場合、Amazon Linux はその時点でインストールされたパッケージの起動時にセキュリティアップグレードを実行します。Amazon
Linux はまた、/etc/motd
ファイルを使用してログインする際に利用可能なアップデートの数をリストすることによって、インストールされたパッケージのアップデートを通知します。これらの更新をインストールするには、インスタンスで
sudo yum upgrade を実行する必要があります。
リポジトリの設定
Amazon Linux では、AMI はスナップショットとして扱われ、yum update -y の実行時には、最新のパッケージを常に提供するリポジトリおよび更新構造を備えています。
このリポジトリ構造は、Amazon Linux のあるバージョンから次のバージョンへのローリング更新を可能にするように、連続的な更新が配信されるように設定されています。たとえば、前のバージョンの Amazon Linux AMI(2017.09 やそれより前のバージョンなど)からインスタンスを起動し、yum update -y を実行する場合でも、最新のパッケージが利用できます。
ローリング更新を無効にするには、lock-on-launch 機能を有効にします。Lock-on-launch 機能は、インスタンスが、指定したリリースの AMI からのみ更新を受け取れるようにロックします。たとえば、2017.09 AMI に移行する準備ができるまでは、2018.03 AMI を起動したときに、2018.03 AMI より前にリリースされた更新のみを受け取るよう指定できます。
最新ではないリポジトリのバージョンに固定すると、それ以上の更新を受け取ることができません。更新を継続的に受け取るには、最新の AMI を使用するか、必ず最新とされているリポジトリで AMI を更新する必要があります。
新しいインスタンスで lock-on-launch を有効にするには、次のユーザーデータを cloud-init に渡してインスタンスを起動します。
#cloud-config
repo_releasever: 2017.09
既存のインスタンスを現在の AMI バージョンにロックするには
-
編集
/etc/yum.conf
. -
releasever=latest
をコメントアウトします。 -
キャッシュをクリアするには、yum clean all を実行します。
Extras library (Amazon Linux 2)
Amazon Linux 2 では、Extras Library を使用してアプリケーションおよびソフトウェア更新をインスタンスにインストールできます。このようなソフトウェア更新は、トピックと呼ばれます。特定のバージョンのトピックをインストールしたり、最新バージョンを使用するためにバージョン情報を省略したりすることができます。
使用可能なトピックのリストを表示するには、次のコマンドを使用します。
[ec2-user ~]$
amazon-linux-extras list
トピックを有効にし、パッケージの最新バージョンをインストールして最新の状態を維持するには、次のコマンドを使用します。
[ec2-user ~]$
sudo amazon-linux-extras install
topic
トピックを有効にし、パッケージの特定のバージョンをインストールして安定性を確保するには、次のコマンドを使用します。
[ec2-user ~]$
sudo amazon-linux-extras install
topic
=version
topic
=version
トピックからインストールされたパッケージを削除するには、次のコマンドを使用します。
[ec2-user ~]$
sudo yum remove $(yum list installed | grep amzn2extra-
topic
| awk '{ print $1 }')
このコマンドでは、extra の依存関係としてインストールされたパッケージは削除されません。
トピックを無効にし、yum パッケージマネージャーからパッケージにアクセスできないようにするには、次のコマンドを使用します。
[ec2-user ~]$
sudo amazon-linux-extras disable
topic
このコマンドは、上級ユーザーを対象としています。このコマンドの使用が不適切な場合、パッケージ互換性の競合が発生する可能性があります。
参照のためのソースパッケージへのアクセス
Amazon Linux で提供されているツールを使用して、インスタンスにインストールしたパッケージソースを参照するために表示できます。ソースパッケージは、Amazon Linux およびオンラインパッケージリポジトリに含まれるすべてのパッケージで利用できます。インストールするソースパッケージのパッケージ名を確認し、yumdownloader --source コマンドを使用して実行中のインスタンス内にソースを表示します。例:
[ec2-user ~]$
yumdownloader --source bash
ソース RPM は解凍できます。そして、標準の RPM ツールを使用して、参照するためにソースツリーを表示できます。デバッグが完了したら、パッケージを利用できます。
cloud-init
cloud-init パッケージは、Canonical によって構築されたオープンソースアプリケーションであり、Amazon EC2 などのクラウドコンピューティング環境で Linux イメージをブートストラップするときに使用されます。Amazon Linux にはカスタマイズされたバージョンの cloud-init が含まれています。これにより、起動時のインスタンスに対するアクションを指定することができます。インスタンスの起動時に、ユーザーデータフィールドを使用して必要なアクションを cloud-init に渡すことができます。つまり、さまざまなユースケースに対して共通の AMI を使用し、起動時にその AMI を動的に設定できます。Amazon Linux はまた、ec2 ユーザアカウントの初期設定を実行するために cloud-init を使用します。
詳細については、「cloud-init ドキュメント
Amazon Linux は、/etc/cloud/cloud.cfg.d
と /etc/cloud/cloud.cfg
にある cloud-init アクションを使用します。独自の cloud-init アクションファイルを /etc/cloud/cloud.cfg.d
に作成することができます。このディレクトリ内のすべてのファイルは、cloud-init で読み取られます。それらは辞書と同じ順序に読み取られ、後のファイルは以前のファイルの値を上書きします。
cloud-init パッケージは、起動時にインスタンスのこれらの (およびその他の) 共通の設定タスクを実行します。
-
デフォルトのロケールを設定.
-
ホスト名を設定.
-
ユーザーデータの解析と処理.
-
ホスト プライベート SSH キーの生成.
-
容易にログインおよび管理できるように、ユーザーのパブリック SSH キーを
.ssh/authorized_keys
に追加する. -
パッケージ管理のためにリポジトリを準備する
-
ユーザーデータで定義されたパッケージアクションの処理.
-
ユーザーデータにあるユーザースクリプトの実行.
-
インスタンスストアボリュームをマウントする (該当する場合)
-
デフォルトでは、
ephemeral0
インスタンスストアボリュームがある場合は/media/ephemeral0
にマウントされ、有効なファイルシステムが含まれます。それ以外の場合は、マウントされません。 -
デフォルトでは、インスタンスに関連付けられたスワップボリュームがマウントされます (
m1.small
およびc1.medium
インスタンスタイプの場合のみ)。 -
次の cloud-init ディレクティブを使用して、デフォルトのインスタンスストアボリュームマウントを上書きすることができます。
#cloud-config mounts: - [ ephemeral0 ]
マウントをより詳細にコントロールするには、cloud-init ドキュメントの「マウント
」を参照してください。 -
TRIM をサポートするインスタンスストアボリュームは、インスタンスの起動時にはフォーマットされないため、マウントする前にパーティション化してフォーマットする必要があります。詳細については、「インスタンスストアボリュームの TRIM のサポート」を参照してください。
disk_setup
モジュールを使用して、起動時にインスタンスストアボリュームをパーティションおよびフォーマットすることができます。詳細については、cloud-init ドキュメントの「Disk Setup」を参照してください。
-
サポートされているユーザーデータ形式
cloud-init パッケージは、さまざまな形式のユーザーデータを処理できます。
-
Gzip
-
ユーザーデータが gzip で圧縮されている場合、cloud-init はデータを解凍し、適切に処理します。
-
-
MIME マルチパート
-
MIME マルチパートファイルを使用して、複数のデータタイプを指定できます。たとえば、ユーザーデータスクリプトとクラウド設定タイプの両方を指定できます。マルチパートファイルのパートの形式が、サポートされている形式のいずれかの場合、そのパートは cloud-init で処理できます。
-
-
Base64 デコード
-
ユーザーデータが base64 でエンコードされている場合、cloud-init は、デコードされたデータをサポートされているタイプのいずれかとして認識できるか確認します。デコードされたデータを認識できる場合、データをデコードし、適切に処理します。認識できない場合、base64 データは変更されません。
-
-
ユーザーデータスクリプト
-
「
#!
」または「Content-Type: text/x-shellscript
」で始まります。 -
このスクリプトは、初回の起動サイクル時に
/etc/init.d/cloud-init-user-scripts
によって実行されます。これは起動プロセスの後半 (初期設定アクションが実行された後) に実行されます。
-
-
インクルードファイル
-
「
#include
」または「Content-Type: text/x-include-url
」で始まります。 -
このコンテンツはインクルードファイルです。ファイルには URL の一覧 (1行に1つの URL) が含まれます。各 URL が読み取られ、そのコンテンツが同じルールセットを使用して渡されます。URL から読み取られたコンテンツは gzip、MIME マルチパート、またはプレーンテキスト形式になります。
-
-
クラウド設定データ
-
「
#cloud-config
」または「Content-Type: text/cloud-config
」で始まります。 -
このコンテンツはクラウド設定データです。サポートされている設定形式のコメント付きサンプルについては、例を参照してください。
-
-
Upstart ジョブ
-
「
#upstart-job
」または「Content-Type: text/upstart-job
」で始まります。 -
このコンテンツは
/etc/init
のファイルに格納され、upstart は他の upstart ジョブごとにコンテンツを消費します。
-
-
クラウドブートフック
-
「
#cloud-boothook
」または「Content-Type: text/cloud-boothook
」で始まります。 -
このコンテンツはブートフックデータです。このデータは
/var/lib/cloud
にあるファイルに保存され、すぐに実行されます。 -
これは最初に使用可能な「フック」です。1 回だけ実行するためのメカニズムはありません。ブートフックは自身でこの点に対処する必要があります。環境変数
INSTANCE_ID
でインスタンス ID が指定されています。この変数を使用して、インスタンスあたり1つのブートフックデータのセットを提供します。
-
Amazon Linux 通知のサブスクライブ
新しい AMI が使用可能になったときに通知を受けるには、Amazon SNS を使用してサブスクライブします。
Amazon Linux の通知をサブスクライブするには
-
Amazon SNS コンソール (https://console.aws.amazon.com/sns/v3/home
) を開きます。 -
ナビゲーションバーで、必要に応じてリージョンを [米国東部(バージニア北部)] に変更します。購読する SNS 通知が作成されたリージョンを選択する必要があります。
-
ナビゲーションペインで、[Subscriptions]、[Create subscription] の順に選択します。
-
[サブスクリプションの作成] ダイアログボックスで、次の操作を行います。
-
[Amazon Linux 2] [トピックの ARN] には、以下の Amazon リソースネーム (ARN) をコピーして貼り付けます。
arn:aws:sns:us-east-1:137112412989:amazon-linux-2-ami-updates
-
[Amazon Linux] [トピックの ARN] には、以下の Amazon リソースネーム (ARN) をコピーして貼り付けます。
arn:aws:sns:us-east-1:137112412989:amazon-linux-ami-updates
-
[Protocol] で [Email] を選択します。
-
[Endpoint] に、通知を受信するために使用できる E メールアドレスを入力します。
-
[Create subscription] を選択します。
-
-
「AWS Notification - Subscription Confirmation」という件名の確認メールを受け取ります。メールを開いて [Confirm subscription] を選択して受信登録を完了します。
AMI がリリースされるごとに、対応するトピックの受信者に通知が送信されます。このような通知を停止するには、以下の手順を使用してサブスクリプション解除します。
Amazon Linux の通知の受信登録を解除するには
-
Amazon SNS コンソール (https://console.aws.amazon.com/sns/v3/home
) を開きます。 -
ナビゲーションバーで、必要に応じてリージョンを [米国東部(バージニア北部)] に変更します。SNS 通知が作成されたリージョンを使用する必要があります。
-
ナビゲーションペインで、[サブスクリプション] を選択し、サブスクリプションを選択したら、[アクション]、[サブスクリプションの削除] の順に選択します。
-
確認を求めるメッセージが表示されたら、[削除] を選択します。
Amazon Linux AMI の SNS メッセージ形式
SNS メッセージのスキーマは次のとおりです。
{ "description": "Validates output from AMI Release SNS message", "type": "object", "properties": { "v1": { "type": "object", "properties": { "ReleaseVersion": { "description": "Major release (ex. 2018.03)", "type": "string" }, "ImageVersion": { "description": "Full release (ex. 2018.03.0.20180412)", "type": "string" }, "ReleaseNotes": { "description": "Human-readable string with extra information", "type": "string" }, "Regions": { "type": "object", "description": "Each key will be a region name (ex. us-east-1)", "additionalProperties": { "type": "array", "items": { "type": "object", "properties": { "Name": { "description": "AMI Name (ex. amzn-ami-hvm-2018.03.0.20180412-x86_64-gp2)", "type": "string" }, "ImageId": { "description": "AMI Name (ex.ami-467ca739)", "type": "string" } }, "required": [ "Name", "ImageId" ] } } } }, "required": [ "ReleaseVersion", "ImageVersion", "ReleaseNotes", "Regions" ] } }, "required": [ "v1" ] }