eksctl でクラスター作成しようとしたら RequestError が出た

AWS運用自動化サービス「Cloud Automator」

技術5課の松尾です。地元仙台にUターンで戻ってきて、今月から仙台オフィスで勤務しています。年末にはナメタガレイを食べました。
AWS初心者の私がEKSをeksctlでクラスターを作成しようとして、初心者ならではの凡ミスでのエラーを出してしまった際の小ネタです。

eksctlのインストール

まずはeksctlを使えるようにしました。
ドキュメントに沿ってeksctlのインストールをしました。
一通り終わったら、以下コマンドでeksctlがインストールされたか確認します。

バージョンが表示され、インストールが成功しました。

eksctlでクラスターを構築しようとした

以下コマンドでEKSクラスターを構築します。

すると、、、なんということでしょう!
エラーがモリモリと出力されました。

retryable error (RequestError: send request failed
caused by: Put http://169.254.169.254/latest/api/token: dial tcp 169.254.169.254:80: connect: host is down

と出力されているので、169.254.169.254 と通信できていないことによるエラーのようです。

169.254.169.254 って何?

169.254.169.254 とは何者なのか、、ということでドキュメントを確認しました。
169.254.169.254 は、インスタンスメタデータを取得できる URI でした。

次に、インスタンスメタデータとは何者か、、ということでドキュメントを確認しました。
インスタンスメタデータは、インスタンスに関するデータでした。

ということは、出力されたエラーはeksctl実行時にインスタンスメタデータの取得に失敗しているというエラーのようです。
「[ℹ] using region us-west-2」と出力された後に、169.254.169.154 と通信できていないことから、環境変数に誤りがあることを疑ってみました。

環境変数を改めて設定

私の環境では現在2つの名前付きプロファイルがあります。
使用したいプロファイルの環境変数が設定されていないのでは、と考え、以下コマンドで使用したいプロファイルの環境変数を改めて設定しました。

次に、eksctlコマンド実行時にエラーが出ないかを以下コマンドで確認してみました。

エラー無く、実行結果が返ってきました。

eksctlでクラスターを構築

再度、以下コマンドでEKSクラスターを構築します。

すると、、今回は順調に構築が開始されました!

しばらく眺めていましたが、構築完了までに結構時間がかかりそうだったので他の作業をしました。
ランチ前や業務終了間際に実行すると良いかもしれません。

構築が完了したので、以下コマンドでクラスター一覧を確認しました。

kubectlコマンドでservice一覧も取得できました。

環境変数って大事

環境変数の誤りという初歩的な間違いで、しょうもない箇所で躓いてしまいました。
環境変数って大事!

AWS運用自動化サービス「Cloud Automator」