

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AL2 インスタンスを設定する
<a name="configure-ec2-instance"></a>

AL2 インスタンスが正常に起動してログインしたら、そのインスタンスを変更できます。特定のアプリケーションのニーズを満たすためにインスタンスを設定するには、多くの方法があります。ここでは、初めて作業する場合の一般的なタスクについて説明します。

**Topics**
+ [一般的な設定シナリオ](#instance-configuration-scenarios)
+ [AL2 インスタンスでソフトウェアを管理する](managing-software.md)
+ [Amazon EC2 AL2 インスタンスのプロセッサ状態制御](processor_state_control.md)
+ [AL2 の I/O スケジューラ](io-scheduler.md)
+ [AL2 インスタンスのホスト名を変更する](set-hostname.md)
+ [AL2 インスタンスで動的 DNS を設定する](dynamic-dns.md)
+ [AL2 の ec2-net-utils を使用してネットワークインターフェイスを設定する](ec2-net-utils.md)

## 一般的な設定シナリオ
<a name="instance-configuration-scenarios"></a>

Amazon Linux のベースのディストリビューションには、基本的なサーバー操作に必要なソフトウェアパッケージとユーティリティが含まれています。ただし、さまざまなソフトウェアリポジトリでさらに多くのソフトウェアパッケージを利用できます。また、ソースコードから、さらに多くのパッケージソースコードを作成できます。これらの場所からソフトウェアをインストールし、作成する方法についての詳細は、[AL2 インスタンスでソフトウェアを管理する](managing-software.md) を参照してください。

Amazon Linux インスタンスには、`ec2-user` が事前設定されていますが、スーパーユーザー権限を持たない他のユーザーを追加することがあります。ユーザーの追加と削除の詳細については、*Amazon EC2 ユーザーガイド*」の[Linux「インスタンスでユーザーを管理する](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/managing-users.html)」を参照してください。

お客様がネットワークを所有し、それにドメイン名を登録している場合、インスタンスのホスト名を変更して、そのドメインに含まれる一部としてインスタンスを識別できます。また、システムプロンプトを変更して、より意味のある名前を表示することもできます。ホスト名設定を変更する必要はありません。詳細については、[AL2 インスタンスのホスト名を変更する](set-hostname.md)を参照してください。動的 DNS サービスプロバイダを使用するようにインスタンスを設定できます。詳細については、[AL2 インスタンスで動的 DNS を設定する](dynamic-dns.md)を参照してください。

Amazon EC2 でインスタンスを起動するとき、起動後にそのインスタンスにユーザーデータを渡し、一般的な設定タスクを実行したり、スクリプトを実行したりできます。2 つのタイプのユーザーデータを Amazon EC2 に渡すことができます。cloud-init ディレクティブとシェルスクリプトです。詳細については、*Amazon EC2 * [ユーザーガイド」の「起動時にLinuxインスタンスでコマンド](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html)を実行する」を参照してください。

# AL2 インスタンスでソフトウェアを管理する
<a name="managing-software"></a>

Amazon Linux のベースのディストリビューションには、基本的なサーバー操作に必要なソフトウェアパッケージとユーティリティが含まれています。

この情報は AL2 に適用されます。AL2023 の詳細については、Amazon Linux 2[AL2023の「AL2023 でのパッケージとオペレーティングシステムの更新の管理](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html)」を参照してください。 **

ソフトウェアは、最新の状態に維持することが重要です。Linux ディストリビューションの多くのパッケージは頻繁に更新されます。これにより、バグが修正され、機能が追加されて、セキュリティ上の弱点に対する防御措置が行われます。詳細については、「[AL2 インスタンスのインスタンスソフトウェアを更新する](install-updates.md)」を参照してください。

デフォルトでは、AL2 インスタンスは、次のリポジトリを有効にして起動します。
+ `amzn2-core`
+ `amzn2extra-docker`

これらのリポジトリには、 によって更新される多くのパッケージがありますが AWS、インストールするパッケージが別のリポジトリに含まれている可能性があります。詳細については、「[AL2 インスタンスにリポジトリを追加する](add-repositories.md)」を参照してください。有効なリポジトリでパッケージを検索してインストールする方法については、「[AL2 インスタンスでソフトウェアパッケージを検索してインストールする](find-install-software.md)」を参照してください。

リポジトリに保管されているソフトウェアパッケージで、すべてのソフトウェアが利用できるわけではありません。一部のソフトウェアは、そのソースコードからインスタンスでコンパイルする必要があります。詳細については、「[AL2 インスタンスでソフトウェアをコンパイルする準備をする](compile-software.md)」を参照してください。

AL2 インスタンスは、yum パッケージマネージャーを使用してソフトウェアを管理します。yum パッケージマネージャはソフトウェアをインストール、削除、更新し、各パッケージのすべての依存関係を管理できます。

**Topics**
+ [AL2 インスタンスのインスタンスソフトウェアを更新する](install-updates.md)
+ [AL2 インスタンスにリポジトリを追加する](add-repositories.md)
+ [AL2 インスタンスでソフトウェアパッケージを検索してインストールする](find-install-software.md)
+ [AL2 インスタンスでソフトウェアをコンパイルする準備をする](compile-software.md)

# AL2 インスタンスのインスタンスソフトウェアを更新する
<a name="install-updates"></a>

ソフトウェアは、最新の状態に維持することが重要です。Linux ディストリビューションのパッケージは頻繁に更新されます。これにより、バグが修正され、機能が追加されて、セキュリティ上の弱点に対する防御措置が行われます。最初に Amazon Linux インスタンスを起動して接続する際、セキュリティ上の目的から、ソフトウェアパッケージを更新するように促すメッセージが表示される場合があります。このセクションでは、システム全体またはパッケージを 1 つだけ更新する方法を紹介します。

この情報は AL2 に適用されます。AL2023 の詳細については、Amazon Linux 2[AL2023の「AL2023 でのパッケージとオペレーティングシステムの更新の管理](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html)」を参照してください。 **

AL2 の変更と更新の詳細については、[AL2 リリースノート](https://docs.aws.amazon.com/AL2/latest/relnotes/relnotes-al2.html)」を参照してください。

AL2023 への変更と更新の詳細については、「[AL2023 リリースノート](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes.html)」を参照してください。

**重要**  
Amazon Linux 2 AMI を使用する EC2 インスタンスを IPv6 専用サブネットに起動した場合は、インスタンスに接続して `sudo amazon-linux-https disable` を実行する必要があります。これにより、AL2 インスタンスが http パッチサービスを使用して、IPv6 経由で S3 の yum リポジトリに接続できるようになります。

**AL2 インスタンスのすべてのパッケージを更新するには**

1. (オプション) シェルウィンドウで **screen** セッションを開始します。時折、ネットワークが遮断され、インスタンスへの SSH 接続が切断されることがあります。この状態が長時間におよぶソフトウェア更新中に発生した場合、インスタンスは混乱した状態になりますが、その復元は可能です。**screen** セッションを開始しておけば、接続が遮断された場合でも更新を続行でき、後で問題なくセッションに再接続できます。

   1. セッションを開始するには **screen** コマンドを実行します。

      ```
      [ec2-user ~]$ screen
      ```

   1. セッションが中断された場合、インスタンスにログインし直し、利用できる画面を表示します。

      ```
      [ec2-user ~]$ screen -ls
      There is a screen on:
      	17793.pts-0.ip-12-34-56-78	(Detached)
      1 Socket in /var/run/screen/S-ec2-user.
      ```

   1. **screen -r** コマンドと前のコマンドのプロセス ID を使用して、画面に再接続します。

      ```
      [ec2-user ~]$ screen -r 17793
      ```

   1. **screen** の使用が終わったら、**exit** コマンドを使用してセッションを閉じます。

      ```
      [ec2-user ~]$ exit
      [screen is terminating]
      ```

1. **yum update** コマンドを実行します。オプションで、`--security` フラグを追加すれば、セキュリティ更新のみを適用できます。

   ```
   [ec2-user ~]$ sudo yum update
   ```

1. 表示されたパッケージを確認したら、「**y**」と入力して Enter キーを押し、この更新を受け入れます。システムのパッケージをすべて更新するには数分かかります。実行中、**yum** 出力には更新のステータスが表示されます。

1. (オプション) [インスタンスを再起動](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-reboot.html)して、更新から最新のパッケージとライブラリを使用していることを確認します。カーネルの更新は、再起動が発生するまでロードされません。`glibc` ライブラリを更新した後も再起動が必要です。サービスを制御する更新の場合は、更新を取得するにはサービスの再起動で十分かもしれませんが、システムを再起動することで、それ以前のすべてのパッケージとライブラリの更新を確実に完了できます。

**AL2 インスタンスで 1 つのパッケージを更新するには**

システム全体ではなく、1 つのパッケージ (とその依存関係) を更新するには、この手順を使用します。

1. 更新するパッケージの名前を指定した **yum update** コマンドを実行します。

   ```
   [ec2-user ~]$ sudo yum update openssl
   ```

1. 表示されたパッケージ情報を確認したら、「**y**」と入力して Enter キーを押し、この更新を受け入れます。時折、解決する必要があるパッケージ依存関係ある場合、リストには複数のパッケージがあります。実行中、**yum** 出力には更新のステータスが表示されます。

1. (オプション) [インスタンスを再起動](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-reboot.html)して、更新から最新のパッケージとライブラリを使用していることを確認します。カーネルの更新は、再起動が発生するまでロードされません。`glibc` ライブラリを更新した後も再起動が必要です。サービスを制御する更新の場合は、更新を取得するにはサービスの再起動で十分かもしれませんが、システムを再起動することで、それ以前のすべてのパッケージとライブラリの更新を確実に完了できます。

# AL2 インスタンスにリポジトリを追加する
<a name="add-repositories"></a>

この情報は AL2 に適用されます。AL2023 の詳細については、「Amazon Linux 2[023 ユーザーガイド」の「AL2023 のバージョニングされたリポジトリによる確定的なアップグレード](https://docs.aws.amazon.com/linux/al2023/ug/deterministic-upgrades.html)」を参照してください。 **

デフォルトでは、AL2 インスタンスは、次のリポジトリを有効にして起動します。
+ `amzn2-core`
+ `amzn2extra-docker`

これらのリポジトリには、Amazon Web Services が更新するさまざまなパッケージが用意されていますが、別のリポジトリで、インストールしたいパッケージが見つかる可能性もあります。

**yum** で異なるリポジトリからパッケージをインストールには、`/etc/yum.conf` ファイル、または `repository.repo` ディレクトリにあるお客様の `/etc/yum.repos.d` ファイルに、リポジトリ情報を追加する必要があります。これは手動で行えますが、ほとんどの yum リポジトリのリポジトリ URL で、独自の `repository.repo` ファイルが提供されています。

**既にインストールされている yum レポジトリを調べるには**  
次のコマンドで、インストール済みの yum リポジトリを表示します。

```
[ec2-user ~]$ yum repolist all
```

生成される出力には、インストール済みのリポジトリが一覧表示され、それぞれのステータスが報告されます。有効なリポジトリには、そこに含まれているパッケージの数が表示されます。

**yum リポジトリを /etc/yum.repos.d に追加するには**

1. `.repo` ファイルの場所を検索します。場所は、追加しているリポジトリによって異なります。この例では、`.repo` ファイルは、`https://www.example.com/repository.repo` にあります。

1. **yum-config-manager** コマンドを使用してリポジトリを追加します。

   ```
   [ec2-user ~]$ sudo yum-config-manager --add-repo https://www.example.com/repository.repo
   Loaded plugins: priorities, update-motd, upgrade-helper
   adding repo from: https://www.example.com/repository.repo
   grabbing file https://www.example.com/repository.repo to /etc/yum.repos.d/repository.repo
   repository.repo                                      | 4.0 kB     00:00
   repo saved to /etc/yum.repos.d/repository.repo
   ```

リポジトリをインストールしたら、次の手順で説明するように有効にする必要があります。

**yum リポジトリを /etc/yum.repos.d で有効にするには**  
**yum-config-manager** フラグを付けて `--enable repository` コマンドを使用します。次のコマンドを使用すると、Fedora プロジェクトの Extra Packages for Enterprise Linux (EPEL) リポジトリが有効になります。デフォルトでは、このリポジトリは Amazon Linux AMI インスタンスの `/etc/yum.repos.d` にありますが、有効になっていません。

```
[ec2-user ~]$ sudo yum-config-manager --enable epel
```

詳細およびこのパッケージの最新バージョンのダウンロードについては、[https://fedoraproject.org/wiki/EPEL](https://fedoraproject.org/wiki/EPEL) を参照してください。

# AL2 インスタンスでソフトウェアパッケージを検索してインストールする
<a name="find-install-software"></a>

パッケージ管理ツールを使用して、ソフトウェアパッケージを検索してインストールできます。Amazon Linux 2 では、デフォルトのソフトウェアパッケージ管理ツールは ですYUM。AL2023 では、デフォルトのソフトウェアパッケージ管理ツールは DNF です。詳細については、*「Amazon Linux 2023 ユーザーガイド*」の[「パッケージ管理ツール](https://docs.aws.amazon.com/linux/al2023/ug/package-management.html)」を参照してください。

## AL2 インスタンスでソフトウェアパッケージを検索する
<a name="find-software"></a>

**yum search** コマンドを使用すると、設定したリポジトリで利用できるパッケージの説明を検索できます。これは特に、インストールするパッケージの正確な名前がわからない場合に便利です。キーワード検索をコマンドに追加します。複数の単語を検索するには、引用符で検索クエリを囲みます。

```
[ec2-user ~]$ yum search "find"
```

以下は出力の例です。

```
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
============================== N/S matched: find ===============================
findutils.x86_64 : The GNU versions of find utilities (find and xargs)
gedit-plugin-findinfiles.x86_64 : gedit findinfiles plugin
ocaml-findlib-devel.x86_64 : Development files for ocaml-findlib
perl-File-Find-Rule.noarch : Perl module implementing an alternative interface to File::Find
robotfindskitten.x86_64 : A game/zen simulation. You are robot. Your job is to find kitten.
mlocate.x86_64 : An utility for finding files by name
ocaml-findlib.x86_64 : Objective CAML package manager and build helper
perl-Devel-Cycle.noarch : Find memory cycles in objects
perl-Devel-EnforceEncapsulation.noarch : Find access violations to blessed objects
perl-File-Find-Rule-Perl.noarch : Common rules for searching for Perl things
perl-File-HomeDir.noarch : Find your home and other directories on any platform
perl-IPC-Cmd.noarch : Finding and running system commands made easy
perl-Perl-MinimumVersion.noarch : Find a minimum required version of perl for Perl code
texlive-xesearch.noarch : A string finder for XeTeX
valgrind.x86_64 : Tool for finding memory management bugs in programs
valgrind.i686 : Tool for finding memory management bugs in programs
```

引用符で囲まれた複数の単語検索クエリは、正確なクエリに一致する結果のみを返します。予想されたパッケージが表示されない場合、キーワードを 1 つに絞って検索し、結果をスキャンします。キーワードの同義語を試して、検索の幅を広げることもできます。

AL2 のパッケージの詳細については、以下を参照してください。
+ [AL2 Extras ライブラリ](al2-extras.md)
+ [パッケージリポジトリ](ec2.md#package-repository)

## AL2 インスタンスにソフトウェアパッケージをインストールする
<a name="install-software"></a>

AL2 では、yum パッケージ管理ツールは、有効なすべてのリポジトリでさまざまなソフトウェアパッケージを検索し、ソフトウェアのインストールプロセスの依存関係を処理します。AL2023 にソフトウェアパッケージをインストールする方法については、*「Amazon Linux 2023 ユーザーガイド*」の[「パッケージとオペレーティングシステムの更新の管理](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html)」を参照してください。

**リポジトリからパッケージをインストールするには**  
**yum install *package*** コマンドを使用します。この際、*package* はインストールするソフトウェアの名前に置き換えます。例えば、**links** テキストベースウェブブラウザをインストールするには、次のコマンドを入力します。

```
[ec2-user ~]$ sudo yum install links
```

**ダウンロードした RPM パッケージファイルをインストールするには**  
また、**yum install** を使用して、インターネットからダウンロードした RPM パッケージファイルをインストールすることもできます。その場合には、リポジトリのパッケージ名の代わりに、RPM ファイルのパス名をインストールコマンドに追加します。

```
[ec2-user ~]$ sudo yum install my-package.rpm
```

**インストールされているパッケージを一覧表示するには**  
インスタンスにインストールされているパッケージを一覧表示するには、次のコマンドを使用します。

```
[ec2-user ~]$ yum list installed
```

# AL2 インスタンスでソフトウェアをコンパイルする準備をする
<a name="compile-software"></a>

オープンソースのソフトウェアは、事前コンパイルされていないインターネットで使用できます。これらは、パッケージリポジトリからダウンロードできます。入手したソフトウェアパッケージがソースコードであり、自分でコンパイルする必要があると判明することがあります。システムが AL2 および Amazon Linux でソフトウェアをコンパイルできるようにするには、、**make**、 **gcc**などのいくつかの開発ツールをインストールする必要があります**autoconf**。

ソフトウェアのコンパイルはすべての Amazon EC2 インスタンスで必要なタスクではないため、そのようなツールはデフォルトでインストールされていません。ただし、「Development Tools」という名前のパッケージグループで利用でき、**yum groupinstall** コマンドでインスタンスに簡単に追加されます。

```
[ec2-user ~]$ sudo yum groupinstall "Development Tools"
```

ソフトウェアのソースコードパッケージは、多くの場合、tarball と呼ばれる圧縮アーカイブファイルの形で ([https://github.com/](https://github.com/) や [http://sourceforge.net/](https://sourceforge.net/) などのウェブサイトから) ダウンロードできます。通常、これらの tarball には `.tar.gz` というファイル拡張子が付いています。これらのアーカイブは **tar** コマンドで解凍できます。

```
[ec2-user ~]$ tar -xzf software.tar.gz
```

ソースコードパッケージを解凍したら、ソースコードディレクトリで `README` ファイルまたは `INSTALL` ファイルを探します。これらのファイルに、ソースコードのコンパイルとインストールに関する詳細な指示があります。

**Amazon Linux パッケージのソースコードを取得するには**  
Amazon Web Services は、保守管理されているパッケージのソースコードを提供します。**yumdownloader --source** コマンドを使用して、インストールされているパッケージのソースコードをダウンロードできます。

**yumdownloader --source *package*** コマンドを実行して、*package* のソースコードをダウンロードします。例えば、`htop` パッケージのソースコードをダウンロードするには、次のコマンドを入力します。

```
[ec2-user ~]$ yumdownloader --source htop

Loaded plugins: priorities, update-motd, upgrade-helper
Enabling amzn-updates-source repository
Enabling amzn-main-source repository
amzn-main-source                                                                                              | 1.9 kB  00:00:00     
amzn-updates-source                                                                                           | 1.9 kB  00:00:00     
(1/2): amzn-updates-source/latest/primary_db                                                                  |  52 kB  00:00:00     
(2/2): amzn-main-source/latest/primary_db                                                                     | 734 kB  00:00:00     
htop-1.0.1-2.3.amzn1.src.rpm
```

ソース RPM の場所は、コマンドを実行したディレクトリにあります。

# Amazon EC2 AL2 インスタンスのプロセッサ状態制御
<a name="processor_state_control"></a>

C ステートはアイドル時のコアのスリープレベルを制御します。C ステートはC0 (コアがアクティブで、命令を実行している最も浅い状態) から始まる番号が付けられ、C6 (コアの電源がオフになっている最も深いアイドル状態) まで移行します。

P ステートはコアに希望するパフォーマンス (CPU 周波数) を制御します。P ステートはP0 (コアが Intel Turbo Boost Technology を使用して可能であれば周波数を上げることができる最高パフォーマンスの設定) から始まる番号が付けられ、P1 (最大限のベースライン周波数をリクエストする P ステート) から P15 (最小限の周波数) まで移行します。

プロセッサのパフォーマンスの安定性を向上させたり、レイテンシーを減らしたり、インスタンスを特定のワークロード用に調整するために、C ステートまたは P ステートの設定を変更したいと思う場合があるかもしれません。デフォルトの C ステートおよび P ステートの設定はほとんどの作業負荷に対して最適なパフォーマンスを提供します。ただし、アプリケーションにおいて、より高いシングルコアまたはデュアルコアの周波数でレイテンシーを軽減したい場合、またはバースト的な Turbo Boost 周波数よりも低い周波数でより安定したパフォーマンスを維持することを優先する場合、これらのインスタンスで利用可能な C ステートまたは P ステートを試みることを考慮してください。

オペレーティングシステムがプロセッサの C ステートと P ステートを制御する機能を提供する Amazon EC2 インスタンスタイプについては、[Amazon EC2 ユーザーガイド」の「Amazon EC2 インスタンスのプロセッサステートコントロール](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/processor_state_control.html)」を参照してください。 *Amazon EC2 *

以下のセクションでは、プロセッサのさまざまなステート設定と、設定の効果をモニタリングする方法について説明します。これらの手順は 用に記述され、Amazon Linux に適用されますが、Linux カーネルバージョン 3.9 以降の他の Linux ディストリビューションでも機能する可能性があります。

**注記**  
このページの例では、以下を使用しています。  
プロセッサの周波数と C ステート情報を表示する **turbostat** ユーティリティ。**turbostat** ユーティリティは Amazon Linux でデフォルトで使用できます。
ワークロードをシミュレートする **stress** コマンド。**stress** をインストールするには、まず **sudo amazon-linux-extras install epel** を実行して EPEL リポジトリを有効にし、次に **sudo yum install -y stress** を実行します。
出力に C ステート情報が表示されない場合は、コマンド (**--debug**) に **sudo turbostat --debug stress *<options>*** オプションを含めます｡

**Topics**
+ [最大 Turbo Boost 周波数による最高パフォーマンス](#turbo-perf)
+ [深い C ステートの制限による高パフォーマンスと低レイテンシー](#c-states)
+ [変動性が最も低いベースラインパフォーマンス](#baseline-perf)

## 最大 Turbo Boost 周波数による最高パフォーマンス
<a name="turbo-perf"></a>

これは、Amazon Linux AMI のデフォルトのプロセッサのステート制御設定であり、ほとんどのワークロードにお勧めします。この設定では、変動性を抑え、最高パフォーマンスを実現します。非アクティブなコアは深いスリープ状態になることができるため、シングルまたはデュアルコアプロセスが Turbo Boost の潜在能力を最大限に引き出すために必要な発熱量の余裕を実現できます。

次の例は、2 個のコアでアクティブに処理を実行する `c4.8xlarge` インスタンスが Turbo Boost の最大周波数に到達した状況を示しています。

```
[ec2-user ~]$ sudo turbostat stress -c 2 -t 10
stress: info: [30680] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd
stress: info: [30680] successful run completed in 10s
pk cor CPU    %c0  GHz  TSC SMI    %c1    %c3    %c6    %c7   %pc2   %pc3   %pc6   %pc7  Pkg_W RAM_W PKG_% RAM_%
             5.54 3.44 2.90   0   9.18   0.00  85.28   0.00   0.00   0.00   0.00   0.00  94.04 32.70 54.18  0.00
 0   0   0   0.12 3.26 2.90   0   3.61   0.00  96.27   0.00   0.00   0.00   0.00   0.00  48.12 18.88 26.02  0.00
 0   0  18   0.12 3.26 2.90   0   3.61
 0   1   1   0.12 3.26 2.90   0   4.11   0.00  95.77   0.00
 0   1  19   0.13 3.27 2.90   0   4.11
 0   2   2   0.13 3.28 2.90   0   4.45   0.00  95.42   0.00
 0   2  20   0.11 3.27 2.90   0   4.47
 0   3   3   0.05 3.42 2.90   0  99.91   0.00   0.05   0.00
 0   3  21  97.84 3.45 2.90   0   2.11
...
 1   1  10   0.06 3.33 2.90   0  99.88   0.01   0.06   0.00
 1   1  28  97.61 3.44 2.90   0   2.32
...
10.002556 sec
```

この例では、vCPU 21 と 28 が最大 Turbo Boost 周波数で実行され、他のコアは `C6` スリープ状態になることで電力を節約し、実行中のコアに電力と発熱の余裕を持たせています。vCPU 3 と 10 (それぞれ vCPU 21 および 28 とプロセッサコアを共有する) は `C1` ステートであり、命令を待っています。

以下の例では、18 個のコアはすべてアクティブに処理を実行しているため、Turbo Boost の最大周波数のための余裕はありませんが、すべてのコアが「all core Turbo Boost」の速度である 3.2 GHz で実行されています。

```
[ec2-user ~]$ sudo turbostat stress -c 36 -t 10
stress: info: [30685] dispatching hogs: 36 cpu, 0 io, 0 vm, 0 hdd
stress: info: [30685] successful run completed in 10s
pk cor CPU    %c0  GHz  TSC SMI    %c1    %c3    %c6    %c7   %pc2   %pc3   %pc6   %pc7  Pkg_W RAM_W PKG_% RAM_%
            99.27 3.20 2.90   0   0.26   0.00   0.47   0.00   0.00   0.00   0.00   0.00 228.59 31.33 199.26  0.00
 0   0   0  99.08 3.20 2.90   0   0.27   0.01   0.64   0.00   0.00   0.00   0.00   0.00 114.69 18.55 99.32  0.00
 0   0  18  98.74 3.20 2.90   0   0.62
 0   1   1  99.14 3.20 2.90   0   0.09   0.00   0.76   0.00
 0   1  19  98.75 3.20 2.90   0   0.49
 0   2   2  99.07 3.20 2.90   0   0.10   0.02   0.81   0.00
 0   2  20  98.73 3.20 2.90   0   0.44
 0   3   3  99.02 3.20 2.90   0   0.24   0.00   0.74   0.00
 0   3  21  99.13 3.20 2.90   0   0.13
 0   4   4  99.26 3.20 2.90   0   0.09   0.00   0.65   0.00
 0   4  22  98.68 3.20 2.90   0   0.67
 0   5   5  99.19 3.20 2.90   0   0.08   0.00   0.73   0.00
 0   5  23  98.58 3.20 2.90   0   0.69
 0   6   6  99.01 3.20 2.90   0   0.11   0.00   0.89   0.00
 0   6  24  98.72 3.20 2.90   0   0.39
...
```

## 深い C ステートの制限による高パフォーマンスと低レイテンシー
<a name="c-states"></a>

C ステートは非アクティブ時のコアのスリープレベルを制御します。C ステートを制御して、システムのレイテンシーとパフォーマンスを調整することができます。コアをスリープ状態にするには時間がかかります。また、スリープ状態のコアによって、別のコアが高い周波数で動作するための余裕が生まれますが、そのスリープ状態にあるコアが再び稼働し処理を実行するのにも時間がかかります。例えば、ネットワークパケットの中断を処理するように割り当てられたコアがスリープ状態である場合、その中断の処理に遅延が生じる可能性があります。より深い C ステートを使用しないようにシステムを設定できます。これにより、プロセッサの応答のレイテンシーは減少しますが、他のコアの Turbo Boost 用の余裕も減少します。

深いスリープ状態を無効にする一般的なシナリオとして、Redis データベースアプリケーションがあります。このアプリケーションは、最速のクエリ応答時間を実現するために、データベースをシステムメモリ内に格納します。

**AL2 で深いスリープ状態を制限するには**

1. 適切なエディタで `/etc/default/grub` ファイルを開きます。

   ```
   [ec2-user ~]$ sudo vim /etc/default/grub
   ```

1. `GRUB_CMDLINE_LINUX_DEFAULT` 行を編集し `intel_idle.max_cstate=1` と `processor.max_cstate=1` のオプションを追加します。これにより、アイドル状態にあるコアの最も深い C ステートとして `C1` を設定します。

   ```
   GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 intel_idle.max_cstate=1 processor.max_cstate=1"
   GRUB_TIMEOUT=0
   ```

   `intel_idle.max_cstate=1` オプションでは、インテルベースのインスタンスで C ステート制限が設定され、また、`processor.max_cstate=1` オプションでは、AMD ベースのインスタンスで C ステート制限が設定されます。両方のオプションを設定に追加しておくと安心です。これにより、インテルと AMD のインスタンスに対し、共通の方法で目的の動作を設定することができます。

1. ファイルを保存し、エディタを終了します。

1.  起動設定を再構築するには、次のコマンドを実行します。

   ```
   [ec2-user ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
   ```

1. 新しい kernel オプションを有効にするためにインスタンスを再起動します。

   ```
   [ec2-user ~]$ sudo reboot
   ```

**Amazon Linux AMI で深いスリープ状態を制限するには**

1. 適切なエディタで `/boot/grub/grub.conf` ファイルを開きます。

   ```
   [ec2-user ~]$ sudo vim /boot/grub/grub.conf
   ```

1. 最初のエントリの `kernel` 行を編集して `intel_idle.max_cstate=1` と `processor.max_cstate=1` オプションを追加し、アイドル状態のコアの最も深い C ステートに `C1` を設定します。

   ```
   # created by imagebuilder
   default=0
   timeout=1
   hiddenmenu
   
   title Amazon Linux 2014.09 (3.14.26-24.46.amzn1.x86_64)
   root (hd0,0)
   kernel /boot/vmlinuz-3.14.26-24.46.amzn1.x86_64 root=LABEL=/ console=ttyS0 intel_idle.max_cstate=1  processor.max_cstate=1
   initrd /boot/initramfs-3.14.26-24.46.amzn1.x86_64.img
   ```

   `intel_idle.max_cstate=1` オプションでは、インテルベースのインスタンスで C ステート制限が設定され、また、`processor.max_cstate=1` オプションでは、AMD ベースのインスタンスで C ステート制限が設定されます。両方のオプションを設定に追加しておくと安心です。これにより、インテルと AMD のインスタンスに対し、共通の方法で目的の動作を設定することができます。

1. ファイルを保存し、エディタを終了します。

1. 新しい kernel オプションを有効にするためにインスタンスを再起動します。

   ```
   [ec2-user ~]$ sudo reboot
   ```

次の例では、2 つのコアが「all core Turbo Boost」コア周波数でアクティブに処理を実行している `c4.8xlarge` インスタンスを示します。

```
[ec2-user ~]$ sudo turbostat stress -c 2 -t 10
stress: info: [5322] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd
stress: info: [5322] successful run completed in 10s
pk cor CPU    %c0  GHz  TSC SMI    %c1    %c3    %c6    %c7   %pc2   %pc3   %pc6   %pc7  Pkg_W RAM_W PKG_% RAM_%
             5.56 3.20 2.90   0  94.44   0.00   0.00   0.00   0.00   0.00   0.00   0.00 131.90 31.11 199.47  0.00
 0   0   0   0.03 2.08 2.90   0  99.97   0.00   0.00   0.00   0.00   0.00   0.00   0.00  67.23 17.11 99.76  0.00
 0   0  18   0.01 1.93 2.90   0  99.99
 0   1   1   0.02 1.96 2.90   0  99.98   0.00   0.00   0.00
 0   1  19  99.70 3.20 2.90   0   0.30
...
 1   1  10   0.02 1.97 2.90   0  99.98   0.00   0.00   0.00
 1   1  28  99.67 3.20 2.90   0   0.33
 1   2  11   0.04 2.63 2.90   0  99.96   0.00   0.00   0.00
 1   2  29   0.02 2.11 2.90   0  99.98
...
```

この例では、vCPU 19 および 28 のコアは 3.2 GHz で実行中であり、その他のコアは `C1` C ステートで、命令を待機しています。稼働中のコアは Turbo Boost の最大周波数には到達していませんが、非アクティブなコアはより深い `C6` C ステートにある場合と比べて、新しいリクエストに迅速に応答します。

## 変動性が最も低いベースラインパフォーマンス
<a name="baseline-perf"></a>

P ステートによってプロセッサの周波数の変動性を抑制することができます。P ステートはコアに希望するパフォーマンス (CPU 周波数) を制御します。ほとんどのワークロードでは、Turbo Boost をリクエストする、P0 でパフォーマンスが向上します。ただし、Turbo Boost 周波数が有効であるときに発生する可能性があるバースト的なパフォーマンスではなく、安定したパフォーマンスになるようにシステムを調整することもできます。

Intel Advanced Vector Extensions (AVX または AVX2) のワークロードは低い周波数でもパフォーマンスに優れ、AVX 命令はより多くの処理能力を使用できます。Turbo Boost を無効にして、プロセッサをより低い周波数で実行すると、使用される処理能力が抑えられ、より安定した速度が維持されます。AVX のインスタンス設定とワークロードの最適化の詳細については、[インテルのウェブサイト](https://www.intel.com/content/www/us/en/developer/articles/technical/the-intel-advanced-vector-extensions-512-feature-on-intel-xeon-scalable.html?wapkw=advanced%20vector%20extensions)を参照してください。

CPU がアイドル状態のドライバは P ステートを制御します。最近の世代の CPU には、以下のようにカーネルレベルでの対応が可能な、更新された CPU アイドルドライバが必要です。
+ Linux カーネルバージョン 6.1 以降 – Intel Granite Rapids (R8i など) をサポート
+ Linux カーネルバージョン 5.10 以降 – AMD Milan をサポート (M6a など)
+ Linux カーネルバージョン 5.6 以降 – Intel Icelake (M6i など) をサポート

実行中のシステムのカーネルが CPU を認識するかどうかを確認するには、次のコマンドを実行します。

```
if [ -d /sys/devices/system/cpu/cpu0/cpuidle ]; then echo "C-state control enabled"; else echo "Kernel cpuidle driver does not recognize this CPU generation"; fi
```

このコマンドの出力により、サポートが不十分であることを確認した場合は、カーネルをアップグレードすることをお勧めします。

このセクションでは、深いスリープ状態を制限し、(`P1` P ステートをリクエストすることにより) Turbo Boost を無効にすることで、これらのタイプのワークロードに対して、低レイテンシーを提供し、プロセッサ速度の変動性を最低限に抑える方法を説明します。

**深いスリープ状態を制限し、AL2 で Turbo Boost を無効にするには**

1. 適切なエディタで `/etc/default/grub` ファイルを開きます。

   ```
   [ec2-user ~]$ sudo vim /etc/default/grub
   ```

1. `GRUB_CMDLINE_LINUX_DEFAULT` 行を編集し `intel_idle.max_cstate=1` と `processor.max_cstate=1` のオプションを追加します。これにより、アイドル状態にあるコアの最も深い C ステートとして `C1` を設定します。

   ```
   GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 intel_idle.max_cstate=1 processor.max_cstate=1"
   GRUB_TIMEOUT=0
   ```

   `intel_idle.max_cstate=1` オプションでは、インテルベースのインスタンスで C ステート制限が設定され、また、`processor.max_cstate=1` オプションでは、AMD ベースのインスタンスで C ステート制限が設定されます。両方のオプションを設定に追加しておくと安心です。これにより、インテルと AMD のインスタンスに対し、共通の方法で目的の動作を設定することができます。

1. ファイルを保存し、エディタを終了します。

1.  起動設定を再構築するには、次のコマンドを実行します。

   ```
   [ec2-user ~]$ grub2-mkconfig -o /boot/grub2/grub.cfg
   ```

1. 新しい kernel オプションを有効にするためにインスタンスを再起動します。

   ```
   [ec2-user ~]$ sudo reboot
   ```

1. `P1` P ステートによってプロセッサ速度の変動性を抑える必要がある場合は、次のコマンドを実行して Turbo Boost を無効にします。

   ```
   [ec2-user ~]$ sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
   ```

1. ワークロードが終了したら、次のコマンドで Turbo Boost を再度有効にすることができます。

   ```
   [ec2-user ~]$ sudo sh -c "echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo"
   ```

**Amazon Linux AMI で深いスリープ状態を制限し、Turbo Boost を無効にするには**

1. 適切なエディタで `/boot/grub/grub.conf` ファイルを開きます。

   ```
   [ec2-user ~]$ sudo vim /boot/grub/grub.conf
   ```

1. 最初のエントリの `kernel` 行を編集して `intel_idle.max_cstate=1` と `processor.max_cstate=1` オプションを追加し、アイドル状態のコアの最も深い C ステートに `C1` を設定します。

   ```
   # created by imagebuilder
   default=0
   timeout=1
   hiddenmenu
   
   title Amazon Linux 2014.09 (3.14.26-24.46.amzn1.x86_64)
   root (hd0,0)
   kernel /boot/vmlinuz-3.14.26-24.46.amzn1.x86_64 root=LABEL=/ console=ttyS0 intel_idle.max_cstate=1 processor.max_cstate=1
   initrd /boot/initramfs-3.14.26-24.46.amzn1.x86_64.img
   ```

   `intel_idle.max_cstate=1` オプションでは、インテルベースのインスタンスで C ステート制限が設定され、また、`processor.max_cstate=1` オプションでは、AMD ベースのインスタンスで C ステート制限が設定されます。両方のオプションを設定に追加しておくと安心です。これにより、インテルと AMD のインスタンスに対し、共通の方法で目的の動作を設定することができます。

1. ファイルを保存し、エディタを終了します。

1. 新しい kernel オプションを有効にするためにインスタンスを再起動します。

   ```
   [ec2-user ~]$ sudo reboot
   ```

1. `P1` P ステートによってプロセッサ速度の変動性を抑える必要がある場合は、次のコマンドを実行して Turbo Boost を無効にします。

   ```
   [ec2-user ~]$ sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
   ```

1. ワークロードが終了したら、次のコマンドで Turbo Boost を再度有効にすることができます。

   ```
   [ec2-user ~]$ sudo sh -c "echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo"
   ```

次の例では、2 つの vCPU が、Turbo Boost を使用せずに、ベースラインコア周波数でアクティブに処理を実行している `c4.8xlarge` インスタンスを示します。

```
[ec2-user ~]$ sudo turbostat stress -c 2 -t 10
stress: info: [5389] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd
stress: info: [5389] successful run completed in 10s
pk cor CPU    %c0  GHz  TSC SMI    %c1    %c3    %c6    %c7   %pc2   %pc3   %pc6   %pc7  Pkg_W RAM_W PKG_% RAM_%
             5.59 2.90 2.90   0  94.41   0.00   0.00   0.00   0.00   0.00   0.00   0.00 128.48 33.54 200.00  0.00
 0   0   0   0.04 2.90 2.90   0  99.96   0.00   0.00   0.00   0.00   0.00   0.00   0.00  65.33 19.02 100.00  0.00
 0   0  18   0.04 2.90 2.90   0  99.96
 0   1   1   0.05 2.90 2.90   0  99.95   0.00   0.00   0.00
 0   1  19   0.04 2.90 2.90   0  99.96
 0   2   2   0.04 2.90 2.90   0  99.96   0.00   0.00   0.00
 0   2  20   0.04 2.90 2.90   0  99.96
 0   3   3   0.05 2.90 2.90   0  99.95   0.00   0.00   0.00
 0   3  21  99.95 2.90 2.90   0   0.05
...
 1   1  28  99.92 2.90 2.90   0   0.08
 1   2  11   0.06 2.90 2.90   0  99.94   0.00   0.00   0.00
 1   2  29   0.05 2.90 2.90   0  99.95
```

vCPU 21 および 28 のコアは、ベースラインプロセッサ速度の 2.9 GHz でアクティブに処理を実行し、すべての非アクティブなコアも、`C1` C ステートのベースライン速度で実行され、すぐに命令を受け付けることができます。

# AL2 の I/O スケジューラ
<a name="io-scheduler"></a>

I/O スケジューラは、I/O リクエストをソートおよびマージし、処理される順序を決定する Linux オペレーティングシステムの一部です。

I/O スケジューラは、シーク時間が長くなる可能性があり、コロケーションされた要求をマージするのが最適である磁気ハードドライブなどのデバイスにとって特に有益です。I/O スケジューラは、ソリッドステートデバイスや仮想化環境ではあまり影響しません。これは、ソリッドステートデバイスの場合、シーケンシャルアクセスとランダムアクセスが異なることがなく、仮想化環境ではホストが独自のスケジューリング層を提供するためです。

このトピックでは、Amazon Linux I/O スケジューラについて説明します。他の Linux ディストリビューションで使用される I/O スケジューラの詳細については、それぞれのドキュメントを参照してください。

**Topics**
+ [サポートされているスケジューラ](#supported-schedulers)
+ [デフォルトスケジューラ](#default-schedulers)
+ [スケジューラを変更する](#change-scheduler)

## サポートされているスケジューラ
<a name="supported-schedulers"></a>

Amazon Linux では、次の I/O スケジューラがサポートされています。
+ `deadline` — *期限日* I/O スケジューラは I/O リクエストをソートし、最も効率的な順序で処理します。これにより、各 I/O リクエストの開始時間が保証されます。また、長い間保留中であった I/O リクエストの優先度も高くなります。
+ `cfq` — *完全公平キュー*(CFQ) I/O スケジューラは、プロセス間で I/O リソースを公平に割り当てようとします。I/O リクエストをソートし、プロセスごとのキューに挿入します。
+ `noop` — *オペレーションなし* (noop) I/O スケジューラは、すべての I/O リクエストを FIFO キューに挿入し、それらを単一のリクエストにマージします。このスケジューラは、リクエストの並べ替えを行いません。

## デフォルトスケジューラ
<a name="default-schedulers"></a>

[オペレーションなし (noop)] は Amazon Linux のデフォルトの I/O スケジューラです。このスケジューラは、次の理由で使用されます。
+ 多くのインスタンスタイプは、基盤となるホストがインスタンスのスケジュールを実行する仮想化デバイスを使用します。
+ ソリッドステートデバイスは、I/O スケジューラの利点の影響が少ない多くのインスタンスタイプで使用されます。
+ これは侵襲性の低い I/O スケジューラであり、必要に応じてカスタマイズできます。

## スケジューラを変更する
<a name="change-scheduler"></a>

I/O スケジューラを変更すると、スケジューラによって一定時間内に完了する I/O リクエストが増減するかどうかに基づいて、パフォーマンスが向上または低下することがあります。これは、ワークロード、使用されているインスタンスタイプの生成、アクセスされるデバイスのタイプに大きく依存します。使用する I/O スケジューラを変更する場合は、**iotop** などのツールを使用し、I/O パフォーマンスを測定し、その変更がユースケースにとって有益かどうかを判断することをお勧めします。

デバイスの I/O スケジューラは、`nvme0n1` を例にした次のコマンドで確認できます。インスタンスの `/sys/block` に表示されているデバイスを使って、次のコマンドの `nvme0n1` を置き換えます。

```
$  cat /sys/block/nvme0n1/queue/scheduler
```

デバイスの I/O スケジューラを設定するには、次のコマンドを使用します。

```
$  echo cfq|deadline|noop > /sys/block/nvme0n1/queue/scheduler
```

例えば、*xvda* デバイスの I/O スケジューラを `noop` から `cfq` に設定するには、次のコマンドを使用します。

```
$  echo cfq > /sys/block/xvda/queue/scheduler
```

# AL2 インスタンスのホスト名を変更する
<a name="set-hostname"></a>

プライベート VPC 内でインスタンスを起動すると、Amazon EC2 によってゲスト OS ホスト名が割り当てられます。Amazon EC2 によって割り当てられるホスト名のタイプは、サブネット設定によって異なります。EC2 ホスト名の詳細については、[Amazon EC2 ユーザーガイド」の「Amazon EC2 インスタンスのホスト名タイプ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html)」を参照してください。 *Amazon EC2 *

IPv4 アドレスで IP ベースの命名を使用するように構成された EC2 インスタンスの典型的な Amazon EC2 のプライベート DNS 名は、`ip-12-34-56-78.us-west-2.compute.internal` のような形式になります。この名前は内部ドメイン、サービス (この例では、`compute`)、リージョン、そしてプライベート IPv4 アドレスで構成されます。インスタンスにログインしたとき、このホスト名の一部がシェルプロンプトで表示されます (`ip-12-34-56-78` など)。Amazon EC2 インスタンスを停止し、再起動するたびに (Elastic IP アドレスを使用していない限り)、パブリック IPv4 アドレスが変わり、パブリック DNS 名、システムホスト名、シェルプロンプトも変わります。

**重要**  
この情報は、Amazon Linux に適用されます。その他のディストリビューションの情報については、各ドキュメントを参照してください。

## システムホスト名の変更
<a name="set-hostname-system"></a>

インスタンスの IP アドレスにパブリック DNS 名を登録している場合 (`webserver.mydomain.com` など)、インスタンスがそのドメインに含まれているものとして識別されるように、システムホスト名を設定できます。また、シェルプロンプトが変更され、 によって指定されたホスト名ではなく、この名前の最初の部分が表示されます AWS (例: `ip-12-34-56-78`)。パブリック DNS 名を登録していない場合でもホスト名は変更できますが、プロセスが少し違います。

ホスト名の更新内容を維持するには、`preserve_hostname` cloud-init 設定が `true` に設定されていることを確認してください。この設定を編集または追加するには、次のコマンドを実行します。

```
sudo vi /etc/cloud/cloud.cfg
```

`preserve_hostname` 設定が一覧表示されない場合は、ファイルの末尾に次のテキスト行を追加します。

```
preserve_hostname: true
```

**システムホスト名をパブリック DNS 名に変更するには**

パブリック DNS 名を登録している場合、この手順を行います。

1. 
   + AL2 の場合: **hostnamectl** コマンドを使用して、完全修飾ドメイン名 ( など) を反映するようにホスト名を設定します**webserver.mydomain.com**。

     ```
     [ec2-user ~]$ sudo hostnamectl set-hostname webserver.mydomain.com
     ```
   + Amazon Linux AMI の場合: インスタンスで、お好みのテキストエディタを使用して `/etc/sysconfig/network` 設定ファイルを開き、`HOSTNAME` エントリを変更して、完全修飾ドメイン名 (**webserver.mydomain.com** など) を反映させます。

     ```
     HOSTNAME=webserver.mydomain.com
     ```

1. インスタンスを再起動し、新しいホスト名を取得します。

   ```
   [ec2-user ~]$ sudo reboot
   ```

   または、Amazon EC2 コンソールを使用して再起動することもできます (**[Instances (インスタンス)**] ページでインスタンスを選択し、[**Instance state (インスタンスの状態)**]、[**Reboot instance (インスタンスの再起動)**] の順に選択します)。

1. インスタンスにログインして、ホスト名が更新されていることを確認します。メッセージには、新しいホスト名が表示されるはずです (最初の「.」まで)。**hostname** コマンドで完全修飾ドメイン名が表示されます。

   ```
   [ec2-user@webserver ~]$ hostname
   webserver.mydomain.com
   ```

**パブリック DNS 名なしでシステムホスト名を変更するには**

1. 
   + AL2 の場合: **hostnamectl** コマンドを使用して、目的のシステムホスト名 ( など) を反映するようにホスト名を設定します**webserver**。

     ```
     [ec2-user ~]$ sudo hostnamectl set-hostname webserver.localdomain
     ```
   + Amazon Linux AMI の場合: インスタンスで、お好みのテキストエディタで `/etc/sysconfig/network` 設定ファイルを開き、`HOSTNAME` エントリを変更して、希望するシステムホスト名を反映させます (例: **webserver**)。

     ```
     HOSTNAME=webserver.localdomain
     ```

1. お好みのテキストエディタで `/etc/hosts` ファイルを開き、下の例と一致する **127.0.0.1** で始まるエントリを変更します。ホスト名は自分のホスト名に置換します。

   ```
   127.0.0.1 webserver.localdomain webserver localhost4 localhost4.localdomain4
   ```

1. インスタンスを再起動し、新しいホスト名を取得します。

   ```
   [ec2-user ~]$ sudo reboot
   ```

   または、Amazon EC2 コンソールを使用して再起動することもできます (**[Instances (インスタンス)**] ページでインスタンスを選択し、[**Instance state (インスタンスの状態)**]、[**Reboot instance (インスタンスの再起動)**] の順に選択します)。

1. インスタンスにログインして、ホスト名が更新されていることを確認します。メッセージには、新しいホスト名が表示されるはずです (最初の「.」まで)。**hostname** コマンドで完全修飾ドメイン名が表示されます。

   ```
   [ec2-user@webserver ~]$ hostname
   webserver.localdomain
   ```

また、ユーザーデータを指定してインスタンスを設定するなど、よりプログラム的なソリューションを実装することもできます。インスタンスが Auto Scaling グループの一部である場合、ライフサイクルフックを使用してユーザーデータを定義できます。詳細については、「AWS CloudFormation ユーザーガイド」の「[Run commands on your Linux instance at launch](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html)」(起動時に Linux インスタンスでコマンドを実行する) および「[Lifecycle hook for instance launch](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-lifecyclehook.html#aws-resource-autoscaling-lifecyclehook--examples--Lifecycle_hook_for_instance_launch)」(インスタンス起動のライフサイクルフック) を参照してください。

## ホスト名に影響を与えずにシェルプロンプトを変更する
<a name="set-hostname-shell"></a>

インスタンスのホスト名を変更せずに、 が提供するプライベート名 ( など**webserver**) よりも便利なシステム名 AWS ( など`ip-12-34-56-78`) を表示する場合は、シェルプロンプト設定ファイルを編集して、ホスト名の代わりにシステムニックネームを表示できます。

**シェルプロンプトをホストニックネームに変更するには**

1. `/etc/profile.d` で、`NICKNAME` と呼ばれる環境変数を設定するファイルを作成して、シェルプロンプトに表示する値を設定します。例えば、システムニックネームを **webserver** に設定するには、次のコマンドを実行します。

   ```
   [ec2-user ~]$ sudo sh -c 'echo "export NICKNAME=webserver" > /etc/profile.d/prompt.sh'
   ```

1. お好みのテキストエディタ (`/etc/bashrc` や `/etc/bash.bashrc` など) で、**vim** (Red Hat) または **nano** (Debian/Ubuntu) ファイルを開きます。エディタのコマンドで **sudo** を使用する必要があります。`/etc/bashrc` および `/etc/bash.bashrc` は `root` が所有するためです。

1. ファイルを編集し、ホスト名の代わりにニックネームを表示するようにシェルプロンプト変数 (`PS1`) を変更します。`/etc/bashrc` または `/etc/bash.bashrc` でシェルプロンプトを設定する次の行を見つけます (以下には、コンテキストを示すため前後の行も表示されています。`[ "$PS1"` で始まる行を探してください)。

   ```
     # Turn on checkwinsize
     shopt -s checkwinsize
     [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
     # You might want to have e.g. tty in prompt (e.g. more virtual machines)
     # and console windows
   ```

   その行の `\h` (`hostname` を表す記号) を `NICKNAME` 変数の値に変更します。

   ```
     # Turn on checkwinsize
     shopt -s checkwinsize
     [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@$NICKNAME \W]\\$ "
     # You might want to have e.g. tty in prompt (e.g. more virtual machines)
     # and console windows
   ```

1. (オプション) シェルウィンドウのタイトルを新しいニックネームに設定するには、次の手順を完了します。

   1. `/etc/sysconfig/bash-prompt-xterm` という名前のファイルを作成します。

      ```
      [ec2-user ~]$ sudo touch /etc/sysconfig/bash-prompt-xterm
      ```

   1. 次のコマンドを使用して、ファイルを実行可能にします。

      ```
      [ec2-user ~]$ sudo chmod +x /etc/sysconfig/bash-prompt-xterm
      ```

   1. お好みのテキストエディタ (`/etc/sysconfig/bash-prompt-xterm` や **vim** など) で、**nano** ファイルを開きます。エディタのコマンドで **sudo** を使用する必要があります。`/etc/sysconfig/bash-prompt-xterm` は `root` が所有するためです。

   1. 次の行をファイルに追加します。

      ```
      echo -ne "\033]0;${USER}@${NICKNAME}:${PWD/#$HOME/~}\007"
      ```

1. ログアウトしてから再度ログインし、新しいニックネーム値を取得します。

## 他の Linux ディストリビューションのホスト名の変更
<a name="set-hostname-other-linux"></a>

このページの手順は、Amazon Linux のみで使用するためのものです。他の Linux ディストリビューションの詳細については、各ドキュメントおよび次の記事を参照してください。
+ [RHEL 7 または Centos 7 を実行するプライベート Amazon EC2 インスタンスに静的ホスト名を割り当てる方法を教えてください。](https://aws.amazon.com/premiumsupport/knowledge-center/linux-static-hostname-rhel7-centos7/)

# AL2 インスタンスで動的 DNS を設定する
<a name="dynamic-dns"></a>

EC2 インスタンスを起動すると、パブリック IP アドレスとパブリックドメインネームシステム (DNS) が割り当てられます。それらを使用してインターネットからインスタンスにアクセスできます。Amazon Web Services ドメインには数多くのホストが存在するため、これらのパブリック名はそれぞれの名前を一意にするために、かなり長くする必要があります。一般的な Amazon EC2 パブリック DNS 名は`ec2-12-34-56-78.us-west-2.compute.amazonaws.com`、Amazon Web Services ドメイン、サービス (この場合は `compute`)、 AWS リージョン、およびパブリック IP アドレスの形式で構成される のようになります。

動的 DNS サービスはそのドメイン領域内でカスタムの DNS ホスト名を提供します。この名前は覚えやすく、ホストのユースケースとの関連性が高くなっています。また、これらのサービスは一部は無料で提供されています。Amazon EC2 では動的 DNS プロバイダを利用できます。また、インスタンスを起動するたびに、パブリック DNS 名に関連付けられている IP アドレスを更新するようにインスタンスを設定できます。プロバイダは数多く存在します。また、プロバイダを選択し、それぞれのプロバイダで名前を登録する方法については本ガイドの範囲外です。<a name="procedure-dynamic-dns"></a>

**Amazon EC2 で動的 DNS を使用するには**

1. 動的 DNS サービスプロバイダにサインアップし、そのサービスでパブリック DNS 名を登録します。この手順では、[noip.com/free](https://www.noip.com/free) の無料サービスを例として使用します。

1. 動的 DNS 更新クライアントを設定します。動的 DNS サービスプロバイダを選び、そのサービスでパブリック DNS 名を登録したら、その DNS 名をインスタンスの IP アドレスにポイントします。多くのプロバイダ ([noip.com](https://noip.com) を含む) では、この操作をウェブサイトのアカウントページから手動で実行できるようにしています。ただし、ソフトウェア更新クライアントもサポートしています。EC2 インスタンスで更新クライアントが動作している場合は、シャットダウン後に再起動したときに IP アドレスが変わるたびに動的 DNS レコードが更新されます。この例では、noip2 クライアントをインストールします。このクライアントは、[noip.com](https://noip.com)が提供するサービスで動作します。

   1. Extra Packages for Enterprise Linux (EPEL) リポジトリを有効にして、`noip2`クライアントにアクセスします。
**注記**  
AL2 インスタンスには、EPEL リポジトリの GPG キーとリポジトリ情報がデフォルトでインストールされています。詳細、およびこのパッケージの最新バージョンをダウンロードするには、[https://fedoraproject.org/wiki/EPEL](https://fedoraproject.org/wiki/EPEL) を参照してください。

      ```
      [ec2-user ~]$ sudo amazon-linux-extras install epel -y
      ```

   1. `noip` パッケージをインストールします。

      ```
      [ec2-user ~]$ sudo yum install -y noip
      ```

   1. 設定ファイルを作成します。メッセージが表示されたら、ログインおよびパスワード情報を入力して、その後に続く質問に答え、クライアントを設定します。

      ```
      [ec2-user ~]$ sudo noip2 -C
      ```

1. noip サービスを有効にします。

   ```
   [ec2-user ~]$ sudo systemctl enable noip.service
   ```

1. noip サービスを開始します。

   ```
   [ec2-user ~]$ sudo systemctl start noip.service
   ```

   このコマンドを使用すると、クライアントが起動します。クライアントは前に作成した設定ファイル (`/etc/no-ip2.conf`) を読み、選択したパブリック DNS 名の IP アドレスを更新します。

1. 更新クライアントが動的 DNS 名に正しい IP アドレスを設定したことを確認します。DNS レコードの更新には数分かかります。その後、この手順で設定したパブリック DNS 名により、SSH を使用してインスタンスに接続します。

# AL2 の ec2-net-utils を使用してネットワークインターフェイスを設定する
<a name="ec2-net-utils"></a>

Amazon Linux 2 AMIs には、ec2-net-utils と呼ばれる AWSによってインストールされた追加のスクリプトが含まれている場合があります。これらのスクリプトはオプションで、ネットワークインターフェイスの設定を自動化します。これらのスクリプトは AL2 でのみ使用できます。

**注記**  
Amazon Linux 2023 の場合、 `amazon-ec2-net-utils`パッケージは `/run/systemd/network` ディレクトリにインターフェイス固有の設定を生成します。詳細については、「 Amazon Linux 2023 ユーザーガイド」の「[ネットワーキングサービス](https://docs.aws.amazon.com/linux/al2023/ug/networking-service.html)」を参照してください。

まだインストールされていない場合は、次のコマンドを使用してパッケージを AL2 にインストールするか、インストール済みで追加の更新が利用可能な場合は更新します。

```
$ yum install ec2-net-utils
```

ec2-net-utils には、以下のコンポーネントが含まれます。

udev ルール (`/etc/udev/rules.d`)  
実行中のインスタンスにネットワークインターフェイスがアタッチ、デタッチ、または再アタッチされたときに、そのネットワークインターフェイスを特定し、ホットプラグスクリプトが実行されることを確認します (`53-ec2-network-interfaces.rules`)。MAC アドレスをデバイス名にマッピングします (`75-persistent-net-generator.rules` を生成する `70-persistent-net.rules`)。

ホットプラグスクリプト  
DHCP での使用に適したインターフェイス設定ファイルを生成します (`/etc/sysconfig/network-scripts/ifcfg-eth`*N*)。また、ルート設定ファイルも生成します (`/etc/sysconfig/network-scripts/route-eth`*N*)。

DHCP スクリプト  
ネットワークインターフェイスが新しい DHCP リースを受け取るたびに、このスクリプトがインスタンスメタデータに対し、Elastic IP アドレスを求めるクエリを実行します。これにより、各 Elastic IP アドレスごとに、そのアドレスからのアウトバンドトラフィックが正しいネットワークインターフェイスを使用するよう、ルーティングポリシーデータベースにルールが追加されます。また、各プライベート IP アドレスを、セカンダリアドレスとしてネットワークインターフェイスに追加します。

**ec2ifup** ethN (`/usr/sbin/`)  
標準の **ifup** の機能を拡張します。このスクリプトが設定ファイル `ifcfg-eth`*N* および `route-eth`*N* を書き換えた後、**ifup** を実行します。

**ec2ifdown** ethN (`/usr/sbin/`)  
標準の **ifdown** の機能を拡張します。このスクリプトがルーティングポリシーデータベースからネットワークインターフェイスのルールをすべて削除した後、**ifdown** を実行します。

**ec2ifscan** (`/usr/sbin/`)  
まだ設定されていないネットワークインターフェイスを探して、それらを設定します。  
このスクリプトは、ec2-net-utils の初期リリースでは提供されていません。

ec2-net-utils によって生成された設定ファイルをリストするには、以下のコマンドを使用します。

```
$ ls -l /etc/sysconfig/network-scripts/*-eth?
```

オートメーションを無効にするには、対応する `ifcfg-eth`*N* ファイルに `EC2SYNC=no` を追加します。例えば、eth1 インターフェイスの自動化を無効にするには、以下のコマンドを使用します。

```
$ sed -i -e 's/^EC2SYNC=yes/EC2SYNC=no/' /etc/sysconfig/network-scripts/ifcfg-eth1
```

オートメーションを完全に無効にするには、次のコマンドを使用してパッケージを削除できます。

```
$ yum remove ec2-net-utils
```