Amazon Linux 1、Amazon Linux 2、Amazon Linux 2023 を実行している EC2 インスタンスで、yum の実行時にエラーが発生する理由を知りたいです。

所要時間3分
0

Amazon Linux 1、Amazon Linux 2、Amazon Linux 2023 を実行している Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで yum を実行するとエラーが発生します。

簡単な説明

yum コマンドの出力メッセージを参考に、発生したエラーを特定します。次の一般的なエラーメッセージのうち、いずれかが表示される場合があります。

  • 接続がタイムアウトしました (ABCD ミリ秒)
  • HTTP Error 403 - Forbidden
  • ホスト abcdexyz.$awsregion.$awsdomain を解決できませんでした
  • HTTP Error 407 - Proxy Authentication Required
  • 5000 ミリ秒経過後、解決がタイムアウトしました

解決策

接続がタイムアウトしました (ABCD ミリ秒)

この問題をトラブルシューティングするには、インスタンスにアタッチされているセキュリティグループがアウトバウンドの HTTP または HTTPS トラフィックを許可していることを確認します。さらに、インスタンスのサブネットに関連付けられているネットワークアクセスコントロールリスト (ネットワーク ACL) が、アウトバウンド 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

Amazon Linux リポジトリにアクセスするには、インスタンスは設定に応じて、次のいずれかのインターネットアクセス設定を使用する必要があります。

  • パブリックサブネットのインスタンスでは、インターネットゲートウェイを使用します。
  • プライベートサブネットのインスタンスでは、NAT ゲートウェイまたは NAT インスタンスを使用します。
  • パブリックサブネットまたはプライベートサブネットのインスタンスでは、Amazon Simple Storage Service (Amazon S3) の仮想プライベートクラウド (VPC) エンドポイントを使用します。
  • プロキシを使用するプライベートサブネットのインスタンスでは、設定ファイルに次のパラメータを追加することで、プロキシを使用するように yum を設定します。
    proxy=http://proxy-server-IP-address:proxy_port
    proxy_username=proxy-user-name
    proxy_password=proxy-password
    注: プロキシを設定済みであり、同じ設定ファイルを使用している場合は、プロキシのパスワードはファイルにプレーンテキストで表示されます。proxy-port をプロキシが使用するポートに、proxy-user-name をプロキシのユーザー名に、proxy-password をプロキシのパスワードに置き換えます。詳細については、Fedora Project のウェブサイトで「プロキシサーバーで yum を使う」を参照してください。Amazon Linux 1 と Amazon Linux 2 では、/etc/yum.conf ファイルを変更します。Amazon Linux 2023 では、/etc/dnf/dnf.conf ファイルを変更します。

インスタンスを設定した後、次の curl コマンドを実行して、インスタンスがリポジトリにアクセスできることを確認します。

Amazon Linux 2023:

curl -I al2023-repos-us-east-1-de612dc2.s3.dualstack.us-east-1.amazonaws.com

Amazon Linux 1:

curl -I repo.us-east-1.amazonaws.com

Amazon Linux 2:

curl -I amazonlinux.us-east-1.amazonaws.com

注: 次のコマンドで、us-east-1 はお使いのインスタンスの AWS リージョンに置き換えます。

curl コマンドはすべての Amazon マシンイメージ (AMI) にプリインストールされています。ただし、認証情報がない場合は Amazon Linux リポジトリにアクセスできないため、curl コマンドで yum リポジトリの認証情報を取得することはできません。curl コマンドを実行すると、次の例のようなアクセス拒否エラーメッセージが表示されます。

$ curl -I amazonlinux.us-east-1.amazonaws.com
HTTP/1.1 403 Forbidden
x-amz-bucket-region: us-east-1
x-amz-request-id: xxxxxxxx
x-amz-id-2: xxxxxxxxxxxxx=
Content-Type: application/xml
Date: Thu, 17 Nov 2022 16:59:59 GMT
Server: AmazonS3

curl コマンドを実行し、タイムアウトの問題がまだ発生しているかどうかをテストします。このエラーメッセージ例は、ネットワークが到達可能となり、タイムアウト問題が発生しなくなったことを示しています。

HTTP Error 403 - Forbidden

VPC エンドポイントを使用する

Amazon S3 VPC エンドポイントを使用する場合は、アタッチされたポリシーで Linux バージョンに応じた s3:GetObject API コールが許可されていることを確認します。

Amazon Linux 2023: arn:aws:s3:::al2023-repos-region-de612dc2/*

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/

**注:**上記のリソースで、region はお使いのインスタンスのリージョンに置き換えます。

詳細については、「Amazon S3 のゲートウェイエンドポイント」を参照してください。

プロキシを使用している

プロキシを使用して Amazon Linux リポジトリにアクセスする場合は、サブドメイン .amazonaws.com がプロキシ設定の許可リストに含まれていることを確認します。

サポートされていないリポジトリを使用している

次のエラーが発生する場合があります。 エラー: リポジトリ 'amazonlinux' のメタデータをダウンロードできませんでした。 GPG 検証は有効ですが、GPG 署名を使用できません。エラーが発生しているか、リポジトリが GPG 検証をサポートしていない可能性があります。これは既知の問題であり、/etc/yum.repos.d/ ディレクトリにあるリポジトリファイル (repository.repo ファイル、/etc/yum.conf など) で repo_gpgcheck を有効化すると発生します。Amazon Linux 2023 リポジトリでは、メタデータ署名が有効になっていません。なお、この構成をサポートされていないリポジトリに使用した場合は、パッケージのインストールやオペレーティングシステム (OS) の更新が失敗する可能性があります。これを回避するには、リポジトリの repo ファイルを開き、そのリポジトリの repo_gpgcheck 値を 0 に設定します。たとえば、値を repo_gpgcheck=0 に設定します。

この状況の詳細については、GitHub のウェブサイトで「[Bug] - repo_gpgcheck を有効にした後、パッケージをインストール/アップグレードできない」を参照してください。

ホスト abcdexyz.$awsregion.$awsdomain を解決できませんでした

/etc/yum/vars ディレクトリには、変数 awsdomain および awsregion が含まれている必要があります。次のコマンドを実行し、ディレクトリ /etc/yum/vars でカスタム yum 変数を定義していることを確認します。

$ cat /etc/yum/vars/awsregion
us-east-1

$ cat /etc/yum/vars/awsdomain
amazonaws.com

注: us-east-1 は、実際のインスタンスのリージョンに置き換えます。

インスタンスは Amazon Linux リポジトリのドメイン名を解決する必要があります。インスタンスの DNS 解決を確認するには、次のコマンドを実行します。

$ dig amazonlinux.us-east-1.amazonaws.com

$ dig repo.us-east-1.amazonaws.com

$ dig al2023-repos-us-east-1-de612dc2

注: us-east-1 は、実際のインスタンスのリージョンに置き換えます。

なお、Amazon 提供の DNS サーバー (IPv4 アドレス 169.254.169.253、IPv6 アドレス fd00:ec2::253) へのクエリは成功します。VPC の IPv4 ネットワーク範囲のベースに 2 を加えた予約済み IP アドレス である Amazon 提供の DNS サーバーへのクエリも成功します。IPv6 アドレスには、Nitro ベースの EC2 インスタンスでのみアクセスできます。

HTTP Error 407 - Proxy Authentication Required

この問題は、yum または dnf にプロキシサーバー用の適切な認証資格情報がなく、プロキシがリクエストを完了できない場合に発生します。yum または dnf がプロキシを使用するように設定するには、設定ファイルを次のパラメータで変更します。

proxy=http://proxy-server-IP-address:proxy_port
proxy_username=proxy-user-name
proxy_password=proxy-password

注: プロキシを設定済みであり、同じ設定ファイルを使用している場合は、プロキシのパスワードはファイルにプレーンテキストで表示されます。proxy-port をプロキシが使用するポートに、proxy-user-name をプロキシのユーザー名に、proxy-password をプロキシのパスワードに置き換えます。Amazon Linux 1 と Amazon Linux 2 では、/etc/yum.conf ファイルを変更します。Amazon Linux 2023 では、/etc/dnf/dnf.conf ファイルを変更します。

タイムアウトの問題

次のコマンドを実行し、/etc/resolv.conf ファイルに DNS サーバーの正しい IP アドレスがあることを確認します:

cat /etc/resolv.conf
nameserver YourDNSIP

デフォルトのタイムアウト期間である 5000 ミリ秒を変更するには、yum 設定ファイルの timeout 値を変更します。詳しくは、die.net のウェブサイトで yum.conf について参照してください。Amazon Linux 2023 では、/etc/yum.repos.d/amazonlinux.repometadata_expire 値を変更してタイムアウト期間を変更します。

dig コマンドでクエリ時間を確認するには、次のコマンドを実行します。

$ dig repo.us-east-1.amazonaws.com | grep time

注: us-east-1 は、実際のインスタンスのリージョンに置き換えます。

AWS公式
AWS公式更新しました 4ヶ月前
コメントはありません

関連するコンテンツ