Amazon Linux 1 または Amazon Linux 2 を実行している EC2 インスタンスで yum を使用すると、エラーが発生するのはなぜですか?
最終更新日: 2022 年 3 月 24 日
Amazon Linux 1 または Amazon Linux 2 を実行している Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで yum を使用すると、エラーが発生するのはなぜですか?
簡単な説明
yum コマンドの出力メッセージを使用して、発生したエラーを特定します。一般的なエラーメッセージは次のとおりです。
- Connection timed out XXX milliseconds
- HTTP Error 403 - Forbidden
- Could not resolve host: xxxxxxxxx.$awsregion.$awsdomain
- HTTP Error 407 - Proxy Authentication Required
- Resolving timed out after 5000 milliseconds
解決方法
「Connection timed out XXXX milliseconds」
1. EC2 インスタンスにアタッチされたセキュリティグループで、アウトバウンド http/https トラフィックが許可されていることを確認します。
2. EC2 インスタンスのサブネットに関連付けられたネットワーク ACL で、NACL 経由のアウトバウンド http/https トラフィックが許可されていることを確認します。
次の例は、ポート 80 および 443 でアウトバウンドトラフィックを許可するカスタムネットワーク ACL を示しています。
Inbound rules
Rule# Type Protocol Port Range Source Allow/Deny
100 Custom TCP Rule TCP (6) 1024-65535 0.0.0.0/0 ALLOW
101 Custom TCP Rule TCP (6) 1024-65535 ::/0 ALLOW
* ALL Traffic ALL ALL ::/0 DENY
* ALL Traffic ALL ALL 0.0.0.0/0 DENY
Outbound rules
Rule # Type Protocol Port Range Source Allow/Deny
100 HTTP (80) TCP (6) 80 0.0.0.0/0 ALLOW
101 HTTPS (443) TCP (6) 443 0.0.0.0/0 ALLOW
102 HTTP (80) TCP (6) 80 ::/0 ALLOW
103 HTTPS (443) TCP (6) 443 ::/0 ALLOW
* ALL Traffic ALL ALL ::/0 DENY
* ALL Traffic ALL ALL 0.0.0.0/0 DENY
3. 次のオプションのいずれかを使用して、EC2 インスタンスが Amazon Linux リポジトリにアクセスできることを確認します
- インスタンスは、インターネットゲートウェイがあるパブリックサブネットにあります。詳細については、インターネットアクセスを有効にするを参照してください。
- インスタンスは NAT ゲートウェイがあるプライベートサブネットにあります。詳細については、「 NAT ゲートウェイ」を参照してください。
- インスタンスは NAT インスタンスがあるプライベートサブネットにあります。詳細については、NAT インスタンスを参照してください。
- インスタンスは、S3 VPC エンドポイントがあるパブリックサブネットまたはプライベートサブネットにあります。詳細については、「 Amazon Linux 1 または Amazon Linux 2 を実行している EC2 インスタンスで yum を更新したり、インターネットにアクセスせずにパッケージをインストールするにはどうすればよいですか?」を参照してください。
- インスタンスは、プロキシがあるプライベートサブネットにあります。プロキシを使用するように yum を設定するには、次のパラメータを使用して /etc/yum.conf ファイルを変更します。次の例で、proxy-port、proxy-user-name、および proxy-password を、使用しているプロキシの正しい値に置き換えます。
proxy=http://proxy-server-IP-address:proxy_port
proxy_username="proxy-user-name"
proxy_password="proxy-password"
詳細については、fedoraproject.org ウェブサイトの「プロキシサーバーで yum を使う」を参照してください。
4. 前述のオプションのいずれかを使用してインスタンスを設定した後、次の telnet コマンドを実行して、インスタンスがリポジトリにアクセスできることを確認します。次のコマンドで、us-east-1 をインスタンスのリージョンに置き換えます。
Amazon Linux 1
telnet repo.us-east-1.amazonaws.com 80
Amazon Linux 2
telnet amazonlinux.us-east-1.amazonaws.com 80
注意:Telnet はすべての AMI にデフォルトでインストールされるわけではありません。telnet をインストールするには、次のコマンドを実行します。
sudo yum install telnet
HTTP Error 403 - Forbidden
1. インスタンスの VPC で S3 VPC エンドポイントを使用している場合は、アタッチされたポリシーが、次のリソースで s3:GetObject API 呼び出しを許可していることを確認します。
Amazon Linux 1:
"arn:aws:s3:::packages.region.amazonaws.com/*"
"arn:aws:s3:::repo.region.amazonaws.com/*"
Amazon Linux 2:
"arn:aws:s3:::amazonlinux.region.amazonaws.com/*"
"arn:aws:s3:::amazonlinux-2-repos-region/*"
注意: 前の例のリージョンを、インスタンスのリージョンに置き換えます。
詳細については、「Amazon S3 のエンドポイントポリシー」を参照してください。
2. プロキシを使用して Amazon Linux リポジトリにアクセスする場合は、サブドメイン .amazonaws.com がプロキシ設定の許可リストに含まれていることを確認します。
ホスト xxxxxxxx.$awsregion.$awsdomain を解決できませんでした
1. 次のコマンドを実行して、ディレクトリ /etc/yum/vars がカスタム yum 変数を定義していることを確認します。ディレクトリには、変数 awsdomain と awsregion を含める必要があります。以下のコマンド例で、 us-east-1 をインスタンスのリージョンに置き換えます。
$ cat /etc/yum/vars/awsregion
us-east-1
$ cat /etc/yum/vars/awsdomain
amazonaws.com
2. インスタンスの DNS 解決を確認します。インスタンスは、Amazon Linux リポジトリのドメイン名を解決する必要があります。
$ dig amazonlinux.us-east-1.amazonaws.com
$ dig repo.us-east-1.amazonaws.com
169.254.169.253 の IPv4 アドレスおよび fd00:ec2:: 253 の IPv6 アドレスにある Amazon 提供の DNS サーバーへのクエリは成功します。VPC IPv4 ネットワーク範囲のベースに 2 を加えた予約済み IP アドレスにある Amazon が提供する DNS サーバーへのクエリも成功します。IPv6 アドレスには、Nitro System 上に構築された EC2 インスタンスでのみアクセスできます。
「HTTP Error 407 - Proxy Authentication Required」
これは、yum にプロキシサーバー用の適切な認証資格情報がないため、プロキシが要求を完了できない場合に発生します。yum がプロキシを使用するように設定するには、/etc/yum.conf ファイルを次のパラメータで変更します。
proxy=http://proxy-server-IP-address:proxy_port
proxy_username=proxy-user-name
proxy_password=proxy-password
「Resolving timed out after 5000 milliseconds」
次のコマンドを実行して、/etc/resolv.conf ファイルに DNS サーバーの正しい IP があることを確認します。
cat /etc/resolv.conf
nameserver YourDNSIP
yum 設定ファイルのタイムアウト値を変更することで、5000 ミリ秒のタイムアウト時間を変更できます。
dig を使用してクエリー時間を確認するには、以下のコマンドを実行します。
$ dig repo.us-east-1.amazonaws.com | grep time