redhat instance で yum が使えない!

RHELの検証がしたい!っていう時にちょっと前なら環境の構築が億劫でしたが、クラウドが一般的になった今では各種OS毎の検証が大分楽になりました。おまけに、新規アカウントでmicroインスタンスを使えば12ヶ月無料で検証が出来るので意識が高いエンジニアのお財布にも優しいです。

但し、そのまま消し忘れると忘れた頃に請求が来るのでご利用は計画的に。。。

 

今日はAWSでRHELを使っている際に発生したAWSならではの問題についてです。最近はAWSでも対策が進んでいるため、発生頻度は下がっていると思いますが、

RHELのインスタンスのメタデータから「billingProducts」が外れるという事があります。

何が問題になるかというと、yum コマンドの利用が出来なくなる点です。
これは AWSが上記メタデータを認証情報として利用されている事が原因になりますが、流石にこのままでは運用が出来ないので今回はこの問題の解決方法についてです。

 

まずはメタデータが外れたインスタンスの例です。

 

  • メタデータが外れているRHEL

 

# curl http://169.254.169.254/latest/dynamic/instance-identity/document

{
"accountId" : "xxxxxxxxxxxx",
"instanceId" : "i-xxxxxxxxx",
"billingProducts" : null,
"imageId" : "ami-xxxxxxxx",
"pendingTime" : "2014-05-09T02:57:56Z",
"instanceType" : "m1.medium",
"architecture" : "x86_64",
"kernelId" : "aki-dc0f82dd",
"ramdiskId" : null,
"region" : "ap-northeast-1",
"version" : "2010-08-31",
"availabilityZone" : "ap-northeast-1c",
"privateIp" : "172.31.xxx.xxx",
"devpayProductCodes" : null
#

 

 

  • 上記状態だと、yumコマンドがエラーになる

# yum search httpd
Loaded plugins: amazon-id, rhui-lb, security
https://rhui2-cds02.ap-northeast-1.aws.ce.redhat.com/pulp/repos//rhui-client-config/rhel/server/6/x86_64/os/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 401 Authorization Required"
Trying other mirror.
https://rhui2-cds01.ap-northeast-1.aws.ce.redhat.com/pulp/repos//rhui-client-config/rhel/server/6/x86_64/os/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 401 Authorization Required"
Trying other mirror.
Error: Cannot retrieve repository metadata (repomd.xml) for repository: rhui-ap-northeast-1-client-config-server-6. Please verify its path and try again
#

 

認証が必要だと怒られます。

原因が分かった時は作成し直しかと思ったのですが、実際には結構簡単に戻せます。ただ、作業は十分リスクが伴いますのでくれぐれもバックアップ等を行ってから作業して下さい。

 

  • 解決方法
  1. メタデータが外れたインスタンス(A)とは別に新規にRHELのインスタンス(B)を作成する
  2. A,Bのインスタンスを共に stop 状態にする
  3. Aのインスタンスのルートボリュームのattach device を確認する (/dev/sda 等。あとで使います)
  4. A,Bのインスタンスの ルートボリュームをdetach
  5. AのインスタンスのルートボリュームをBのインスタンスにattachする (3でメモった deviceを指定)
  6. Bのインスタンスを startする
  7. Bのインスタンスにログイン出来ればOK

早ければ、5分程度で終わる作業です。

上記対応が完了したら、メタデータを確認してみると・・・・

# curl http://169.254.169.254/latest/dynamic/instance-identity/document
{
"accountId" : "xxxxxxxxxxxx",
"instanceId" : "i-xxxxxxxxx",
"billingProducts" : [ "bp-xxxxxxxx" ],
"imageId" : "ami-xxxxxxxx",
"pendingTime" : "2014-05-09T02:57:56Z",
"instanceType" : "m1.medium",
"architecture" : "x86_64",
"kernelId" : "aki-dc0f82dd",
"ramdiskId" : null,
"region" : "ap-northeast-1",
"version" : "2010-08-31",
"availabilityZone" : "ap-northeast-1c",
"privateIp" : "172.31.xxx.xxx",
"devpayProductCodes" : null
#

 

きちんとメタデータにbillingProducts IDが付与され、yum コマンドも問題なく利用が出来る事を確認して下さい。

なお、作業後のインスタンスはhostname 等のユニークな情報は変わっているので必要に応じて元に戻してください。instanceIdも当然変わってます。

残ったAのインスタンスは不要なので、stop でも terminateでもOKです。

 

余談ですが、

billingProductsが外れていると RHELで購入したRIの割引の適用がされなくなります。

投稿者プロフィール

スカイブロガー

1 個のコメント

  • コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です

    CAPTCHA


    Time limit is exhausted. Please reload CAPTCHA.